longhorn: apply settings via api job

This commit is contained in:
Brad Stein 2026-01-16 20:11:22 -03:00
parent 71a1a55a01
commit 42e987f4ee
2 changed files with 32 additions and 15 deletions

View File

@ -2,7 +2,7 @@
apiVersion: batch/v1 apiVersion: batch/v1
kind: Job kind: Job
metadata: metadata:
name: longhorn-settings-ensure-1 name: longhorn-settings-ensure-2
namespace: longhorn-system namespace: longhorn-system
spec: spec:
backoffLimit: 0 backoffLimit: 0
@ -28,7 +28,7 @@ spec:
operator: Exists operator: Exists
containers: containers:
- name: apply - name: apply
image: bitnami/kubectl@sha256:554ab88b1858e8424c55de37ad417b16f2a0e65d1607aa0f3fe3ce9b9f10b131 image: docker.io/alpine:3.20
command: ["/scripts/longhorn_settings_ensure.sh"] command: ["/scripts/longhorn_settings_ensure.sh"]
volumeMounts: volumeMounts:
- name: longhorn-settings-ensure-script - name: longhorn-settings-ensure-script

View File

@ -1,18 +1,35 @@
#!/usr/bin/env bash #!/usr/bin/env sh
set -euo pipefail set -eu
namespace="longhorn-system" # Longhorn blocks direct CR patches for some settings; use the internal API instead.
apk add --no-cache curl >/dev/null
patch_setting() { api_base="http://longhorn-backend.longhorn-system.svc:9500/v1/settings"
local name="$1"
local value="$2"
kubectl -n "${namespace}" patch setting.longhorn.io "${name}" \ wait_for_api() {
--type=merge \ attempts=30
-p "{\"value\":\"${value}\"}" >/dev/null while [ "${attempts}" -gt 0 ]; do
if curl -fsS "${api_base}" >/dev/null 2>&1; then
return 0
fi
attempts=$((attempts - 1))
sleep 2
done
echo "Longhorn API not ready after retries." >&2
return 1
} }
patch_setting default-engine-image "registry.bstein.dev/infra/longhorn-engine:v1.8.2" update_setting() {
patch_setting default-instance-manager-image "registry.bstein.dev/infra/longhorn-instance-manager:v1.8.2" name="$1"
patch_setting default-backing-image-manager-image "registry.bstein.dev/infra/longhorn-backing-image-manager:v1.8.2" value="$2"
patch_setting support-bundle-manager-image "registry.bstein.dev/infra/longhorn-support-bundle-kit:v0.0.56" curl -fsS -X PUT \
-H "Content-Type: application/json" \
-d "{\"value\":\"${value}\"}" \
"${api_base}/${name}" >/dev/null
}
wait_for_api
update_setting default-engine-image "registry.bstein.dev/infra/longhorn-engine:v1.8.2"
update_setting default-instance-manager-image "registry.bstein.dev/infra/longhorn-instance-manager:v1.8.2"
update_setting default-backing-image-manager-image "registry.bstein.dev/infra/longhorn-backing-image-manager:v1.8.2"
update_setting support-bundle-manager-image "registry.bstein.dev/infra/longhorn-support-bundle-kit:v0.0.56"