From c0c702c3bf26653bae4bd848d434dd352857602d Mon Sep 17 00:00:00 2001 From: Alex Kavanagh Date: Fri, 9 Feb 2024 18:15:47 +0000 Subject: [PATCH] Updates for caracal testing support These updates, on the master branch, are to support testing the caracal packages and support of the charms for caracal. They do NOT lock the charms down, and don't change the testing branches to stable branches. Change-Id: I02c43750f4c910eb5ce55cc6040f6ea50bd419b2 --- charmcraft.yaml | 6 --- .../contrib/openstack/cert_utils.py | 33 ++++++++++------ .../charmhelpers/contrib/openstack/context.py | 11 +++--- .../templates/wsgi-openstack-api.conf | 2 +- .../templates/wsgi-openstack-metadata.conf | 2 +- hooks/charmhelpers/contrib/openstack/utils.py | 25 +++--------- .../contrib/storage/linux/ceph.py | 8 +++- hooks/charmhelpers/core/unitdata.py | 39 ++++++++++++++++++- hooks/charmhelpers/fetch/snap.py | 2 +- hooks/charmhelpers/fetch/ubuntu.py | 10 +++++ metadata.yaml | 6 +-- tests/bundles/jammy-antelope.yaml | 14 +++---- tests/bundles/jammy-bobcat.yaml | 14 +++---- ...{mantic-bobcat.yaml => jammy-caracal.yaml} | 20 +++++----- ...lunar-antelope.yaml => noble-caracal.yaml} | 18 ++++----- tests/tests.yaml | 14 +++---- 16 files changed, 127 insertions(+), 97 deletions(-) rename tests/bundles/{mantic-bobcat.yaml => jammy-caracal.yaml} (91%) rename tests/bundles/{lunar-antelope.yaml => noble-caracal.yaml} (92%) diff --git a/charmcraft.yaml b/charmcraft.yaml index f523182..35b6d04 100644 --- a/charmcraft.yaml +++ b/charmcraft.yaml @@ -28,9 +28,3 @@ bases: - name: ubuntu channel: "22.04" architectures: [amd64, s390x, ppc64el, arm64] - - name: ubuntu - channel: "23.04" - architectures: [amd64, s390x, ppc64el, arm64] - - name: ubuntu - channel: "23.10" - architectures: [amd64, s390x, ppc64el, arm64] diff --git a/hooks/charmhelpers/contrib/openstack/cert_utils.py b/hooks/charmhelpers/contrib/openstack/cert_utils.py index a25ca99..6620f59 100644 --- a/hooks/charmhelpers/contrib/openstack/cert_utils.py +++ b/hooks/charmhelpers/contrib/openstack/cert_utils.py @@ -414,18 +414,27 @@ def get_requests_for_local_unit(relation_name=None): is_legacy_request = set(sent).intersection(legacy_keys) for unit in related_units(rid): data = relation_get(rid=rid, unit=unit) - if data.get(raw_certs_key): - bundles.append({ - 'ca': data['ca'], - 'chain': data.get('chain'), - 'certs': json.loads(data[raw_certs_key])}) - elif is_legacy_request: - bundles.append({ - 'ca': data['ca'], - 'chain': data.get('chain'), - 'certs': {sent['common_name']: - {'cert': data.get(local_name + '.server.cert'), - 'key': data.get(local_name + '.server.key')}}}) + # Note: Bug#2028683 - data may not be available if the certificates + # relation hasn't been populated by the providing charm. If no 'ca' + # in the data then don't attempt the bundle at all. + if data.get('ca'): + if data.get(raw_certs_key): + bundles.append({ + 'ca': data['ca'], + 'chain': data.get('chain'), + 'certs': json.loads(data[raw_certs_key]) + }) + elif is_legacy_request: + bundles.append({ + 'ca': data['ca'], + 'chain': data.get('chain'), + 'certs': { + sent['common_name']: { + 'cert': data.get(local_name + '.server.cert'), + 'key': data.get(local_name + '.server.key') + } + } + }) return bundles diff --git a/hooks/charmhelpers/contrib/openstack/context.py b/hooks/charmhelpers/contrib/openstack/context.py index 24a13d0..1e667fb 100644 --- a/hooks/charmhelpers/contrib/openstack/context.py +++ b/hooks/charmhelpers/contrib/openstack/context.py @@ -545,7 +545,7 @@ class IdentityServiceContext(OSContextGenerator): 'internal_auth_url': internal_auth_url, }) - # we keep all veriables in ctxt for compatibility and + # we keep all variables in ctxt for compatibility and # add nested dictionary for keystone_authtoken generic # templating if keystonemiddleware_os_release: @@ -557,6 +557,7 @@ class IdentityServiceContext(OSContextGenerator): # NOTE(jamespage) this is required for >= icehouse # so a missing value just indicates keystone needs # upgrading + ctxt['admin_user_id'] = _resolve('service_user_id') ctxt['admin_tenant_id'] = _resolve('service_tenant_id') ctxt['admin_domain_id'] = _resolve('service_domain_id') return ctxt @@ -1748,9 +1749,9 @@ class WSGIWorkerConfigContext(WorkerConfigContext): def __call__(self): total_processes = _calculate_workers() - enable_wsgi_rotation = config('wsgi-rotation') - if enable_wsgi_rotation is None: - enable_wsgi_rotation = True + enable_wsgi_socket_rotation = config('wsgi-socket-rotation') + if enable_wsgi_socket_rotation is None: + enable_wsgi_socket_rotation = True ctxt = { "service_name": self.service_name, "user": self.user, @@ -1764,7 +1765,7 @@ class WSGIWorkerConfigContext(WorkerConfigContext): "public_processes": int(math.ceil(self.public_process_weight * total_processes)), "threads": 1, - "wsgi_rotation": enable_wsgi_rotation, + "wsgi_socket_rotation": enable_wsgi_socket_rotation, } return ctxt diff --git a/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-api.conf b/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-api.conf index 2cb735e..de5f603 100644 --- a/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-api.conf +++ b/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-api.conf @@ -12,7 +12,7 @@ Listen {{ admin_port }} Listen {{ public_port }} {% endif -%} -{% if wsgi_rotation -%} +{% if wsgi_socket_rotation -%} WSGISocketRotation On {% else -%} WSGISocketRotation Off diff --git a/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-metadata.conf b/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-metadata.conf index 2cb735e..de5f603 100644 --- a/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-metadata.conf +++ b/hooks/charmhelpers/contrib/openstack/templates/wsgi-openstack-metadata.conf @@ -12,7 +12,7 @@ Listen {{ admin_port }} Listen {{ public_port }} {% endif -%} -{% if wsgi_rotation -%} +{% if wsgi_socket_rotation -%} WSGISocketRotation On {% else -%} WSGISocketRotation Off diff --git a/hooks/charmhelpers/contrib/openstack/utils.py b/hooks/charmhelpers/contrib/openstack/utils.py index e98be2c..da711c6 100644 --- a/hooks/charmhelpers/contrib/openstack/utils.py +++ b/hooks/charmhelpers/contrib/openstack/utils.py @@ -161,6 +161,7 @@ OPENSTACK_CODENAMES = OrderedDict([ ('2022.2', 'zed'), ('2023.1', 'antelope'), ('2023.2', 'bobcat'), + ('2024.1', 'caracal'), ]) # The ugly duckling - must list releases oldest to newest @@ -416,17 +417,6 @@ def get_os_version_codename(codename, version_map=OPENSTACK_CODENAMES, error_out(e) -def get_os_version_codename_swift(codename): - '''Determine OpenStack version number of swift from codename.''' - # for k, v in six.iteritems(SWIFT_CODENAMES): - for k, v in SWIFT_CODENAMES.items(): - if k == codename: - return v[-1] - e = 'Could not derive swift version for '\ - 'codename: %s' % codename - error_out(e) - - def get_swift_codename(version): '''Determine OpenStack codename that corresponds to swift version.''' codenames = [k for k, v in SWIFT_CODENAMES.items() if version in v] @@ -585,7 +575,6 @@ def get_installed_os_version(): return openstack_release().get('OPENSTACK_CODENAME') -@cached def openstack_release(): """Return /etc/os-release in a dict.""" d = {} @@ -847,14 +836,10 @@ def openstack_upgrade_available(package): if not cur_vers: # The package has not been installed yet do not attempt upgrade return False - if "swift" in package: - codename = get_os_codename_install_source(src) - avail_vers = get_os_version_codename_swift(codename) - else: - try: - avail_vers = get_os_version_install_source(src) - except Exception: - avail_vers = cur_vers + try: + avail_vers = get_os_version_install_source(src) + except Exception: + avail_vers = cur_vers apt.init() return apt.version_compare(avail_vers, cur_vers) >= 1 diff --git a/hooks/charmhelpers/contrib/storage/linux/ceph.py b/hooks/charmhelpers/contrib/storage/linux/ceph.py index 2e1fc1b..6ec67cb 100644 --- a/hooks/charmhelpers/contrib/storage/linux/ceph.py +++ b/hooks/charmhelpers/contrib/storage/linux/ceph.py @@ -158,15 +158,19 @@ def get_osd_settings(relation_name): return _order_dict_by_key(osd_settings) -def send_application_name(relid=None): +def send_application_name(relid=None, app_name=None): """Send the application name down the relation. :param relid: Relation id to set application name in. :type relid: str + :param app_name: Application name to send in the relation. + :type app_name: str """ + if app_name is None: + app_name = application_name() relation_set( relation_id=relid, - relation_settings={'application-name': application_name()}) + relation_settings={'application-name': app_name}) def send_osd_settings(): diff --git a/hooks/charmhelpers/core/unitdata.py b/hooks/charmhelpers/core/unitdata.py index 8f4bbc6..65153f1 100644 --- a/hooks/charmhelpers/core/unitdata.py +++ b/hooks/charmhelpers/core/unitdata.py @@ -151,6 +151,7 @@ import contextlib import datetime import itertools import json +import logging import os import pprint import sqlite3 @@ -521,6 +522,42 @@ _KV = None def kv(): global _KV + + # If we are running unit tests, it is useful to go into memory-backed KV store to + # avoid concurrency issues when running multiple tests. This is not a + # problem when juju is running normally. + + env_var = os.environ.get("CHARM_HELPERS_TESTMODE", "auto").lower() + if env_var not in ["auto", "no", "yes"]: + logging.warning("Unknown value for CHARM_HELPERS_TESTMODE '%s'" + ", assuming 'no'", env_var) + env_var = "no" + + if env_var == "no": + in_memory_db = False + elif env_var == "yes": + in_memory_db = True + elif env_var == "auto": + # If UNIT_STATE_DB is set, respect this request + if "UNIT_STATE_DB" in os.environ: + in_memory_db = False + # Autodetect normal juju execution by looking for juju variables + elif "JUJU_CHARM_DIR" in os.environ or "JUJU_UNIT_NAME" in os.environ: + in_memory_db = False + else: + # We are probably running in unit test mode + logging.warning("Auto-detected unit test environment for KV store.") + in_memory_db = True + else: + # Help the linter realise that in_memory_db is always set + raise Exception("Cannot reach this line") + if _KV is None: - _KV = Storage() + if in_memory_db: + _KV = Storage(":memory:") + else: + _KV = Storage() + else: + if in_memory_db and _KV.db_path != ":memory:": + logging.warning("Running with in_memory_db and KV is not set to :memory:") return _KV diff --git a/hooks/charmhelpers/fetch/snap.py b/hooks/charmhelpers/fetch/snap.py index 36d6bce..7ab7ce3 100644 --- a/hooks/charmhelpers/fetch/snap.py +++ b/hooks/charmhelpers/fetch/snap.py @@ -52,7 +52,7 @@ def _snap_exec(commands): :param commands: List commands :return: Integer exit code """ - assert type(commands) == list + assert isinstance(commands, list) retry_count = 0 return_code = None diff --git a/hooks/charmhelpers/fetch/ubuntu.py b/hooks/charmhelpers/fetch/ubuntu.py index 1be992c..d0089eb 100644 --- a/hooks/charmhelpers/fetch/ubuntu.py +++ b/hooks/charmhelpers/fetch/ubuntu.py @@ -246,6 +246,14 @@ CLOUD_ARCHIVE_POCKETS = { 'bobcat/proposed': 'jammy-proposed/bobcat', 'jammy-bobcat/proposed': 'jammy-proposed/bobcat', 'jammy-proposed/bobcat': 'jammy-proposed/bobcat', + # caracal + 'caracal': 'jammy-updates/caracal', + 'jammy-caracal': 'jammy-updates/caracal', + 'jammy-caracal/updates': 'jammy-updates/caracal', + 'jammy-updates/caracal': 'jammy-updates/caracal', + 'caracal/proposed': 'jammy-proposed/caracal', + 'jammy-caracal/proposed': 'jammy-proposed/caracal', + 'jammy-proposed/caracal': 'jammy-proposed/caracal', # OVN 'focal-ovn-22.03': 'focal-updates/ovn-22.03', @@ -279,6 +287,7 @@ OPENSTACK_RELEASES = ( 'zed', 'antelope', 'bobcat', + 'caracal', ) @@ -308,6 +317,7 @@ UBUNTU_OPENSTACK_RELEASE = OrderedDict([ ('kinetic', 'zed'), ('lunar', 'antelope'), ('mantic', 'bobcat'), + ('noble', 'caracal'), ]) diff --git a/metadata.yaml b/metadata.yaml index 42e9858..8951b6d 100644 --- a/metadata.yaml +++ b/metadata.yaml @@ -6,11 +6,9 @@ description: | . This subordinate charm configures the Cinder backup service. tags: -- miscellaneous + - miscellaneous series: -- jammy -- lunar -- mantic + - jammy subordinate: true provides: backup-backend: diff --git a/tests/bundles/jammy-antelope.yaml b/tests/bundles/jammy-antelope.yaml index fb9d72c..b28efce 100644 --- a/tests/bundles/jammy-antelope.yaml +++ b/tests/bundles/jammy-antelope.yaml @@ -52,7 +52,7 @@ applications: openstack-origin: *openstack-origin to: - '3' - channel: latest/edge + channel: 2024.1/edge rabbitmq-server: charm: ch:rabbitmq-server @@ -71,7 +71,7 @@ applications: - '5' - '6' - '7' - channel: latest/edge + channel: reef/edge ceph-osd: charm: ch:ceph-osd @@ -85,7 +85,7 @@ applications: - '8' - '9' - '10' - channel: latest/edge + channel: reef/edge cinder: charm: ch:cinder @@ -96,7 +96,7 @@ applications: openstack-origin: *openstack-origin to: - '11' - channel: latest/edge + channel: 2024.1/edge cinder-backup: charm: ../../cinder-backup.charm @@ -107,7 +107,7 @@ applications: charm: ch:cinder-ceph options: ceph-osd-replication-count: 3 - channel: latest/edge + channel: 2024.1/edge glance: charm: ch:glance @@ -116,7 +116,7 @@ applications: openstack-origin: *openstack-origin to: - '12' - channel: latest/edge + channel: 2024.1/edge nova-compute: charm: ch:nova-compute @@ -125,7 +125,7 @@ applications: openstack-origin: *openstack-origin to: - '13' - channel: latest/edge + channel: 2024.1/edge relations: diff --git a/tests/bundles/jammy-bobcat.yaml b/tests/bundles/jammy-bobcat.yaml index e9e35e5..475b41a 100644 --- a/tests/bundles/jammy-bobcat.yaml +++ b/tests/bundles/jammy-bobcat.yaml @@ -52,7 +52,7 @@ applications: openstack-origin: *openstack-origin to: - '3' - channel: latest/edge + channel: 2024.1/edge rabbitmq-server: charm: ch:rabbitmq-server @@ -71,7 +71,7 @@ applications: - '5' - '6' - '7' - channel: latest/edge + channel: reef/edge ceph-osd: charm: ch:ceph-osd @@ -85,7 +85,7 @@ applications: - '8' - '9' - '10' - channel: latest/edge + channel: reef/edge cinder: charm: ch:cinder @@ -96,7 +96,7 @@ applications: openstack-origin: *openstack-origin to: - '11' - channel: latest/edge + channel: 2024.1/edge cinder-backup: charm: ../../cinder-backup.charm @@ -107,7 +107,7 @@ applications: charm: ch:cinder-ceph options: ceph-osd-replication-count: 3 - channel: latest/edge + channel: 2024.1/edge glance: charm: ch:glance @@ -116,7 +116,7 @@ applications: openstack-origin: *openstack-origin to: - '12' - channel: latest/edge + channel: 2024.1/edge nova-compute: charm: ch:nova-compute @@ -125,7 +125,7 @@ applications: openstack-origin: *openstack-origin to: - '13' - channel: latest/edge + channel: 2024.1/edge relations: diff --git a/tests/bundles/mantic-bobcat.yaml b/tests/bundles/jammy-caracal.yaml similarity index 91% rename from tests/bundles/mantic-bobcat.yaml rename to tests/bundles/jammy-caracal.yaml index c794f09..6889bf7 100644 --- a/tests/bundles/mantic-bobcat.yaml +++ b/tests/bundles/jammy-caracal.yaml @@ -1,7 +1,7 @@ variables: - openstack-origin: &openstack-origin distro + openstack-origin: &openstack-origin cloud:jammy-caracal -series: mantic +series: jammy comment: - 'machines section to decide order of deployment. database sooner = faster' @@ -39,8 +39,6 @@ applications: mysql-innodb-cluster: charm: ch:mysql-innodb-cluster num_units: 3 - options: - source: *openstack-origin to: - '0' - '1' @@ -54,7 +52,7 @@ applications: openstack-origin: *openstack-origin to: - '3' - channel: latest/edge + channel: 2024.1/edge rabbitmq-server: charm: ch:rabbitmq-server @@ -73,7 +71,7 @@ applications: - '5' - '6' - '7' - channel: latest/edge + channel: reef/edge ceph-osd: charm: ch:ceph-osd @@ -87,7 +85,7 @@ applications: - '8' - '9' - '10' - channel: latest/edge + channel: reef/edge cinder: charm: ch:cinder @@ -98,7 +96,7 @@ applications: openstack-origin: *openstack-origin to: - '11' - channel: latest/edge + channel: 2024.1/edge cinder-backup: charm: ../../cinder-backup.charm @@ -109,7 +107,7 @@ applications: charm: ch:cinder-ceph options: ceph-osd-replication-count: 3 - channel: latest/edge + channel: 2024.1/edge glance: charm: ch:glance @@ -118,7 +116,7 @@ applications: openstack-origin: *openstack-origin to: - '12' - channel: latest/edge + channel: 2024.1/edge nova-compute: charm: ch:nova-compute @@ -127,7 +125,7 @@ applications: openstack-origin: *openstack-origin to: - '13' - channel: latest/edge + channel: 2024.1/edge relations: diff --git a/tests/bundles/lunar-antelope.yaml b/tests/bundles/noble-caracal.yaml similarity index 92% rename from tests/bundles/lunar-antelope.yaml rename to tests/bundles/noble-caracal.yaml index c367ff2..acb6032 100644 --- a/tests/bundles/lunar-antelope.yaml +++ b/tests/bundles/noble-caracal.yaml @@ -1,7 +1,7 @@ variables: openstack-origin: &openstack-origin distro -series: lunar +series: noble comment: - 'machines section to decide order of deployment. database sooner = faster' @@ -39,8 +39,6 @@ applications: mysql-innodb-cluster: charm: ch:mysql-innodb-cluster num_units: 3 - options: - source: *openstack-origin to: - '0' - '1' @@ -54,7 +52,7 @@ applications: openstack-origin: *openstack-origin to: - '3' - channel: latest/edge + channel: 2024.1/edge rabbitmq-server: charm: ch:rabbitmq-server @@ -73,7 +71,7 @@ applications: - '5' - '6' - '7' - channel: latest/edge + channel: reef/edge ceph-osd: charm: ch:ceph-osd @@ -87,7 +85,7 @@ applications: - '8' - '9' - '10' - channel: latest/edge + channel: reef/edge cinder: charm: ch:cinder @@ -98,7 +96,7 @@ applications: openstack-origin: *openstack-origin to: - '11' - channel: latest/edge + channel: 2024.1/edge cinder-backup: charm: ../../cinder-backup.charm @@ -109,7 +107,7 @@ applications: charm: ch:cinder-ceph options: ceph-osd-replication-count: 3 - channel: latest/edge + channel: 2024.1/edge glance: charm: ch:glance @@ -118,7 +116,7 @@ applications: openstack-origin: *openstack-origin to: - '12' - channel: latest/edge + channel: 2024.1/edge nova-compute: charm: ch:nova-compute @@ -127,7 +125,7 @@ applications: openstack-origin: *openstack-origin to: - '13' - channel: latest/edge + channel: 2024.1/edge relations: diff --git a/tests/tests.yaml b/tests/tests.yaml index de13859..f7e7fdf 100644 --- a/tests/tests.yaml +++ b/tests/tests.yaml @@ -1,20 +1,16 @@ charm_name: cinder-backup smoke_bundles: - - jammy-antelope - + - jammy-caracal gate_bundles: - jammy-antelope - -dev_bundles: - jammy-bobcat - - lunar-antelope - - mantic-bobcat - + - jammy-caracal +dev_bundles: + - noble-caracal tests: - zaza.openstack.charm_tests.cinder_backup.tests.CinderBackupTest tests_options: force_deploy: - - lunar-antelope - - mantic-bobcat + - noble-caracal