Files
Nexus/scripts/prod_probe_install.sh
T

60 lines
2.0 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Install NEXUS_TEST_ADMIN_PASSWORD on production for prod_probe / E2E (not injected into API container).
#
# Usage (password must match admin login; never commit):
# NEXUS_TEST_ADMIN_PASSWORD='your-admin-password' bash scripts/prod_probe_install.sh
#
# Writes to: /opt/nexus/docker/.env.prod (root 600)
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SECRETS="${ROOT}/deploy/nexus-1panel.secrets.sh"
if [[ -f "$SECRETS" ]]; then
# shellcheck disable=SC1090
source "$SECRETS"
fi
PW="${NEXUS_TEST_ADMIN_PASSWORD:-}"
if [[ -z "$PW" ]]; then
echo "ERROR: set NEXUS_TEST_ADMIN_PASSWORD (same as admin login password)" >&2
exit 1
fi
if [[ ${#PW} -lt 6 ]]; then
echo "ERROR: password too short (min 6)" >&2
exit 1
fi
SSH_HOST="${NEXUS_SSH:-nexus}"
SSH_OPTS=(-o BatchMode=yes -o ConnectTimeout=20)
[[ -n "${NEXUS_SSH_KEY:-}" ]] && SSH_OPTS+=(-i "${NEXUS_SSH_KEY}")
# Pass password via env on remote (single-quoted safe payload built in Python)
B64="$(PW="$PW" python3 -c 'import base64,os; print(base64.b64encode(os.environ["PW"].encode()).decode())')"
PROBE_IP="${NEXUS_PROBE_CLIENT_IP:-}"
ssh "${SSH_OPTS[@]}" "$SSH_HOST" "sudo bash -s" <<REMOTE
set -euo pipefail
ENV="/opt/nexus/docker/.env.prod"
[[ -f "\$ENV" ]] || { echo "missing \$ENV"; exit 1; }
PW=\$(python3 -c "import base64,os; print(base64.b64decode('${B64}').decode())")
LINE="NEXUS_TEST_ADMIN_PASSWORD=\${PW}"
if grep -q '^NEXUS_TEST_ADMIN_PASSWORD=' "\$ENV"; then
sed -i "s|^NEXUS_TEST_ADMIN_PASSWORD=.*|\${LINE}|" "\$ENV"
else
printf '%s\n' "\$LINE" >> "\$ENV"
fi
if [[ -n "${PROBE_IP}" ]]; then
IPLINE="NEXUS_PROBE_CLIENT_IP=${PROBE_IP}"
if grep -q '^NEXUS_PROBE_CLIENT_IP=' "\$ENV"; then
sed -i "s|^NEXUS_PROBE_CLIENT_IP=.*|\${IPLINE}|" "\$ENV"
else
printf '%s\n' "\$IPLINE" >> "\$ENV"
fi
fi
chmod 600 "\$ENV"
grep -q '^NEXUS_TEST_ADMIN_PASSWORD=' "\$ENV"
echo "OK: NEXUS_TEST_ADMIN_PASSWORD upserted in \$ENV (value not shown)"
REMOTE
echo "Run: bash scripts/prod_health_check.sh"