diff --git a/src/layer.yaml b/src/layer.yaml index 7aec550..4d052a6 100644 --- a/src/layer.yaml +++ b/src/layer.yaml @@ -3,3 +3,4 @@ options: basic: use_venv: True include_system_packages: True +repo: https://github.com/openstack/charm-keystone-ldap.git diff --git a/src/reactive/keystone_ldap_handlers.py b/src/reactive/keystone_ldap_handlers.py index f6a696f..24b851b 100644 --- a/src/reactive/keystone_ldap_handlers.py +++ b/src/reactive/keystone_ldap_handlers.py @@ -26,11 +26,19 @@ charm.use_defaults( @reactive.when('domain-backend.connected') +@reactive.when_not('domain-name-configured') @reactive.when('config.complete') def configure_domain_name(domain): keystone_ldap.render_config(domain.trigger_restart) domain.domain_name(hookenv.config('domain-name') or hookenv.service_name()) + reactive.set_state('domain-name-configured') + + +@reactive.when_not('domain-backend.connected') +@reactive.when('domain-name-configured') +def clear_domain_name_configured(domain): + reactive.remove_state('domain-name-configured') @reactive.when_not('always.run') diff --git a/unit_tests/test_keystone_ldap_handlers.py b/unit_tests/test_keystone_ldap_handlers.py index a7fad24..ba9ecfe 100644 --- a/unit_tests/test_keystone_ldap_handlers.py +++ b/unit_tests/test_keystone_ldap_handlers.py @@ -14,6 +14,9 @@ from __future__ import print_function import mock +from charms_openstack.test_mocks import charmhelpers as ch +ch.contrib.openstack.utils.OPENSTACK_RELEASES = ('mitaka', ) + import reactive.keystone_ldap_handlers as handlers import charms_openstack.test_utils as test_utils @@ -29,9 +32,12 @@ class TestRegisteredHooks(test_utils.TestRegisteredHooks): 'when': { 'configure_domain_name': ('domain-backend.connected', 'config.complete'), + 'clear_domain_name_configured': ('domain-name-configured', ), }, 'when_not': { - 'check_configuration': ('always.run',), + 'check_configuration': ('always.run', ), + 'configure_domain_name': ('domain-name-configured', ), + 'clear_domain_name_configured': ('domain-backend.connected', ), } } # test that the hooks were registered via the @@ -54,6 +60,7 @@ class TestKeystoneLDAPCharmHandlers(test_utils.PatchHelper): self.patch(handlers.keystone_ldap, 'render_config') self.patch(handlers.hookenv, 'config') self.patch(handlers.hookenv, 'service_name') + self.patch(handlers.reactive, 'set_state') self.config.return_value = None self.service_name.return_value = 'keystone-ldap' domain = mock.MagicMock() @@ -64,6 +71,13 @@ class TestKeystoneLDAPCharmHandlers(test_utils.PatchHelper): domain.domain_name.assert_called_with( 'keystone-ldap' ) + self.set_state.assert_called_once_with('domain-name-configured') + + def test_clear_domain_name_configured(self): + self.patch(handlers.reactive, 'remove_state') + domain = mock.MagicMock() + handlers.clear_domain_name_configured(domain) + self.remove_state.assert_called_once_with('domain-name-configured') def test_configure_domain_name_config(self): self.patch(handlers.keystone_ldap, 'render_config') diff --git a/unit_tests/test_lib_charm_openstack_keystone_ldap.py b/unit_tests/test_lib_charm_openstack_keystone_ldap.py index b20e3a8..4faafcb 100644 --- a/unit_tests/test_lib_charm_openstack_keystone_ldap.py +++ b/unit_tests/test_lib_charm_openstack_keystone_ldap.py @@ -16,6 +16,8 @@ import unittest import mock +from charms_openstack.test_mocks import charmhelpers as ch +ch.contrib.openstack.utils.OPENSTACK_RELEASES = ('mitaka', ) import charm.openstack.keystone_ldap as keystone_ldap