Collapse available and available.auth

Most reactive charms react on identity-service.available but the
current interface distinguishes between available and available.auth. It
is somewhat assumed by most charms that identity-service.available is
equivalent to identity-service.available.auth, as what charms are
concerned with is the ability to authenticate against the cloud.

Collapse the difference between identity-service.available and
identity-service.available.auth.

Continue to set identity-service.available.auth for any charms that may
rely on it.

Change-Id: I494feea5f3ef8706140ce712b1e025e52b0dfbd1
Closes-Bug: #1818113
This commit is contained in:
David Ames 2020-07-16 14:14:44 -07:00
parent 7902a74aac
commit a48a1e826a
3 changed files with 10 additions and 25 deletions

View File

@ -44,6 +44,7 @@ class KeystoneRequires(RelationBase):
def update_state(self):
if self.base_data_complete():
self.set_state('{relation_name}.available')
self.set_state('{relation_name}.available.auth')
if self.ssl_data_complete():
self.set_state('{relation_name}.available.ssl')
else:
@ -52,10 +53,6 @@ class KeystoneRequires(RelationBase):
self.set_state('{relation_name}.available.ssl_legacy')
else:
self.remove_state('{relation_name}.available.ssl_legacy')
if self.auth_data_complete():
self.set_state('{relation_name}.available.auth')
else:
self.remove_state('{relation_name}.available.auth')
else:
self.remove_state('{relation_name}.available')
self.remove_state('{relation_name}.available.ssl')
@ -79,13 +76,6 @@ class KeystoneRequires(RelationBase):
'auth_host': self.auth_host(),
'auth_protocol': self.auth_protocol(),
'auth_port': self.auth_port(),
}
if all(data.values()):
return True
return False
def auth_data_complete(self):
data = {
'service_tenant': self.service_tenant(),
'service_username': self.service_username(),
'service_password': self.service_password(),

View File

@ -33,6 +33,11 @@ basepython = python3.8
deps = -r{toxinidir}/test-requirements.txt
commands = stestr run {posargs}
[testenv:py3]
basepython = python3
deps = -r{toxinidir}/test-requirements.txt
commands = stestr run {posargs}
[testenv:pep8]
basepython = python3
deps = -r{toxinidir}/test-requirements.txt

View File

@ -115,18 +115,13 @@ class TestKeystoneRequires(unittest.TestCase):
self.patch_kr('auth_host', '5')
self.patch_kr('auth_protocol', '6')
self.patch_kr('auth_port', '7')
assert self.kr.base_data_complete() is True
self.auth_port.return_value = None
assert self.kr.base_data_complete() is False
def test_auth_data_complete(self):
self.patch_kr('service_tenant', '1')
self.patch_kr('service_username', '2')
self.patch_kr('service_password', '3')
self.patch_kr('service_tenant_id', '4')
assert self.kr.auth_data_complete() is True
assert self.kr.base_data_complete() is True
self.service_tenant.return_value = None
assert self.kr.auth_data_complete() is False
assert self.kr.base_data_complete() is False
def test_ssl_data_complete(self):
self.patch_kr('ssl_cert_admin', '1')
@ -158,7 +153,6 @@ class TestKeystoneRequires(unittest.TestCase):
self.patch_kr('base_data_complete', False)
self.patch_kr('ssl_data_complete', False)
self.patch_kr('ssl_data_complete_legacy', False)
self.patch_kr('auth_data_complete', False)
self.patch_kr('set_state')
self.patch_kr('remove_state')
# test when not all base data is available.
@ -173,11 +167,11 @@ class TestKeystoneRequires(unittest.TestCase):
# test when just the base data is available.
self.base_data_complete.return_value = True
self.kr.update_state()
self.set_state.assert_called_once_with('{relation_name}.available')
self.set_state.assert_any_call('{relation_name}.available')
self.set_state.assert_any_call('{relation_name}.available.auth')
self.remove_state.assert_any_call('{relation_name}.available.ssl')
self.remove_state.assert_any_call(
'{relation_name}.available.ssl_legacy')
self.remove_state.assert_any_call('{relation_name}.available.auth')
self.set_state.reset_mock()
self.remove_state.reset_mock()
# test ssl_data_complete
@ -187,7 +181,6 @@ class TestKeystoneRequires(unittest.TestCase):
self.set_state.assert_any_call('{relation_name}.available.ssl')
self.remove_state.assert_any_call(
'{relation_name}.available.ssl_legacy')
self.remove_state.assert_any_call('{relation_name}.available.auth')
self.set_state.reset_mock()
self.remove_state.reset_mock()
# test ssl_data_complete_legacy
@ -197,11 +190,8 @@ class TestKeystoneRequires(unittest.TestCase):
self.set_state.assert_any_call('{relation_name}.available.ssl')
self.set_state.assert_any_call(
'{relation_name}.available.ssl_legacy')
self.remove_state.assert_any_call('{relation_name}.available.auth')
self.set_state.reset_mock()
self.remove_state.reset_mock()
# test auth_data_complete()
self.auth_data_complete.return_value = True
self.kr.update_state()
self.set_state.assert_any_call('{relation_name}.available')
self.set_state.assert_any_call('{relation_name}.available.ssl')