diff --git a/os_faults/drivers/tcpcloud.py b/os_faults/drivers/tcpcloud.py index 1b70f6d..c7700c8 100644 --- a/os_faults/drivers/tcpcloud.py +++ b/os_faults/drivers/tcpcloud.py @@ -217,6 +217,8 @@ class TCPCloudManagement(cloud_management.CloudManagement): 'slave_username': {'type': 'string'}, 'master_sudo': {'type': 'boolean'}, 'slave_sudo': {'type': 'boolean'}, + 'slave_iface': {'type': 'string'}, + 'slave_name_regexp': {'type': 'string'}, }, 'required': ['address', 'username'], 'additionalProperties': False, @@ -243,6 +245,12 @@ class TCPCloudManagement(cloud_management.CloudManagement): jump_user=self.username, become=cloud_management_params.get('slave_sudo')) + self.slave_iface = cloud_management_params.get('slave_iface', 'eth0') + + # get all nodes except salt master (that has cfg* hostname) by default + self.slave_name_regexp = cloud_management_params.get( + 'slave_name_regexp', '^(?!cfg)') + self.cached_cloud_hosts = list() self.fqdn_to_hosts = dict() @@ -261,14 +269,14 @@ class TCPCloudManagement(cloud_management.CloudManagement): def _get_cloud_hosts(self): if not self.cached_cloud_hosts: - # get all nodes except salt master (that has cfg* hostname) - cmd = "salt -E '^(?!cfg)' network.interfaces --out=yaml" + cmd = "salt -E '{}' network.interfaces --out=yaml".format( + self.slave_name_regexp) result = self.execute_on_master_node({'command': cmd}) stdout = result[0].payload['stdout'] for fqdn, net_data in yaml.load(stdout).items(): host = node_collection.Host( - ip=net_data['eth0']['inet'][0]['address'], - mac=net_data['eth0']['hwaddr'], + ip=net_data[self.slave_iface]['inet'][0]['address'], + mac=net_data[self.slave_iface]['hwaddr'], fqdn=fqdn) self.cached_cloud_hosts.append(host) self.fqdn_to_hosts[host.fqdn] = host diff --git a/os_faults/tests/unit/drivers/test_tcpcloud.py b/os_faults/tests/unit/drivers/test_tcpcloud.py index 406d713..b5f1f18 100644 --- a/os_faults/tests/unit/drivers/test_tcpcloud.py +++ b/os_faults/tests/unit/drivers/test_tcpcloud.py @@ -29,12 +29,12 @@ class TCPCloudManagementTestCase(test.TestCase): self.fake_ansible_result = fakes.FakeAnsibleResult( payload={ 'stdout': 'cmp01.mk20.local:\n' - ' eth0:\n' + ' eth1:\n' ' hwaddr: 09:7b:74:90:63:c2\n' ' inet:\n' ' - address: 10.0.0.2\n' 'cmp02.mk20.local:\n' - ' eth0:\n' + ' eth1:\n' ' hwaddr: 09:7b:74:90:63:c3\n' ' inet:\n' ' - address: 10.0.0.3\n' @@ -42,6 +42,7 @@ class TCPCloudManagementTestCase(test.TestCase): self.tcp_conf = { 'address': 'tcp.local', 'username': 'root', + 'slave_iface': 'eth1', } self.get_nodes_cmd = ( "salt -E '^(?!cfg)' network.interfaces --out=yaml") @@ -87,11 +88,13 @@ class TCPCloudManagementTestCase(test.TestCase): [fakes.FakeAnsibleResult(payload={'stdout': ''}), fakes.FakeAnsibleResult(payload={'stdout': ''})], ] + self.tcp_conf['slave_name_regexp'] = '(ctl*|cmp*)' tcp_managment = tcpcloud.TCPCloudManagement(self.tcp_conf) tcp_managment.verify() + get_nodes_cmd = "salt -E '(ctl*|cmp*)' network.interfaces --out=yaml" ansible_runner_inst.execute.assert_has_calls([ - mock.call(['tcp.local'], {'command': self.get_nodes_cmd}), + mock.call(['tcp.local'], {'command': get_nodes_cmd}), mock.call(['10.0.0.2', '10.0.0.3'], {'command': 'hostname'}), ]) diff --git a/os_faults/tests/unit/test_utils.py b/os_faults/tests/unit/test_utils.py index 16b6ba2..ea051a9 100644 --- a/os_faults/tests/unit/test_utils.py +++ b/os_faults/tests/unit/test_utils.py @@ -29,7 +29,7 @@ class UtilsTestCase(test.TestCase): target = mock.Mock() utils.run(target, [{'mac_address': '01'}, {'mac_address': '02'}]) target.assert_has_calls([mock.call(mac_address='01'), - mock.call(mac_address='02')]) + mock.call(mac_address='02')], any_order=True) def test_run_raise_exception(self): target = mock.Mock()