Files
quay-kubernetes/install.sh
T
feedc0de ff96903291
Validate and deploy Quay / Validate manifest (push) Successful in 23s
Validate and deploy Quay / Downtime deployment (push) Has been cancelled
Initial commit with existing kubernetes config and CI
2026-08-08 23:57:48 +02:00

76 lines
2.6 KiB
Bash
Executable File

#!/bin/sh
set -eu
namespace=default
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
config_file=${QUAY_CONFIG_FILE:-$script_dir/config.yaml}
config_updated=false
for command in kubectl grep mktemp; do
if ! command -v "$command" >/dev/null 2>&1; then
echo "Required command not found: $command" >&2
exit 1
fi
done
install_config_secret() {
source_file=$1
if grep -q 'REPLACE_WITH_' "$source_file"; then
echo "Refusing to install a config containing REPLACE_WITH_ placeholders: $source_file" >&2
exit 1
fi
kubectl create secret generic quay-config \
--namespace "$namespace" \
--from-file="config.yaml=$source_file" \
--dry-run=client \
--output=yaml | kubectl apply --filename=-
config_updated=true
}
if [ -f "$config_file" ]; then
install_config_secret "$config_file"
echo "Updated $namespace/secret/quay-config from the private config file."
elif kubectl get secret quay-config --namespace "$namespace" >/dev/null 2>&1; then
echo "Keeping the existing $namespace/secret/quay-config."
elif kubectl get configmap quay-config --namespace "$namespace" >/dev/null 2>&1; then
temp_dir=$(mktemp -d)
trap 'rm -rf "$temp_dir"' EXIT HUP INT TERM
umask 077
kubectl get configmap quay-config \
--namespace "$namespace" \
--output=go-template='{{index .data "config.yaml"}}' > "$temp_dir/config.yaml"
install_config_secret "$temp_dir/config.yaml"
echo "Copied the legacy ConfigMap into $namespace/secret/quay-config without printing it."
else
echo "No private config file, Secret, or legacy ConfigMap was found." >&2
exit 1
fi
kubectl apply --filename "$script_dir/ceph-object-user.yaml"
kubectl apply --dry-run=server --filename "$script_dir/quay.yaml"
kubectl apply --filename "$script_dir/quay.yaml"
# The Secret is mounted with subPath, so an explicit Recreate rollout is needed
# after a configuration update.
if [ "$config_updated" = true ]; then
kubectl rollout restart deployment/quay deployment/quay-repomirror \
--namespace "$namespace"
fi
kubectl rollout status deployment/quay \
--namespace "$namespace" \
--timeout=15m
kubectl rollout status deployment/quay-repomirror \
--namespace "$namespace" \
--timeout=15m
echo
echo "Quay is available at https://registry.brunner.ninja."
if kubectl get configmap quay-config --namespace "$namespace" >/dev/null 2>&1; then
echo "After verifying the new pods, remove the legacy plaintext ConfigMap with:"
echo "kubectl delete configmap quay-config --namespace $namespace"
fi