diff --git a/charms/nova-k8s/.zuul.yaml b/charms/nova-k8s/.zuul.yaml index d2810cb2..6b033934 100644 --- a/charms/nova-k8s/.zuul.yaml +++ b/charms/nova-k8s/.zuul.yaml @@ -5,3 +5,7 @@ - microk8s-func-test vars: charm_build_name: nova-k8s + juju_channel: 3.1/stable + juju_classic_mode: false + microk8s_channel: 1.26-strict/stable + microk8s_classic_mode: false diff --git a/charms/nova-k8s/fetch-libs.sh b/charms/nova-k8s/fetch-libs.sh index 0cd30496..9db9b9bf 100755 --- a/charms/nova-k8s/fetch-libs.sh +++ b/charms/nova-k8s/fetch-libs.sh @@ -2,7 +2,7 @@ echo "INFO: Fetching libs from charmhub." charmcraft fetch-lib charms.data_platform_libs.v0.database_requires -charmcraft fetch-lib charms.keystone_k8s.v0.identity_service +charmcraft fetch-lib charms.keystone_k8s.v1.identity_service charmcraft fetch-lib charms.rabbitmq_k8s.v0.rabbitmq charmcraft fetch-lib charms.observability_libs.v0.kubernetes_service_patch charmcraft fetch-lib charms.traefik_k8s.v1.ingress diff --git a/charms/nova-k8s/lib/charms/keystone_k8s/v0/identity_service.py b/charms/nova-k8s/lib/charms/keystone_k8s/v1/identity_service.py similarity index 92% rename from charms/nova-k8s/lib/charms/keystone_k8s/v0/identity_service.py rename to charms/nova-k8s/lib/charms/keystone_k8s/v1/identity_service.py index e8d2773e..35556622 100644 --- a/charms/nova-k8s/lib/charms/keystone_k8s/v0/identity_service.py +++ b/charms/nova-k8s/lib/charms/keystone_k8s/v1/identity_service.py @@ -26,7 +26,7 @@ Two events are also available to respond to: A basic example showing the usage of this relation follows: ``` -from charms.keystone_k8s.v0.identity_service import IdentityServiceRequires +from charms.keystone_k8s.v1.identity_service import IdentityServiceRequires class IdentityServiceClientCharm(CharmBase): def __init__(self, *args): @@ -85,7 +85,10 @@ from ops.framework import ( EventSource, Object, ) -from ops.model import Relation +from ops.model import ( + Relation, + SecretNotFoundError, +) logger = logging.getLogger(__name__) @@ -93,11 +96,11 @@ logger = logging.getLogger(__name__) LIBID = "0fa7fe7236c14c6e9624acf232b9a3b0" # Increment this major API version when introducing breaking changes -LIBAPI = 0 +LIBAPI = 1 # Increment this PATCH version before using `charmcraft publish-lib` or reset # to 0 if you are raising the major API version -LIBPATCH = 2 +LIBPATCH = 0 logger = logging.getLogger(__name__) @@ -273,10 +276,24 @@ class IdentityServiceRequires(Object): """Return the service_host.""" return self.get_remote_app_data('service-host') + @property + def service_credentials(self) -> str: + """Return the service_credentials secret.""" + return self.get_remote_app_data('service-credentials') + @property def service_password(self) -> str: """Return the service_password.""" - return self.get_remote_app_data('service-password') + credentials_id = self.get_remote_app_data('service-credentials') + if not credentials_id: + return None + + try: + credentials = self.charm.model.get_secret(id=credentials_id) + return credentials.get_content().get("password") + except SecretNotFoundError: + logger.warning(f"Secret {credentials_id} not found") + return None @property def service_port(self) -> str: @@ -301,7 +318,16 @@ class IdentityServiceRequires(Object): @property def service_user_name(self) -> str: """Return the service_user_name.""" - return self.get_remote_app_data('service-user-name') + credentials_id = self.get_remote_app_data('service-credentials') + if not credentials_id: + return None + + try: + credentials = self.charm.model.get_secret(id=credentials_id) + return credentials.get_content().get("username") + except SecretNotFoundError: + logger.warning(f"Secret {credentials_id} not found") + return None @property def service_user_id(self) -> str: @@ -450,12 +476,12 @@ class IdentityServiceProvides(Object): admin_project: str, admin_user: str, service_domain: str, - service_password: str, service_project: str, service_user: str, internal_auth_url: str, admin_auth_url: str, - public_auth_url: str): + public_auth_url: str, + service_credentials: str): logging.debug("Setting identity_service connection information.") _identity_service_rel = None for relation in self.framework.model.relations[relation_name]: @@ -485,9 +511,8 @@ class IdentityServiceProvides(Object): app_data["service-domain-id"] = service_domain.id app_data["service-project-name"] = service_project.name app_data["service-project-id"] = service_project.id - app_data["service-user-name"] = service_user.name app_data["service-user-id"] = service_user.id - app_data["service-password"] = service_password app_data["internal-auth-url"] = internal_auth_url app_data["admin-auth-url"] = admin_auth_url app_data["public-auth-url"] = public_auth_url + app_data["service-credentials"] = service_credentials diff --git a/charms/nova-k8s/test-requirements.txt b/charms/nova-k8s/test-requirements.txt index 8febe61e..0b8ca0cd 100644 --- a/charms/nova-k8s/test-requirements.txt +++ b/charms/nova-k8s/test-requirements.txt @@ -8,7 +8,7 @@ coverage mock flake8 stestr -git+https://github.com/openstack-charmers/zaza.git#egg=zaza +git+https://github.com/openstack-charmers/zaza.git@libjuju-3.1#egg=zaza git+https://github.com/openstack-charmers/zaza-openstack-tests.git#egg=zaza.openstack git+https://opendev.org/openstack/tempest.git#egg=tempest ops