Files

64 lines
2.3 KiB
Bash
Executable File

#!/bin/sh
set -eu
expected_context=kubernetes-admin@kubernetes
current_context=$(kubectl config current-context)
if [ "${current_context}" != "${expected_context}" ]; then
echo "Refusing recovery through unexpected context: ${current_context}" >&2
exit 1
fi
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
repository_dir=$(dirname -- "${script_dir}")
values_file="${repository_dir}/apps/argocd/values.yaml"
for command in helm kubectl openssl base64; do
if ! command -v "${command}" >/dev/null 2>&1; then
echo "Required command not found: ${command}" >&2
exit 1
fi
done
kubectl create namespace argocd --dry-run=client --output=yaml \
| kubectl apply --filename=-
if ! kubectl --namespace argocd get secret argocd-secret >/dev/null 2>&1; then
kubectl --namespace argocd create secret generic argocd-secret
fi
if [ -z "$(kubectl --namespace argocd get secret argocd-secret --output='jsonpath={.data.server\.secretkey}')" ]; then
secret_key=$(openssl rand -hex 32)
secret_key_base64=$(printf '%s' "${secret_key}" | base64 | tr -d '\n')
secret_patch=$(mktemp)
chmod 600 "${secret_patch}"
printf '{"data":{"server.secretkey":"%s"}}\n' "${secret_key_base64}" > "${secret_patch}"
kubectl --namespace argocd patch secret argocd-secret \
--type=merge --patch-file="${secret_patch}" >/dev/null
rm -f "${secret_patch}"
unset secret_key secret_key_base64
fi
kubectl --namespace argocd label secret argocd-secret \
app.kubernetes.io/name=argocd-secret \
app.kubernetes.io/part-of=argocd --overwrite >/dev/null
if ! kubectl --namespace argocd get secret argocd-notifications-secret >/dev/null 2>&1; then
kubectl --namespace argocd create secret generic argocd-notifications-secret
fi
if ! kubectl --namespace argocd get secret argocd-redis >/dev/null 2>&1; then
redis_password=$(openssl rand -hex 32)
kubectl --namespace argocd create secret generic argocd-redis \
--from-literal="auth=${redis_password}"
unset redis_password
fi
if ! kubectl --namespace argocd get secret argocd-oidc >/dev/null 2>&1; then
echo "Missing argocd/argocd-oidc; restore or provision it before recovery." >&2
exit 1
fi
helm upgrade --install argocd argo-cd \
--repo https://argoproj.github.io/argo-helm \
--version 10.10.5 \
--namespace argocd \
--values "${values_file}" \
--wait \
--timeout 10m