78 lines
2.5 KiB
Bash
78 lines
2.5 KiB
Bash
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
#
|
|
# Teleport setup (installed at runtime to allow choosing version/edition via env)
|
|
#
|
|
if [[ -n "${TELEPORT_VERSION:-}" ]]; then
|
|
echo "Installing Teleport ${TELEPORT_VERSION} (${TELEPORT_EDITION:-oss})..."
|
|
curl -fsSL https://goteleport.com/static/install.sh | bash -s "${TELEPORT_VERSION}" "${TELEPORT_EDITION:-oss}"
|
|
else
|
|
echo "TELEPORT_VERSION not set; skipping Teleport install. Ensure tsh/tctl are available."
|
|
fi
|
|
|
|
# Configure Teleport node if a token is provided (optional)
|
|
if [[ -n "${TELEPORT_TOKEN:-}" && -n "${TELEPORT_URL:-}" ]]; then
|
|
if [[ ! -f /etc/teleport.yaml ]]; then
|
|
echo "Configuring Teleport node with token..."
|
|
teleport configure --roles=node --token="${TELEPORT_TOKEN}" --proxy="${TELEPORT_URL}" --no-acme -o file
|
|
fi
|
|
# Ensure nodename matches container hostname
|
|
HOSTNAME=$(hostname)
|
|
sed -i "s/^ nodename:.*/ nodename: ${HOSTNAME}/" /etc/teleport.yaml || true
|
|
echo "Starting Teleport node in background..."
|
|
nohup teleport start >/var/log/teleport.log 2>&1 &
|
|
fi
|
|
|
|
#
|
|
# Build flags for tsh/tctl from environment
|
|
#
|
|
TSH_FLAGS=()
|
|
TCTL_FLAGS=()
|
|
|
|
if [[ -n "${TELEPORT_URL:-}" ]]; then
|
|
TSH_FLAGS+=("--proxy=${TELEPORT_URL}")
|
|
TCTL_FLAGS+=("--proxy=${TELEPORT_URL}")
|
|
fi
|
|
|
|
if [[ -n "${TELEPORT_IDENTITY_FILE:-}" && -f "${TELEPORT_IDENTITY_FILE}" ]]; then
|
|
echo "Using Teleport identity: ${TELEPORT_IDENTITY_FILE}"
|
|
TSH_FLAGS+=("--identity=${TELEPORT_IDENTITY_FILE}")
|
|
TCTL_FLAGS+=("--identity=${TELEPORT_IDENTITY_FILE}")
|
|
fi
|
|
|
|
# Optional: extra flags from env (space-separated)
|
|
if [[ -n "${EXTRA_TSH_FLAGS:-}" ]]; then
|
|
# shellcheck disable=SC2206
|
|
TSH_FLAGS+=( ${EXTRA_TSH_FLAGS} )
|
|
fi
|
|
if [[ -n "${EXTRA_TCTL_FLAGS:-}" ]]; then
|
|
# shellcheck disable=SC2206
|
|
TCTL_FLAGS+=( ${EXTRA_TCTL_FLAGS} )
|
|
fi
|
|
|
|
echo "Starting teleport-auto-remover main loop (interval: ${LOOP_INTERVAL_SECONDS:-60}s, execute: ${EXECUTE:-false})"
|
|
|
|
while true; do
|
|
TS=$(date -Iseconds)
|
|
echo "[${TS}] Running prune…"
|
|
set +e
|
|
# Build CLI args for main.py with repeated tsh/tctl flags (skip empties)
|
|
ARGS=(/app/main.py)
|
|
for f in "${TSH_FLAGS[@]}"; do
|
|
[[ -n "$f" ]] && ARGS+=("--tsh-flag=$f")
|
|
done
|
|
for f in "${TCTL_FLAGS[@]}"; do
|
|
[[ -n "$f" ]] && ARGS+=("--tctl-flag=$f")
|
|
done
|
|
if [[ "${EXECUTE:-false}" == "true" ]]; then ARGS+=(--execute); fi
|
|
# Debug-print the exact command for troubleshooting
|
|
printf 'Invoking: python3'
|
|
for a in "${ARGS[@]}"; do printf ' %q' "$a"; done; printf '\n'
|
|
python3 "${ARGS[@]}"
|
|
EXIT_CODE=$?
|
|
set -e
|
|
echo "Run finished with code ${EXIT_CODE}."
|
|
sleep "${LOOP_INTERVAL_SECONDS:-60}"
|
|
done
|