fix(deploy): correct service selection and recovery validation
ci / Workflows (pull_request) Successful in 6s
ci / Shell (pull_request) Successful in 16s
ci / Python and tests (pull_request) Successful in 6s
ci / Compose (pull_request) Successful in 12s
ci / Formatting (pull_request) Successful in 15s
ci / Dockerfiles (pull_request) Successful in 4s
ci / YAML (pull_request) Successful in 19s
ci / Kubernetes (pull_request) Successful in 7s
ci / image-plan (pull_request) Skipped
ci / Image (${{ matrix.name }}) (pull_request) Skipped
ci / build (pull_request) Skipped
ci / Workflows (pull_request) Successful in 6s
ci / Shell (pull_request) Successful in 16s
ci / Python and tests (pull_request) Successful in 6s
ci / Compose (pull_request) Successful in 12s
ci / Formatting (pull_request) Successful in 15s
ci / Dockerfiles (pull_request) Successful in 4s
ci / YAML (pull_request) Successful in 19s
ci / Kubernetes (pull_request) Successful in 7s
ci / image-plan (pull_request) Skipped
ci / Image (${{ matrix.name }}) (pull_request) Skipped
ci / build (pull_request) Skipped
This commit is contained in:
1 parent
4c7c53e0f2
commit
c4cbd87590
7 files changed
+272
-18
No files matched your search
@@ -571,6 +571,41 @@ skip_uninstalled_vmagent_crd() {
|
||||
return 1
|
||||
}
|
||||
|
||||
# Render one complete resource list so new namespaces can be identified across
|
||||
# files and Kustomize apps. A missing undeclared namespace remains an error.
|
||||
render_selected_resources() {
|
||||
local m k
|
||||
{
|
||||
for m in "${K8S_MANIFESTS[@]}"; do
|
||||
if skip_uninstalled_vmagent_crd "$m" >/dev/null; then continue; fi
|
||||
kubectl create --dry-run=client --validate=false -f "$m" -o json || return 1
|
||||
done
|
||||
for k in "${KUSTOMIZE_APPS[@]}"; do
|
||||
kubectl kustomize "$k" | kubectl create --dry-run=client --validate=false -f - -o json || return 1
|
||||
done
|
||||
} | jq -s '{apiVersion: "v1", kind: "List", items: [ .[] | if .kind == "List" then .items[] else . end ]}'
|
||||
}
|
||||
|
||||
validate_server_resources() {
|
||||
local defer_new="$1" resources existing filtered
|
||||
resources="$(render_selected_resources)" || return 1
|
||||
existing="$(kubectl get namespaces -o json)" || return 1
|
||||
filtered="$(jq --argjson existing "$existing" --argjson defer "$defer_new" '
|
||||
[.items[] | select(.kind == "Namespace") | .metadata.name] as $declared
|
||||
| [$existing.items[].metadata.name] as $present
|
||||
| .items |= map(
|
||||
(.metadata.namespace // "default") as $ns
|
||||
| if .kind == "Namespace" or ($present | index($ns)) != null then .
|
||||
elif ($declared | index($ns)) == null then error("Undeclared missing namespace: " + $ns)
|
||||
elif $defer then empty
|
||||
else error("Namespace still missing after namespace apply: " + $ns)
|
||||
end)
|
||||
' <<<"$resources")" || return 1
|
||||
if [ "$(jq '.items | length' <<<"$filtered")" -gt 0 ]; then
|
||||
kubectl apply --dry-run=server -f - <<<"$filtered" >/dev/null
|
||||
fi
|
||||
}
|
||||
|
||||
stage_validate() {
|
||||
check_prune_mode || return 1
|
||||
cd "$REPO"
|
||||
@@ -597,15 +632,7 @@ stage_validate() {
|
||||
kubectl apply -k "$k" --dry-run=client >/dev/null
|
||||
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
|
||||
kubectl apply -k "$k" --dry-run=server >/dev/null
|
||||
done
|
||||
validate_server_resources true
|
||||
log "Checking referenced Secrets exist"
|
||||
echo " (deploy never applies *secret*.yaml; create missing ones manually)"
|
||||
check_referenced_secrets
|
||||
@@ -657,6 +684,14 @@ stage_apply_k8s() {
|
||||
record_apply kubectl "${m#"$REPO"/}" success
|
||||
done
|
||||
fi
|
||||
# Kustomize may declare namespaces inside its rendered resources too.
|
||||
local namespace_resources
|
||||
namespace_resources="$(render_selected_resources | jq '.items |= map(select(.kind == "Namespace"))')" || return 1
|
||||
if [ "$(jq '.items | length' <<<"$namespace_resources")" -gt 0 ]; then
|
||||
kubectl apply -f - <<<"$namespace_resources" || return 1
|
||||
fi
|
||||
# Complete the deferred server checks before Helm or application resources change.
|
||||
validate_server_resources false || return 1
|
||||
if selected_service k8s prometheus-stack && [ -f "$REPO/prometheus-stack/k8s/active" ]; then
|
||||
if [ ! -f "$CONFIG_REPO/prometheus-stack/k8s/grafana-values.yaml" ]; then
|
||||
echo "ERROR: prometheus-stack/k8s/grafana-values.yaml (gitignored) missing on workstation, restore it first."
|
||||
|
||||
Reference in new issue
Block a user