2b970d1170
test / unit (pull_request) Successful in 54s
test / integration (pull_request) Successful in 15s
test / coverage (pull_request) Successful in 56s
lint / lint (push) Successful in 1m59s
test / unit (push) Successful in 53s
test / integration (push) Successful in 20s
test / coverage (push) Successful in 58s
Update Quality Badges / update-badges (push) Successful in 57s
The pool params (size, IP base, iface prefix, nft table) were triplicated
— hardcoded in netpool.py, scripts/firecracker-netpool.sh, and
nix/firecracker-netpool.nix — plus the IP math (3x) and the nft ruleset
(2x). Nothing enforced agreement; changing the base (ce3fad9, off CGNAT)
forced a coordinated three-file edit, and a missed one would silently
provision a range the launcher doesn't expect.
Collapse to one source of truth:
* netpool.defaults.env — a plain KEY=VALUE file (bash-sourceable,
systemd EnvironmentFile-compatible, Python- and Nix-parseable) holding
the four defaults. A BOT_BOTTLE_FC_* env var still overrides any key.
* netpool.py reads it for the Python defaults (missing file = hard
error, not confusing empty defaults).
* the shell script falls back to it (no literal `:-8` / `10.243.0.0`),
and its `up` is now non-destructive/idempotent (only creates a
missing TAP), so re-running never cuts a live VM.
* the Nix module readFile-parses it for its option defaults and
delegates bring-up to the SAME shell script (dropping its duplicate
IP math, nft ruleset, and TAP loop) — passing every value as
Environment= so the store-detached script never needs the file.
Net: defaults 3x -> 1x, nft ruleset 2x -> 1x, TAP loop 2x -> 1x. The one
remaining IP-math dup (Python launch-addressing vs bash bring-up) is
justified — different runtimes. Tests now guard the invariant (Python
reads the shared file; the script/module hold no literals) instead of
pinning duplicated strings.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WBMWTEtQdJ4W5UrWuLHCck
18 lines
851 B
Bash
18 lines
851 B
Bash
# Firecracker network-pool defaults — the SINGLE source of these values.
|
|
#
|
|
# Read by every consumer so they can't drift:
|
|
# * netpool.py — parses this for the Python defaults (below).
|
|
# * scripts/firecracker-netpool.sh — falls back to these when the
|
|
# matching BOT_BOTTLE_FC_* env var is unset.
|
|
# * nix/firecracker-netpool.nix — readFile-parses this for its option
|
|
# defaults, then passes the resolved values back as Environment=.
|
|
#
|
|
# Plain KEY=VALUE (no quoting, no inline comments, no spaces around `=`)
|
|
# so it is bash-sourceable, systemd EnvironmentFile-compatible, and
|
|
# trivially parseable from Python and Nix. A real BOT_BOTTLE_FC_* env
|
|
# var of the same name always overrides the value here.
|
|
BOT_BOTTLE_FC_POOL_SIZE=8
|
|
BOT_BOTTLE_FC_IP_BASE=10.243.0.0
|
|
BOT_BOTTLE_FC_IFACE_PREFIX=bbfc
|
|
BOT_BOTTLE_FC_NFT_TABLE=bot_bottle_fc
|