Commit Graph
4354 Commits
Author SHA1 Message Date
k.rennerandClaude Opus 4.8 46db5ba409 paperless: cut CNPG backups over to Hetzner Object Storage
Stage 1 of the offsite backup migration (paperless-first). Repoint the
pprl-pg ObjectStore from local Garage (s3.nas-1.renner.uno) to Hetzner
fsn1, and switch its credentials to the new hetzner-s3-creds secret.

- destinationPath: s3://k8s-cnpg/pprl-pg -> s3://renner-uno-k8s-cnpg/pprl-pg
- endpointURL: s3.nas-1.renner.uno -> fsn1.your-objectstorage.com
- s3Credentials: barman-cloud-creds -> hetzner-s3-creds

The ObjectStore CRD has no path-style knob; barman/boto3 default (auto)
addressing works against Hetzner's Ceph RGW. Garage creds/secret are left
in place for a one-revert rollback. Validate (WAL archive + base backup +
restore) before broadening to authentik/immich/velero.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 14:07:22 +02:00
k.rennerandClaude Opus 4.8 62a00e0290 kubernetes: add SOPS-encrypted Hetzner S3 credentials
New secrets holding the Hetzner Object Storage keypair, ready for the
per-app backup cutover:
- seed/{paperless,authentik,immich}/hetzner-creds.sops.yaml
  → Secret/hetzner-s3-creds (ACCESS_KEY_ID, ACCESS_SECRET_KEY, REGION=fsn1)
- infrastructure/velero/hetzner-creds.sops.yaml
  → Secret/cloud-credentials-hetzner (cloud INI blob)

These are not referenced by any kustomization yet, so they're inert —
the existing Garage creds keep driving backups until each ObjectStore /
BSL is repointed (staged, paperless-first). Also gitignore
*.plaintext.yaml so the pre-encryption template can never be committed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 14:03:33 +02:00
k.rennerandClaude Opus 4.8 625f068014 opentofu: drop unused migration bucket
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline was successful
The migrate-* PVC-tarball workflow is retired, so renner-uno-k8s-migration
is no longer needed. Remove it; the (empty) bucket is destroyed by the
targeted apply. Remaining backup buckets: cnpg, velero, secrets.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 13:42:22 +02:00
k.rennerandClaude Opus 4.8 cd5a59f871 opentofu: prefix Hetzner bucket names (global-namespace collision)
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
First apply created k8s-cnpg/k8s-secrets/k8s-migration but k8s-velero
failed: "The requested bucket name is not available." Hetzner Object
Storage uses a global bucket namespace (virtual-hosted style → buckets
are endpoint subdomains), so generic k8s-* names collide with other
customers. Prefix all buckets with the domain (renner-uno-k8s-*) to stay
unique and consistent. The three already-created plain buckets are empty
and get recreated under the new names by the targeted apply.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 13:38:19 +02:00
k.rennerandClaude Opus 4.8 d3f94d359b opentofu: pin unifi provider to 0.49.x (unblock plan)
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
deploy-infrastructure's `tofu plan` was failing for everyone (not just
this branch): CI runs `tofu init -upgrade`, and the loose `~> 0.41`
constraint resolved to unifi 0.50.0+, which changed the dns_record `ttl`
schema from an integer to a Go duration string. Every plan then died on
the existing integer TTLs:

  Error: Invalid Time Duration String Value
    unifi_dns_record.renner_uno   (ttl = 300)
    unifi_dns_record.authentik_db (ttl = 60)

Bisected the provider: 0.49.0 is the last version that accepts integer
TTLs; 0.50.0 introduced the break. Pin to ~> 0.49.0 so the existing
config keeps validating. (A future bump past 0.49 needs those TTLs
rewritten to duration strings first.)

Also regenerates the lock: adds aminueza/minio, drops the stale unused
hashicorp/aws entry.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 13:34:34 +02:00
k.rennerandClaude Opus 4.8 b27c4c8afe opentofu: provision Hetzner Object Storage backup buckets
ci/woodpecker/manual/deploy-infrastructure Pipeline failed
Add the offsite S3 backup target that decouples cluster backups from
nas-1's local Garage, so nas-1 can be powered off nightly to save power
(and as a genuine DR improvement: backups + bootstrap secrets no longer
share a box with, and survive a rebuild of, the cluster).

Hetzner has no API to generate S3 credentials (Console-only, confirmed
empirically against the live hcloud API), so provisioning is two-part:
the keypair is created by hand in the Console, then the aminueza/minio
provider creates the buckets (k8s-cnpg, k8s-velero, k8s-secrets,
k8s-migration) over the S3 API.

- object_storage.tf: minio provider (fsn1) + for_each bucket resources
- variables_hetzner.tf: endpoint/region/keypair vars + enable flag
- providers.tf: aminueza/minio ~> 3.33
- deploy-infrastructure.yml: wire TF_VAR_hetzner_s3_{access,secret}_key
  from Woodpecker secrets into plan + apply

Bucket names mirror the current Garage layout so the cluster-side change
is only an endpoint/region/addressing swap (handled in follow-up commits,
staged paperless-first).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 13:10:43 +02:00
k.rennerandClaude Opus 4.8 e9022e0d4a paperless: move ftp-scanner vsftpd config to hash-suffixed generator
Moves the static ftp-scanner-config ConfigMap out of ftp-scanner.yaml
into a configMapGenerator in kustomization.yaml. Values are unchanged
(PASV_ADDRESS=10.2.99.82, ports 21100-21104, scanner, uid/gid 1000).

The content-hash name suffix is kept on purpose: vsftpd templates
pasv_address from PASV_ADDRESS at container start, so a changed value
must roll the pod. With the hash suffix, editing any value renames the
generated ConfigMap, mutates the Deployment pod template, and triggers
an automatic rolling restart. Without it, an IP change (e.g. an LB
re-allocation) would silently leave the pod advertising a stale PASV
address, breaking classic-PASV clients (older Brother scanners) while
EPSV clients keep working.

The Deployment consumes the CM via envFrom.configMapRef, so kustomize's
nameReference transformer rewrites the reference to the hashed name --
verified with `kubectl kustomize` (ftp-scanner-config-6d2597bt4d).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 12:44:41 +02:00
k.renner b5f2aadee4 Merge pull request 'authentik: roll to 2026.5.3 (server + ldap-outpost + chart pin)' (#21) from authentik-image-2026.5.3 into master
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Reviewed-on: gitea_admin/homelab#21
2026-06-25 12:09:40 +02:00
k.rennerandClaude Opus 4.8 8a26c2a33c authentik: roll server + ldap-outpost to 2026.5.3, pin chart to match
Bumps the samba-bridge fork images 2026.2.3 -> 2026.5.3 (built from
authentik-samba-bridge#f02b945 / PR #1) and pins the Helm chart to
2026.5.3 so chart appVersion and the running app image are in lockstep.

- global.image.tag:           2026.2.3-b06668e -> 2026.5.3-f02b945
- ldap-outpost container_image: 2026.2.3-0140972 -> 2026.5.3-f02b945
- chart version: ">=2025.12.0" (floated to 2026.5.3) -> pinned "2026.5.3"

Both images verified present in the gitea registry. The fork bump
validated the samba patch and server build assumptions (TENANT_APPS
sed, ManagedAppConfig, python3.14 venv, ldap runtime contract) against
upstream version/2026.5.3 before building.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-25 11:02:32 +02:00
security-bot 31088e1a42 chore(image-automation): bump rhasspy/wyoming-whisper:3.3.0
Updates managed by image-automation-controller.
2026-06-24 21:56:28 +00:00
security-bot 265a872e74 chore(image-automation): bump ghcr.io/zwave-js/zwave-js-ui:11.21.1
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Updates managed by image-automation-controller.
2026-06-23 09:56:04 +00:00
security-bot c0051baf91 chore(image-automation): bump ghcr.io/music-assistant/server:2.9.3
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Updates managed by image-automation-controller.
2026-06-22 00:55:38 +00:00
security-bot 4d031d4150 chore(image-automation): bump ghcr.io/home-assistant/home-assistant:2026.6.4
ci/woodpecker/cron/update-all Pipeline failed
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Updates managed by image-automation-controller.
2026-06-19 22:06:05 +00:00
k.rennerandClaude Opus 4.8 399f101b63 traefik: pin chart <41.0.0 to unblock infrastructure reconcile
ci/woodpecker/cron/security-scan Pipeline was successful
ci/woodpecker/cron/e2e Pipeline failed
The HelmRelease used an unbounded range (>=37.0.0), which auto-resolved
to chart 41.0.0. That release removed the root 'logs' key from the
values schema, so the Helm upgrade failed validation
('additional properties \'logs\' not allowed'), the traefik HR never
went Ready, and the infrastructure Kustomization's health check stalled
in 'Reconciliation in progress' — gating every dependent app
(paperless, authentik, home-assistant, ...).

Constrain to the working 40.x line. The 41.x values migration is
deferred and should be done deliberately.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-18 20:33:43 +02:00
security-bot 07cdc8f1ee chore(image-automation): bump gitea.renner.uno/k.renner/vsftpd:build.1781806363
Updates managed by image-automation-controller.
2026-06-18 18:13:15 +00:00
security-bot b14b5d4e36 chore(image-automation): bump cloudflare/cloudflared:2026.6.1
Updates managed by image-automation-controller.
2026-06-18 14:54:41 +00:00
security-bot 4af89b9b81 chore(image-automation): bump ghcr.io/music-assistant/server:2.9.2
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Updates managed by image-automation-controller.
2026-06-17 23:54:30 +00:00
security-bot cd2caade53 chore(image-automation): bump everythingsmarthome/everything-presence-mmwave-configurator:2.2.4
Updates managed by image-automation-controller.
2026-06-17 21:54:28 +00:00
security-bot 25a62c8b25 chore(image-automation): bump ghcr.io/zwave-js/zwave-js-ui:11.20.0
Updates managed by image-automation-controller.
2026-06-17 12:54:27 +00:00
k.renner 4ca31f568c Merge pull request 'scripts: remove claude-start/stop worktree wrappers' (#20) from chore/remove-worktree-scripts into master
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Reviewed-on: gitea_admin/homelab#20
2026-06-15 22:01:59 +02:00
k.rennerandClaude Opus 4.8 88430badb8 scripts: remove claude-start/stop worktree wrappers
Revert PR #19: the custom worktree wrapper scripts duplicated Claude
Code's native worktree support and are not the intended workflow.
Use the built-in worktree feature instead.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 22:00:26 +02:00
security-bot 9d3fd7726c chore(image-automation): bump rhasspy/wyoming-whisper:3.2.0
Updates managed by image-automation-controller.
2026-06-15 17:53:53 +00:00
k.renner c536f9d469 Merge pull request 'scripts: add claude-start/stop worktree wrappers' (#19) from chore/claude-worktree-scripts into master
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Reviewed-on: gitea_admin/homelab#19
2026-06-15 11:09:56 +02:00
k.rennerandClaude Opus 4.8 dea37c7b74 scripts: add claude-start/stop worktree wrappers
claude-start.sh creates (or reuses) a sibling git worktree at
../homelab-<name> on a new branch off master and launches claude in it.
claude-stop.sh tears the worktree down, refusing on uncommitted changes
unless --force, with optional --delete-branch.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 11:03:35 +02:00
k.renner a3a678ba34 Merge pull request 'cnpg: cap stopDelay to bound the barman-plugin failover wedge' (#18) from fix/cnpg-stopdelay-wedge-mitigation into master
Reviewed-on: gitea_admin/homelab#18
2026-06-15 10:57:38 +02:00
k.rennerandClaude Opus 4.8 3632640b92 cnpg: cap stopDelay (+smartShutdownTimeout) to bound failover wedge
Roll out shutdown tuning across the barman-backed CNPG clusters:

- stopDelay: 60 (all three) — caps terminationGracePeriodSeconds. With the
  barman-cloud plugin the demoted/restarting pod's instance-manager deadlocks
  on shutdown: a plugin runnable misses the 30s controller-runtime grace, the
  process never exits, and the native sidecar (which only stops after the main
  container) keeps running -> pod hangs Terminating (upstream
  cloudnative-pg#9770). Default 1800s leaves 2-instance clusters at 1/2 (and
  single-instance im-pg fully down) for ~30min after each failover/restart;
  60s caps that to ~1min. Postgres itself is cleanly down by ~12s, so the
  trimmed time is only the wedged instance-manager shell.
- smartShutdownTimeout: 10 (pprl-pg, im-pg) — already on ak-pg (#16); caps the
  smart-shutdown drain so -rw isn't backendless for 180s. Validated on ak-pg:
  app downtime 162s -> ~10s.

Note: changing stopDelay alters terminationGracePeriodSeconds, so CNPG rolls
each cluster's pods once to apply it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 10:37:41 +02:00
k.renner 589ea380d8 Merge pull request 'home-assistant: bump edge VM to 12Gi and HA pod limit to 8Gi' (#17) from fix/home-assistant-memory-bump into master
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
ci/woodpecker/manual/deploy-infrastructure Pipeline was successful
Reviewed-on: gitea_admin/homelab#17
2026-06-15 10:36:56 +02:00
k.rennerandClaude Opus 4.8 f9154006a6 home-assistant: bump edge VM to 12Gi and HA pod limit to 8Gi
ci/woodpecker/push/deploy-infrastructure Pipeline was successful
The ~10k-entity HA install OOM-looped at its 4Gi cgroup limit: working set
sits ~3.9Gi, ran cleanly overnight, then tipped over on morning load spikes
into a tight OOMKilled restart loop (recorder unclean-shutdown markers every
few minutes). The legacy HAOS VM 103 that ran this same workload had 16Gi.

Raise k8s-edge (VM 153) memory 6144 -> 12288 so the HA pod can have an 8Gi
limit with headroom for the other pinned pods (matter-server, otbr, zwave-js,
music-assistant). Freed RAM comes from the now-stopped VM 103.

Apply order: tofu apply + edge node reboot must land before the pod limit
change so the node actually has the RAM.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-15 10:28:57 +02:00
security-bot 6edeb83aed chore(image-automation): bump ghcr.io/music-assistant/server:2.9.1
Updates managed by image-automation-controller.
2026-06-14 16:53:36 +00:00
k.renner 8494f7f36d Merge pull request 'authentik: cap ak-pg smartShutdownTimeout to 10s' (#16) from fix/ak-pg-smart-shutdown-timeout into master
ci/woodpecker/cron/update-all Pipeline failed
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Reviewed-on: gitea_admin/homelab#16
2026-06-13 15:42:02 +02:00
k.rennerandClaude Opus 4.8 9d7533bc8a authentik: cap ak-pg smartShutdownTimeout to 10s
ak-pg failover/switchover caused ~2.7min of app downtime. Root cause: on
demotion CNPG immediately drops the old primary from the -rw service
(role->unhealthy), but only promotes the replacement after the old primary is
fully down. The default smart shutdown waits smartShutdownTimeout=180s for
client connections to drain; Authentik's persistent connections never do, so
-rw stays backendless (clients get "No route to host") for the full window.
Postgres promotion itself is ~3s.

Capping smartShutdownTimeout at 10s bounds the backendless window to ~10-15s
(fast shutdown + promotion). Applied to ak-pg first per staged-rollout; pprl-pg
and im-pg to follow after validation.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-13 15:39:51 +02:00
k.renner 1a4828feb6 Merge pull request 'security: agent-proposed fixes (2026-05-31)' (#11) from security-fix/2026-05-31-586221b into master
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Reviewed-on: gitea_admin/homelab#11
2026-06-13 12:13:14 +02:00
k.renner c047d6b870 Merge pull request 'cnpg: enable preferred sync replication on 2-instance clusters' (#15) from fix/cnpg-sync-replication into master
Reviewed-on: gitea_admin/homelab#15
2026-06-13 12:12:32 +02:00
k.rennerandClaude Opus 4.7 1017e23829 cnpg: enable preferred synchronous replication on 2-instance clusters
Today's kubelet-restart-induced switchovers on ak-pg and pprl-pg each
took ~5 minutes from probe-failure to authentik/paperless reconnecting,
dominated by ~4 minutes of postgres-internal promote work. Most of
that time is the new primary chasing missing WAL via barman-cloud (the
old primary terminated mid-stream, queued WAL had to be replayed from
the archive) and the standby waiting through wal_retrieve_retry_interval
cycles before noticing the promote trigger.

With one synchronous standby (`synchronous.number: 1`), the standby is
always at the same LSN as the primary at commit time, so on promote
there is no missing WAL to chase and the standby is immediately ready
to accept connections. CNPG switchovers in this mode complete in single
digits of seconds.

`dataDurability: preferred` (CNPG v1.20+ modern API, replaces the
legacy minSyncReplicas/maxSyncReplicas fields) makes sync best-effort:
the primary stops waiting for the standby if it becomes unavailable,
so a standby outage does not block writes. The trade-off versus async
is ~1-5 ms of added commit latency on healthy LAN+Ceph, which is well
under the noise floor for authentik and paperless workloads.

Single-instance clusters (im-pg, gf-pg) are not touched - sync
replication requires >= 2 instances.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-13 12:09:36 +02:00
k.renner cdb3af9663 Merge pull request 'authentik: bump memory limits to 2Gi, lift requests' (#14) from fix/authentik-memory-bump into master
Reviewed-on: gitea_admin/homelab#14
2026-06-13 10:21:31 +02:00
k.rennerandClaude Opus 4.7 d187799490 authentik: bump memory limits to 2Gi, lift requests
All three authentik components were sitting at 70-80% of their 1Gi
memory limit at steady state, with no headroom for spikes
(LDAP sync, blueprint apply, pg checkpoint/vacuum, gunicorn worker
restart). Today's outage during the kubelet config rollout on k8s-2
saw ak-pg-1 (the primary at the time) shut down on a readiness-probe
failure and not come back cleanly; suspected contributing cause is
that brief memory pressure tipped it past the 1Gi limit.

- ak-pg cluster: 512Mi req / 1Gi limit -> 768Mi req / 2Gi limit
  (steady-state usage on primary is ~580MiB; vacuums and checkpoint
  spikes were eating into the cap with no margin)
- authentik-server: 768Mi req / 1Gi limit -> 1Gi req / 2Gi limit
  (live pods sitting at 720-745MiB, ~74% of cap)
- authentik-worker: 768Mi req / 1Gi limit -> 1Gi req / 2Gi limit
  (workers run heavy background tasks - LDAP sync, policy eval,
  blueprint application - and need headroom)

Limit bump is the safety net (no OOM). Request bump matches steady
state so scheduler accounts for real footprint.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-13 10:10:30 +02:00
k.renner ad17463e63 Merge pull request 'talos: lower kubelet image GC thresholds to 70/60' (#13) from fix/kubelet-image-gc-thresholds into master
Reviewed-on: gitea_admin/homelab#13
2026-06-13 09:49:05 +02:00
k.rennerandClaude Opus 4.7 1fcda644c0 talos: lower kubelet image GC thresholds to 70/60
The CP VMs are seeing Ceph `MON_DISK_LOW` on mons a,b because their
shared /var (xfs on /dev/vda5) sits at 77-79% used — past Ceph's
default `mon_data_avail_warn` line of <30% free. Mon DB itself is
118 MiB; the disk pressure is pod density (k8s-2 hosts 75 pods vs
k8s-1's 42), driving containerd image cache and /var/log/pods.

Kubelet's default image GC thresholds (85% high / 80% low) sit
above where we land, so GC never fires and unused image layers
accumulate indefinitely. Lowering to 70/60 forces eviction before
/var crosses the mon warn line, with Spegel's P2P pull-through cache
softening the re-pull cost on the rare case a GC'd image is needed
back.

Requires a node reboot to take effect (Talos `extraConfig` change).
Roll one CP at a time with `kubectl drain` + Ceph `HEALTH_OK` wait
between nodes, per the standing drain/Ceph-wait discipline.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-12 23:22:20 +02:00
security-bot d575bac832 chore(image-automation): bump ghcr.io/home-assistant/home-assistant:2026.6.3
Updates managed by image-automation-controller.
2026-06-12 21:02:46 +00:00
security-bot a171ec39f8 chore(image-automation): bump gotenberg/gotenberg:8.34.0
Updates managed by image-automation-controller.
2026-06-12 12:53:02 +00:00
security-bot 63116bb29c chore(image-automation): bump ghcr.io/music-assistant/server:2.9.0
ci/woodpecker/cron/security-scan Pipeline was successful
ci/woodpecker/cron/e2e Pipeline failed
Updates managed by image-automation-controller.
2026-06-10 19:52:35 +00:00
security-bot a1e11483b2 chore(image-automation): bump ghcr.io/cloudnative-pg/plugin-barman-cloud:v0.13.0
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Updates managed by image-automation-controller.
2026-06-10 10:51:13 +00:00
security-bot f8a9e5ef87 chore(image-automation): bump ghcr.io/home-assistant/home-assistant:2026.6.2
Updates managed by image-automation-controller.
2026-06-09 21:00:22 +00:00
security-bot 74ead17334 chore(image-automation): bump cloudflare/cloudflared:2026.6.0
ci/woodpecker/cron/security-scan Pipeline was successful
ci/woodpecker/cron/e2e Pipeline failed
Updates managed by image-automation-controller.
2026-06-09 10:52:14 +00:00
security-bot d3b704f4d7 chore(image-automation): bump everythingsmarthome/everything-presence-mmwave-configurator:2.2.3
Updates managed by image-automation-controller.
2026-06-09 00:52:06 +00:00
k.renner 3ec7baf8eb Merge pull request 'fix(rook-ceph): ship per-driver CSI ServiceAccounts for v1.20 operator' (#12) from fix/rook-ceph-csi-sas into master
Reviewed-on: gitea_admin/homelab#12
2026-06-08 20:56:47 +02:00
k.rennerandClaude Opus 4.7 babed07871 fix(rook-ceph): ship per-driver CSI ServiceAccounts for v1.20 operator
The rook-ceph HelmRelease's floating `>=1.16.0` constraint silently
upgraded to v1.20.0, which extracts CSI driver management into the
upstream ceph-csi-operator subchart. That subchart's generated
ctrlplugin Deployments and nodeplugin DaemonSets reference per-driver
ServiceAccounts (`rbd-ctrlplugin-sa`, `cephfs-ctrlplugin-sa`,
`rbd-nodeplugin-sa`, `cephfs-nodeplugin-sa`) that the main rook-ceph
chart no longer ships — they moved to a separate ceph-csi-drivers
chart. With the SAs missing, both ctrlplugin Deployments sat at 0/2
with FailedCreate for 5 days, blocking PVC attach/detach across the
cluster (Grafana, Alertmanager, libation stuck; Home Assistant pinned
to the edge node which never got an RBD nodeplugin pod).

The ceph-csi-drivers chart cannot be installed cleanly here:
helm-controller v1.5.4 predates `disableTakeOwnership`, so Helm would
refuse to adopt the operator-managed `Driver` and `OperatorConfig` CRs
the v1.18 -> v1.20 auto-migration created. Instead, render only the
SAs + RBAC the operator needs from the chart's templates as static
manifests under kubernetes/infrastructure/ceph-csi-drivers/. The
existing operator-managed CRs continue to be the source of truth.

Also pin the rook-ceph chart to `~1.20.0` to prevent the same
floating-constraint surprise on the next minor bump.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-08 20:50:16 +02:00
security-bot ed35b47bb0 chore(image-automation): bump ghcr.io/home-assistant/home-assistant:2026.6.1
ci/woodpecker/cron/update-all Pipeline failed
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Updates managed by image-automation-controller.
2026-06-05 20:57:59 +00:00
security-bot da50992ed3 chore(image-automation): bump everythingsmarthome/everything-presence-mmwave-configurator:2.2.2
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Updates managed by image-automation-controller.
2026-06-05 00:51:00 +00:00
security-bot df358f7aac chore(image-automation): bump ghcr.io/home-assistant/home-assistant:2026.6.0
ci/woodpecker/cron/e2e Pipeline failed
ci/woodpecker/cron/security-scan Pipeline was successful
Updates managed by image-automation-controller.
2026-06-03 18:56:31 +00:00