Skip to content

Implement messaging bus configuration with annotation-based migration#1797

Open
lmiccini wants to merge 1 commit intoopenstack-k8s-operators:mainfrom
lmiccini:rmq_migration_annotation
Open

Implement messaging bus configuration with annotation-based migration#1797
lmiccini wants to merge 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

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 4, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by: lmiccini
Once this PR has been reviewed and has the lgtm label, please assign stuggi for approval. For more information see the Code Review Process.

The full list of commands accepted by this bot can be found 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

@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

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 06f0c47 to 321b602 Compare February 5, 2026 18:11
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Feb 5, 2026

@lmiccini: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/precommit-check 321b602 link true /test precommit-check
ci/prow/openstack-operator-build-deploy-kuttl-4-18 321b602 link true /test openstack-operator-build-deploy-kuttl-4-18

Full PR test history. Your PR dashboard.

Details

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. I understand the commands that are listed here.

@openshift-merge-robot
Copy link
Contributor

PR needs rebase.

Details

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.

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.

2 participants