The four ports were the only entries in services_config.yml with a real
justification: each is read twice, by the role that deploys the service on its
own box AND by a socket-proxy or Caddy play that runs on the EDGE host and
publishes it. A role default is invisible to that second play.
But the shape was wrong in two ways. The file had to be named in vars_files: by
30 plays - opt-in configuration that someone will eventually forget - and five
role defaults silently interpolated service_settings.*, so bitcoin_knots,
fulcrum, datum_gateway and mempool were not self-contained: using any of them
without that one vars_file entry broke it.
Each port now lives in host_vars/<owning box>/main.yml:
host_vars/knots_box_local/main.yml bitcoin_p2p_port, datum_gateway_api_port,
datum_gateway_stratum_port
host_vars/fulcrum_box_local/main.yml fulcrum_ssl_port
host_vars/mempool_box_local/main.yml mempool_frontend_port
host_vars auto-loads and outranks role defaults, so the owning role picks the
value up with no vars_files at all, and the edge play reads the same single
definition as hostvars['<host>'].<name>. The role defaults keep the protocol
standard (8333, 50002, ...) so each role still works standalone, with the live
deployment's value in host_vars winning.
Also fixed a fourth copy of an inventory identity: the mempool Caddy play had
"mempool-box:{{ ... }}" hardcoded in the upstream. It now derives the host from
hostvars['mempool_box_local'].ansible_host, so inventory is the only place any
box's name is written down.
services_config.yml is deleted, with 25 more vars_files entries across 19
playbooks. Between this and the previous commit, 87 vars_files entries are gone
and every variable in the repo now comes from group_vars/all, host_vars,
inventory, a role default, or that service's own *_vars.yml.
Verification: an edge-host probe resolves all eight ports and hostnames to
byte-identical values to the ones services_config.yml used to supply. Each
owning host resolves its own port through host_vars. All 37 playbooks'
--list-tasks output is unchanged. The four edge plays that consume these values
all check-diff changed=0 - the socket-proxy and Caddy units on vipy are
byte-identical, which is the direct proof the rewiring landed on the same
values. fulcrum and datum-gateway check-diff exactly as before (ok=28/changed=1
and ok=15/changed=1, both the known timer re-arm).
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
75 lines
3.2 KiB
YAML
75 lines
3.2 KiB
YAML
# Bitcoin Knots Configuration Variables
|
|
|
|
# Version - REQUIRED: Specify exact version/tag to build
|
|
# The only version string. There used to be a second, v-prefixed copy
|
|
# (bitcoin_knots_version) that nothing read - two hand-maintained copies of one
|
|
# fact, with nothing keeping them in step.
|
|
bitcoin_knots_version_short: "29.2.knots20251110"
|
|
|
|
# Directories
|
|
bitcoin_knots_dir: /opt/bitcoin-knots
|
|
bitcoin_knots_source_dir: "{{ bitcoin_knots_dir }}/source"
|
|
bitcoin_data_dir: /var/lib/bitcoin # Standard location for config, logs, wallets
|
|
bitcoin_large_data_dir: /mnt/knots_data # Custom location for blockchain data (blocks, chainstate)
|
|
bitcoin_conf_dir: /etc/bitcoin
|
|
|
|
# Network
|
|
bitcoin_rpc_port: 8332
|
|
# The edge host's socket-proxy/Caddy play needs this too, and a role default is
|
|
# invisible outside this role. The authoritative value for the live deployment is
|
|
# in host_vars/knots_box_local/main.yml, which outranks this; the value here is the
|
|
# protocol standard, so the role still works standalone.
|
|
bitcoin_p2p_port: 8333
|
|
bitcoin_rpc_bind: "0.0.0.0"
|
|
|
|
# Build options
|
|
bitcoin_build_jobs: 4 # Parallel build jobs (-j flag), adjust based on CPU cores
|
|
bitcoin_build_prefix: /usr/local
|
|
|
|
# Configuration options
|
|
bitcoin_enable_txindex: true # Set to true if transaction index needed (REQUIRED for Electrum servers like Electrs/ElectrumX)
|
|
bitcoin_max_connections: 125
|
|
# dbcache will be calculated as 90% of host RAM automatically in playbook
|
|
|
|
# ZMQ Configuration
|
|
bitcoin_zmq_enabled: true
|
|
bitcoin_zmq_bind: "tcp://0.0.0.0"
|
|
bitcoin_zmq_port_rawblock: 28332
|
|
bitcoin_zmq_port_rawtx: 28333
|
|
bitcoin_zmq_port_hashblock: 28334
|
|
bitcoin_zmq_port_hashtx: 28335
|
|
|
|
# Service user
|
|
bitcoin_user: bitcoin
|
|
bitcoin_group: bitcoin
|
|
|
|
# --- Health check ----------------------------------------------------------
|
|
# Checks bitcoind RPC and records the answer in its exit code, which systemd
|
|
# keeps: `systemctl is-failed bitcoin-knots-healthcheck.service`.
|
|
#
|
|
# WHERE TO REPORT HEALTH — the one place to plug in monitoring. Empty means
|
|
# check, exit honestly, report nowhere. Any endpoint accepting an HTTP ping
|
|
# works; nothing here is specific to a monitoring product.
|
|
healthcheck_push_url: ""
|
|
|
|
# --- Logging ----------------------------------------------------------------
|
|
# The live node logs to a file. Set to "" to use printtoconsole=1 (journald).
|
|
bitcoin_logfile: "{{ bitcoin_data_dir }}/debug.log"
|
|
|
|
# --- dbcache ----------------------------------------------------------------
|
|
# Computed as 90% of RAM unless this is set. The live node was hand-tuned to
|
|
# 200 MB; the calculation would have produced 3528. As with fulcrum, note that
|
|
# set_fact outranks role defaults, so the CALCULATION has to honour this - a
|
|
# value pinned only in defaults/ is silently ignored.
|
|
bitcoin_dbcache_mb_override: 200
|
|
|
|
# --- DATUM Gateway ----------------------------------------------------------
|
|
# This node feeds block templates to datum_gateway on knots-box. These settings
|
|
# were hand-added to bitcoin.conf and were missing from the template, so a
|
|
# playbook run would have removed them and broken the mining setup.
|
|
bitcoin_datum_gateway_enabled: true
|
|
bitcoin_blockmaxsize: 3985000
|
|
bitcoin_blockmaxweight: 3985000
|
|
bitcoin_blocknotify: "killall -USR1 datum_gateway"
|
|
bitcoin_maxmempool: 1000
|
|
bitcoin_blockreconstructionextratxn: 1000000
|