fix: specify -c openbao container in cmd_bao kubectl exec

Without -c, kubectl defaults to the first container (linkerd-proxy),
causing 'bao' commands to fail with 'executable not found'.
This commit is contained in:
2026-03-03 11:31:56 +00:00
parent 352f0b6869
commit b917aa3ce9

View File

@@ -120,12 +120,41 @@ def get_domain() -> str:
def cmd_k8s(kubectl_args: list[str]) -> int: def cmd_k8s(kubectl_args: list[str]) -> int:
"""Transparent kubectl --context=sunbeam passthrough. Returns kubectl's exit code.""" """Transparent kubectl --context=sunbeam passthrough. Returns kubectl's exit code."""
from sunbeam.tools import ensure_tool from sunbeam.tools import ensure_tool
import os
bin_path = ensure_tool("kubectl") bin_path = ensure_tool("kubectl")
r = subprocess.run([str(bin_path), "--context=sunbeam", *kubectl_args]) r = subprocess.run([str(bin_path), "--context=sunbeam", *kubectl_args])
return r.returncode return r.returncode
def cmd_bao(bao_args: list[str]) -> int:
"""Run bao CLI inside the OpenBao pod with the root token. Returns exit code.
Automatically resolves the pod name and root token from the cluster, then
runs ``kubectl exec openbao-0 -- sh -c "VAULT_TOKEN=<tok> bao <args>"``
so callers never need to handle raw kubectl exec or token management.
"""
ob_pod = kube_out("-n", "data", "get", "pod",
"-l", "app.kubernetes.io/name=openbao",
"-o", "jsonpath={.items[0].metadata.name}")
if not ob_pod:
from sunbeam.output import die
die("OpenBao pod not found — is the cluster running?")
token_b64 = kube_out("-n", "data", "get", "secret", "openbao-keys",
"-o", "jsonpath={.data.root-token}")
import base64
root_token = base64.b64decode(token_b64).decode() if token_b64 else ""
if not root_token:
from sunbeam.output import die
die("root-token not found in openbao-keys secret")
cmd_str = "VAULT_TOKEN=" + root_token + " bao " + " ".join(bao_args)
r = subprocess.run(
["kubectl", "--context=sunbeam", "-n", "data", "exec", ob_pod,
"-c", "openbao", "--", "sh", "-c", cmd_str]
)
return r.returncode
def kustomize_build(overlay: Path, domain: str) -> str: def kustomize_build(overlay: Path, domain: str) -> str:
"""Run kustomize build --enable-helm and apply domain substitution.""" """Run kustomize build --enable-helm and apply domain substitution."""
r = run_tool( r = run_tool(