Repository navigation
Description
Left for 1.7.1 after the v1.7.0 cut. Every item was checked again at v1.7.0-rc.3, main has the same code for all of them.
-
Gateway release reads a TenantGateway with a reconcile error as Current
From the review of IvanHunters on fix(tenant): stop the gateway release waiting on TenantGateway listeners and certificates #5086.
markFailedininternal/controller/tenantgateway/reconciler.gowritesobservedGenerationtogether withReady=False/ReconcileError, socurrent: "true"inpackages/apps/tenant/templates/gateway.yamlpasses a TenantGateway the controller cannot reconcile and the tenant release goes on.ReconcileErroralso carries transient API errors, so instead of afailedexpression on that reason the controller should mark terminal config errors (failed spec validation,GatewayClassUnsupported) withStalled=Trueand the expression should read it. What the gateway release waits for gets written down in the same change. -
Generation gate of the gateway release does not hold on a fresh install
Same review, CodeRabbit flagged it too. When TenantGateway has no
status.observedGenerationFlux skips the generation check, so on a fresh install the release can be Ready before the controller wrote any status. Install behaviour is the same as before fix(tenant): stop the gateway release waiting on TenantGateway listeners and certificates #5086 because kstatus also reads a CR without status as Current, but the comment ingateway.yamlsays otherwise. Fix the comment, or make the expression wait for the first status write. -
E2E for the gateway release with a pending certificate
Same review. helm-unittest pins only the rendered spec and the controller side has
TestReconcile_StatusObservedGeneration, nothing checks that the tenantgatewayHelmRelease gets Ready while its TenantGateway isListenersNotReady. I checked it by hand on rc.3, it needs a chainsaw step. -
Migration 61: copy
healthCheckExprsandwaitStrategyonto existing releases before the chart artifacts changefix(controller): carry healthCheckExprs and waitStrategy to existing releases #5087 does the copy from cozystack-controller, which comes up only after Cilium, Kube-OVN and the ApplicationDefinition CRD, while tenant releases upgrade as soon as their chart artifact changes. On a test cluster the vm-disk chart changed 12m38s before the copy, so a disk with a running import failed two 10-minute attempts and held a helm-controller slot for 20m33s (pre-upgrade item 15 of the v1.7.0 notes). Migration 61 writes the same fields by the same rules (skip releases labelled
helm.toolkit.fluxcd.io/name,pollerwhen there are expressions) from the pre-upgrade hook, which runs before the upgrade re-pointscozystack-packages, and changing only these fields starts no Helm action on a healthy release. The migrations image has no charts, so it needs its own copy of the expressions (vm-disk DataVolume and postgres ScaledObject, bothcurrent: "true") with a bats check againstcozyrds, like migration 60 has for the FoundationDB tags. Only variants withmigrations.enabledrun it. It helps clusters going from 1.6.x straight to 1.7.1 and any later change of the expressions, on 1.7.0 it is a no-op. Slot 61 is free on main and release-1.7 (last migration is 60,targetVersion: 61on both), sotargetVersionbecomes 62. feat(kafka)!: run on Strimzi 1.2.0 and Kafka 4.x #4900, feat(postgres)!: mint tenant passwords through the credentials API #4922 and feat(kubernetes): give each tenant Kubernetes cluster its own etcd #4817 still add a migration 60 and will want 61 after rebase, so this one has to land on main first or main and release-1.7 number it differently. -
FoundationDB: raise the pins to 7.3.79 and 7.4.8
packages/apps/foundationdb/files/versions.yamlmapsv7.3to 7.3.63 andv7.4to 7.4.1, and migration 60 moves a cluster to the pinned patch of its line, downwards included. With higher pins the operator moves clusters on 7.3.63 and 7.4.1 up on the 1.7.1 upgrade, and a 1.6.x cluster at or below the new patch no longer steps down.FOUNDATIONDB_TAGSin migration 60 has to change with it,hack/migration-60-foundationdb-version.batschecks that. Both tags exist upstream, andfoundationdb/foundationdb,foundationdb/foundationdb-kubernetes-sidecar(-1tags) andfoundationdb/fdb-kubernetes-monitorhave them on Docker Hub for linux/amd64 and linux/arm64. The vendored operator v2.30.0 supports FDB 7.1.0 and later and treats patches of one line as protocol compatible, so its 7.3.63 and 7.4.1 client libraries can stay (upstream v2.38.0 ships the same ones). Not settled yet: GitHub marks 7.3.79 as pre-release (newest 7.3 without the mark is 7.3.77) and marks every 7.4 release too, 7.4.1 included, upstream operator e2e runs 7.3.69 and 7.4.5, and I haven't run 7.3.79 or 7.4.8 under this operator. -
vm-instance: platform upgrade unplugs a volume that migration 59 copied into the VM spec
vm-instance: a change to the disk list unplugs hotplug volumes the chart does not render #4769. Seen on v1.6.5 to v1.7.0-rc.2: migration 59 copied a VMI-only hotplug volume into
VM.spec, the vm-instance release upgrade in the same platform upgrade applied the chart's volume list over it (server-side apply, the list is atomic in the CRD) and KubeVirt unplugged the disk from the running VM.packages/apps/vm-instance/templates/vm.yamland migration 59 did not change since rc.2. The v1.7.0 notes give a manual step (pre-upgrade item 5), not tried on a live VM yet. Fix as proposed in the issue: render back the hotpluggable volumes of the live VM that.Values.disksdoes not list. -
OpenSearch: instances created before 1.7 keep a securityconfig Job that never reaches the cluster
On a cluster whose
networking.clusterDomainis notcluster.local(defaultcozy.localincluded) the<release>-securityconfig-updateJob made before 1.7 still targets.svc.cluster.local, sosecurityadminnever runs against the cluster. Nothing in rc.3 replaces the Job, and the operator recreates it only when the securityconfig checksum changes. On a test cluster I deleted such a Job, created on v1.6.5 and already endedFailed(BackoffLimitExceeded). The operator created a new one 3 seconds later with the host.svc.cozy.local, its curl probe passed andsecurityadminconnected with the admin certificate, then it waited for YELLOW cluster state and kept timing out for 15 minutes. That instance also had a second fault (bootstrap and node pods held different cluster UUIDs), so it is not confirmed that initialization finishes after the delete. Tracked separately in opensearch: securityconfig Job of an instance created before v1.7 keeps the cluster.local host after upgrade and is never recreated #5164. Fix: a migration or pre-upgrade hook that deletes such a Job. -
OpenSearch: WorkloadsReady counts the bootstrap pod, so an instance that never initialized reads as operational
The WorkloadMonitor in
packages/apps/opensearch/templates/opensearch.yaml:170-182selects every pod labelledopster.io/opensearch-cluster: <release>withminReplicas: 1, andinternal/controller/workloadmonitor_controller.go:908,:924and:1044mark it operational once that many selected pods are Ready. The bootstrap pod carries the same label and was Ready while security was not initialized, so on the instance above the monitor saw 2 pods with 1 available (bootstrap Ready, the only node podnodes-0at 0/1), and the application showedWorkloadsReady=True"All workloads are operational" (pkg/registry/apps/application/rest.go:1652-1654) for the whole check.Readycopies the HelmRelease (rest.go:1580-1591) and workload health does not override it by design (rest.go:1658-1666), soWorkloadsReadyis the only place this can show. Node pool pods also carryopster.io/opensearch-nodepool: nodesand the bootstrap pod does not, so adding that label to the selector would leave the bootstrap pod out. Same class as WorkloadsReady reports all workloads operational for a vm-disk whose PVC never binds #4139 for vm-disk. -
Kafka: node pools created by the migration hook have no Flux labels
The KafkaNodePools in
packages/apps/kafka/templates/migration-hook.yamlare created by a hook Job with nohelm.toolkit.fluxcd.io/namelabel and no owner reference, so lineage walk from broker and controller pods stops at the pool and those pods get noapps.cozystack.io/application.*labels. Pools are created only there, so every Kafka cluster on 1.7 has it. Unchanged at rc.3, and on a test cluster after the rc.3 upgrade broker and controller pods have no application labels while the entity operator pod has them. I did not check what this breaks in WorkloadMonitor or policies. fix(apps): keep Job and CronJob names within the Kubernetes limits #4945 changes the same file.
Activity