promote: dev → main #139
4 changed files with 28 additions and 10 deletions
|
|
@ -76,6 +76,16 @@ thermograph_topology() {
|
||||||
# for the reason that marker was demoted to a fallback in the first place: vps2 runs
|
# for the reason that marker was demoted to a fallback in the first place: vps2 runs
|
||||||
# prod and beta side by side, and one host-wide file cannot name two backends.
|
# prod and beta side by side, and one host-wide file cannot name two backends.
|
||||||
TG_SECRETS_BACKEND=sops
|
TG_SECRETS_BACKEND=sops
|
||||||
|
# Which AppRole credential file render-secrets-openbao.sh authenticates with. Same
|
||||||
|
# reasoning as TG_SECRETS_BACKEND above, and the same trap: vps2 renders TWO
|
||||||
|
# environments, so a single host-wide default cannot serve both. prod and dev each
|
||||||
|
# get the conventional path (dev is alone on vps1, so there is no collision there);
|
||||||
|
# beta is the one that must differ, because it shares a filesystem with prod.
|
||||||
|
#
|
||||||
|
# Without this, beta's render falls back to prod's credentials and tg-host-prod.hcl
|
||||||
|
# correctly denies thermograph/data/env/beta — a 403 at deploy time on the box that
|
||||||
|
# runs prod.
|
||||||
|
TG_BAO_APPROLE=/etc/thermograph/openbao-approle
|
||||||
|
|
||||||
case "$env_name" in
|
case "$env_name" in
|
||||||
prod)
|
prod)
|
||||||
|
|
@ -116,6 +126,10 @@ thermograph_topology() {
|
||||||
# therefore prod's blast radius too (see .claude/hooks/prod-guard.sh).
|
# therefore prod's blast radius too (see .claude/hooks/prod-guard.sh).
|
||||||
TG_SSH_HOST=169.58.46.181
|
TG_SSH_HOST=169.58.46.181
|
||||||
TG_SSH_TARGET=agent@169.58.46.181
|
TG_SSH_TARGET=agent@169.58.46.181
|
||||||
|
# The one environment that cannot use the default AppRole path: it shares a
|
||||||
|
# filesystem with prod, so it needs its own credential file to authenticate as
|
||||||
|
# tg-beta rather than tg-prod. bootstrap-policies.sh installs it here.
|
||||||
|
TG_BAO_APPROLE=/etc/thermograph/openbao-approle-beta
|
||||||
# A SECOND checkout on the same box. Separate from prod's so the two can
|
# A SECOND checkout on the same box. Separate from prod's so the two can
|
||||||
# sit on different commits of this repo, and so `git reset --hard` in one
|
# sit on different commits of this repo, and so `git reset --hard` in one
|
||||||
# deploy can never yank the tree out from under the other's running
|
# deploy can never yank the tree out from under the other's running
|
||||||
|
|
@ -228,7 +242,7 @@ thermograph_topology() {
|
||||||
export TG_LB_HTTP_PORT TG_LB_FE_PORT TG_DB_NAME TG_DB_USER
|
export TG_LB_HTTP_PORT TG_LB_FE_PORT TG_DB_NAME TG_DB_USER
|
||||||
export TG_TAGS_FILE TG_LOCK_FILE TG_BIND_ADDR TG_SKIP_COMMON
|
export TG_TAGS_FILE TG_LOCK_FILE TG_BIND_ADDR TG_SKIP_COMMON
|
||||||
export TG_SVC_PREFIX TG_DATA_NETWORK TG_DB_SERVICE TG_POST_DEPLOY
|
export TG_SVC_PREFIX TG_DATA_NETWORK TG_DB_SERVICE TG_POST_DEPLOY
|
||||||
export TG_SECRETS_BACKEND
|
export TG_SECRETS_BACKEND TG_BAO_APPROLE
|
||||||
export TG_SSH_HOST TG_SSH_TARGET
|
export TG_SSH_HOST TG_SSH_TARGET
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,13 @@ thermograph_openbao_source() {
|
||||||
local env_name="${1:?env name required}"
|
local env_name="${1:?env name required}"
|
||||||
local addr="${THERMOGRAPH_BAO_ADDR:-https://10.10.0.1:8200}"
|
local addr="${THERMOGRAPH_BAO_ADDR:-https://10.10.0.1:8200}"
|
||||||
local mount="${THERMOGRAPH_BAO_MOUNT:-thermograph}"
|
local mount="${THERMOGRAPH_BAO_MOUNT:-thermograph}"
|
||||||
local approle="${THERMOGRAPH_BAO_APPROLE:-/etc/thermograph/openbao-approle}"
|
# Explicit override first, then the per-environment value env-topology.sh derives,
|
||||||
|
# then the conventional path. Same precedence shape as render-secrets.sh:44's
|
||||||
|
# THERMOGRAPH_SECRETS_BACKEND / TG_SECRETS_BACKEND pair, for the same reason: the
|
||||||
|
# THERMOGRAPH_-prefixed name is the by-hand escape hatch, the TG_ one is what the
|
||||||
|
# deploy path sets. Falling straight through to the bare default is what made beta
|
||||||
|
# authenticate as tg-prod and get denied its own path.
|
||||||
|
local approle="${THERMOGRAPH_BAO_APPROLE:-${TG_BAO_APPROLE:-/etc/thermograph/openbao-approle}}"
|
||||||
local ca="${THERMOGRAPH_BAO_CACERT:-/etc/thermograph/openbao-ca.crt}"
|
local ca="${THERMOGRAPH_BAO_CACERT:-/etc/thermograph/openbao-ca.crt}"
|
||||||
|
|
||||||
command -v bao >/dev/null 2>&1 || {
|
command -v bao >/dev/null 2>&1 || {
|
||||||
|
|
|
||||||
|
|
@ -185,15 +185,14 @@ its own host:
|
||||||
```sh
|
```sh
|
||||||
# on vps2
|
# on vps2
|
||||||
infra/openbao/verify-parity.sh --env prod # expect 32 keys
|
infra/openbao/verify-parity.sh --env prod # expect 32 keys
|
||||||
THERMOGRAPH_BAO_APPROLE=/etc/thermograph/openbao-approle-beta \
|
infra/openbao/verify-parity.sh --env beta # expect 24 keys
|
||||||
infra/openbao/verify-parity.sh --env beta # expect 24 keys
|
|
||||||
# on vps1
|
# on vps1
|
||||||
cd /opt/thermograph-dev && infra/openbao/verify-parity.sh --env dev # expect 12 keys
|
cd /opt/thermograph-dev && infra/openbao/verify-parity.sh --env dev # expect 12 keys
|
||||||
```
|
```
|
||||||
|
|
||||||
The explicit `THERMOGRAPH_BAO_APPROLE` for beta is a stopgap: `env-topology.sh` does
|
Beta needs no special handling: `env-topology.sh` derives `TG_BAO_APPROLE` per
|
||||||
not yet derive the AppRole path per environment, so the renderer falls back to prod's
|
environment, so beta authenticates as `tg-beta` rather than falling back to prod's
|
||||||
credentials and `tg-host-prod.hcl` correctly denies `env/beta`.
|
credentials and being denied its own path by `tg-host-prod.hcl`.
|
||||||
|
|
||||||
`seed-from-sops.sh` reads every production secret in plaintext. Per `infra/CLAUDE.md`
|
`seed-from-sops.sh` reads every production secret in plaintext. Per `infra/CLAUDE.md`
|
||||||
the equivalent `seed-from-live.sh` is explicitly *not for an agent to run*; this
|
the equivalent `seed-from-live.sh` is explicitly *not for an agent to run*; this
|
||||||
|
|
|
||||||
|
|
@ -213,10 +213,9 @@ secrets is not for an agent to run:
|
||||||
Then prove parity. NOT \`--all\` from one box: each AppRole is CIDR-bound to the host
|
Then prove parity. NOT \`--all\` from one box: each AppRole is CIDR-bound to the host
|
||||||
that legitimately renders it, so an environment can only be verified from its own host.
|
that legitimately renders it, so an environment can only be verified from its own host.
|
||||||
|
|
||||||
# here (vps2) -- beta needs its own AppRole, prod uses the default
|
# here (vps2)
|
||||||
infra/openbao/verify-parity.sh --env prod # expect 32 keys
|
infra/openbao/verify-parity.sh --env prod # expect 32 keys
|
||||||
THERMOGRAPH_BAO_APPROLE=/etc/thermograph/openbao-approle-beta \\
|
infra/openbao/verify-parity.sh --env beta # expect 24 keys
|
||||||
infra/openbao/verify-parity.sh --env beta # expect 24 keys
|
|
||||||
# on vps1
|
# on vps1
|
||||||
cd /opt/thermograph-dev && infra/openbao/verify-parity.sh --env dev # expect 12 keys
|
cd /opt/thermograph-dev && infra/openbao/verify-parity.sh --env dev # expect 12 keys
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue