Use IP supplied via relation for pacmaker remotes
When setting up resources for pacemaker remote nodes use the IP address supplied by the remote node for communication. This ensures that communication happens over the desired network space. Depends-On: I5aa6993ec702f97403d1a659e09a3fb2f5af4202 Change-Id: I9bb20b5f0b0d780fbf4cc0ac0e5f86fe277c4715 Closes-Bug: #1824514
This commit is contained in:
parent
1f2e910ae9
commit
27699267ed
|
@ -726,11 +726,13 @@ def add_location_rules_for_local_nodes(res_name):
|
|||
log('%s' % cmd, level=DEBUG)
|
||||
|
||||
|
||||
def configure_pacemaker_remote(remote_hostname):
|
||||
def configure_pacemaker_remote(remote_hostname, remote_ip):
|
||||
"""Create a resource corresponding to the pacemaker remote node.
|
||||
|
||||
:param remote_hostname: Remote hostname used for registering remote node.
|
||||
:type remote_hostname: str
|
||||
:param remote_ip: Remote IP used for registering remote node.
|
||||
:type remote_ip: str
|
||||
:returns: Name of resource for pacemaker remote node.
|
||||
:rtype: str
|
||||
"""
|
||||
|
@ -740,7 +742,7 @@ def configure_pacemaker_remote(remote_hostname):
|
|||
"crm configure primitive {} ocf:pacemaker:remote "
|
||||
"params server={} reconnect_interval=60 "
|
||||
"op monitor interval=30s").format(resource_name,
|
||||
remote_hostname)
|
||||
remote_ip)
|
||||
pcmk.commit(cmd, failure_is_fatal=True)
|
||||
return resource_name
|
||||
|
||||
|
@ -800,8 +802,11 @@ def configure_pacemaker_remote_resources():
|
|||
for relid in relation_ids('pacemaker-remote'):
|
||||
for unit in related_units(relid):
|
||||
remote_hostname = parse_data(relid, unit, 'remote-hostname')
|
||||
remote_ip = parse_data(relid, unit, 'remote-ip')
|
||||
if remote_hostname:
|
||||
resource_name = configure_pacemaker_remote(remote_hostname)
|
||||
resource_name = configure_pacemaker_remote(
|
||||
remote_hostname,
|
||||
remote_ip)
|
||||
resources.append(resource_name)
|
||||
cleanup_remote_nodes(resources)
|
||||
return {name: 'ocf:pacemaker:remote' for name in resources}
|
||||
|
|
|
@ -704,12 +704,13 @@ class UtilsTestCase(unittest.TestCase):
|
|||
is_resource_present.return_value = False
|
||||
self.assertEqual(
|
||||
utils.configure_pacemaker_remote(
|
||||
'juju-aa0ba5-zaza-ed2ce6f303f0-10'),
|
||||
'juju-aa0ba5-zaza-ed2ce6f303f0-10',
|
||||
'10.0.0.10'),
|
||||
'juju-aa0ba5-zaza-ed2ce6f303f0-10')
|
||||
commit.assert_called_once_with(
|
||||
'crm configure primitive juju-aa0ba5-zaza-ed2ce6f303f0-10 '
|
||||
'ocf:pacemaker:remote params '
|
||||
'server=juju-aa0ba5-zaza-ed2ce6f303f0-10 '
|
||||
'server=10.0.0.10 '
|
||||
'reconnect_interval=60 op monitor interval=30s',
|
||||
failure_is_fatal=True)
|
||||
|
||||
|
@ -720,12 +721,13 @@ class UtilsTestCase(unittest.TestCase):
|
|||
is_resource_present.return_value = False
|
||||
self.assertEqual(
|
||||
utils.configure_pacemaker_remote(
|
||||
'juju-aa0ba5-zaza-ed2ce6f303f0-10.maas'),
|
||||
'juju-aa0ba5-zaza-ed2ce6f303f0-10.maas',
|
||||
'10.0.0.10'),
|
||||
'juju-aa0ba5-zaza-ed2ce6f303f0-10')
|
||||
commit.assert_called_once_with(
|
||||
'crm configure primitive juju-aa0ba5-zaza-ed2ce6f303f0-10 '
|
||||
'ocf:pacemaker:remote params '
|
||||
'server=juju-aa0ba5-zaza-ed2ce6f303f0-10.maas '
|
||||
'server=10.0.0.10 '
|
||||
'reconnect_interval=60 op monitor interval=30s',
|
||||
failure_is_fatal=True)
|
||||
|
||||
|
@ -736,7 +738,8 @@ class UtilsTestCase(unittest.TestCase):
|
|||
is_resource_present.return_value = True
|
||||
self.assertEqual(
|
||||
utils.configure_pacemaker_remote(
|
||||
'juju-aa0ba5-zaza-ed2ce6f303f0-10.maas'),
|
||||
'juju-aa0ba5-zaza-ed2ce6f303f0-10.maas',
|
||||
'10.0.0.10'),
|
||||
'juju-aa0ba5-zaza-ed2ce6f303f0-10')
|
||||
self.assertFalse(commit.called)
|
||||
|
||||
|
@ -773,19 +776,22 @@ class UtilsTestCase(unittest.TestCase):
|
|||
'pacemaker-remote:49': {
|
||||
'pacemaker-remote/0': {
|
||||
'remote-hostname': '"node1"',
|
||||
'remote-ip': '"10.0.0.10"',
|
||||
'stonith-hostname': '"st-node1"'},
|
||||
'pacemaker-remote/1': {
|
||||
'remote-ip': '"10.0.0.11"',
|
||||
'remote-hostname': '"node2"'},
|
||||
'pacemaker-remote/2': {
|
||||
'stonith-hostname': '"st-node3"'}}}
|
||||
relation_ids.side_effect = lambda x: rdata.keys()
|
||||
related_units.side_effect = lambda x: sorted(rdata[x].keys())
|
||||
relation_get.side_effect = lambda x, y, z: rdata[z][y].get(x, None)
|
||||
configure_pacemaker_remote.side_effect = lambda x: 'res-{}'.format(x)
|
||||
configure_pacemaker_remote.side_effect = \
|
||||
lambda x, y: 'res-{}'.format(x)
|
||||
utils.configure_pacemaker_remote_resources()
|
||||
remote_calls = [
|
||||
mock.call('node1'),
|
||||
mock.call('node2')]
|
||||
mock.call('node1', '10.0.0.10'),
|
||||
mock.call('node2', '10.0.0.11')]
|
||||
configure_pacemaker_remote.assert_has_calls(
|
||||
remote_calls,
|
||||
any_order=True)
|
||||
|
|
Loading…
Reference in New Issue