From bf52426299104437d5fe3486f31425c3231e5b70 Mon Sep 17 00:00:00 2001 From: William Gill Date: Wed, 16 Sep 2026 13:18:40 -0500 Subject: [PATCH] fix(openbao): keep a failing address probe from aborting the deploy host_addrs() ends in a pipeline, so under `set -o pipefail` a probe that exits non-zero -- even after printing perfectly usable addresses, or because awk is missing -- made `addrs="$(host_addrs)"` non-zero, and `set -e` killed deploy.sh at that line. Nothing was printed when it did: the 2>/dev/null had already swallowed the tool's own error and the fail-open guard on the next lines was never reached, so the operator got a bare exit 1 mid-deploy with nothing to diagnose. Worst case it aborted a deploy whose bind address was CORRECT -- reproduced with an `ip` stub that prints the matching address, then exits 1. Capture with `|| true` so the emptiness test actually drives the fail-open the comment beside it already promised. Neutralising inside host_addrs instead would not cover a missing awk, since pipefail takes the rightmost non-zero status. Re-verified the check is not weakened: a healthy probe with the address genuinely absent still lists the host's addresses and dies with the full message, and all seven .env/environment precedence cases are unchanged. Found by adversarial review of 920edc5. Co-Authored-By: Claude Opus 5 --- deployments/openbao/deploy.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/deployments/openbao/deploy.sh b/deployments/openbao/deploy.sh index ae55f71..ee73647 100644 --- a/deployments/openbao/deploy.sh +++ b/deployments/openbao/deploy.sh @@ -141,11 +141,15 @@ check_bind_addr() { warn "SKIP_BIND_CHECK=1 -- not checking whether ${bare} is local." return 0 fi - addrs="$(host_addrs)" + # `|| true` is load-bearing: host_addrs ends in a pipeline, and under + # `set -o pipefail` a probe that fails AFTER printing usable addresses (or an + # absent awk) would make this plain assignment non-zero and kill the whole + # deploy at this line, silently -- before the fail-open below is ever reached. + addrs="$(host_addrs || true)" # Empty means the probe found no tool to ask, not that the address is absent # -- do not block a deploy on that. if [[ -z "$addrs" ]]; then - warn "No ip/ifconfig to list this host's addresses; skipping the bind check." + warn "Could not list this host's addresses (no ip/ifconfig, or it failed); skipping the bind check." return 0 fi if printf '%s\n' "$addrs" | grep -qxF "$bare"; then