diff --git a/charms/openstack-hypervisor/src/charm.py b/charms/openstack-hypervisor/src/charm.py index ac84f915..25b77e23 100755 --- a/charms/openstack-hypervisor/src/charm.py +++ b/charms/openstack-hypervisor/src/charm.py @@ -28,6 +28,8 @@ import socket import string from typing import ( List, + Optional, + Set, ) import charms.operator_libs_linux.v2.snap as snap @@ -65,6 +67,8 @@ class HypervisorOperatorCharm(sunbeam_charm.OSBaseOperatorCharm): METADATA_SECRET_KEY = "ovn-metadata-proxy-shared-secret" DEFAULT_SECRET_LENGTH = 32 + mandatory_relations = {"amqp", "identity-credentials", "ovsdb-cms"} + def __init__(self, framework: ops.framework.Framework) -> None: """Run constructor.""" super().__init__(framework) @@ -324,6 +328,21 @@ class HypervisorOperatorCharm(sunbeam_charm.OSBaseOperatorCharm): self.enable_telemetry = False self.configure_charm(event) + def stop_services(self, relation: Optional[Set[str]]) -> None: + """Stop services based on relation goneaway event.""" + snap_data = {} + for relation_ in relation: + logger.info(f"In stop_services for relation {relation_}") + if relation_ == "amqp": + logger.debug("Resetting rabbitmq url") + snap_data.update({"rabbitmq.url": ""}) + elif relation_ == "ovsdb-cms": + logger.debug("Resetting OVN SB connection") + snap_data.update({"network.ovn-sb-connection": ""}) + + if snap_data: + self.set_snap_data(snap_data) + if __name__ == "__main__": # pragma: no cover main(HypervisorOperatorCharm) diff --git a/charms/openstack-hypervisor/tests/unit/test_charm.py b/charms/openstack-hypervisor/tests/unit/test_charm.py index 5e3655f3..9b89b138 100644 --- a/charms/openstack-hypervisor/tests/unit/test_charm.py +++ b/charms/openstack-hypervisor/tests/unit/test_charm.py @@ -108,11 +108,11 @@ class TestCharm(test_utils.CharmTestCase): self.socket.getfqdn.return_value = "test.local" self.initial_setup() self.harness.set_leader() + test_utils.add_complete_amqp_relation(self.harness) + test_utils.add_complete_identity_credentials_relation(self.harness) hypervisor_snap_mock.ensure.assert_any_call( "latest", channel="essex/stable" ) - test_utils.add_complete_amqp_relation(self.harness) - test_utils.add_complete_identity_credentials_relation(self.harness) metadata = self.harness.charm.metadata_secret() ovn_cacert = ( test_utils.TEST_CA + "\n" + "\n".join(test_utils.TEST_CHAIN) @@ -193,11 +193,11 @@ class TestCharm(test_utils.CharmTestCase): self.socket.getfqdn.return_value = "test.local" self.initial_setup() self.harness.set_leader() + test_utils.add_complete_amqp_relation(self.harness) + test_utils.add_complete_identity_credentials_relation(self.harness) hypervisor_snap_mock.ensure.assert_any_call( "latest", channel="essex/stable" ) - test_utils.add_complete_amqp_relation(self.harness) - test_utils.add_complete_identity_credentials_relation(self.harness) metadata = self.harness.charm.metadata_secret() ovn_cacert = ( test_utils.TEST_CA + "\n" + "\n".join(test_utils.TEST_CHAIN)