From 156220293af550d7afc9cd48ed87267ab0dbb30c Mon Sep 17 00:00:00 2001 From: Guillaume Boutry Date: Fri, 10 May 2024 10:34:22 +0200 Subject: [PATCH] [all] make region a single value tempest-k8s: add region configuration option, take first from the given list as endpoint tempest-k8s: take first from list as endpoint keystone-k8s: allow listing endpoints by region Change-Id: I629a33c6a3a1579d94d3add5358a9547eebc2f9e --- charms/aodh-k8s/config.yaml | 2 +- charms/barbican-k8s/config.yaml | 2 +- charms/ceilometer-k8s/config.yaml | 2 +- charms/cinder-k8s/config.yaml | 2 +- charms/designate-k8s/config.yaml | 2 +- charms/glance-k8s/config.yaml | 2 +- charms/gnocchi-k8s/config.yaml | 2 +- charms/heat-k8s/config.yaml | 2 +- charms/keystone-k8s/config.yaml | 2 +- charms/keystone-k8s/src/utils/client.py | 5 ++++ charms/keystone-k8s/src/utils/manager.py | 6 ++--- charms/magnum-k8s/config.yaml | 2 +- charms/neutron-k8s/config.yaml | 2 +- charms/nova-k8s/config.yaml | 2 +- charms/octavia-k8s/config.yaml | 2 +- charms/openstack-exporter-k8s/config.yaml | 2 +- charms/openstack-exporter-k8s/src/charm.py | 6 ++++- .../openstack-images-sync-k8s/charmcraft.yaml | 2 +- charms/openstack-images-sync-k8s/src/charm.py | 4 ++-- charms/placement-k8s/config.yaml | 2 +- charms/tempest-k8s/charmcraft.yaml | 4 ++++ charms/tempest-k8s/src/charm.py | 3 ++- charms/tempest-k8s/src/handlers.py | 24 ++++++++++++------- ops-sunbeam/shared_code/config-api.yaml | 2 +- .../{{cookiecutter.service_name}}/config.yaml | 2 +- 25 files changed, 54 insertions(+), 34 deletions(-) diff --git a/charms/aodh-k8s/config.yaml b/charms/aodh-k8s/config.yaml index 7254f64c..0e415f66 100644 --- a/charms/aodh-k8s/config.yaml +++ b/charms/aodh-k8s/config.yaml @@ -23,7 +23,7 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string alarm-history-time-to-live: default: -1 diff --git a/charms/barbican-k8s/config.yaml b/charms/barbican-k8s/config.yaml index 1259ca43..45e55dcc 100644 --- a/charms/barbican-k8s/config.yaml +++ b/charms/barbican-k8s/config.yaml @@ -5,5 +5,5 @@ options: type: boolean region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/charms/ceilometer-k8s/config.yaml b/charms/ceilometer-k8s/config.yaml index ac6a1965..d2af4fa8 100644 --- a/charms/ceilometer-k8s/config.yaml +++ b/charms/ceilometer-k8s/config.yaml @@ -23,5 +23,5 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/charms/cinder-k8s/config.yaml b/charms/cinder-k8s/config.yaml index 142513c1..5cfb7c65 100644 --- a/charms/cinder-k8s/config.yaml +++ b/charms/cinder-k8s/config.yaml @@ -23,5 +23,5 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/charms/designate-k8s/config.yaml b/charms/designate-k8s/config.yaml index aeb8a5ea..e6101265 100644 --- a/charms/designate-k8s/config.yaml +++ b/charms/designate-k8s/config.yaml @@ -23,7 +23,7 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string nameservers: type: string diff --git a/charms/glance-k8s/config.yaml b/charms/glance-k8s/config.yaml index 8631c2d7..b7540811 100644 --- a/charms/glance-k8s/config.yaml +++ b/charms/glance-k8s/config.yaml @@ -23,7 +23,7 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string ceph-osd-replication-count: default: 3 diff --git a/charms/gnocchi-k8s/config.yaml b/charms/gnocchi-k8s/config.yaml index a8b7cae2..953f6bfe 100644 --- a/charms/gnocchi-k8s/config.yaml +++ b/charms/gnocchi-k8s/config.yaml @@ -23,7 +23,7 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string ceph-osd-replication-count: default: 3 diff --git a/charms/heat-k8s/config.yaml b/charms/heat-k8s/config.yaml index 24b14b0e..4628d8e8 100644 --- a/charms/heat-k8s/config.yaml +++ b/charms/heat-k8s/config.yaml @@ -23,5 +23,5 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/charms/keystone-k8s/config.yaml b/charms/keystone-k8s/config.yaml index 6945a1bf..e581da4d 100644 --- a/charms/keystone-k8s/config.yaml +++ b/charms/keystone-k8s/config.yaml @@ -44,7 +44,7 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string catalog-cache-expiration: diff --git a/charms/keystone-k8s/src/utils/client.py b/charms/keystone-k8s/src/utils/client.py index d7d2e173..398c4457 100644 --- a/charms/keystone-k8s/src/utils/client.py +++ b/charms/keystone-k8s/src/utils/client.py @@ -359,12 +359,14 @@ class KeystoneClient: self, name: Optional[str] = None, interface: Optional[str] = None, + region: Optional[str] = None, ) -> list: """List endpoints. Returns all the endpoints by default. If name is specified, returns the corresponding endpoints. If interface is specified, returns the corresponding endpoints. + If region is specified, returns the corresponding endpoints. Response is in the format [ { @@ -382,10 +384,13 @@ class KeystoneClient: :param type: str | None :param interface: Endpoint interface :param type: str | None + :param region: Endpoint region + :param type: str | None :rtype: list """ options = { "interface": interface, + "region": region, } if name is not None: services = self.api.services.list(name=name) diff --git a/charms/keystone-k8s/src/utils/manager.py b/charms/keystone-k8s/src/utils/manager.py index 4ca12cfa..992ad76c 100644 --- a/charms/keystone-k8s/src/utils/manager.py +++ b/charms/keystone-k8s/src/utils/manager.py @@ -115,9 +115,7 @@ class KeystoneManager(framework.Object): @property def regions(self): """List of regions required for this keystone.""" - # split regions and strip out empty regions - regions = [r for r in self.charm.model.config["region"].split() if r] - return regions + return [self.charm.model.config["region"]] def setup_keystone(self): """Runs the keystone setup process for first time configuration. @@ -496,7 +494,7 @@ class KeystoneManager(framework.Object): "public": self.public_endpoint, } - for region in self.charm.model.config["region"].split(): + for region in self.regions: if not region: continue diff --git a/charms/magnum-k8s/config.yaml b/charms/magnum-k8s/config.yaml index 245f9553..6b3748d7 100644 --- a/charms/magnum-k8s/config.yaml +++ b/charms/magnum-k8s/config.yaml @@ -33,5 +33,5 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/charms/neutron-k8s/config.yaml b/charms/neutron-k8s/config.yaml index 107f653f..ffbe4abb 100644 --- a/charms/neutron-k8s/config.yaml +++ b/charms/neutron-k8s/config.yaml @@ -32,7 +32,7 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string vlan-ranges: default: "physnet1:1:4094" diff --git a/charms/nova-k8s/config.yaml b/charms/nova-k8s/config.yaml index 43d3ee02..2845c2d8 100644 --- a/charms/nova-k8s/config.yaml +++ b/charms/nova-k8s/config.yaml @@ -23,5 +23,5 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/charms/octavia-k8s/config.yaml b/charms/octavia-k8s/config.yaml index e3dbf057..6b298087 100644 --- a/charms/octavia-k8s/config.yaml +++ b/charms/octavia-k8s/config.yaml @@ -23,5 +23,5 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/charms/openstack-exporter-k8s/config.yaml b/charms/openstack-exporter-k8s/config.yaml index b3a80156..6dd367d0 100644 --- a/charms/openstack-exporter-k8s/config.yaml +++ b/charms/openstack-exporter-k8s/config.yaml @@ -1,5 +1,5 @@ options: region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/charms/openstack-exporter-k8s/src/charm.py b/charms/openstack-exporter-k8s/src/charm.py index 57e32637..04febfb5 100755 --- a/charms/openstack-exporter-k8s/src/charm.py +++ b/charms/openstack-exporter-k8s/src/charm.py @@ -322,7 +322,11 @@ class OSExporterOperatorCharm(sunbeam_charm.OSBaseOperatorCharmK8S): return [ { "name": "list_endpoint", - "params": {"name": "keystone", "interface": "admin"}, + "params": { + "name": "keystone", + "interface": "admin", + "region": self.config["region"], + }, } ] diff --git a/charms/openstack-images-sync-k8s/charmcraft.yaml b/charms/openstack-images-sync-k8s/charmcraft.yaml index 58ae334e..04f9d24d 100644 --- a/charms/openstack-images-sync-k8s/charmcraft.yaml +++ b/charms/openstack-images-sync-k8s/charmcraft.yaml @@ -68,7 +68,7 @@ config: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string containers: diff --git a/charms/openstack-images-sync-k8s/src/charm.py b/charms/openstack-images-sync-k8s/src/charm.py index 86a3e806..e05aa6e6 100755 --- a/charms/openstack-images-sync-k8s/src/charm.py +++ b/charms/openstack-images-sync-k8s/src/charm.py @@ -67,7 +67,7 @@ class SyncCharmConfigContext(sunbeam_config_contexts.CharmConfigContext): self.charm.config["architecture"].split() ), "release": "|".join(self.charm.config["release"].split()), - "region": ", ".join(self.charm.config["region"].split()), + "region": self.charm.config["region"], "frequency": _frequency_to_seconds(self.charm.config["frequency"]), } @@ -178,7 +178,7 @@ class OpenstackImagesSyncK8SCharm(sunbeam_charm.OSBaseOperatorAPICharm): @property def service_endpoints(self): """Describe the openstack images sync service endpoint.""" - slash_region = "/" + self.config["region"].split()[0] + slash_region = "/" + self.config["region"] return [ { "service_name": "image-stream", diff --git a/charms/placement-k8s/config.yaml b/charms/placement-k8s/config.yaml index 7d88e4e7..627768c8 100644 --- a/charms/placement-k8s/config.yaml +++ b/charms/placement-k8s/config.yaml @@ -23,5 +23,5 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/charms/tempest-k8s/charmcraft.yaml b/charms/tempest-k8s/charmcraft.yaml index 66f25a11..f5fb437b 100644 --- a/charms/tempest-k8s/charmcraft.yaml +++ b/charms/tempest-k8s/charmcraft.yaml @@ -73,6 +73,10 @@ peers: config: options: + region: + type: string + default: RegionOne + description: Name of the OpenStack region schedule: type: string default: "0 */1 * * *" diff --git a/charms/tempest-k8s/src/charm.py b/charms/tempest-k8s/src/charm.py index 8ce0bf87..39118cf9 100755 --- a/charms/tempest-k8s/src/charm.py +++ b/charms/tempest-k8s/src/charm.py @@ -183,6 +183,7 @@ class TempestOperatorCharm(sunbeam_charm.OSBaseOperatorCharmK8S): "identity-ops", self.configure_charm, mandatory="identity-ops" in self.mandatory_relations, + region=self.config["region"], ) handlers.append(self.user_id_ops) self.loki = LoggingRelationHandler( @@ -224,7 +225,7 @@ class TempestOperatorCharm(sunbeam_charm.OSBaseOperatorCharmK8S): logger.debug("Retrieving OpenStack credentials") credential = self.user_id_ops.get_user_credential() tempest_env = { - "OS_REGION_NAME": "RegionOne", + "OS_REGION_NAME": self.config["region"], "OS_IDENTITY_API_VERSION": "3", "OS_AUTH_VERSION": "3", "OS_AUTH_URL": credential.get("auth-url"), diff --git a/charms/tempest-k8s/src/handlers.py b/charms/tempest-k8s/src/handlers.py index 45f9f792..9aad01ba 100644 --- a/charms/tempest-k8s/src/handlers.py +++ b/charms/tempest-k8s/src/handlers.py @@ -324,13 +324,6 @@ class TempestUserIdentityRelationHandler(sunbeam_rhandlers.RelationHandler): }, ] - list_endpoint_ops = [ - { - "name": "list_endpoint", - "params": {"name": "keystone", "interface": "admin"}, - }, - ] - resource_identifiers: FrozenSet[str] = frozenset( { "name", @@ -345,9 +338,11 @@ class TempestUserIdentityRelationHandler(sunbeam_rhandlers.RelationHandler): relation_name: str, callback_f: Callable, mandatory: bool, + region: str, ): super().__init__(charm, relation_name, callback_f, mandatory) self.charm = charm + self.region = region @property def ready(self) -> bool: @@ -528,13 +523,26 @@ class TempestUserIdentityRelationHandler(sunbeam_rhandlers.RelationHandler): ] return setup_ops + def list_endpoint_ops(self) -> list[dict]: + """Operations to list keystone endpoint.""" + return [ + { + "name": "list_endpoint", + "params": { + "name": "keystone", + "interface": "admin", + "region": self.region, + }, + }, + ] + def _setup_tempest_resource_request(self) -> dict: """Set up openstack resource for tempest.""" ops = [] # Teardown before setup to ensure it begins with a clean environment. ops.extend(self.teardown_ops) ops.extend(self._setup_tempest_resource_ops()) - ops.extend(self.list_endpoint_ops) + ops.extend(self.list_endpoint_ops()) request = { "id": self._hash_ops(ops), "tag": "setup_tempest_resource", diff --git a/ops-sunbeam/shared_code/config-api.yaml b/ops-sunbeam/shared_code/config-api.yaml index 8afd667b..49049838 100644 --- a/ops-sunbeam/shared_code/config-api.yaml +++ b/ops-sunbeam/shared_code/config-api.yaml @@ -22,5 +22,5 @@ type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string diff --git a/ops-sunbeam/shared_code/sunbeam_charm/{{cookiecutter.service_name}}/config.yaml b/ops-sunbeam/shared_code/sunbeam_charm/{{cookiecutter.service_name}}/config.yaml index ac6a1965..d2af4fa8 100644 --- a/ops-sunbeam/shared_code/sunbeam_charm/{{cookiecutter.service_name}}/config.yaml +++ b/ops-sunbeam/shared_code/sunbeam_charm/{{cookiecutter.service_name}}/config.yaml @@ -23,5 +23,5 @@ options: type: string region: default: RegionOne - description: Space delimited list of OpenStack regions + description: Name of the OpenStack region type: string