Ensure cluster relation updated on config-changed

Some cluster relation settings are dependant on
config so ensure that if confg changes, those
changes are reflected on the cluster relation.

Change-Id: I0bf8601bc7d3c769a59c4eafd89643811b46dbe6
Closes-Bug: 1641870
This commit is contained in:
Edward Hope-Morley 2017-04-12 12:39:15 +01:00
parent 1cb38fec20
commit f001baf944
2 changed files with 40 additions and 5 deletions

View File

@ -181,6 +181,9 @@ def config_changed():
for r_id in relation_ids('identity-service'):
keystone_joined(relid=r_id)
for r_id in relation_ids('cluster'):
cluster_joined(relation_id=r_id)
for r_id in relation_ids('object-store'):
object_store_joined(relation_id=r_id)
try_initialize_swauth()
@ -354,19 +357,20 @@ def object_store_joined(relation_id=None):
@hooks.hook('cluster-relation-joined')
def cluster_joined(relation_id=None):
settings = {}
for addr_type in ADDRESS_TYPES:
netaddr_cfg = 'os-{}-network'.format(addr_type)
address = get_address_in_network(config(netaddr_cfg))
if address:
settings = {'{}-address'.format(addr_type): address}
relation_set(relation_id=relation_id, relation_settings=settings)
settings['{}-address'.format(addr_type)] = address
if config('prefer-ipv6'):
private_addr = get_ipv6_addr(exc_list=[config('vip')])[0]
relation_set(relation_id=relation_id,
relation_settings={'private-address': private_addr})
settings['private-address'] = private_addr
else:
private_addr = unit_get('private-address')
settings['private-address'] = unit_get('private-address')
relation_set(relation_id=relation_id, relation_settings=settings)
def is_all_peers_stopped(responses):

View File

@ -202,6 +202,37 @@ class SwiftHooksTestCase(unittest.TestCase):
relation_id='storage:1', timestamp=1234)]
mock_rel_set.assert_has_calls(calls)
@patch.object(swift_hooks, 'unit_get', lambda key: '10.0.0.100')
@patch.object(swift_hooks, 'relation_set')
@patch.object(swift_hooks, 'config')
@patch.object(swift_hooks, 'get_address_in_network')
def test_cluster_joined(self, mock_get_addr, mock_config,
mock_relation_set):
addrs = {'10.0.0.0/24': '10.0.0.1',
'10.0.1.0/24': '10.0.1.1',
'10.0.2.0/24': '10.0.2.1'}
def fake_get_address_in_network(network):
return addrs.get(network)
config = {'os-public-network': '10.0.0.0/24',
'os-admin-network': '10.0.1.0/24',
'os-internal-network': '10.0.2.0/24'}
def fake_config(key):
return config.get(key)
mock_get_addr.side_effect = fake_get_address_in_network
mock_config.side_effect = fake_config
swift_hooks.cluster_joined()
mock_relation_set.assert_has_calls(
[call(relation_id=None,
relation_settings={'private-address': '10.0.0.100',
'admin-address': '10.0.1.1',
'internal-address': '10.0.2.1',
'public-address': '10.0.0.1'})])
@patch.object(swift_hooks, 'relation_set')
@patch.object(swift_hooks, 'update_dns_ha_resource_params')
@patch.object(swift_hooks, 'get_hacluster_config')