Restore test 9/9: the Hetzner restore test harness #1305
Closed
claude-bot
wants to merge 1 commits from
split/09-restore-test-harness into split/08-cnpg-archive-generations
pull from: split/09-restore-test-harness
merge into: :split/08-cnpg-archive-generations
:main
:alert-fix/issue-1551
:shelly-manager-no-mtu-probing
:lb-replies-table-47
:fix/vip-replies-table-47
:renovate/node-26.x
:renovate/hermes-image
:renovate/home-assistant-minor-patch
:renovate/ci-minor-patch
:renovate/all-minor-patch
:revert/gate-sync-oidc
:fix/gate-sync-proxy-sweep
:feat/gate-sync-oidc
:feat/youtrack
:ci-image/claude-2.1.316
:worktree-loki-retention-365d
:paperless-drop-syncthing-monitor
:worktree-alloy-unifi-syslog-label
:worktree-syncthing-ui-gate
:alert-fix/issue-1527
:shelly-manager-sleepy-rollout
:kuma-root-group
:ci-image/claude-2.1.312
:worktree-ntp-ipv4-record
:kuma-notifications
:shelly-manager-iot-v6-world-egress
:ssh-ca-nas-2
:shelly-manager-iot-ipv6-egress
:shelly-manager-net1-no-ra
:shelly-firmware-lb-reachable
:shelly-manager-local-firmware
:claude/ma-pocketcasts-up-next-top-pick
:claude/outpost-image-flux
:claude/outpost-image-literal
:claude/date-image-tag
:docs/mosquitto-shelly-manager-settings-comment
:review-bot-token-read-issue
:alert-fix/issue-1505
:t_1bc87417/konairius-registry
:review-bot-on-request
:review-bot-efficiency
:ci-ansible-netbird
:worktree-crowdsec-ma-imageproxy-whitelist
:ci-image/claude-2.1.311
:worktree-openbao-oidc-authentik
:alert-fix/issue-1461
:claude/authentik-2026.8.4
:fix/ma-sendspin-mdns-net1
:claude/ma-pocketcasts-up-next-mark-played
:claude/ma-pocketcasts-up-next-playlist
:revert/ma-po-token-server
:alert-fix/issue-1453
:claude/gitea-mcp-imagerepo
:feat/ma-youtube-music-po-token-v2
:feat/ma-youtube-music-po-token
:claude/coredns-talos-owned-2
:claude/coredns-talos-owned
:claude/k8s-gateway-ingress-resolver
:claude/egress-followups
:feat/wiki-cronjobs
:claude/mqtt-admin-register
:claude/shelly-manager-mdns
:feat/wiki-encyclopedia-pilot
:ci-image/claude-2.1.310
:claude/mosquitto-legacy-auth-removal
:claude/egress-lockdown
:fix/gate-embedded-refresh-interval
:fix/gate-embedded-browser-host
:feat/authentik-gate-forwardauth
:docs/drop-wildcard-references
:fix/netbird-controller-disable-dns
:feat/dns-labels-split-2
:feat/dns-labels-split-1
:fix/cloudflare-lb-sync-image-tag
:feat/cloudflare-lb-sync
:fix/wordpress-php85-php2shell
:feat/update-os
:chore/talos-1.13.12
:atlas/talos-v1.13.12-cve-2026-99999
:fix/gitea-webhook-sync-org-scope
:atlas/kuma-mcb-www-retries
:feat/hermes-gitea-pr-review-loop
:atlas/traefik-chart-42
:fix/monitoring-k8s-gateway-probe
:alert-fix/issue-1081-rotator
:ci-image/claude-2.1.306
:alert-fix/issue-1084-v2
:atlas/flux-2.9.6
:alert-fix/issue-1082
:feat/hermes-gitea-issues-kanban
:worktree-restore-test-real
:fix/hermes-multiplex-env
:feat/hermes-experts
:feat/hermes-ha-mcp
:feat/kuma-status-page
:fix/hermes-ha-updates-review
:feat/hermes-alert-monitor
:feat/hermes-ha-updates
:fix/turn-tcp-router
:fix/crowdsec-own-ca
:fix/livekit-service-links
:fix/crowdsec-lapi-transport-ca
:feat/matrix-element-call
:feat/kuma-public-coverage
:feat/ha-matrix-nabu-secret
:feat/hermes-matrix-cross-signing
:feat/hermes-matrix
:fix/wiki-basic-auth-in-service
:proposal/traefik-vip-maglev-dsr
:fix/hermes-dashboard-ws-ping-timeout
:fix/hermes-dashboard-ws-ping-interval
:fix/hermes-dashboard-refresh-token
:feat/wiki-drop-gate
:feat/wiki-oidc-provider
:fix/hermes-soul-talos-node-names
:claude/docs-konairius-main
:claude/drop-k-renner-org-secrets
:claude/prompts-main
:claude/default-branch-main
:feat/hermes-cli-logins
:claude/plan-step0-claude-bot
:alert-fix/issue-1363
:claude/homelab-konairius
:claude/konairius-org-secrets
:fix/hermes-image-registry-bot
:feat/hermes-use-custom-image
:feat/hermes-image
:feat/kuma-task5-monitors
:feat/hermes-gitea
:fix/hermes-configmap-namespace
:feat/hermes-homelab-context
:fix/uptime-kuma-script-mount
:feat/kuma-task4-bootstrap
:feat/kuma-task4-cluster
:feat/kuma-sync-default-notifications
:fix/hermes-image-policy
:fix/kuma-sync-foreign-key-create
:feat/hermes-agent
:chore/kuma-sync-smoke-remove
:feat/kuma-sync-smoke
:feat/kuma-sync-deploy
:ci-image/claude-2.1.303
:feat/kuma-sync
:docs/uptime-kuma-plan
:chore/remove-autokuma
:fix/uptime-kuma-ipv6
:feat/autokuma-pilot-update
:fix/drop-flux-image-automation-alert
:feat/autokuma-pilot
:feat/autokuma
:fix/uptime-kuma-fail-guard
:fix/uptime-kuma-setup-diagnostics
:feat/uptime-kuma-vps
:ci/ansible-image-hvac
:claude/plan-homelab-konairius-main
:fix/kubejobfailed-resolve-on-later-success
:claude/homeassistant-konairius
:claude/ha-config-sync-identity
:feat/site-base-domain
:claude/review-bot-repos-konairius
:claude/authentik-konairius-images
:claude/notes-renovate-konairius
:claude/vsftpd-konairius-image
:claude/registry-bot-read-scope
:claude/registry-bot
:ci-image/claude-2.1.302
:claude/review-bot-approved
:claude/review-bot-backends
:fix/wp-pg-recovery-source
:feat/review-bot-status
:worktree-hcloud-wg-site
:node-dns-via-k8s-gateway
:chore/remove-paperclip
:worktree-k8s-gateway-chart-4
:fix/review-bot-approve-with-unverified
:chore/remove-wiki-maintenance-ci
:fix/review-bot-unique-tag
:fix/review-bot-rereview
:fix/review-bot-build-trigger
:fix/review-bot-backoff-cap
:fix/review-bot-rate-limit
:chore/disable-old-pr-review
:feat/review-bot-deploy
:feat/review-bot-service
:feat/pr-review-mistral
:fix/gitea-mcp-public-gitea-url
:alert-fix/issue-1242
:alert-fix/issue-1241
:fix/gitea-mcp-command
:feat/gitea-mcp
:claude/netbird-service-sync-pin
:claude/gitea-public
:feat/embed-knn-bench
:claude/pr-review-latest-cli
:ci-image/claude-2.1.296
:chore/decommission-openproject
:claude/pr-review-central
:feat/openproject-authentik-oidc
:fix/alloy-syslog-udm-cef-regex
:alert-fix/issue-1217
:alert-fix/issue-1214
:atlas/ren-1363-openproject-seeder-order
:atlas/ren-1367-gitea-1.27
:atlas/ren-1367-gitea-pre-upgrade-snapshot
:atlas/ren-1363-openproject
:atlas/ren-1345-ops-image-jq
:atlas/ren-1345-hermes-prometheus-read
:atlas/ren-1345-bridge-agent-secrets
:atlas/ren-802-retire-sml2mqtt
:atlas/ren-953-remove-legacy-users
:atlas/ren-1307-edge1-register
:atlas/ren-1307-edge1-cred-receiver
:atlas/ren-953-controller-ha-cert
:atlas/ren-1256-prune-shellies-secret
:atlas/ren-953-ha-mqtt-cert-sync
:atlas/ren-1256-adopt-shellies-secret
:atlas/ren-1203-eso-gitea-namespace
:atlas/ren-1203-gitea-package-retention
:atlas/ren-1196-agent-runtime-tzdata
:atlas/ren-1017-remove-legacy-shellies
:atlas/ren-1017-ht-wake-reland
:atlas/ren-1017-shelly-30
:atlas/ren-1167-revert-1183
:alert-fix/issue-1184
:atlas/ren-1017-ht-wake
:atlas/ren-1017-shelly-group5c
:atlas/ren-1017-shelly-group5b
:atlas/ren-1080-controller-1d03144-rotate-hold
:atlas/ren-1017-shelly-group5
:atlas/ren-1017-shelly-group4
:atlas/ren-1053-controller-a307693
:atlas/ren-1017-shelly-group3
:atlas/ren-1017-shelly-group2
:atlas/ren-1017-shelly-group1
:atlas/ren-1017-device-list
:atlas/ren-1017-shelly-accounts
:atlas/ren-953-agents-read-paperclip-pod
:atlas/ren-953-agents-read
:atlas/ren-953-ha-mqtt-tls
:atlas/ren-953-ha-account
:atlas/ren-953-evcc-cert
:atlas/ren-953-evcc-account
:atlas/ren-953-z2m-cert
:atlas/ren-953-z2m-account
:atlas/ren-953-health-probe-cert
:atlas/ren-931-agent-shelly-manager
:atlas/ren-900-controller-bump
:atlas/ren-900-mosquitto-dynsec
:atlas/ren-888-revoke-test-account
:atlas/ren-888-mqtt-account-controller
:atlas/ren-841-remove-repair-job
:atlas/ren-841-k8s-plugin-termination-receipt
:atlas/ren-841-lease-receipt-repair
:atlas/ren-802-suspend-open3e-int-rotator
:atlas/ren-826-remove-read-job
:atlas/ren-826-room-setpoint-read
:atlas/ren-809-remove-capture
:atlas/ren-809-open3e-fbh-capture
:atlas/ren-723-authentik-2026.8.3
:atlas/ren-772-remove-rekey-job
:atlas/ren-772-wp-repo4-rekey
:atlas/ren-722-mdns-relay-v191-attach
:atlas/ren-723-openbao-rolling
:atlas/ren-722-dhcp-lease-renew
:atlas/ren-722-cni-plugins-installer-v1.9.1
:atlas/ren-723-influxdb-snapshot
:atlas/ren-722-cni-plugins-v1.9.1
:atlas/ren-722-job-force-annotations
:atlas/ren-717-matrix-bridge-1791195981
:atlas/ren-702-paperclip-cap-kill
:atlas/ren-691-matrix-bridge-1791179547
:atlas/ren-685-matrix-bridge-1791177680
:ci-image/claude-2.1.289
:atlas/ren-671-matrix-bridge-1791152484
:atlas/ren-663-matrix-public
:atlas/ren-587-matrix-bridge
:atlas/ren-567-authentik-grant-types
:atlas/ren-567-mas
:atlas/ren-627-edge1-ssh-egress
:atlas/ren-621-loki-read-gateway
:atlas/ren-603-pclp-pg-memory
:atlas/ren-583-gitea-pvc-volumename
:atlas/ren-583-gitea-volume-60gi
:atlas/ren-563-claude-session-resume
:atlas/ren-563-revert-1111
:atlas/ren-567-matrix
:atlas/ren-563-acpx-session-resume
:atlas/ren-544-argus-token-v3
:atlas/ren-539-atlas-token-v3
:atlas/ren-541-claude-auto-memory
:atlas/ren-540-hestia-token-v3
:atlas/ren-528-review-bot-verify-repo
:atlas/ren-533-shelly-manager-probe
:atlas/ren-525-rotate-argus-token
:atlas/ren-509-rotate-agent-tokens
:atlas/ren-487-hubble-relay
:atlas/ren-488-govulncheck
:atlas/ren-487-agent-pod-egress
:atlas/ren-453-retire-immich-library
:atlas/ren-451-restore-abort
:atlas/ren-451-restore-test-skip-cnpg
:alert-fix/issue-1095
:atlas/ren-442-restore-capacity-gate
:z2m-ws90-converter
:alert-fix/issue-1089
:atlas/ren-419-ephemeral-wear-alert
:alert-fix/issue-1084
:alert-fix/issue-1081
:atlas/ren-414-agent-kubectl-sa
:atlas/ren-411-agent-gitea-egress
:atlas/ren-409-paperclip-14769
:atlas/ren-405-k8s-plugin-dist
:atlas/ren-401-kaniko-oom
:atlas/ren-401-paperclip-patched-image
:z2m-memory-limit
:atlas/ren-350-beets-write-retry
:fix/navidrome-native-api
:atlas/ren-350-paperclip-lidarr-cnp
:atlas/ren-350-beets-retry-skips
:atlas/ren-350-beets-write
:atlas/ren-350-beets-phase2
:atlas/ren-350-beets-cronjob
:atlas/ren-339-restore-test-teardown
:atlas/ren-339-restore-roll
:atlas/ren-339-restore-plugin
:atlas/ren-339-ha-backup-cleanup
:atlas/ren-339-ha-restore-test
:atlas/ren-315-renovate-groups
:atlas/ren-315-renovate-tool-install
:atlas/ren-107-retention-divergence-alert
:atlas/ren-159-remove-ren28-negative-probes
:atlas/ren-302-claude-agent-acp
:atlas/ren-298-agent-sandbox-v0.5.6
:atlas/ren-294-ical-proxy-926ead0
:atlas/ren-286-agent-runtime-own-workflow
:atlas/ren-285-agent-sandbox-labels
:atlas/ren-286-agent-runtime-images
:atlas/ren-285-agent-sandbox
:atlas/ren-148-paperless-ingress-scoping
:atlas/ren-93-promql-gate
:atlas/ren-268-ha-hacs-proxy
:atlas/ren-266-hacs-versions
:atlas/ren-245-ha-critical-alerts
:atlas/ren-243-ha-window
:feat/openbao-secret-exists-check
:atlas/ren-239-ical-proxy-main-73b5d97
:atlas/ren-238-ical-proxy-main-4783abe
:atlas/ren-201-ical-proxy-gitea-image
:atlas/ren-216-renovate
:atlas/ren-152-wal-backlog-retune
:atlas/ren-198-pin-kps-chart
:atlas/ren-176-ha-pg-walstorage
:atlas/ren-166-cilium-verdict-metric
:atlas/ren-7-alert-contacts
:atlas/ren-177-velero-cephfs-readonly-backuppvc
:feat/paperclip-api-door
:atlas/ren-186-cost-ledger-sync
:atlas/ren-183-yaml-anchors
:atlas/ren-161-promtool-ci
:atlas/ren-163-ceph-nearfull-headroom
:atlas/ren-7-restore-audiobooks
:atlas/ren-127-podmonitor-comment
:atlas/ren-165-wal-maxparallel-stage
:atlas/ren-141-ha-pg-32gi
:atlas/ren-147-cilium-agent-metrics-service
:atlas/ren-142-negative-control-probe
:atlas/ren-140-negative-test-probes
:atlas/ren-102-flux-ksm-crs
:atlas/ren-7-pilot-endpointmonitors
:atlas/ren-131-openbao-unavailable-for
:atlas/ren-106-narrow-eso-failed
:atlas/ren-116-probe-citation-path
:atlas/ren-103-scrape-doc-gaps
:atlas/ren-6-imc-deploy
:atlas/ren-100-externalsecret-healthcheck
:atlas/ren-91-imagepolicy-total-order
:atlas/ren-88-ceph-ec-pool-false-page
:atlas/ren-86-paperclip-dependson-monitoring
:atlas/ren-36-prometheus-read-path
:docs/probe-egress-dependency-and-revert-recipe
:docs/paperclip-claude-token
:fix/paperclip-memory
:docs/probe-cnp-egress-and-status-caveats
:feat/ren-21-paperless-app-health-probe
:feat/ren-21-navidrome-app-health-probes
:alert-fix/issue-968
:feat/paperclip-wiki-key
:feat/lidarr
:feat/wiki-api-key-paperclip
:feat/paperclip-signup-off
:feat/paperclip
:feat/netbird-retire-vps-proxy
:feat/navidrome
:feat/immich-bulk-cutover
:feat/immich-bulk-pvcs
:feat/wiki-image-automation
:chore/wiki-image-fact-drafter
:chore/wiki-image-facts-page
:chore/abs-drop-old-books-pvc
:chore/wiki-image-judge-one-request
:feat/abs-books-bulk
:feat/libation-strip-branding
:feat/cephfs-ec-bulk
:feat/open3e-int-broker-user
:feat/wiki-reloader
:chore/wiki-image-phases-4-6
:feat/wiki-anthropic-key
:feat/wiki-service-write-token
:chore/retire-python-wiki-index
:feat/wiki-machine-door
:chore/wiki-phase3-image
:chore/wiki-phase2-image
:chore/wiki-build-1790250017
:feat/wiki-gate
:fix/gitea-egress-wiki
:feat/wiki-service-manifests
:docs/proposal-wiki-web-api
:alert-fix/issue-937
:fix/alertmanager-info-inhibitor
:feat/cephx-allowed-ciphers-aes256k
:feat/cephx-drop-prior-csi-keys
:ci/wiki-consolidate-tilde-paths
:feat/cephx-csi-aes256k
:ci/wiki-consolidate-in-ci
:chore/talos-1.13.10
:feat/drain-tolerant-singletons
:ci/wiki-distill-skip-empty
:ci/wiki-audit-script
:fix/k8s-gateway-oci-chart
:docs/network-traffic-classes-as-built
:feat/node-ip-vlan-46
:alert-fix/issue-920
:feat/bird-attached-node0
:feat/node-vlan-46-link
:chore/cni-drop-stage-labels
:feat/cni-sole-writer-converge-b2
:feat/cni-sole-writer-converge-b1
:chore/cni-stage-k8s-1
:fix/whereabouts-reconciler-cordon
:chore/cni-stage-k8s-2
:chore/cni-stage-k8s-3
:feat/cni-staged-sole-writer
:feat/netbird-service-sync-phase2
:feat/netbird-service-sync-phase1
:chore/gitea-namespace-phase3
:feat/gitea-namespace-phase2
:feat/gitea-namespace-phase1
:ci-image/claude-2.1.280
:fix/ci-claude-refresh-mixed-pins
:fix/align-ci-claude-pins
:fix/ci-claude-bump-token-newline
:worktree-fix-paperless-memory-limit
:alert-fix/issue-897
:alert-fix/issue-896
:fix/wiki-maintenance-merge-verify
:feat/pick-model-newest-among-comparable
:feat/pick-model-typesafe
:fix/wiki-maintenance-rebase-push
:fix/wiki-maintenance-strip-secrets
:fix/wiki-maintenance-image-2.1.278
:feat/wiki-maintenance-ci
:fix/wiki-index-commit-tags
:fix/wiki-index-pin-digest-2
:alert-fix/issue-880
:fix/wiki-index-tree-paging
:fix/wiki-index-pin-digest
:fix/wiki-index-strip-credentials
:fix/gitea-webhook-egress-wiki-index
:fix/wiki-index-openbao-ingress
:feat/wiki-index-deploy
:feat/wiki-index-image
:fix/eso-allow-ai
:feat/wiki-embed
:fix/multus-only-cni-writer
:fix/cilium-cni-uninstall
:feat/onebase-room-telemetry
:fix/external-dns-scrape-policy
:feat/dns-monitoring
:fix/external-dns-annotation-prefix
:fix/ftp-scanner-probe
:fix/libation-accounts-persistence
:fix/libation-pin-14.2.1
:feat/ceph-read-affinity
:fix/bird-local-cidr
:feat/single-pod-table
:docs/traffic-classes
:feat/podpod-rules
:fix/bird-static
:fix/bird-digest
:feat/bird-mesh2
:feat/bird-kubectl
:feat/bird-mesh
:feat/bird-image-api
:feat/bird-daemonset
:alert-fix/issue-844
:feat/bird-image
:alert-fix/issue-843
:feat/pod-egress-vlan47
:docs/576-rejected-options
:feat/antrea-eval
:feat/nodeip-pod0
:feat/cilium-native-pod0
:feat/bgp-peer-ingress
:feat/bgp-listen-ingress
:feat/ingress-static-addressing
:feat/k8s-net-split-phase-a
:feat/cilium-pin-devices
:chore/ci-k8s-2026-09-08
:feat/flux-2.9.5
:feat/ci-tool-pins
:feat/openbao-seal-key-bootstrap
:feat/openbao-static-seal
:fix/openbao-alerts-immediate
:feat/intel-gpu-dashboard
:feat/intel-gpu-exporter
:feat/intel-gpu-monitoring-resource
:fix/reloader-configmap-annotations
:netbird-proxy-protocol-digest
:netbird-proxy-protocol-deploy
:netbird-proxy-protocol
:netbird-proxy-services-uid
:netbird-proxy-services-deploy
:netbird-proxy-services
:proxy-watchdog-cooldown
:proposal-node-roll-downtime
:alert-fix/issue-808
:lapi-transport-phase-2
:ceph-address-ranges
:fix/arp-flux-second-nic
:rehearsal-san
:osd-partlabel-no-ceph
:lapi-transport-post-crds
:san-host-device-nad
:san-rollout
:san-role-rename
:ceph-20-cutover
:rebuild-tooling
:apply-set-hygiene
:rebuild-image-resilience
:cold-rebuild-ordering
:fix/bootstrap-honour-vm-state
:chore/remove-paperless-eval
:issue-fix/789-cilium-node-ula
:issue-fix/787-mdns-relay-supervisor
:trmnl-firmware-sync-off
:trmnl-device-tls
:vmtest-flux
:eval-script-fixes
:alert-fix/issue-780
:worktree-eval-script-fixes
:eval-out-of-iac
:paperless-eval-jobs
:paperless-eval-fixes
:paperless-eval-instance
:crowdsec-tailer-polling
:crowdsec-alerting
:llama-single-slot
:llama-ctx-revert
:arm-crowdsec-proxy-1
:fix-proxy-deploy-triggers
:llama-ctx-fix
:arm-crowdsec-proxy-2
:llama-ctx-assist
:crowdsec-metrics-dashboard
:alert-fix/issue-761
:embed-batch-fix
:crowdsec-lapi-service-annotations
:ha-llm-agent
:paperless-eval
:crowdsec-bouncer-unpack-on-host
:embed-bgem3
:crowdsec-bouncer-fetch-controller
:crowdsec-edge-lapi
:alert-fix/issue-750
:embed-pvc
:immich-drop-pgvectors
:fix-stale-migration-docs
:embed-oom
:embed-eval
:paperless-reloader
:close-paperless-data-migration
:paperless-llm
:paperless-3x
:llama-gate-flow
:llama-authentik-gate
:alert-fix/issue-726
:llama-single-alias
:llama-alias-order
:llama-model-alias
:ai-eval
:remove-netbird-backup
:llama-thinking-alias
:llama-split-embed
:netbird-backup-vacuum-into
:llama-server
:intel-gpu-device-plugin
:ceph-osd-by-label
:alert-fix/issue-714
:alert-fix/issue-712
:cilium-track-untracked-settings
:proposal-cilium-single-owner
:fix-cilium-bootstrap-seed
:woodpecker-agent-probe
:add-missing-probes
:paperless-http-probes
:gatus-hardening
:gatus-drop-file-check
:gatus-config-reload
:drop-pbs2-gatus
:generic-blackbox-alert
:probe-ci-openbao
:cleanup-nas-1-remnants
:ci-image/claude-2.1.250
:woodpecker-deployment-dispatch-rest
:woodpecker-deployment-dispatch-pilot
:fix-monitor-selector-comments
:fix-wear-alert-design
:trim-comments-authentik
:trim-comments-apps
:trim-comments-helm
:trim-comments-netpol
:trim-comments-infra
:trim-comments-talos
:alert-fix/issue-675
:trim-manifest-comments
:drop-unused-barman-creds
:hetzner-creds-shared-path
:ephemeral-framing
:disk-dashboard-smart
:smartctl-privileged
:smartctl-seccomp
:smartctl-exporter
:disk-dashboard-status
:disk-dashboard
:ci-image/claude-2.1.247
:kaniko-fork-rest
:kaniko-replacement
:proposal-traffic-classes
:runbook-remote-rebuild-possible
:runbook-cold-rebuild-baremetal
:alert-fix/issue-657
:velero-stale-60h
:talos-1-13-9
:ceph-mon-disk-warn-default
:ceph-san-pool-widen
:no-ipv6-on-vlan-parents
:alert-fix/issue-649
:alert-fix/issue-645
:openbao-alerting
:openbao-ha-3-replicas
:alert-fix/issue-635
:ceph-san-cleanup
:ceph-san-nad
:whereabouts-ipam
:talos-1-12-11
:mdns-relay
:netbird-rotate-migration
:runbook-stale-sockets
:drop-monitoring-agent
:ansible-drop-dead-plays
:ansible-rotate-netbird
:ansible-drop-pve
:tofu-state-verify
:alert-fix/issue-603
:drop-decommissioned-dns
:tofu-drop-proxmox-vm
:drop-pve-monitoring
:talos-factory-installer
:cilium-reloader
:drop-talos-image-seeding
:cilium-vlan-bypass
:restore-replicapool-size
:restore-cephfs-metadata-size
:alert-fix/issue-592
:ceph-readd-neptune
:k8s-3-baremetal
:ceph-drop-neptune
:alert-fix/issue-591
:ceph-readd-saturn
:alert-fix/issue-590
:remove-vm-605
:remove-vm-151
:k8s-2-baremetal
:ceph-remove-k8s-2
:baremetal-conversion-runbook
:restore-after-jupiter
:alert-fix/issue-579
:ceph-readd-k8s-1
:k8s-1-network-fix
:alert-fix/issue-573
:k8s-1-ephemeral-on-crucial
:alert-fix/issue-571
:alert-fix/issue-569
:immich-window-scaledown
:ceph-exclude-k8s-1
:crowdsec-cpu-requests
:jupiter-baremetal-u2
:velero-restore-test-monthly
:ws90-reporting-config
:alert-fix/issue-562
:fix-ws90-merge-overclaim
:fix-ws90-debounce-rationale
:worktree-z2m-2.13.0-ws90-debounce
:kaniko-no-debug-image
:alert-fix/issue-557
:alert-fix/issue-554
:alert-fix/issue-550
:bump-stale-ci-images
:document-pool-no-redundancy-meaning
:fix-ci-pool-blocks-osd-maintenance
:rotate-cephx-daemon-keys
:fix-ceph-health-alert
:repoint-ci-workspaces
:ci-throwaway-cephfs
:rollout-archive-timeout
:archive-timeout-gf-pg
:reduce-pg-wal-fpi
:reduce-wal-segment-padding
:fix-prometheus-cardinality
:fix-barman-sidecar-visible
:feat-paperless-data-repoint
:feat-paperless-data-block
:fix-cnpg-write-tuning
:fix-emptydir-tmpfs
:fix-trmnl-renderer-tmpfs
:feat-ha-recorder-db-url
:alert-fix/issue-525
:fix-cnpg-backup-alerting
:feat-ha-recorder-postgres
:fix-ceph-mon-write-amplification
:fix-ceph-replica-size-2
:fix-ceph-deferred-write-amplification
:fix-326-noise-log-suppression
:fix-381-z2m-discovery
:decommission-rustfs-lxc
:document-hairpin-id-diff
:fix-rustfs-shim-replace
:fix-rotator-woodpecker-url
:alert-fix/issue-510
:bump-woodpecker-cli
:migrate-woodpecker-stage3
:migrate-woodpecker-stage2
:fix-eso-woodpecker-namespace
:migrate-woodpecker-namespace
:ceph-mon-data-avail-warn
:revert-image-gc-thresholds
:fix-ceph-toolbox-and-gc-thresholds
:fix-cilium-policy-map-exhaustion
:drop-stale-hetzner-dns
:fix-outpost-callback-path
:bump-ci-k8s-pins
:fix-wordpress-config-extra
:wordpress-renner-uno
:fix-authentik-double-passkey-touch
:pin-ical-proxy-image
:fix-trmnl-renderer-reloader
:fix-trmnl-render-lang
:fix-trmnl-session-expiry
:fix-trmnl-graphite-theme
:fix-trmnl-token-lifetime
:fix-trmnl-renderer-runtime
:feat-trmnl-renderer
:fix-trmnl-lb-address
:feat-trmnl-terminus
:retire-dead-monitoring
:heating-can-supervisorctl
:fix-native-teardown
:edge-capability-groups
:heating-can-image
:edge-bootstrap-selfcontained
:prometheus-pve-hostnames
:inventory-pve-hostnames
:chrony-allow-ipv6
:ntp-vrrp-linklocal-and-dad-sequencing
:ntp-service-address-health-gated
:ntp-anycast-capture-drift
:ntp-health-clock-correctness
:chrony-comment-correction
:worktree-chrony-makestep
:ci-k8s-validate
:rotator-repin
:mosquitto-rotate-health
:alert-fix/issue-454
:alert-fix/issue-452
:mosquitto-rotation-proposal
:mosquitto-openbao
:mosquitto-drop-apk
:paperless-drop-apk
:cni-plugins-image
:multus-drop-apk
:fix-jq-comment
:rename-alpine-jq
:fix-ci-yaml
:z2m-seed-drop-apk
:z2m-interview-watchdog
:alert-fix/issue-439
1
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
730a7cc24f |
feat(restore-test): hcloudtest boots production's config on Hetzner, contained, and Flux restores into it
The restore rehearsal: a throwaway three-node cluster on Hetzner Cloud that runs the production tree and restores production's backups into itself. hcloudtest (bootstrap.sh) runs SITE=hcloud on cpx52, and nothing stands in for the home network: - site-hcloud.yaml states the Hetzner site's facts, as site-homelab.yaml does at home: etcd advertised on the node segment 10.90.0.0/16; a cilium-site ConfigMap with tunnel (VXLAN) routing over the node segment and only the pod CIDRs exempt from masquerading (Hetzner networks are layer 3, IPv4-only, and drop packets with a source not assigned to the sending server); a ResolverConfig with k8s-gateway first and a k8s-gateway-site ConfigMap pointing at Hetzner's resolvers. The node range is read from the machine document only, now that the patch holds more than one (run 28). - hcloud-1..3.yaml put a 345GiB OSD partition beside a 60GiB EPHEMERAL on the system disk: the project's volume quota cannot hold three OSD volumes. No Hetzner volume is created for a raw volume on the system disk. - The Talos snapshot is built when missing (a rescue-mode server writes the Image Factory image; removed on failure), matched by version and schematic. This host's inbound firewall replaces earlier runs' without a server ever being left without one. The Hetzner token comes from OpenBao (homelab-backup-verify project). Access files land in ~/.local/state/homelab-hcloudtest instead of access-staging. - Containment: an outbound firewall on the nodes, applied before any config, admits udp and icmp anywhere and tcp to the complement of proxy.renner.uno's addresses, resolved over DoH at run time (cidr_complement, in bash; fails above Hetzner's 500 effective rules; one tcp rule per 100 prefixes, Hetzner's undocumented per-rule limit). The egress check pod (restore-test/egress-check.yaml) runs at the end of hcloudtest and again before the restore test writes any secret. FLUX_SOURCE=restore-test bootstrap.sh flux runs against that cluster only (its nodes must all be hcloud-*, and KUBECONFIG/TALOSCONFIG must not be the operator's): flux install, a per-run read-only deploy key on the GitHub mirror, the restore-test-git Secret, and restore-test/flux-root.yaml on FLUX_BRANCH. flux-root.yaml applies the production tree; its patches are the test's whole deviation: the source rewrite, no Ceph cluster network, Velero ReadOnly, no MariaDB dumps, rotators suspended, Gitea without world egress, netbird-service-sync at zero replicas and netbird-ingress on no node (the test cluster rewrote production NetBird's proxy services in run 28). CNPG archives, backs up and prunes as in production: the flux phase writes cnpg-paths with every archive path in renner-uno-k8s-cnpg-rtest, created there and emptied and deleted by hcloudclean. A test incarnation with a base backup in the production bucket would be the newest there, and the next real recovery would read the test's data. hcloudclean also deletes the test's ssh keys and the restore-test deploy keys. OpenBao's status wait is bounded at 30 minutes: on a fresh cluster the pod waits for Ceph to provision its volume. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> |