Use leader storage for `db-initialised` flag

There are no relation-level concerns for this flag.

Any pre-existing deployments with recent charms (as in released
2015 or later) will have already migrated the peer storage to
leader storage, so this change can build on that work directly.

Ref: https://github.com/juju/charm-helpers/blame/master/charmhelpers/contrib/peerstorage/__init__.py

Change-Id: Ia7362d257428b102c452d0e91bcf9b3378a1e6e9
Closes-bug: #1783747
This commit is contained in:
Frode Nordahl 2018-07-26 14:34:10 +02:00
parent 1e991dc28b
commit a4c39edc24
No known key found for this signature in database
GPG Key ID: 6A5D59A3BA48373F
4 changed files with 24 additions and 13 deletions

View File

@ -467,7 +467,7 @@ def cluster_joined(rid=None):
@restart_on_change(restart_map(), stopstart=True)
def cluster_changed():
# NOTE(jamespage) re-echo passwords for peer storage
echo_whitelist = ['_passwd', 'identity-service:', 'db-initialised']
echo_whitelist = ['_passwd', 'identity-service:']
log("Peer echo whitelist: %s" % (echo_whitelist), level=DEBUG)
peer_echo(includes=echo_whitelist, force=True)

View File

@ -66,10 +66,6 @@ from charmhelpers.contrib.openstack.utils import (
is_unit_paused_set,
)
from charmhelpers.core.strutils import (
bool_from_string,
)
from charmhelpers.core.decorators import (
retry_on_exception,
)
@ -651,11 +647,9 @@ def do_openstack_upgrade(configs):
def is_db_initialised():
if relation_ids('cluster'):
inited = peer_retrieve('db-initialised')
if inited and bool_from_string(inited):
log("Database is initialised", level=DEBUG)
return True
if leader_get('db-initialised'):
log("Database is initialised", level=DEBUG)
return True
log("Database is NOT initialised", level=DEBUG)
return False
@ -692,7 +686,7 @@ def migrate_database():
else:
service_start(keystone_service())
time.sleep(10)
peer_store('db-initialised', 'True')
leader_set({'db-initialised': True})
# OLD

View File

@ -446,7 +446,7 @@ class KeystoneRelationTests(CharmTestCase):
mock_config.return_value = None
hooks.cluster_changed()
whitelist = ['_passwd', 'identity-service:', 'db-initialised']
whitelist = ['_passwd', 'identity-service:']
self.peer_echo.assert_called_with(force=True, includes=whitelist)
self.assertTrue(configs.write_all.called)

View File

@ -223,7 +223,23 @@ class TestKeystoneUtils(CharmTestCase):
disable_unused_apache_sites.assert_called_with()
self.reset_os_release.assert_called()
def test_migrate_database(self):
@patch.object(utils, 'leader_get')
def test_is_db_initialised_true_string(self, _leader_get):
_leader_get.return_value = "True"
self.assertTrue(utils.is_db_initialised())
@patch.object(utils, 'leader_get')
def test_is_db_initialised_true_bool(self, _leader_get):
_leader_get.return_value = True
self.assertTrue(utils.is_db_initialised())
@patch.object(utils, 'leader_get')
def test_is_db_initialised_not_set(self, _leader_get):
_leader_get.return_value = None
self.assertFalse(utils.is_db_initialised())
@patch.object(utils, 'leader_set')
def test_migrate_database(self, _leader_set):
self.os_release.return_value = 'havana'
utils.migrate_database()
@ -231,6 +247,7 @@ class TestKeystoneUtils(CharmTestCase):
cmd = ['sudo', '-u', 'keystone', 'keystone-manage', 'db_sync']
self.subprocess.check_output.assert_called_with(cmd)
self.service_start.assert_called_with('keystone')
_leader_set.assert_called_with({'db-initialised': True})
@patch.object(utils, 'leader_get')
@patch.object(utils, 'get_api_version')