diff --git a/src/lib/charm/openstack/dragent.py b/src/lib/charm/openstack/dragent.py index 6b09b3d..b2af09c 100644 --- a/src/lib/charm/openstack/dragent.py +++ b/src/lib/charm/openstack/dragent.py @@ -19,6 +19,7 @@ from __future__ import absolute_import import collections +import charmhelpers.core as ch_core import charmhelpers.contrib.network.ip as ch_ip import charms_openstack.charm @@ -155,6 +156,18 @@ class DRAgentCharm(charms_openstack.charm.OpenStackCharm): self.release_pkg, self.package_codenames) + def disable_services(self): + """Disble services, typically used awaiting required relations.""" + for service in self.services: + ch_core.host.service('disable', service) + ch_core.host.service('stop', service) + + def enable_services(self): + """Enable services, typically used when required relations complete.""" + for service in self.services: + ch_core.host.service('enable', service) + ch_core.host.service('start', service) + class RockyDRAgentCharm(DRAgentCharm): diff --git a/src/reactive/dragent_handlers.py b/src/reactive/dragent_handlers.py index 1abac45..7d0fc8f 100644 --- a/src/reactive/dragent_handlers.py +++ b/src/reactive/dragent_handlers.py @@ -63,6 +63,21 @@ def configure_ssl(amqp): instance.configure_ssl() +@reactive.when('charm.installed') +@reactive.when_not('config.rendered') +def disable_services(): + with charm.provide_charm_instance() as instance: + instance.disable_services() + instance.assess_status() + + +@reactive.when('config.rendered') +def enable_services(): + with charm.provide_charm_instance() as instance: + instance.enable_services() + instance.assess_status() + + @reactive.when('amqp.available') def render_configs(*args): """Render the configuration for dynamic routing when all the interfaces are @@ -71,4 +86,5 @@ def render_configs(*args): with charm.provide_charm_instance() as instance: instance.upgrade_if_available(args) instance.render_with_interfaces(args) + reactive.set_flag('config.rendered') instance.assess_status() diff --git a/unit_tests/test_dragent_handlers.py b/unit_tests/test_dragent_handlers.py index e3654cb..3a19430 100644 --- a/unit_tests/test_dragent_handlers.py +++ b/unit_tests/test_dragent_handlers.py @@ -40,6 +40,11 @@ class TestDRAgentHooks(test_utils.TestRegisteredHooks): 'setup_amqp_req': ('amqp.connected', ), 'render_configs': ('amqp.available', ), 'configure_ssl': ('amqp.available.ssl', ), + 'enable_services': ('config.rendered',), + 'disable_services': ('charm.installed',), + }, + 'when_not': { + 'disable_services': ('config.rendered',), }, } self.registered_hooks_test_helper(handlers, hook_set, defaults) @@ -92,4 +97,5 @@ class TestDRAgentHandlers(test_utils.PatchHelper): (amqp,)) self.dragent_charm.render_with_interfaces.assert_called_once_with( (amqp,)) + self.set_flag.assert_called_once_with('config.rendered') self.dragent_charm.assess_status.assert_called_once()