Skip to content

fix: prevent reconciler hook from skipping later plugins when an earlier one returns a continue result - #9978

Merged
leonardoce merged 4 commits into
cloudnative-pg:mainfrom
sharifmshaker:fix/reconcile-hook-plugin-continue-behavior
Feb 19, 2026
Merged

leonardoce merged 4 commits into
cloudnative-pg:mainfrom
sharifmshaker:fix/reconcile-hook-plugin-continue-behavior

Conversation

@sharifmshaker

@sharifmshaker sharifmshaker commented Feb 13, 2026 •

Copy link
Copy Markdown
Contributor

Description

Fixes a bug where only the first plugin with ReconcilerHooks capability is executed during cluster/backup reconciliation. When a plugin returns BEHAVIOR_CONTINUE,
the reconciler loop returns immediately instead of continuing to process remaining plugins.

It is not clear that there is another type of reconciler.ReconcilerHooksResult that should be returned to allow processing of subsequent plugins, unless plugins are expected to use ReconcilerHooksResult_BEHAVIOR_UNSPECIFIED, but this seems inconsistent with the documentation.

Root Cause

In internal/cnpi/plugin/client/reconciler.go, the reconcilerHook function's switch statement for BEHAVIOR_CONTINUE returns immediately:

case reconciler.ReconcilerHooksResult_BEHAVIOR_CONTINUE:
    return newContinueResult(plugin.Name()) 

This breaks what I suspect is the intended behavior based on this definition

	// BEHAVIOR_CONTINUE indicates that this reconciliation loop will
	// proceed running.
	// BEHAVIOR_CONTINUE is useful when the plugin executes changes on internal status or resources not directly managed
	// by the main reconciliation loop

where I would imagine BEHAVIOR_CONTINUE should allow the loop to proceed to the next plugin before continuing with the operator's core reconciliation.

Solution

Changed the BEHAVIOR_CONTINUE case to continue the loop instead of returning:

  case reconciler.ReconcilerHooksResult_BEHAVIOR_CONTINUE:
      // Continue to next plugin

Now all plugins that return the BEHAVIOR_CONTINUE cause the reconciler hook to iterate to the next plugin.

Testing

Deployed a cluster with two plugins:

  1. barman-cloud.cloudnative-pg.io (index 0)
  2. modified local version of https://github.com/cloudnative-pg/cnpg-i-hello-world that implemented the reconciler interface (index 1)

Before Fix

The reconciler Pre hook on the second plugin (index 1) never executed

After Fix

The reconciler Pre hook for both plugins executed

Impact

I tested this with the latest version of the operator as of the time of the creation of this ticket at 1bf4584. The logic skipping plugins seems to present ever since internal/cnpi/plugin/client/reconciler.go was introduced a couple years ago and looks to be in v1.28x and v1.27.x.

Assisted-by: Claude Opus 4.6

@sharifmshaker
sharifmshaker requested a review from a team February 13, 2026 21:00
@dosubot dosubot Bot added the size:XS This PR changes 0-9 lines, ignoring generated files. label Feb 13, 2026
@cnpg-bot cnpg-bot added backport-requested ◀️ This pull request should be backported to all supported releases release-1.25 release-1.28 labels Feb 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

❗ By default, the pull request is configured to backport to all release branches.

  • To stop backporting this pr, remove the label: backport-requested ◀️ or add the label 'do not backport'
  • To stop backporting this pr to a certain release branch, remove the specific branch label: release-x.y

@dosubot dosubot Bot added the bug 🐛 Something isn't working label Feb 13, 2026
@sharifmshaker
sharifmshaker force-pushed the fix/reconcile-hook-plugin-continue-behavior branch from 0340c6a to 60118b4 Compare February 13, 2026 21:01
@dosubot dosubot Bot added size:L This PR changes 100-499 lines, ignoring generated files. and removed size:XS This PR changes 0-9 lines, ignoring generated files. labels Feb 16, 2026
@sharifmshaker
sharifmshaker force-pushed the fix/reconcile-hook-plugin-continue-behavior branch from fd7350d to fcdcbfb Compare February 16, 2026 14:14
@armru
armru force-pushed the fix/reconcile-hook-plugin-continue-behavior branch from fcdcbfb to 21069de Compare February 16, 2026 14:27
@armru

armru commented Feb 16, 2026

Copy link
Copy Markdown
Member

/test

@github-actions

Copy link
Copy Markdown
Contributor

@dosubot dosubot Bot added the lgtm This PR has been approved by a maintainer label Feb 17, 2026
@gbartolini gbartolini moved this to Waiting for Second Review in CloudNativePG operator development Feb 18, 2026
@gbartolini gbartolini added this to the 1.29.0 milestone Feb 18, 2026
sharifmshaker and others added 4 commits February 19, 2026 14:01
…ier one returns a continue result

Signed-off-by: Sharif Shaker <[email protected]>
Signed-off-by: Armando Ruocco <[email protected]>
@leonardoce
leonardoce force-pushed the fix/reconcile-hook-plugin-continue-behavior branch from 21069de to 3b77f4e Compare February 19, 2026 13:01
@leonardoce leonardoce added no-issue ok to merge 👌 This PR can be merged labels Feb 19, 2026
@leonardoce
leonardoce merged commit abe8a01 into cloudnative-pg:main Feb 19, 2026
33 of 36 checks passed
@github-project-automation github-project-automation Bot moved this from Waiting for Second Review to Done in CloudNativePG operator development Feb 19, 2026
cnpg-bot pushed a commit that referenced this pull request Feb 19, 2026
… result (#9978)

When a plugin returned BEHAVIOR_CONTINUE, the reconcilerHook function
incorrectly returned early, causing subsequent plugins to be skipped.
This fix removes the early return, allowing the loop to properly iterate
through all registered plugins.

Assisted-by: Claude Opus 4.6
Signed-off-by: Sharif Shaker <[email protected]>
Signed-off-by: Armando Ruocco <[email protected]>
Co-authored-by: Armando Ruocco <[email protected]>
(cherry picked from commit abe8a01)
cnpg-bot pushed a commit that referenced this pull request Feb 19, 2026
… result (#9978)

When a plugin returned BEHAVIOR_CONTINUE, the reconcilerHook function
incorrectly returned early, causing subsequent plugins to be skipped.
This fix removes the early return, allowing the loop to properly iterate
through all registered plugins.

Assisted-by: Claude Opus 4.6
Signed-off-by: Sharif Shaker <[email protected]>
Signed-off-by: Armando Ruocco <[email protected]>
Co-authored-by: Armando Ruocco <[email protected]>
(cherry picked from commit abe8a01)
renovate Bot added a commit to sdwilsh/ansible-playbooks that referenced this pull request Apr 1, 2026
##### [\`v1.28.2\`](https://github.com/cloudnative-pg/cloudnative-pg/releases/tag/v1.28.2)

**Release date:** Mar 31, 2026

##### Important changes

- Updated the deprecation notice for native (in-tree) Barman Cloud support to reflect that it will now be removed in CloudNativePG 1.30.0, rather than 1.29.0. Users are still encouraged to migrate to the Barman Cloud Plugin. ([#10167](cloudnative-pg/cloudnative-pg#10167)) <!-- 1.28 1.27 -->

##### Enhancements

- Improved the `Pooler` CRD with support for granular configuration of TLS cipher suites and minimum/maximum TLS versions. This enables administrators to meet strict security compliance requirements for pooler-to-client and pooler-to-server connections. Contributed by [@alex1989hu](https://github.com/alex1989hu). ([#9571](cloudnative-pg/cloudnative-pg#9571)) <!-- 1.28 1.27 1.25 -->

- Improved the reliability of major upgrades by setting `BackoffLimit=0` on the upgrade job, preventing unnecessary retries of a failed `pg_upgrade`. The operator now automatically deletes the failed job when a user reverts the container image, allowing the cluster to restart gracefully on the original version. ([#10104](cloudnative-pg/cloudnative-pg#10104), [#10298](cloudnative-pg/cloudnative-pg#10298)) <!-- 1.28 1.27 -->

- Improved role management by verifying the instance is the primary before each reconciliation cycle, avoiding unnecessary reconciliation attempts and spurious error messages on read-only replicas. ([#9971](cloudnative-pg/cloudnative-pg#9971)) <!-- 1.28 1.27 1.25 -->

- Extended the CRD schemas for `Cluster`, `ImageCatalog`, and `ClusterImageCatalog` to accept the `extensions`, `bin_path`, and `env` fields introduced in 1.29. The operator ignores these fields on older versions, but accepting them in the schema allows users to share a single manifest across clusters running different CNPG versions. ([#10131](cloudnative-pg/cloudnative-pg#10131), [#10387](cloudnative-pg/cloudnative-pg#10387)) <!-- 1.28 1.27 -->

- The operator now honors the `primaryUpdateMethod` when adding new PVCs to a cluster, ensuring that the rollout strategy (e.g., switchover vs. restart) is respected during storage expansion or additions. ([#9720](cloudnative-pg/cloudnative-pg#9720)) <!-- 1.28 1.27 -->

- Refined the `alpha.cnpg.io/unrecoverable` annotation logic to allow it to function even on pods that have not yet reached the `Ready` state, facilitating the recovery of stuck instances. ([#9968](cloudnative-pg/cloudnative-pg#9968)) <!-- 1.28 -->

##### Security and Supply Chain

- **Security best practices integration**: integrated the OpenSSF baseline scanner and added a `SECURITY-INSIGHTS.yaml` file to the repository to align with industry-standard security reporting. ([#10054](cloudnative-pg/cloudnative-pg#10054), <!-- 1.28 1.27 1.25 --> [#10062](cloudnative-pg/cloudnative-pg#10062)) <!-- 1.28 1.27 1.25 -->

- **SLSA provenance and SBOMs**: added SLSA (Supply-chain Levels for Software Artifacts) provenance to release binaries and container images. Additionally, enabled Software Bill of Materials (SBOM) generation within the GoReleaser pipeline for improved dependency transparency. ([#10048](cloudnative-pg/cloudnative-pg#10048), <!-- 1.28 1.27 1.25 --> [#10074](cloudnative-pg/cloudnative-pg#10074)) <!-- 1.28 1.27 1.25 -->

- **Password leak prevention**: fixed a potential security risk where PostgreSQL could leak role passwords in the logs during specific reconciliation phases. ([#9950](cloudnative-pg/cloudnative-pg#9950)) <!-- 1.28 1.27 1.25 -->

##### Changes

- Updated the default PostgreSQL version to 18.3 (image `18.3-system-trixie`). ([#10090](cloudnative-pg/cloudnative-pg#10090)) <!-- 1.28 1.27 1.25 -->

##### Fixes

- Fixed a deadlock during operator upgrades affecting clusters using synchronous replication, where pods running the old and new operator versions computed different PostgreSQL configuration hashes, causing the uniformity check to block indefinitely and preventing both rolling updates and in-place upgrades from proceeding. ([#10342](cloudnative-pg/cloudnative-pg#10342)) <!-- 1.28 -->

- Fixed an issue where fencing annotations could not be processed when the WAL disk was full, because the disk space check blocked the instance manager from starting. The check is now performed later in the lifecycle loop, after fencing is evaluated. ([#10302](cloudnative-pg/cloudnative-pg#10302)) <!-- 1.28 1.27 -->

- Fixed an issue where replicas would get stuck in a `Pending` state if the `VolumeSnapshot` used for the initial bootstrap had been deleted. The operator now validates snapshot existence before use; if a snapshot is missing, it attempts to use the next available candidate or falls back to `pg_basebackup`. ([#10192](cloudnative-pg/cloudnative-pg#10192)) <!-- 1.28 1.27 1.25 -->

- Prevented the "supervised primary" rollout strategy from consuming all available rollout slots, which previously caused delays in scheduled updates. Contributed by [@ermakov-oleg](https://github.com/ermakov-oleg). ([#9977](cloudnative-pg/cloudnative-pg#9977)) <!-- 1.28 1.27 1.25 -->

- Fixed an issue where certain hot-standby parameter changes were not being correctly applied to replica clusters. ([#9952](cloudnative-pg/cloudnative-pg#9952)) <!-- 1.28 1.27 1.25 -->

- Fixed a bug in the CNPG-I reconciler hook that could lead to skipping subsequent plugins when a "continue" result was returned. Contributed by [@sharifmshaker](https://github.com/sharifmshaker). ([#9978](cloudnative-pg/cloudnative-pg#9978)) <!-- 1.28 1.27 -->

- Fixed a deadlock scenario that occurred when attempting to resize a filesystem on a PVC that was not currently attached to a Pod. Contributed by [@jmealo](https://github.com/jmealo). ([#9981](cloudnative-pg/cloudnative-pg#9981)) <!-- 1.28 1.27 -->

- Fixed webhook validation of bootstrap recovery sources to accept external clusters configured with `ConnectionParameters` (for `pg_basebackup`-based recovery). Previously, these were incorrectly rejected unless a Barman object store or CNPG-i plugin was also configured. ([#10268](cloudnative-pg/cloudnative-pg#10268)) <!-- 1.28 1.27 1.25 -->

- Volume names for extensions and tablespaces are now prefixed to avoid naming collisions with standard cluster volumes. ([#9973](cloudnative-pg/cloudnative-pg#9973)) <!-- 1.28 1.27 -->

- When hibernating a non-healthy cluster, the operator now reports a `WaitingForHealthy` condition, making the deferred hibernation state visible through `cnpg status`. ([#10193](cloudnative-pg/cloudnative-pg#10193)) <!-- 1.28 1.27 1.25 -->

- Fixed fencing to work correctly even when the target pod does not exist. Fencing operates on a cluster-level annotation and should not depend on pod existence; instance name validation is now performed only in the `cnpg fencing on` command. ([#10035](cloudnative-pg/cloudnative-pg#10035)) <!-- 1.28 1.27 1.25 -->

- Fixed the cluster and pooler service reconcilers to correctly handle changes to all spec fields when using the patch update strategy. The reconciler now uses RFC 7386 JSON Merge Patching, preventing cloud-provider-set fields (such as `loadBalancerClass`) from being inadvertently removed. ([#10190](cloudnative-pg/cloudnative-pg#10190), [#10311](cloudnative-pg/cloudnative-pg#10311)) <!-- 1.28 1.27 1.25 -->

- Fixed a race condition in the deprecated in-tree Barman Cloud backup implementation affecting parallel WAL restore, where prefetched files could be read while still being downloaded, causing PostgreSQL recovery to fail with "invalid checkpoint record" errors. ([#10285](cloudnative-pg/cloudnative-pg#10285)) <!-- 1.28 1.27 1.25 -->

- Fixed the timeline history file validation to also apply to plugin-based WAL restore. Previously, the protection introduced in [#9650](cloudnative-pg/cloudnative-pg#9650) only covered in-tree restores, allowing plugins to bypass the check and download future timeline history files, causing timeline mismatch errors on replicas. ([#9849](cloudnative-pg/cloudnative-pg#9849)) <!-- 1.28 1.27 1.25 -->

- `cnpg` plugin:

  - The cnpg plugin now correctly propagates ImagePullSecrets to the `pgbench` Job pod template. ([#10174](cloudnative-pg/cloudnative-pg#10174)) <!-- 1.28 1.27 1.25 -->
alexlebens pushed a commit to alexlebens/infrastructure that referenced this pull request Apr 1, 2026
This PR contains the following updates:

| Package | Update | Change |
|---|---|---|
| [cloudnative-pg](https://cloudnative-pg.io) ([source](https://github.com/cloudnative-pg/charts)) | minor | `0.27.1` → `0.28.0` |
| [cloudnative-pg/cloudnative-pg](https://github.com/cloudnative-pg/cloudnative-pg) | minor | `1.28.1` → `1.29.0` |

---

### Release Notes

<details>
<summary>cloudnative-pg/charts (cloudnative-pg)</summary>

### [`v0.28.0`](https://github.com/cloudnative-pg/charts/releases/tag/cloudnative-pg-v0.28.0)

[Compare Source](cloudnative-pg/charts@cloudnative-pg-v0.27.1...cloudnative-pg-v0.28.0)

CloudNativePG Operator Helm Chart

#### What's Changed

- fix(security): harden GitHub Actions workflows against expression injection by [@&#8203;mnencia](https://github.com/mnencia) in [#&#8203;823](cloudnative-pg/charts#823)
- feat(monitoring): add support for custom PodMonitor by [@&#8203;Dashing-Nelson](https://github.com/Dashing-Nelson) in [#&#8203;724](cloudnative-pg/charts#724)
- Release cloudnative-pg-v0.28.0 by [@&#8203;cnpg-bot](https://github.com/cnpg-bot) in [#&#8203;845](cloudnative-pg/charts#845)

#### New Contributors

- [@&#8203;Dashing-Nelson](https://github.com/Dashing-Nelson) made their first contribution in [#&#8203;724](cloudnative-pg/charts#724)

**Full Changelog**: <cloudnative-pg/charts@cluster-v0.6.0...cloudnative-pg-v0.28.0>

</details>

<details>
<summary>cloudnative-pg/cloudnative-pg (cloudnative-pg/cloudnative-pg)</summary>

### [`v1.29.0`](https://github.com/cloudnative-pg/cloudnative-pg/releases/tag/v1.29.0)

[Compare Source](cloudnative-pg/cloudnative-pg@v1.28.2...v1.29.0-rc1)

**Release date:** Mar 31, 2026

##### Important changes

- Updated the deprecation notice for native (in-tree) Barman Cloud support to reflect that it will now be removed in CloudNativePG 1.30.0, rather than 1.29.0. Users are still encouraged to migrate to the Barman Cloud Plugin. ([#&#8203;10167](cloudnative-pg/cloudnative-pg#10167)) <!-- 1.28 1.27 -->

##### Features

- **PostgreSQL extensions in image catalogs**: extended the `ImageCatalog` functionality to support PostgreSQL extensions. This allows users to define and manage extension-specific images within a catalog, simplifying the deployment of customized PostgreSQL builds. ([#&#8203;9781](cloudnative-pg/cloudnative-pg#9781))

- **Dynamic network access control via pod selectors**: introduced the declarative definition of `podSelectorRefs` to manage `pg_hba.conf` rules dynamically. By using label selectors to identify client pods, the operator automatically resolves their ephemeral IP addresses and updates the PostgreSQL host-based authentication rules accordingly. This ensures that only authorized workloads in the same namespace can connect to the database, eliminating the need for manual IP management or static CIDR ranges. ([#&#8203;10148](cloudnative-pg/cloudnative-pg#10148))

- **Shared `ServiceAccount` support**: added an optional `serviceAccountName` field to both `Cluster` and `Pooler` specifications. This allows multiple resources to share a pre-existing ServiceAccount, facilitating one-time IAM configurations (such as AWS IRSA, GCP Workload Identity, or Azure Workload Identity) across all clusters and poolers. Contributed by [@&#8203;bozkayasalihx](https://github.com/bozkayasalihx). ([#&#8203;9287](cloudnative-pg/cloudnative-pg#9287))

##### Enhancements

- Improved the `Pooler` CRD with support for granular configuration of TLS cipher suites and minimum/maximum TLS versions. This enables administrators to meet strict security compliance requirements for pooler-to-client and pooler-to-server connections. Contributed by [@&#8203;alex1989hu](https://github.com/alex1989hu). ([#&#8203;9571](cloudnative-pg/cloudnative-pg#9571)) <!-- 1.28 1.27 1.25 -->

- Improved the reliability of major upgrades by setting `BackoffLimit=0` on the upgrade job, preventing unnecessary retries of a failed `pg_upgrade`. The operator now automatically deletes the failed job when a user reverts the container image, allowing the cluster to restart gracefully on the original version. ([#&#8203;10104](cloudnative-pg/cloudnative-pg#10104), [#&#8203;10298](cloudnative-pg/cloudnative-pg#10298)) <!-- 1.28 1.27 -->

- Improved the operator's observability by emitting native Kubernetes events during key phases of the reconciliation loop, providing visibility into the operator's decision-making process and the lifecycle of managed resources directly through `kubectl get events`. ([#&#8203;10040](cloudnative-pg/cloudnative-pg#10040))

- Extended support for the `cnpg.io/reconciliationDisabled` annotation on Backup resources. This allows administrators to temporarily freeze the operator's reconciliation logic for specific backup objects. Contributed by [@&#8203;GabriFedi97](https://github.com/GabriFedi97). ([#&#8203;10020](cloudnative-pg/cloudnative-pg#10020))

- Added a `bin_path` field to the `postgresql.extensions` stanza, as well as in `ImageCatalog` and `ClusterImageCatalog` resources. This allows extensions to specify directory paths for external binaries, which are automatically appended to the `PATH` environment variable of the Postgres process. ([#&#8203;10250](cloudnative-pg/cloudnative-pg#10250))

- Added an `env` field to the `postgresql.extensions` stanza, as well as in `ImageCatalog` and `ClusterImageCatalog` resources. This allows cluster administrators to define custom environment variables for the Postgres process. This field supports the `${image_root}` placeholder to dynamically resolve to the extension's absolute mount path. ([#&#8203;10375](cloudnative-pg/cloudnative-pg#10375))

- Implemented a finalizer for plugins to ensure that resources managed by a plugin are gracefully cleaned up when the corresponding service is deleted. ([#&#8203;9560](cloudnative-pg/cloudnative-pg#9560))

- Improved role management by verifying the instance is the primary before each reconciliation cycle, avoiding unnecessary reconciliation attempts and spurious error messages on read-only replicas. ([#&#8203;9971](cloudnative-pg/cloudnative-pg#9971)) <!-- 1.28 1.27 1.25 -->

- The operator now honors the `primaryUpdateMethod` when adding new PVCs to a cluster, ensuring that the rollout strategy (e.g., switchover vs. restart) is respected during storage expansion or additions. ([#&#8203;9720](cloudnative-pg/cloudnative-pg#9720)) <!-- 1.28 1.27 -->

- Refined the `alpha.cnpg.io/unrecoverable` annotation logic to allow it to function even on pods that have not yet reached the `Ready` state, facilitating the recovery of stuck instances. ([#&#8203;9968](cloudnative-pg/cloudnative-pg#9968)) <!-- 1.28 -->

- Introduced a "Terminal Error" phase for backups that encounter unrecoverable issues (such as invalid credentials or non-existent cloud buckets). This ensures the operator stops retrying doomed operations, preventing resource exhaustion and providing immediate, clear feedback in the status. ([#&#8203;9353](cloudnative-pg/cloudnative-pg#9353))

- Improved monitoring of long-running backups by introducing `reconciliationStartedAt` and `reconciliationTerminatedAt` fields to the `Backup` status. This change separates the operator's internal lifecycle from the actual backup tool's execution timing (`startedAt`/`stoppedAt`), allowing users to track when the operator begins processing a request. ([#&#8203;9351](cloudnative-pg/cloudnative-pg#9351))

- Added a `Pending` phase to the `Backup` status to explicitly indicate when a backup is queued and waiting for an available worker or instance availability. ([#&#8203;9364](cloudnative-pg/cloudnative-pg#9364))

##### Security and Supply Chain

- **Security best practices integration**: integrated the OpenSSF baseline scanner and added a `SECURITY-INSIGHTS.yaml` file to the repository to align with industry-standard security reporting. ([#&#8203;10054](cloudnative-pg/cloudnative-pg#10054), <!-- 1.28 1.27 1.25 --> [#&#8203;10062](cloudnative-pg/cloudnative-pg#10062)) <!-- 1.28 1.27 1.25 -->

- **SLSA provenance and SBOMs**: added SLSA (Supply-chain Levels for Software Artifacts) provenance to release binaries and container images. Additionally, enabled Software Bill of Materials (SBOM) generation within the GoReleaser pipeline for improved dependency transparency. ([#&#8203;10048](cloudnative-pg/cloudnative-pg#10048), <!-- 1.28 1.27 1.25 --> [#&#8203;10074](cloudnative-pg/cloudnative-pg#10074)) <!-- 1.28 1.27 1.25 -->

- **Password leak prevention**: fixed a potential security risk where PostgreSQL could leak role passwords in the logs during specific reconciliation phases. ([#&#8203;9950](cloudnative-pg/cloudnative-pg#9950)) <!-- 1.28 1.27 1.25 -->

##### Changes

- Updated the default PostgreSQL version to 18.3 (image `18.3-system-trixie`). ([#&#8203;10090](cloudnative-pg/cloudnative-pg#10090)) <!-- 1.28 1.27 1.25 -->

##### Fixes

- Fixed a deadlock during operator upgrades affecting clusters using synchronous replication, where pods running the old and new operator versions computed different PostgreSQL configuration hashes, causing the uniformity check to block indefinitely and preventing both rolling updates and in-place upgrades from proceeding. ([#&#8203;10342](cloudnative-pg/cloudnative-pg#10342)) <!-- 1.28 -->

- Fixed an issue where fencing annotations could not be processed when the WAL disk was full, because the disk space check blocked the instance manager from starting. The check is now performed later in the lifecycle loop, after fencing is evaluated. ([#&#8203;10302](cloudnative-pg/cloudnative-pg#10302)) <!-- 1.28 1.27 -->

- Fixed an issue where replicas would get stuck in a `Pending` state if the `VolumeSnapshot` used for the initial bootstrap had been deleted. The operator now validates snapshot existence before use; if a snapshot is missing, it attempts to use the next available candidate or falls back to `pg_basebackup`. ([#&#8203;10192](cloudnative-pg/cloudnative-pg#10192)) <!-- 1.28 1.27 1.25 -->

- Prevented the "supervised primary" rollout strategy from consuming all available rollout slots, which previously caused delays in scheduled updates. Contributed by [@&#8203;ermakov-oleg](https://github.com/ermakov-oleg). ([#&#8203;9977](cloudnative-pg/cloudnative-pg#9977)) <!-- 1.28 1.27 1.25 -->

- Fixed an issue where certain hot-standby parameter changes were not being correctly applied to replica clusters. ([#&#8203;9952](cloudnative-pg/cloudnative-pg#9952)) <!-- 1.28 1.27 1.25 -->

- Fixed a bug in the CNPG-I reconciler hook that could lead to skipping subsequent plugins when a "continue" result was returned. Contributed by [@&#8203;sharifmshaker](https://github.com/sharifmshaker). ([#&#8203;9978](cloudnative-pg/cloudnative-pg#9978)) <!-- 1.28 1.27 -->

- Fixed a deadlock scenario that occurred when attempting to resize a filesystem on a PVC that was not currently attached to a Pod. Contributed by [@&#8203;jmealo](https://github.com/jmealo). ([#&#8203;9981](cloudnative-pg/cloudnative-pg#9981)) <!-- 1.28 1.27 -->

- Fixed webhook validation of bootstrap recovery sources to accept external clusters configured with `ConnectionParameters` (for `pg_basebackup`-based recovery). Previously, these were incorrectly rejected unless a Barman object store or CNPG-i plugin was also configured. ([#&#8203;10268](cloudnative-pg/cloudnative-pg#10268)) <!-- 1.28 1.27 1.25 -->

- Volume names for extensions and tablespaces are now prefixed to avoid naming collisions with standard cluster volumes. ([#&#8203;9973](cloudnative-pg/cloudnative-pg#9973)) <!-- 1.28 1.27 -->

- When hibernating a non-healthy cluster, the operator now reports a `WaitingForHealthy` condition, making the deferred hibernation state visible through `cnpg status`. ([#&#8203;10193](cloudnative-pg/cloudnative-pg#10193)) <!-- 1.28 1.27 1.25 -->

- Fixed fencing to work correctly even when the target pod does not exist. Fencing operates on a cluster-level annotation and should not depend on pod existence; instance name validation is now performed only in the `cnpg fencing on` command. ([#&#8203;10035](cloudnative-pg/cloudnative-pg#10035)) <!-- 1.28 1.27 1.25 -->

- Fixed the cluster and pooler service reconcilers to correctly handle changes to all spec fields when using the patch update strategy. The reconciler now uses RFC 7386 JSON Merge Patching, preventing cloud-provider-set fields (such as `loadBalancerClass`) from being inadvertently removed. ([#&#8203;10190](cloudnative-pg/cloudnative-pg#10190), [#&#8203;10311](cloudnative-pg/cloudnative-pg#10311)) <!-- 1.28 1.27 1.25 -->

- Fixed a race condition in the deprecated in-tree Barman Cloud backup implementation affecting parallel WAL restore, where prefetched files could be read while still being downloaded, causing PostgreSQL recovery to fail with "invalid checkpoint record" errors. ([#&#8203;10285](cloudnative-pg/cloudnative-pg#10285)) <!-- 1.28 1.27 1.25 -->

- Fixed the timeline history file validation to also apply to plugin-based WAL restore. Previously, the protection introduced in [#&#8203;9650](cloudnative-pg/cloudnative-pg#9650) only covered in-tree restores, allowing plugins to bypass the check and download future timeline history files, causing timeline mismatch errors on replicas. ([#&#8203;9849](cloudnative-pg/cloudnative-pg#9849)) <!-- 1.28 1.27 1.25 -->

- `cnpg` plugin:

  - The cnpg plugin now correctly propagates ImagePullSecrets to the `pgbench` Job pod template. ([#&#8203;10174](cloudnative-pg/cloudnative-pg#10174)) <!-- 1.28 1.27 1.25 -->

##### Supported versions

- Kubernetes 1.35, 1.34, and 1.33
- PostgreSQL 18, 17, 16, 15, and 14
  - PostgreSQL 18.3 is the default image
  - [PostgreSQL 14 support ends on November 12, 2026](https://www.postgresql.org/support/versioning/)

### [`v1.28.2`](https://github.com/cloudnative-pg/cloudnative-pg/releases/tag/v1.28.2)

[Compare Source](cloudnative-pg/cloudnative-pg@v1.28.1...v1.28.2)

**Release date:** Mar 31, 2026

##### Important changes

- Updated the deprecation notice for native (in-tree) Barman Cloud support to reflect that it will now be removed in CloudNativePG 1.30.0, rather than 1.29.0. Users are still encouraged to migrate to the Barman Cloud Plugin. ([#&#8203;10167](cloudnative-pg/cloudnative-pg#10167)) <!-- 1.28 1.27 -->

##### Enhancements

- Improved the `Pooler` CRD with support for granular configuration of TLS cipher suites and minimum/maximum TLS versions. This enables administrators to meet strict security compliance requirements for pooler-to-client and pooler-to-server connections. Contributed by [@&#8203;alex1989hu](https://github.com/alex1989hu). ([#&#8203;9571](cloudnative-pg/cloudnative-pg#9571)) <!-- 1.28 1.27 1.25 -->

- Improved the reliability of major upgrades by setting `BackoffLimit=0` on the upgrade job, preventing unnecessary retries of a failed `pg_upgrade`. The operator now automatically deletes the failed job when a user reverts the container image, allowing the cluster to restart gracefully on the original version. ([#&#8203;10104](cloudnative-pg/cloudnative-pg#10104), [#&#8203;10298](cloudnative-pg/cloudnative-pg#10298)) <!-- 1.28 1.27 -->

- Improved role management by verifying the instance is the primary before each reconciliation cycle, avoiding unnecessary reconciliation attempts and spurious error messages on read-only replicas. ([#&#8203;9971](cloudnative-pg/cloudnative-pg#9971)) <!-- 1.28 1.27 1.25 -->

- Extended the CRD schemas for `Cluster`, `ImageCatalog`, and `ClusterImageCatalog` to accept the `extensions`, `bin_path`, and `env` fields introduced in 1.29. The operator ignores these fields on older versions, but accepting them in the schema allows users to share a single manifest across clusters running different CNPG versions. ([#&#8203;10131](cloudnative-pg/cloudnative-pg#10131), [#&#8203;10387](cloudnative-pg/cloudnative-pg#10387)) <!-- 1.28 1.27 -->

- The operator now honors the `primaryUpdateMethod` when adding new PVCs to a cluster, ensuring that the rollout strategy (e.g., switchover vs. restart) is respected during storage expansion or additions. ([#&#8203;9720](cloudnative-pg/cloudnative-pg#9720)) <!-- 1.28 1.27 -->

- Refined the `alpha.cnpg.io/unrecoverable` annotation logic to allow it to function even on pods that have not yet reached the `Ready` state, facilitating the recovery of stuck instances. ([#&#8203;9968](cloudnative-pg/cloudnative-pg#9968)) <!-- 1.28 -->

##### Security and Supply Chain

- **Security best practices integration**: integrated the OpenSSF baseline scanner and added a `SECURITY-INSIGHTS.yaml` file to the repository to align with industry-standard security reporting. ([#&#8203;10054](cloudnative-pg/cloudnative-pg#10054), <!-- 1.28 1.27 1.25 --> [#&#8203;10062](cloudnative-pg/cloudnative-pg#10062)) <!-- 1.28 1.27 1.25 -->

- **SLSA provenance and SBOMs**: added SLSA (Supply-chain Levels for Software Artifacts) provenance to release binaries and container images. Additionally, enabled Software Bill of Materials (SBOM) generation within the GoReleaser pipeline for improved dependency transparency. ([#&#8203;10048](cloudnative-pg/cloudnative-pg#10048), <!-- 1.28 1.27 1.25 --> [#&#8203;10074](cloudnative-pg/cloudnative-pg#10074)) <!-- 1.28 1.27 1.25 -->

- **Password leak prevention**: fixed a potential security risk where PostgreSQL could leak role passwords in the logs during specific reconciliation phases. ([#&#8203;9950](cloudnative-pg/cloudnative-pg#9950)) <!-- 1.28 1.27 1.25 -->

##### Changes

- Updated the default PostgreSQL version to 18.3 (image `18.3-system-trixie`). ([#&#8203;10090](cloudnative-pg/cloudnative-pg#10090)) <!-- 1.28 1.27 1.25 -->

##### Fixes

- Fixed a deadlock during operator upgrades affecting clusters using synchronous replication, where pods running the old and new operator versions computed different PostgreSQL configuration hashes, causing the uniformity check to block indefinitely and preventing both rolling updates and in-place upgrades from proceeding. ([#&#8203;10342](cloudnative-pg/cloudnative-pg#10342)) <!-- 1.28 -->

- Fixed an issue where fencing annotations could not be processed when the WAL disk was full, because the disk space check blocked the instance manager from starting. The check is now performed later in the lifecycle loop, after fencing is evaluated. ([#&#8203;10302](cloudnative-pg/cloudnative-pg#10302)) <!-- 1.28 1.27 -->

- Fixed an issue where replicas would get stuck in a `Pending` state if the `VolumeSnapshot` used for the initial bootstrap had been deleted. The operator now validates snapshot existence before use; if a snapshot is missing, it attempts to use the next available candidate or falls back to `pg_basebackup`. ([#&#8203;10192](cloudnative-pg/cloudnative-pg#10192)) <!-- 1.28 1.27 1.25 -->

- Prevented the "supervised primary" rollout strategy from consuming all available rollout slots, which previously caused delays in scheduled updates. Contributed by [@&#8203;ermakov-oleg](https://github.com/ermakov-oleg). ([#&#8203;9977](cloudnative-pg/cloudnative-pg#9977)) <!-- 1.28 1.27 1.25 -->

- Fixed an issue where certain hot-standby parameter changes were not being correctly applied to replica clusters. ([#&#8203;9952](cloudnative-pg/cloudnative-pg#9952)) <!-- 1.28 1.27 1.25 -->

- Fixed a bug in the CNPG-I reconciler hook that could lead to skipping subsequent plugins when a "continue" result was returned. Contributed by [@&#8203;sharifmshaker](https://github.com/sharifmshaker). ([#&#8203;9978](cloudnative-pg/cloudnative-pg#9978)) <!-- 1.28 1.27 -->

- Fixed a deadlock scenario that occurred when attempting to resize a filesystem on a PVC that was not currently attached to a Pod. Contributed by [@&#8203;jmealo](https://github.com/jmealo). ([#&#8203;9981](cloudnative-pg/cloudnative-pg#9981)) <!-- 1.28 1.27 -->

- Fixed webhook validation of bootstrap recovery sources to accept external clusters configured with `ConnectionParameters` (for `pg_basebackup`-based recovery). Previously, these were incorrectly rejected unless a Barman object store or CNPG-i plugin was also configured. ([#&#8203;10268](cloudnative-pg/cloudnative-pg#10268)) <!-- 1.28 1.27 1.25 -->

- Volume names for extensions and tablespaces are now prefixed to avoid naming collisions with standard cluster volumes. ([#&#8203;9973](cloudnative-pg/cloudnative-pg#9973)) <!-- 1.28 1.27 -->

- When hibernating a non-healthy cluster, the operator now reports a `WaitingForHealthy` condition, making the deferred hibernation state visible through `cnpg status`. ([#&#8203;10193](cloudnative-pg/cloudnative-pg#10193)) <!-- 1.28 1.27 1.25 -->

- Fixed fencing to work correctly even when the target pod does not exist. Fencing operates on a cluster-level annotation and should not depend on pod existence; instance name validation is now performed only in the `cnpg fencing on` command. ([#&#8203;10035](cloudnative-pg/cloudnative-pg#10035)) <!-- 1.28 1.27 1.25 -->

- Fixed the cluster and pooler service reconcilers to correctly handle changes to all spec fields when using the patch update strategy. The reconciler now uses RFC 7386 JSON Merge Patching, preventing cloud-provider-set fields (such as `loadBalancerClass`) from being inadvertently removed. ([#&#8203;10190](cloudnative-pg/cloudnative-pg#10190), [#&#8203;10311](cloudnative-pg/cloudnative-pg#10311)) <!-- 1.28 1.27 1.25 -->

- Fixed a race condition in the deprecated in-tree Barman Cloud backup implementation affecting parallel WAL restore, where prefetched files could be read while still being downloaded, causing PostgreSQL recovery to fail with "invalid checkpoint record" errors. ([#&#8203;10285](cloudnative-pg/cloudnative-pg#10285)) <!-- 1.28 1.27 1.25 -->

- Fixed the timeline history file validation to also apply to plugin-based WAL restore. Previously, the protection introduced in [#&#8203;9650](cloudnative-pg/cloudnative-pg#9650) only covered in-tree restores, allowing plugins to bypass the check and download future timeline history files, causing timeline mismatch errors on replicas. ([#&#8203;9849](cloudnative-pg/cloudnative-pg#9849)) <!-- 1.28 1.27 1.25 -->

- `cnpg` plugin:

  - The cnpg plugin now correctly propagates ImagePullSecrets to the `pgbench` Job pod template. ([#&#8203;10174](cloudnative-pg/cloudnative-pg#10174)) <!-- 1.28 1.27 1.25 -->

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box

---

This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDIuNCIsInVwZGF0ZWRJblZlciI6IjQzLjEwMi42IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJoZWxtIl19-->

Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/5367
Co-authored-by: Renovate Bot <[email protected]>
Co-committed-by: Renovate Bot <[email protected]>
sdwilsh pushed a commit to sdwilsh/ansible-playbooks that referenced this pull request Apr 8, 2026
##### [\`v1.28.2\`](https://github.com/cloudnative-pg/cloudnative-pg/releases/tag/v1.28.2)

**Release date:** Mar 31, 2026

##### Important changes

- Updated the deprecation notice for native (in-tree) Barman Cloud support to reflect that it will now be removed in CloudNativePG 1.30.0, rather than 1.29.0. Users are still encouraged to migrate to the Barman Cloud Plugin. ([#10167](cloudnative-pg/cloudnative-pg#10167)) <!-- 1.28 1.27 -->

##### Enhancements

- Improved the `Pooler` CRD with support for granular configuration of TLS cipher suites and minimum/maximum TLS versions. This enables administrators to meet strict security compliance requirements for pooler-to-client and pooler-to-server connections. Contributed by [@alex1989hu](https://github.com/alex1989hu). ([#9571](cloudnative-pg/cloudnative-pg#9571)) <!-- 1.28 1.27 1.25 -->

- Improved the reliability of major upgrades by setting `BackoffLimit=0` on the upgrade job, preventing unnecessary retries of a failed `pg_upgrade`. The operator now automatically deletes the failed job when a user reverts the container image, allowing the cluster to restart gracefully on the original version. ([#10104](cloudnative-pg/cloudnative-pg#10104), [#10298](cloudnative-pg/cloudnative-pg#10298)) <!-- 1.28 1.27 -->

- Improved role management by verifying the instance is the primary before each reconciliation cycle, avoiding unnecessary reconciliation attempts and spurious error messages on read-only replicas. ([#9971](cloudnative-pg/cloudnative-pg#9971)) <!-- 1.28 1.27 1.25 -->

- Extended the CRD schemas for `Cluster`, `ImageCatalog`, and `ClusterImageCatalog` to accept the `extensions`, `bin_path`, and `env` fields introduced in 1.29. The operator ignores these fields on older versions, but accepting them in the schema allows users to share a single manifest across clusters running different CNPG versions. ([#10131](cloudnative-pg/cloudnative-pg#10131), [#10387](cloudnative-pg/cloudnative-pg#10387)) <!-- 1.28 1.27 -->

- The operator now honors the `primaryUpdateMethod` when adding new PVCs to a cluster, ensuring that the rollout strategy (e.g., switchover vs. restart) is respected during storage expansion or additions. ([#9720](cloudnative-pg/cloudnative-pg#9720)) <!-- 1.28 1.27 -->

- Refined the `alpha.cnpg.io/unrecoverable` annotation logic to allow it to function even on pods that have not yet reached the `Ready` state, facilitating the recovery of stuck instances. ([#9968](cloudnative-pg/cloudnative-pg#9968)) <!-- 1.28 -->

##### Security and Supply Chain

- **Security best practices integration**: integrated the OpenSSF baseline scanner and added a `SECURITY-INSIGHTS.yaml` file to the repository to align with industry-standard security reporting. ([#10054](cloudnative-pg/cloudnative-pg#10054), <!-- 1.28 1.27 1.25 --> [#10062](cloudnative-pg/cloudnative-pg#10062)) <!-- 1.28 1.27 1.25 -->

- **SLSA provenance and SBOMs**: added SLSA (Supply-chain Levels for Software Artifacts) provenance to release binaries and container images. Additionally, enabled Software Bill of Materials (SBOM) generation within the GoReleaser pipeline for improved dependency transparency. ([#10048](cloudnative-pg/cloudnative-pg#10048), <!-- 1.28 1.27 1.25 --> [#10074](cloudnative-pg/cloudnative-pg#10074)) <!-- 1.28 1.27 1.25 -->

- **Password leak prevention**: fixed a potential security risk where PostgreSQL could leak role passwords in the logs during specific reconciliation phases. ([#9950](cloudnative-pg/cloudnative-pg#9950)) <!-- 1.28 1.27 1.25 -->

##### Changes

- Updated the default PostgreSQL version to 18.3 (image `18.3-system-trixie`). ([#10090](cloudnative-pg/cloudnative-pg#10090)) <!-- 1.28 1.27 1.25 -->

##### Fixes

- Fixed a deadlock during operator upgrades affecting clusters using synchronous replication, where pods running the old and new operator versions computed different PostgreSQL configuration hashes, causing the uniformity check to block indefinitely and preventing both rolling updates and in-place upgrades from proceeding. ([#10342](cloudnative-pg/cloudnative-pg#10342)) <!-- 1.28 -->

- Fixed an issue where fencing annotations could not be processed when the WAL disk was full, because the disk space check blocked the instance manager from starting. The check is now performed later in the lifecycle loop, after fencing is evaluated. ([#10302](cloudnative-pg/cloudnative-pg#10302)) <!-- 1.28 1.27 -->

- Fixed an issue where replicas would get stuck in a `Pending` state if the `VolumeSnapshot` used for the initial bootstrap had been deleted. The operator now validates snapshot existence before use; if a snapshot is missing, it attempts to use the next available candidate or falls back to `pg_basebackup`. ([#10192](cloudnative-pg/cloudnative-pg#10192)) <!-- 1.28 1.27 1.25 -->

- Prevented the "supervised primary" rollout strategy from consuming all available rollout slots, which previously caused delays in scheduled updates. Contributed by [@ermakov-oleg](https://github.com/ermakov-oleg). ([#9977](cloudnative-pg/cloudnative-pg#9977)) <!-- 1.28 1.27 1.25 -->

- Fixed an issue where certain hot-standby parameter changes were not being correctly applied to replica clusters. ([#9952](cloudnative-pg/cloudnative-pg#9952)) <!-- 1.28 1.27 1.25 -->

- Fixed a bug in the CNPG-I reconciler hook that could lead to skipping subsequent plugins when a "continue" result was returned. Contributed by [@sharifmshaker](https://github.com/sharifmshaker). ([#9978](cloudnative-pg/cloudnative-pg#9978)) <!-- 1.28 1.27 -->

- Fixed a deadlock scenario that occurred when attempting to resize a filesystem on a PVC that was not currently attached to a Pod. Contributed by [@jmealo](https://github.com/jmealo). ([#9981](cloudnative-pg/cloudnative-pg#9981)) <!-- 1.28 1.27 -->

- Fixed webhook validation of bootstrap recovery sources to accept external clusters configured with `ConnectionParameters` (for `pg_basebackup`-based recovery). Previously, these were incorrectly rejected unless a Barman object store or CNPG-i plugin was also configured. ([#10268](cloudnative-pg/cloudnative-pg#10268)) <!-- 1.28 1.27 1.25 -->

- Volume names for extensions and tablespaces are now prefixed to avoid naming collisions with standard cluster volumes. ([#9973](cloudnative-pg/cloudnative-pg#9973)) <!-- 1.28 1.27 -->

- When hibernating a non-healthy cluster, the operator now reports a `WaitingForHealthy` condition, making the deferred hibernation state visible through `cnpg status`. ([#10193](cloudnative-pg/cloudnative-pg#10193)) <!-- 1.28 1.27 1.25 -->

- Fixed fencing to work correctly even when the target pod does not exist. Fencing operates on a cluster-level annotation and should not depend on pod existence; instance name validation is now performed only in the `cnpg fencing on` command. ([#10035](cloudnative-pg/cloudnative-pg#10035)) <!-- 1.28 1.27 1.25 -->

- Fixed the cluster and pooler service reconcilers to correctly handle changes to all spec fields when using the patch update strategy. The reconciler now uses RFC 7386 JSON Merge Patching, preventing cloud-provider-set fields (such as `loadBalancerClass`) from being inadvertently removed. ([#10190](cloudnative-pg/cloudnative-pg#10190), [#10311](cloudnative-pg/cloudnative-pg#10311)) <!-- 1.28 1.27 1.25 -->

- Fixed a race condition in the deprecated in-tree Barman Cloud backup implementation affecting parallel WAL restore, where prefetched files could be read while still being downloaded, causing PostgreSQL recovery to fail with "invalid checkpoint record" errors. ([#10285](cloudnative-pg/cloudnative-pg#10285)) <!-- 1.28 1.27 1.25 -->

- Fixed the timeline history file validation to also apply to plugin-based WAL restore. Previously, the protection introduced in [#9650](cloudnative-pg/cloudnative-pg#9650) only covered in-tree restores, allowing plugins to bypass the check and download future timeline history files, causing timeline mismatch errors on replicas. ([#9849](cloudnative-pg/cloudnative-pg#9849)) <!-- 1.28 1.27 1.25 -->

- `cnpg` plugin:

  - The cnpg plugin now correctly propagates ImagePullSecrets to the `pgbench` Job pod template. ([#10174](cloudnative-pg/cloudnative-pg#10174)) <!-- 1.28 1.27 1.25 -->
renovate Bot added a commit to sdwilsh/ansible-playbooks that referenced this pull request Apr 11, 2026
##### [\`v1.29.0\`](https://github.com/cloudnative-pg/cloudnative-pg/releases/tag/v1.29.0)

**Release date:** Mar 31, 2026

##### Important changes

- Updated the deprecation notice for native (in-tree) Barman Cloud support to reflect that it will now be removed in CloudNativePG 1.30.0, rather than 1.29.0. Users are still encouraged to migrate to the Barman Cloud Plugin. ([#10167](cloudnative-pg/cloudnative-pg#10167)) <!-- 1.28 1.27 -->

##### Features

- **PostgreSQL extensions in image catalogs**: extended the `ImageCatalog` functionality to support PostgreSQL extensions. This allows users to define and manage extension-specific images within a catalog, simplifying the deployment of customized PostgreSQL builds. ([#9781](cloudnative-pg/cloudnative-pg#9781))

- **Dynamic network access control via pod selectors**: introduced the declarative definition of `podSelectorRefs` to manage `pg_hba.conf` rules dynamically. By using label selectors to identify client pods, the operator automatically resolves their ephemeral IP addresses and updates the PostgreSQL host-based authentication rules accordingly. This ensures that only authorized workloads in the same namespace can connect to the database, eliminating the need for manual IP management or static CIDR ranges. ([#10148](cloudnative-pg/cloudnative-pg#10148))

- **Shared `ServiceAccount` support**: added an optional `serviceAccountName` field to both `Cluster` and `Pooler` specifications. This allows multiple resources to share a pre-existing ServiceAccount, facilitating one-time IAM configurations (such as AWS IRSA, GCP Workload Identity, or Azure Workload Identity) across all clusters and poolers. Contributed by [@bozkayasalihx](https://github.com/bozkayasalihx). ([#9287](cloudnative-pg/cloudnative-pg#9287))

##### Enhancements

- Improved the `Pooler` CRD with support for granular configuration of TLS cipher suites and minimum/maximum TLS versions. This enables administrators to meet strict security compliance requirements for pooler-to-client and pooler-to-server connections. Contributed by [@alex1989hu](https://github.com/alex1989hu). ([#9571](cloudnative-pg/cloudnative-pg#9571)) <!-- 1.28 1.27 1.25 -->

- Improved the reliability of major upgrades by setting `BackoffLimit=0` on the upgrade job, preventing unnecessary retries of a failed `pg_upgrade`. The operator now automatically deletes the failed job when a user reverts the container image, allowing the cluster to restart gracefully on the original version. ([#10104](cloudnative-pg/cloudnative-pg#10104), [#10298](cloudnative-pg/cloudnative-pg#10298)) <!-- 1.28 1.27 -->

- Improved the operator's observability by emitting native Kubernetes events during key phases of the reconciliation loop, providing visibility into the operator's decision-making process and the lifecycle of managed resources directly through `kubectl get events`. ([#10040](cloudnative-pg/cloudnative-pg#10040))

- Extended support for the `cnpg.io/reconciliationDisabled` annotation on Backup resources. This allows administrators to temporarily freeze the operator's reconciliation logic for specific backup objects. Contributed by [@GabriFedi97](https://github.com/GabriFedi97). ([#10020](cloudnative-pg/cloudnative-pg#10020))

- Added a `bin_path` field to the `postgresql.extensions` stanza, as well as in `ImageCatalog` and `ClusterImageCatalog` resources. This allows extensions to specify directory paths for external binaries, which are automatically appended to the `PATH` environment variable of the Postgres process. ([#10250](cloudnative-pg/cloudnative-pg#10250))

- Added an `env` field to the `postgresql.extensions` stanza, as well as in `ImageCatalog` and `ClusterImageCatalog` resources. This allows cluster administrators to define custom environment variables for the Postgres process. This field supports the `${image_root}` placeholder to dynamically resolve to the extension's absolute mount path. ([#10375](cloudnative-pg/cloudnative-pg#10375))

- Implemented a finalizer for plugins to ensure that resources managed by a plugin are gracefully cleaned up when the corresponding service is deleted. ([#9560](cloudnative-pg/cloudnative-pg#9560))

- Improved role management by verifying the instance is the primary before each reconciliation cycle, avoiding unnecessary reconciliation attempts and spurious error messages on read-only replicas. ([#9971](cloudnative-pg/cloudnative-pg#9971)) <!-- 1.28 1.27 1.25 -->

- The operator now honors the `primaryUpdateMethod` when adding new PVCs to a cluster, ensuring that the rollout strategy (e.g., switchover vs. restart) is respected during storage expansion or additions. ([#9720](cloudnative-pg/cloudnative-pg#9720)) <!-- 1.28 1.27 -->

- Refined the `alpha.cnpg.io/unrecoverable` annotation logic to allow it to function even on pods that have not yet reached the `Ready` state, facilitating the recovery of stuck instances. ([#9968](cloudnative-pg/cloudnative-pg#9968)) <!-- 1.28 -->

- Introduced a "Terminal Error" phase for backups that encounter unrecoverable issues (such as invalid credentials or non-existent cloud buckets). This ensures the operator stops retrying doomed operations, preventing resource exhaustion and providing immediate, clear feedback in the status. ([#9353](cloudnative-pg/cloudnative-pg#9353))

- Improved monitoring of long-running backups by introducing `reconciliationStartedAt` and `reconciliationTerminatedAt` fields to the `Backup` status. This change separates the operator's internal lifecycle from the actual backup tool's execution timing (`startedAt`/`stoppedAt`), allowing users to track when the operator begins processing a request. ([#9351](cloudnative-pg/cloudnative-pg#9351))

- Added a `Pending` phase to the `Backup` status to explicitly indicate when a backup is queued and waiting for an available worker or instance availability. ([#9364](cloudnative-pg/cloudnative-pg#9364))

##### Security and Supply Chain

- **Security best practices integration**: integrated the OpenSSF baseline scanner and added a `SECURITY-INSIGHTS.yaml` file to the repository to align with industry-standard security reporting. ([#10054](cloudnative-pg/cloudnative-pg#10054), <!-- 1.28 1.27 1.25 --> [#10062](cloudnative-pg/cloudnative-pg#10062)) <!-- 1.28 1.27 1.25 -->

- **SLSA provenance and SBOMs**: added SLSA (Supply-chain Levels for Software Artifacts) provenance to release binaries and container images. Additionally, enabled Software Bill of Materials (SBOM) generation within the GoReleaser pipeline for improved dependency transparency. ([#10048](cloudnative-pg/cloudnative-pg#10048), <!-- 1.28 1.27 1.25 --> [#10074](cloudnative-pg/cloudnative-pg#10074)) <!-- 1.28 1.27 1.25 -->

- **Password leak prevention**: fixed a potential security risk where PostgreSQL could leak role passwords in the logs during specific reconciliation phases. ([#9950](cloudnative-pg/cloudnative-pg#9950)) <!-- 1.28 1.27 1.25 -->

##### Changes

- Updated the default PostgreSQL version to 18.3 (image `18.3-system-trixie`). ([#10090](cloudnative-pg/cloudnative-pg#10090)) <!-- 1.28 1.27 1.25 -->

##### Fixes

- Fixed a deadlock during operator upgrades affecting clusters using synchronous replication, where pods running the old and new operator versions computed different PostgreSQL configuration hashes, causing the uniformity check to block indefinitely and preventing both rolling updates and in-place upgrades from proceeding. ([#10342](cloudnative-pg/cloudnative-pg#10342)) <!-- 1.28 -->

- Fixed an issue where fencing annotations could not be processed when the WAL disk was full, because the disk space check blocked the instance manager from starting. The check is now performed later in the lifecycle loop, after fencing is evaluated. ([#10302](cloudnative-pg/cloudnative-pg#10302)) <!-- 1.28 1.27 -->

- Fixed an issue where replicas would get stuck in a `Pending` state if the `VolumeSnapshot` used for the initial bootstrap had been deleted. The operator now validates snapshot existence before use; if a snapshot is missing, it attempts to use the next available candidate or falls back to `pg_basebackup`. ([#10192](cloudnative-pg/cloudnative-pg#10192)) <!-- 1.28 1.27 1.25 -->

- Prevented the "supervised primary" rollout strategy from consuming all available rollout slots, which previously caused delays in scheduled updates. Contributed by [@ermakov-oleg](https://github.com/ermakov-oleg). ([#9977](cloudnative-pg/cloudnative-pg#9977)) <!-- 1.28 1.27 1.25 -->

- Fixed an issue where certain hot-standby parameter changes were not being correctly applied to replica clusters. ([#9952](cloudnative-pg/cloudnative-pg#9952)) <!-- 1.28 1.27 1.25 -->

- Fixed a bug in the CNPG-I reconciler hook that could lead to skipping subsequent plugins when a "continue" result was returned. Contributed by [@sharifmshaker](https://github.com/sharifmshaker). ([#9978](cloudnative-pg/cloudnative-pg#9978)) <!-- 1.28 1.27 -->

- Fixed a deadlock scenario that occurred when attempting to resize a filesystem on a PVC that was not currently attached to a Pod. Contributed by [@jmealo](https://github.com/jmealo). ([#9981](cloudnative-pg/cloudnative-pg#9981)) <!-- 1.28 1.27 -->

- Fixed webhook validation of bootstrap recovery sources to accept external clusters configured with `ConnectionParameters` (for `pg_basebackup`-based recovery). Previously, these were incorrectly rejected unless a Barman object store or CNPG-i plugin was also configured. ([#10268](cloudnative-pg/cloudnative-pg#10268)) <!-- 1.28 1.27 1.25 -->

- Volume names for extensions and tablespaces are now prefixed to avoid naming collisions with standard cluster volumes. ([#9973](cloudnative-pg/cloudnative-pg#9973)) <!-- 1.28 1.27 -->

- When hibernating a non-healthy cluster, the operator now reports a `WaitingForHealthy` condition, making the deferred hibernation state visible through `cnpg status`. ([#10193](cloudnative-pg/cloudnative-pg#10193)) <!-- 1.28 1.27 1.25 -->

- Fixed fencing to work correctly even when the target pod does not exist. Fencing operates on a cluster-level annotation and should not depend on pod existence; instance name validation is now performed only in the `cnpg fencing on` command. ([#10035](cloudnative-pg/cloudnative-pg#10035)) <!-- 1.28 1.27 1.25 -->

- Fixed the cluster and pooler service reconcilers to correctly handle changes to all spec fields when using the patch update strategy. The reconciler now uses RFC 7386 JSON Merge Patching, preventing cloud-provider-set fields (such as `loadBalancerClass`) from being inadvertently removed. ([#10190](cloudnative-pg/cloudnative-pg#10190), [#10311](cloudnative-pg/cloudnative-pg#10311)) <!-- 1.28 1.27 1.25 -->

- Fixed a race condition in the deprecated in-tree Barman Cloud backup implementation affecting parallel WAL restore, where prefetched files could be read while still being downloaded, causing PostgreSQL recovery to fail with "invalid checkpoint record" errors. ([#10285](cloudnative-pg/cloudnative-pg#10285)) <!-- 1.28 1.27 1.25 -->

- Fixed the timeline history file validation to also apply to plugin-based WAL restore. Previously, the protection introduced in [#9650](cloudnative-pg/cloudnative-pg#9650) only covered in-tree restores, allowing plugins to bypass the check and download future timeline history files, causing timeline mismatch errors on replicas. ([#9849](cloudnative-pg/cloudnative-pg#9849)) <!-- 1.28 1.27 1.25 -->

- `cnpg` plugin:

  - The cnpg plugin now correctly propagates ImagePullSecrets to the `pgbench` Job pod template. ([#10174](cloudnative-pg/cloudnative-pg#10174)) <!-- 1.28 1.27 1.25 -->

##### Supported versions

- Kubernetes 1.35, 1.34, and 1.33
- PostgreSQL 18, 17, 16, 15, and 14
  - PostgreSQL 18.3 is the default image
  - [PostgreSQL 14 support ends on November 12, 2026](https://www.postgresql.org/support/versioning/)
sdwilsh pushed a commit to sdwilsh/ansible-playbooks that referenced this pull request Apr 11, 2026
##### [\`v1.29.0\`](https://github.com/cloudnative-pg/cloudnative-pg/releases/tag/v1.29.0)

**Release date:** Mar 31, 2026

##### Important changes

- Updated the deprecation notice for native (in-tree) Barman Cloud support to reflect that it will now be removed in CloudNativePG 1.30.0, rather than 1.29.0. Users are still encouraged to migrate to the Barman Cloud Plugin. ([#10167](cloudnative-pg/cloudnative-pg#10167)) <!-- 1.28 1.27 -->

##### Features

- **PostgreSQL extensions in image catalogs**: extended the `ImageCatalog` functionality to support PostgreSQL extensions. This allows users to define and manage extension-specific images within a catalog, simplifying the deployment of customized PostgreSQL builds. ([#9781](cloudnative-pg/cloudnative-pg#9781))

- **Dynamic network access control via pod selectors**: introduced the declarative definition of `podSelectorRefs` to manage `pg_hba.conf` rules dynamically. By using label selectors to identify client pods, the operator automatically resolves their ephemeral IP addresses and updates the PostgreSQL host-based authentication rules accordingly. This ensures that only authorized workloads in the same namespace can connect to the database, eliminating the need for manual IP management or static CIDR ranges. ([#10148](cloudnative-pg/cloudnative-pg#10148))

- **Shared `ServiceAccount` support**: added an optional `serviceAccountName` field to both `Cluster` and `Pooler` specifications. This allows multiple resources to share a pre-existing ServiceAccount, facilitating one-time IAM configurations (such as AWS IRSA, GCP Workload Identity, or Azure Workload Identity) across all clusters and poolers. Contributed by [@bozkayasalihx](https://github.com/bozkayasalihx). ([#9287](cloudnative-pg/cloudnative-pg#9287))

##### Enhancements

- Improved the `Pooler` CRD with support for granular configuration of TLS cipher suites and minimum/maximum TLS versions. This enables administrators to meet strict security compliance requirements for pooler-to-client and pooler-to-server connections. Contributed by [@alex1989hu](https://github.com/alex1989hu). ([#9571](cloudnative-pg/cloudnative-pg#9571)) <!-- 1.28 1.27 1.25 -->

- Improved the reliability of major upgrades by setting `BackoffLimit=0` on the upgrade job, preventing unnecessary retries of a failed `pg_upgrade`. The operator now automatically deletes the failed job when a user reverts the container image, allowing the cluster to restart gracefully on the original version. ([#10104](cloudnative-pg/cloudnative-pg#10104), [#10298](cloudnative-pg/cloudnative-pg#10298)) <!-- 1.28 1.27 -->

- Improved the operator's observability by emitting native Kubernetes events during key phases of the reconciliation loop, providing visibility into the operator's decision-making process and the lifecycle of managed resources directly through `kubectl get events`. ([#10040](cloudnative-pg/cloudnative-pg#10040))

- Extended support for the `cnpg.io/reconciliationDisabled` annotation on Backup resources. This allows administrators to temporarily freeze the operator's reconciliation logic for specific backup objects. Contributed by [@GabriFedi97](https://github.com/GabriFedi97). ([#10020](cloudnative-pg/cloudnative-pg#10020))

- Added a `bin_path` field to the `postgresql.extensions` stanza, as well as in `ImageCatalog` and `ClusterImageCatalog` resources. This allows extensions to specify directory paths for external binaries, which are automatically appended to the `PATH` environment variable of the Postgres process. ([#10250](cloudnative-pg/cloudnative-pg#10250))

- Added an `env` field to the `postgresql.extensions` stanza, as well as in `ImageCatalog` and `ClusterImageCatalog` resources. This allows cluster administrators to define custom environment variables for the Postgres process. This field supports the `${image_root}` placeholder to dynamically resolve to the extension's absolute mount path. ([#10375](cloudnative-pg/cloudnative-pg#10375))

- Implemented a finalizer for plugins to ensure that resources managed by a plugin are gracefully cleaned up when the corresponding service is deleted. ([#9560](cloudnative-pg/cloudnative-pg#9560))

- Improved role management by verifying the instance is the primary before each reconciliation cycle, avoiding unnecessary reconciliation attempts and spurious error messages on read-only replicas. ([#9971](cloudnative-pg/cloudnative-pg#9971)) <!-- 1.28 1.27 1.25 -->

- The operator now honors the `primaryUpdateMethod` when adding new PVCs to a cluster, ensuring that the rollout strategy (e.g., switchover vs. restart) is respected during storage expansion or additions. ([#9720](cloudnative-pg/cloudnative-pg#9720)) <!-- 1.28 1.27 -->

- Refined the `alpha.cnpg.io/unrecoverable` annotation logic to allow it to function even on pods that have not yet reached the `Ready` state, facilitating the recovery of stuck instances. ([#9968](cloudnative-pg/cloudnative-pg#9968)) <!-- 1.28 -->

- Introduced a "Terminal Error" phase for backups that encounter unrecoverable issues (such as invalid credentials or non-existent cloud buckets). This ensures the operator stops retrying doomed operations, preventing resource exhaustion and providing immediate, clear feedback in the status. ([#9353](cloudnative-pg/cloudnative-pg#9353))

- Improved monitoring of long-running backups by introducing `reconciliationStartedAt` and `reconciliationTerminatedAt` fields to the `Backup` status. This change separates the operator's internal lifecycle from the actual backup tool's execution timing (`startedAt`/`stoppedAt`), allowing users to track when the operator begins processing a request. ([#9351](cloudnative-pg/cloudnative-pg#9351))

- Added a `Pending` phase to the `Backup` status to explicitly indicate when a backup is queued and waiting for an available worker or instance availability. ([#9364](cloudnative-pg/cloudnative-pg#9364))

##### Security and Supply Chain

- **Security best practices integration**: integrated the OpenSSF baseline scanner and added a `SECURITY-INSIGHTS.yaml` file to the repository to align with industry-standard security reporting. ([#10054](cloudnative-pg/cloudnative-pg#10054), <!-- 1.28 1.27 1.25 --> [#10062](cloudnative-pg/cloudnative-pg#10062)) <!-- 1.28 1.27 1.25 -->

- **SLSA provenance and SBOMs**: added SLSA (Supply-chain Levels for Software Artifacts) provenance to release binaries and container images. Additionally, enabled Software Bill of Materials (SBOM) generation within the GoReleaser pipeline for improved dependency transparency. ([#10048](cloudnative-pg/cloudnative-pg#10048), <!-- 1.28 1.27 1.25 --> [#10074](cloudnative-pg/cloudnative-pg#10074)) <!-- 1.28 1.27 1.25 -->

- **Password leak prevention**: fixed a potential security risk where PostgreSQL could leak role passwords in the logs during specific reconciliation phases. ([#9950](cloudnative-pg/cloudnative-pg#9950)) <!-- 1.28 1.27 1.25 -->

##### Changes

- Updated the default PostgreSQL version to 18.3 (image `18.3-system-trixie`). ([#10090](cloudnative-pg/cloudnative-pg#10090)) <!-- 1.28 1.27 1.25 -->

##### Fixes

- Fixed a deadlock during operator upgrades affecting clusters using synchronous replication, where pods running the old and new operator versions computed different PostgreSQL configuration hashes, causing the uniformity check to block indefinitely and preventing both rolling updates and in-place upgrades from proceeding. ([#10342](cloudnative-pg/cloudnative-pg#10342)) <!-- 1.28 -->

- Fixed an issue where fencing annotations could not be processed when the WAL disk was full, because the disk space check blocked the instance manager from starting. The check is now performed later in the lifecycle loop, after fencing is evaluated. ([#10302](cloudnative-pg/cloudnative-pg#10302)) <!-- 1.28 1.27 -->

- Fixed an issue where replicas would get stuck in a `Pending` state if the `VolumeSnapshot` used for the initial bootstrap had been deleted. The operator now validates snapshot existence before use; if a snapshot is missing, it attempts to use the next available candidate or falls back to `pg_basebackup`. ([#10192](cloudnative-pg/cloudnative-pg#10192)) <!-- 1.28 1.27 1.25 -->

- Prevented the "supervised primary" rollout strategy from consuming all available rollout slots, which previously caused delays in scheduled updates. Contributed by [@ermakov-oleg](https://github.com/ermakov-oleg). ([#9977](cloudnative-pg/cloudnative-pg#9977)) <!-- 1.28 1.27 1.25 -->

- Fixed an issue where certain hot-standby parameter changes were not being correctly applied to replica clusters. ([#9952](cloudnative-pg/cloudnative-pg#9952)) <!-- 1.28 1.27 1.25 -->

- Fixed a bug in the CNPG-I reconciler hook that could lead to skipping subsequent plugins when a "continue" result was returned. Contributed by [@sharifmshaker](https://github.com/sharifmshaker). ([#9978](cloudnative-pg/cloudnative-pg#9978)) <!-- 1.28 1.27 -->

- Fixed a deadlock scenario that occurred when attempting to resize a filesystem on a PVC that was not currently attached to a Pod. Contributed by [@jmealo](https://github.com/jmealo). ([#9981](cloudnative-pg/cloudnative-pg#9981)) <!-- 1.28 1.27 -->

- Fixed webhook validation of bootstrap recovery sources to accept external clusters configured with `ConnectionParameters` (for `pg_basebackup`-based recovery). Previously, these were incorrectly rejected unless a Barman object store or CNPG-i plugin was also configured. ([#10268](cloudnative-pg/cloudnative-pg#10268)) <!-- 1.28 1.27 1.25 -->

- Volume names for extensions and tablespaces are now prefixed to avoid naming collisions with standard cluster volumes. ([#9973](cloudnative-pg/cloudnative-pg#9973)) <!-- 1.28 1.27 -->

- When hibernating a non-healthy cluster, the operator now reports a `WaitingForHealthy` condition, making the deferred hibernation state visible through `cnpg status`. ([#10193](cloudnative-pg/cloudnative-pg#10193)) <!-- 1.28 1.27 1.25 -->

- Fixed fencing to work correctly even when the target pod does not exist. Fencing operates on a cluster-level annotation and should not depend on pod existence; instance name validation is now performed only in the `cnpg fencing on` command. ([#10035](cloudnative-pg/cloudnative-pg#10035)) <!-- 1.28 1.27 1.25 -->

- Fixed the cluster and pooler service reconcilers to correctly handle changes to all spec fields when using the patch update strategy. The reconciler now uses RFC 7386 JSON Merge Patching, preventing cloud-provider-set fields (such as `loadBalancerClass`) from being inadvertently removed. ([#10190](cloudnative-pg/cloudnative-pg#10190), [#10311](cloudnative-pg/cloudnative-pg#10311)) <!-- 1.28 1.27 1.25 -->

- Fixed a race condition in the deprecated in-tree Barman Cloud backup implementation affecting parallel WAL restore, where prefetched files could be read while still being downloaded, causing PostgreSQL recovery to fail with "invalid checkpoint record" errors. ([#10285](cloudnative-pg/cloudnative-pg#10285)) <!-- 1.28 1.27 1.25 -->

- Fixed the timeline history file validation to also apply to plugin-based WAL restore. Previously, the protection introduced in [#9650](cloudnative-pg/cloudnative-pg#9650) only covered in-tree restores, allowing plugins to bypass the check and download future timeline history files, causing timeline mismatch errors on replicas. ([#9849](cloudnative-pg/cloudnative-pg#9849)) <!-- 1.28 1.27 1.25 -->

- `cnpg` plugin:

  - The cnpg plugin now correctly propagates ImagePullSecrets to the `pgbench` Job pod template. ([#10174](cloudnative-pg/cloudnative-pg#10174)) <!-- 1.28 1.27 1.25 -->

##### Supported versions

- Kubernetes 1.35, 1.34, and 1.33
- PostgreSQL 18, 17, 16, 15, and 14
  - PostgreSQL 18.3 is the default image
  - [PostgreSQL 14 support ends on November 12, 2026](https://www.postgresql.org/support/versioning/)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

backport-requested ◀️ This pull request should be backported to all supported releases bug 🐛 Something isn't working lgtm This PR has been approved by a maintainer no-issue ok to merge 👌 This PR can be merged release-1.28 size:L This PR changes 100-499 lines, ignoring generated files.

Development

Successfully merging this pull request may close these issues.

5 participants