Skip to content

Implement messaging bus configuration with annotation-based migration#1797

Merged
openshift-merge-bot[bot] merged 1 commit intoopenstack-k8s-operators:mainfrom
lmiccini:rmq_migration_annotation
Feb 7, 2026
Merged

Implement messaging bus configuration with annotation-based migration#1797
openshift-merge-bot[bot] merged 1 commit intoopenstack-k8s-operators:mainfrom
lmiccini:rmq_migration_annotation

Conversation

@lmiccini
Copy link
Contributor

@lmiccini lmiccini commented Feb 4, 2026

This commit introduces a new messaging bus configuration system that
supports:

  • Top-level messagingBus and notificationsBus configuration fields that
    services can inherit from
  • Per-service messagingBus and notificationsBus overrides
  • Validation to prevent setting the User field at the top level (which
    would cause conflicts as each service creates its own RabbitMQUser)
  • Automatic migration from deprecated fields to new fields via webhook

The migration strategy uses an annotation-based approach where the
controller detects deprecated field usage and sets a reconcile trigger
annotation, which causes the UPDATE webhook to perform the migration.
This ensures the webhook (which has the proper mutating webhook
configuration) handles all spec mutations, avoiding field ownership
issues with server-side apply and GitOps workflows.

Deprecated fields that are migrated:

  • Top-level: notificationsBusInstance -> notificationsBus.cluster
  • Service-level: rabbitMqClusterName -> messagingBus.cluster or
    notificationsBus.cluster depending on the service
  • Service-level: notificationsBusInstance -> notificationsBus.cluster
    (for Cinder, Manila, Neutron, Nova, Watcher)

Services inherit from top-level configuration if their service-level
fields are not set, following the priority:

  1. Service-level deprecated field (if set)
  2. Service-level new field (if set)
  3. Top-level configuration (if set)
  4. Default value

Additional fixes:
Fix pin-bundle-images.sh to handle operators with replace directives
by forcing quay.io for replaced operators and adding fallback logic
when bundles are not available in custom registries

Co-Authored-By: Claude Sonnet 4.5 noreply@anthropic.com

Depends-on: openstack-k8s-operators/data-plane-adoption#1222

@lmiccini
Copy link
Contributor Author

lmiccini commented Feb 4, 2026

INFO[2026-02-04T16:10:24Z] ci-operator version v20260202-c919d87bd      
INFO[2026-02-04T16:10:24Z] Loading configuration from https://config.ci.openshift.org/ for openstack-k8s-operators/openstack-operator@main 
INFO[2026-02-04T16:10:24Z] Resolved source https://github.com/openstack-k8s-operators/openstack-operator to main@dd4c3709, merging: #1797 fd50bda4 @lmiccini 
WARN[2026-02-04T16:10:24Z] skipped directory "..2026_02_04_16_10_14.2646141082" when creating secret from directory "/secrets/ci-pull-credentials" 
INFO[2026-02-04T16:10:24Z] Using namespace https://console-openshift-console.apps.build09.ci.devcluster.openshift.com/k8s/cluster/projects/ci-op-xi0kqi2k 
INFO[2026-02-04T16:10:24Z] Setting arch for openstack-operator-ci-build-deploy  arch=amd64 reasons=openstack-operator-ci-build-deploy-kuttl
INFO[2026-02-04T16:10:24Z] Setting arch for src                          arch=amd64 reasons=openstack-operator-ci-build-deploy, openstack-operator-ci-build-deploy-kuttl
INFO[2026-02-04T16:10:24Z] Setting arch for openstack-operator-ci-build-deploy  arch=amd64 reasons=openstack-operator-ci-build-deploy-kuttl
INFO[2026-02-04T16:10:24Z] Setting arch for openstack-operator-ci-build-deploy  arch=amd64 reasons=openstack-operator-ci-build-deploy-kuttl
INFO[2026-02-04T16:10:24Z] Running [input:root], [input:cli], [input:opm-builder], src, openstack-operator-ci-build-deploy, openstack-operator-ci-build-deploy-kuttl, openstack-operator-build-deploy-kuttl 
INFO[2026-02-04T16:10:24Z] Tagging ci/opm-builder:latest into pipeline:opm-builder. 
INFO[2026-02-04T16:10:24Z] Tagging openstack-k8s-operators/tools:ci-build-root-golang-1.24-sdk-1.41.1 into pipeline:root. 
INFO[2026-02-04T16:10:24Z] Tagging ocp/4.16:cli into pipeline:cli.      
INFO[2026-02-04T16:10:25Z] Building src                                 
INFO[2026-02-04T16:10:25Z] Found existing build "src-amd64"             
INFO[2026-02-04T16:12:22Z] Build src-amd64 succeeded after 1m58s        
INFO[2026-02-04T16:12:22Z] Retrieving digests of member images          
INFO[2026-02-04T16:12:29Z] Image ci-op-xi0kqi2k/pipeline:src created     digest=sha256:4959c635b4048441d82efc96002d09c52fca5ddada78e865ee8573668f02e482 for-build=src
INFO[2026-02-04T16:12:29Z] Building openstack-operator-ci-build-deploy  
INFO[2026-02-04T16:12:29Z] Found existing build "openstack-operator-ci-build-deploy-amd64" 
INFO[2026-02-04T16:14:57Z] Build openstack-operator-ci-build-deploy-amd64 succeeded after 2m34s 
INFO[2026-02-04T16:14:57Z] Retrieving digests of member images          
INFO[2026-02-04T16:14:58Z] Image ci-op-xi0kqi2k/pipeline:openstack-operator-ci-build-deploy created  digest=sha256:f58833b2d19fb5913b77dae494f8b40060c21125524753acf7e3f0d843f7a46f for-build=openstack-operator-ci-build-deploy
INFO[2026-02-04T16:14:58Z] Building openstack-operator-ci-build-deploy-kuttl 
INFO[2026-02-04T16:14:58Z] Created build "openstack-operator-ci-build-deploy-kuttl-amd64" 
INFO[2026-02-04T16:22:02Z] Build openstack-operator-ci-build-deploy-kuttl-amd64 succeeded after 7m4s 
INFO[2026-02-04T16:22:02Z] Retrieving digests of member images          
INFO[2026-02-04T16:22:03Z] Image ci-op-xi0kqi2k/pipeline:openstack-operator-ci-build-deploy-kuttl created  digest=sha256:20750e64c9e61805b11eb1b85f1cc7fe124ab6a65ecf7867d64d1facbc9feeac for-build=openstack-operator-ci-build-deploy-kuttl
INFO[2026-02-04T16:22:03Z] Claiming cluster from pool openstack-k8s-operators-cluster-pool/oko-op-07 owned by openstack-k8s-operators 
INFO[2026-02-04T16:22:03Z] Waiting for cluster claim openstack-k8s-operators-cluster-pool/6d055855-4eb7-4dda-bd76-ff7e30b133dd to be fulfilled. 
INFO[2026-02-04T16:22:04Z] The claimed cluster oko-op-07-n9rcf is ready after 0s. 
INFO[2026-02-04T16:22:04Z] Running multi-stage test openstack-operator-build-deploy-kuttl 
INFO[2026-02-04T16:22:05Z] Running multi-stage phase pre                
INFO[2026-02-04T16:22:05Z] Step phase pre succeeded after 0s.           
INFO[2026-02-04T16:22:05Z] Running multi-stage phase test               
INFO[2026-02-04T16:22:05Z] Running step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-build. 
INFO[2026-02-04T16:35:17Z] Step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-build succeeded after 13m12s. 
INFO[2026-02-04T16:35:17Z] Running step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-fips-check. 
INFO[2026-02-04T16:37:02Z] Step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-fips-check succeeded after 1m45s. 
INFO[2026-02-04T16:37:02Z] Running step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-kuttl. 
INFO[2026-02-04T18:38:44Z] Step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-kuttl succeeded after 2h1m42s. 
INFO[2026-02-04T18:38:44Z] Running step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-deploy. 
INFO[2026-02-04T18:51:09Z] Step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-deploy succeeded after 12m24s. 
INFO[2026-02-04T18:51:09Z] Step phase test succeeded after 2h29m3s.     
INFO[2026-02-04T18:51:09Z] Running multi-stage phase post               
INFO[2026-02-04T18:51:09Z] Running step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-gather. 
INFO[2026-02-04T19:06:39Z] Step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-gather succeeded after 15m30s. 
INFO[2026-02-04T19:06:39Z] Running step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-node-hold. 
INFO[2026-02-04T19:06:50Z] Step openstack-operator-build-deploy-kuttl-openstack-k8s-operators-node-hold succeeded after 10s. 
INFO[2026-02-04T19:06:50Z] Step phase post succeeded after 15m40s.      
INFO[2026-02-04T19:06:50Z] Releasing cluster claims for test openstack-operator-build-deploy-kuttl 
INFO[2026-02-04T19:06:50Z] Ran for 2h56m25s                             
INFO[2026-02-04T19:06:50Z] Reporting job state 'succeeded'

we hit the race between the two kuttl jobs, but one succeeded.

@lmiccini lmiccini force-pushed the rmq_migration_annotation branch from fd50bda to 95a70b4 Compare February 4, 2026 20:04
@lmiccini lmiccini changed the title Rmq migration annotation Implement messaging bus configuration with annotation-based migration Feb 4, 2026
@lmiccini lmiccini force-pushed the rmq_migration_annotation branch from 95a70b4 to 8077505 Compare February 5, 2026 06:16
@lmiccini lmiccini requested review from fmount and stuggi and removed request for fultonj February 5, 2026 06:16
@lmiccini lmiccini force-pushed the rmq_migration_annotation branch from 8077505 to 39b6592 Compare February 5, 2026 06:55
@lmiccini lmiccini force-pushed the rmq_migration_annotation branch 2 times, most recently from 07ccc4b to 7687a0f Compare February 5, 2026 14:30
@softwarefactory-project-zuul
Copy link

Build failed (check pipeline). Post recheck (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/45ebc4b16c8743b6836c1f6d7718a0b7

openstack-k8s-operators-content-provider FAILURE in 12m 53s
⚠️ podified-multinode-edpm-deployment-crc SKIPPED Skipped due to failed job openstack-k8s-operators-content-provider
⚠️ cifmw-crc-podified-edpm-baremetal SKIPPED Skipped due to failed job openstack-k8s-operators-content-provider
⚠️ adoption-standalone-to-crc-ceph-provider SKIPPED Skipped due to failed job openstack-k8s-operators-content-provider
⚠️ openstack-operator-tempest-multinode SKIPPED Skipped due to failed job openstack-k8s-operators-content-provider

@lmiccini
Copy link
Contributor Author

lmiccini commented Feb 5, 2026

/test functional

@lmiccini
Copy link
Contributor Author

lmiccini commented Feb 5, 2026

/retest

@lmiccini
Copy link
Contributor Author

lmiccini commented Feb 6, 2026

/test functional

This commit introduces a new messaging bus configuration system that
supports:

- Top-level messagingBus and notificationsBus configuration fields that
  services can inherit from
- Per-service messagingBus and notificationsBus overrides
- Validation to prevent setting the User field at the top level (which
  would cause conflicts as each service creates its own RabbitMQUser)
- Automatic migration from deprecated fields to new fields via webhook

The migration strategy uses an annotation-based approach where the
controller detects deprecated field usage and sets a reconcile trigger
annotation, which causes the UPDATE webhook to perform the migration.
This ensures the webhook (which has the proper mutating webhook
configuration) handles all spec mutations, avoiding field ownership
issues with server-side apply and GitOps workflows.

Deprecated fields that are migrated:
- Top-level: notificationsBusInstance -> notificationsBus.cluster
- Service-level: rabbitMqClusterName -> messagingBus.cluster or
  notificationsBus.cluster depending on the service
- Service-level: notificationsBusInstance -> notificationsBus.cluster
  (for Cinder, Manila, Neutron, Nova, Watcher)

Services inherit from top-level configuration if their service-level
fields are not set, following the priority:
1. Service-level deprecated field (if set)
2. Service-level new field (if set)
3. Top-level configuration (if set)
4. Default value

Additional fixes:
Fix pin-bundle-images.sh to handle operators with replace directives
by forcing quay.io for replaced operators and adding fallback logic
when bundles are not available in custom registries

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
@lmiccini lmiccini force-pushed the rmq_migration_annotation branch from 4054618 to 507cdb8 Compare February 7, 2026 11:19
Copy link
Contributor

@fmount fmount left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/lgtm

@stuggi
Copy link
Contributor

stuggi commented Feb 7, 2026

/override ci/prow/precommit-check

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 7, 2026

@stuggi: Overrode contexts on behalf of stuggi: ci/prow/precommit-check

Details

In response to this:

/override ci/prow/precommit-check

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository.

@stuggi stuggi added the approved label Feb 7, 2026
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 7, 2026

[APPROVALNOTIFIER] This PR is APPROVED

Approval requirements bypassed by manually added approval.

This pull-request has been approved by: fmount, lmiccini

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-merge-bot openshift-merge-bot bot merged commit ba936f5 into openstack-k8s-operators:main Feb 7, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants