From 3f2b4e9acf9cf61db9abc203c1810b13435be088 Mon Sep 17 00:00:00 2001 From: mr-forust Date: Tue, 6 Oct 2026 18:18:25 +0200 Subject: [PATCH] fix(deploy): skip VMAgent preflight before CRD install --- .gitea/tests/deploy-validation.sh | 14 ++++++++++++++ .gitea/workflows/deploy-lib.sh | 18 ++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/.gitea/tests/deploy-validation.sh b/.gitea/tests/deploy-validation.sh index 94e6480..0727dce 100755 --- a/.gitea/tests/deploy-validation.sh +++ b/.gitea/tests/deploy-validation.sh @@ -73,6 +73,20 @@ fi grep -q 'MISSING OR UNREADABLE: app/credentials' "$scratch/secrets.log" # API/rendering errors must not produce an empty reference list and pass. kubectl() { return 1; } +if ! skip_uninstalled_vmagent_crd "$REPO/prometheus-stack/k8s/vmagent.yaml"; then + echo 'VMAgent preflight did not skip an uninstalled CRD' >&2 + exit 1 +fi +kubectl() { return 0; } +if skip_uninstalled_vmagent_crd "$REPO/prometheus-stack/k8s/vmagent.yaml"; then + echo 'VMAgent preflight skipped an installed CRD' >&2 + exit 1 +fi +if skip_uninstalled_vmagent_crd "$REPO/prometheus-stack/k8s/victoria.yaml"; then + echo 'VMAgent preflight skipped an unrelated manifest' >&2 + exit 1 +fi +kubectl() { return 1; } if check_referenced_secrets >"$scratch/secrets.log"; then echo 'Secret check accepted a failed manifest render' >&2 exit 1 diff --git a/.gitea/workflows/deploy-lib.sh b/.gitea/workflows/deploy-lib.sh index 9429adc..0f6ee53 100644 --- a/.gitea/workflows/deploy-lib.sh +++ b/.gitea/workflows/deploy-lib.sh @@ -731,6 +731,18 @@ check_referenced_secrets() { fi } +# The VMAgent CRD is installed by the VictoriaMetrics Operator Helm release in +# stage_apply_k8s, after this preflight stage. Skip only its dry-run until then. +skip_uninstalled_vmagent_crd() { + local manifest="$1" + if [[ "$manifest" == "$REPO/prometheus-stack/k8s/vmagent.yaml" ]] \ + && ! kubectl get crd vmagents.operator.victoriametrics.com >/dev/null 2>&1; then + echo " skip: VMAgent CRD is installed by Helm during apply: ${manifest#"$REPO"/}" + return 0 + fi + return 1 +} + stage_validate() { check_prune_mode || return 1 cd "$REPO" @@ -748,6 +760,9 @@ stage_validate() { done log "Validate k8s manifests (kubectl dry-run=client)" for m in ${K8S_MANIFESTS[@]+"${K8S_MANIFESTS[@]}"}; do + if skip_uninstalled_vmagent_crd "$m"; then + continue + fi kubectl apply --dry-run=client -f "$m" >/dev/null done for k in ${KUSTOMIZE_APPS[@]+"${KUSTOMIZE_APPS[@]}"}; do @@ -755,6 +770,9 @@ stage_validate() { done log "Validate k8s manifests (kubectl dry-run=server)" for m in ${K8S_MANIFESTS[@]+"${K8S_MANIFESTS[@]}"}; do + if skip_uninstalled_vmagent_crd "$m"; then + continue + fi kubectl apply --dry-run=server -f "$m" >/dev/null done for k in ${KUSTOMIZE_APPS[@]+"${KUSTOMIZE_APPS[@]}"}; do