From 42e987f4ee60a228a7b5cc2499b322a7fd401ea8 Mon Sep 17 00:00:00 2001 From: Brad Stein Date: Fri, 16 Jan 2026 20:11:22 -0300 Subject: [PATCH] longhorn: apply settings via api job --- .../core/longhorn-settings-ensure-job.yaml | 4 +- .../core/scripts/longhorn_settings_ensure.sh | 43 +++++++++++++------ 2 files changed, 32 insertions(+), 15 deletions(-) diff --git a/infrastructure/longhorn/core/longhorn-settings-ensure-job.yaml b/infrastructure/longhorn/core/longhorn-settings-ensure-job.yaml index ba5927a..7c40721 100644 --- a/infrastructure/longhorn/core/longhorn-settings-ensure-job.yaml +++ b/infrastructure/longhorn/core/longhorn-settings-ensure-job.yaml @@ -2,7 +2,7 @@ apiVersion: batch/v1 kind: Job metadata: - name: longhorn-settings-ensure-1 + name: longhorn-settings-ensure-2 namespace: longhorn-system spec: backoffLimit: 0 @@ -28,7 +28,7 @@ spec: operator: Exists containers: - name: apply - image: bitnami/kubectl@sha256:554ab88b1858e8424c55de37ad417b16f2a0e65d1607aa0f3fe3ce9b9f10b131 + image: docker.io/alpine:3.20 command: ["/scripts/longhorn_settings_ensure.sh"] volumeMounts: - name: longhorn-settings-ensure-script diff --git a/infrastructure/longhorn/core/scripts/longhorn_settings_ensure.sh b/infrastructure/longhorn/core/scripts/longhorn_settings_ensure.sh index 0bc3446..be188b0 100644 --- a/infrastructure/longhorn/core/scripts/longhorn_settings_ensure.sh +++ b/infrastructure/longhorn/core/scripts/longhorn_settings_ensure.sh @@ -1,18 +1,35 @@ -#!/usr/bin/env bash -set -euo pipefail +#!/usr/bin/env sh +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() { - local name="$1" - local value="$2" +api_base="http://longhorn-backend.longhorn-system.svc:9500/v1/settings" - kubectl -n "${namespace}" patch setting.longhorn.io "${name}" \ - --type=merge \ - -p "{\"value\":\"${value}\"}" >/dev/null +wait_for_api() { + attempts=30 + 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" -patch_setting default-instance-manager-image "registry.bstein.dev/infra/longhorn-instance-manager:v1.8.2" -patch_setting default-backing-image-manager-image "registry.bstein.dev/infra/longhorn-backing-image-manager:v1.8.2" -patch_setting support-bundle-manager-image "registry.bstein.dev/infra/longhorn-support-bundle-kit:v0.0.56" +update_setting() { + name="$1" + value="$2" + 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"