Skip to content

Add skupper for BKL and keystone to SKMO job#3836

Open
vakwetu wants to merge 2 commits intoopenstack-k8s-operators:mainfrom
vakwetu:skmo-skupper-keystone
Open

Add skupper for BKL and keystone to SKMO job#3836
vakwetu wants to merge 2 commits intoopenstack-k8s-operators:mainfrom
vakwetu:skmo-skupper-keystone

Conversation

@vakwetu
Copy link
Copy Markdown
Contributor

@vakwetu vakwetu commented Apr 7, 2026

[skmo] Add Skupper for cross-region RabbitMQ and Keystone internal routing

Add hook playbooks and configuration to establish Skupper virtual
services for RabbitMQ and Keystone internal endpoints, enabling
cross-region connectivity in the multi-namespace SKMO scenario.

skupper-connector.yaml: query the RabbitMQ TLS secret from the correct
CRD - rabbitmq.openstack.org/v1beta1 (RabbitMq) as used by the
OpenStack infra-operator, not the community rabbitmq.com/v1beta1
(RabbitmqCluster). Add retries to wait for spec.tls.secretName to
be populated before creating the Skupper Connector.

skupper-keystone-connector.yaml: add retries to the KeystoneAPI CR
lookup to wait for spec.tls.api.internal.secretName to be available,
since that field is not populated until Keystone completes TLS setup.

configure-leaf-keystone-internal.yaml: after patching the leaf OSCP
to use the Skupper Keystone virtual service, also create a MetalLB
LoadBalancer Service (keystone-regionone-lb) and a DNSData CR
(keystone-skupper) so that EDPM compute nodes outside the OCP cluster
can resolve and connect to the Keystone auth_url. The Skupper Listener
creates a ClusterIP-only Service that is unreachable from EDPM nodes;
the LoadBalancer Service obtains a MetalLB IP on the leaf internalapi
network and the DNSData entry registers both the short (.svc) and
fully-qualified (.svc.cluster.local) names in the dnsmasq instance
serving those nodes.

@openshift-ci
Copy link
Copy Markdown
Contributor

openshift-ci bot commented Apr 7, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign fultonj 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

@softwarefactory-project-zuul
Copy link
Copy Markdown

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/451747df4e864222b9ec4411ae75617d

✔️ openstack-k8s-operators-content-provider SUCCESS in 1h 42m 53s
✔️ podified-multinode-edpm-deployment-crc SUCCESS in 1h 24m 33s
✔️ cifmw-crc-podified-edpm-baremetal SUCCESS in 1h 28m 47s
cifmw-crc-podified-edpm-baremetal-minor-update RETRY_LIMIT in 32m 49s
✔️ noop SUCCESS in 0s
✔️ cifmw-pod-ansible-test SUCCESS in 9m 10s
✔️ cifmw-pod-pre-commit SUCCESS in 8m 56s

@vakwetu vakwetu force-pushed the skmo-skupper-keystone branch 4 times, most recently from 3502950 to c88378c Compare April 15, 2026 00:24
@vakwetu vakwetu requested review from abays, evallesp and fultonj April 15, 2026 18:49
Copy link
Copy Markdown
Contributor

@evallesp evallesp left a comment

Choose a reason for hiding this comment

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

In general LGTM

until:
- _rabbitmq_cluster.resources | length > 0
- _rabbitmq_cluster.resources[0].spec.tls is defined
- _rabbitmq_cluster.resources[0].spec.tls.secretName is defined
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

(blocking) suggestion: I think we should add: _rabbitmq_cluster.resources[0].spec.tls.secretName | length > 0. So now we're checking it's actually populated.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in latest commit

cifmw_skupper_upstream_install_url: "https://skupper.io/v2/install.yaml"
cifmw_skupper_downstream_install_file: ""
tasks:
- name: Check if Skupper CRD is already present
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

praise: I like this: can we add this in others playbook? like in listener and connector?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in latest commit.

transport_url = rabbit://{{ _username }}:{{ _password }}@{{ cifmw_skupper_listener_host }}:{{ cifmw_skupper_rabbitmq_port }}/?ssl=1
[keystone_notifications]
pool_name = barbican-listener-regionTwo
pool_name = barbican-listener-regiontwo
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

(non-blocking) concern: Is this camelCase removal required?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

the name doesn't matter as long as its unique. This parameter isn't referenced anywhere else. Non-camelcase is more consistent across the playbook.

- _skupper_crd.resources | length == 0
- cifmw_skupper_install_source == 'upstream'
ansible.builtin.command:
cmd: "oc apply -f {{ cifmw_skupper_upstream_install_url }}"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

(blocking) question: I'd like to see kubernetes.core.k8s. Probably in two tasks: one with ansible.builtin.uri to fetch the content and save in a var, and then one of kubernets.core.k8s with the variable.content and state as present.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in latest commit

- _skupper_crd.resources | length == 0
- cifmw_skupper_install_source == 'downstream'
- cifmw_skupper_downstream_install_file | length > 0
ansible.builtin.command:
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

(blocking) question: I'd like to see kubernetes.core.k8s.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Done in latest commit

vakwetu and others added 2 commits April 17, 2026 01:52
The existing hook_controlplane_config.yml assumed the
OpenStackControlPlane (OSCP) was not yet present, which is correct for
the component / CRC pipeline.  The SKMO integration pipeline runs after
kustomize_deploy has already brought up the OSCP, so it needs a
different hook that reads the live OSCP, preserves existing CA bundle
data, and patches the resource in place.

Split into two task files:
  - hook_controlplane_config.yml  (pre-deploy / component pipeline, unchanged)
  - hook_controlplane_config_postdeploy.yml  (post-deploy / SKMO pipeline)

Add a new playbook federation-controlplane-config-postdeploy.yml that
wraps the new post-deploy task file.

The architecture/automation/vars/multi-namespace-skmo.yaml is updated
separately to call the new post-deploy playbook.

Fix variable names in both task files to use the required cifmw_ prefix
so they pass the var-naming[pattern] rule enforced by ansible-lint.

Relates-To: OSPCIX-1321
Signed-off-by: Ade Lee <alee@redhat.com>
Co-authored-by: Claude Sonnet 4.6 <no-reply@anthropic.com>
Made-with: Cursor
…uting

Add hook playbooks and configuration to establish Skupper virtual
services for RabbitMQ and Keystone internal endpoints, enabling
cross-region connectivity in the multi-namespace SKMO scenario.

skupper-connector.yaml: query the RabbitMQ TLS secret from the correct
CRD - rabbitmq.openstack.org/v1beta1 (RabbitMq) as used by the
OpenStack infra-operator, not the community rabbitmq.com/v1beta1
(RabbitmqCluster). Add retries to wait for spec.tls.secretName to
be populated before creating the Skupper Connector.

skupper-keystone-connector.yaml: add retries to the KeystoneAPI CR
lookup to wait for spec.tls.api.internal.secretName to be available,
since that field is not populated until Keystone completes TLS setup.

configure-leaf-keystone-internal.yaml: after patching the leaf OSCP
to use the Skupper Keystone virtual service, also create a MetalLB
LoadBalancer Service (keystone-regionone-lb) and a DNSData CR
(keystone-skupper) so that EDPM compute nodes outside the OCP cluster
can resolve and connect to the Keystone auth_url. The Skupper Listener
creates a ClusterIP-only Service that is unreachable from EDPM nodes;
the LoadBalancer Service obtains a MetalLB IP on the leaf internalapi
network and the DNSData entry registers both the short (.svc) and
fully-qualified (.svc.cluster.local) names in the dnsmasq instance
serving those nodes.

Signed-off-by: Ade Lee <alee@redhat.com>
Co-authored-by: Claude <noreply@anthropic.com>
Made-with: Cursor
@vakwetu vakwetu force-pushed the skmo-skupper-keystone branch from 7b01c17 to 82dfda1 Compare April 17, 2026 01:56
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