Add --physical_network option to build-nodes-json
This will be needed for routed networks support.
This commit is contained in:
parent
6d23f5906e
commit
c61719f8c4
|
@ -63,6 +63,10 @@ def _parse_args():
|
|||
# TODO(dtantsur): change the default to ipmi when Ocata is not supported
|
||||
parser.add_argument('--driver', default='pxe_ipmitool',
|
||||
help='Bare metal driver to use')
|
||||
parser.add_argument('--physical_network',
|
||||
action='store_true',
|
||||
help='Set the physical network attribute of baremetal '
|
||||
'ports. (Requires Rocky or later Ironic)')
|
||||
args = parser.parse_args()
|
||||
return args
|
||||
|
||||
|
@ -116,7 +120,7 @@ def _get_ports(neutron, bmc_base, baremetal_base):
|
|||
|
||||
|
||||
def _build_nodes(nova, glance, bmc_ports, bm_ports, provision_net,
|
||||
baremetal_base, undercloud_name, driver):
|
||||
baremetal_base, undercloud_name, driver, physical_network):
|
||||
node_template = {
|
||||
'pm_type': driver,
|
||||
'mac': '',
|
||||
|
@ -130,6 +134,10 @@ def _build_nodes(nova, glance, bmc_ports, bm_ports, provision_net,
|
|||
'capabilities': 'boot_option:local',
|
||||
'name': '',
|
||||
}
|
||||
if physical_network:
|
||||
node_template.pop('mac')
|
||||
node_template.update(
|
||||
{'ports': [{'address': '', 'physical_network': provision_net}]})
|
||||
|
||||
nodes = []
|
||||
bmc_bm_pairs = []
|
||||
|
@ -143,9 +151,11 @@ def _build_nodes(nova, glance, bmc_ports, bm_ports, provision_net,
|
|||
node = dict(node_template)
|
||||
node['pm_addr'] = bmc_port['fixed_ips'][0]['ip_address']
|
||||
bmc_bm_pairs.append((node['pm_addr'], baremetal.name))
|
||||
node['mac'] = [
|
||||
baremetal.addresses[provision_net][0]['OS-EXT-IPS-MAC:mac_addr']
|
||||
]
|
||||
mac = baremetal.addresses[provision_net][0]['OS-EXT-IPS-MAC:mac_addr']
|
||||
if physical_network:
|
||||
node['ports'][0]['address'] = mac
|
||||
else:
|
||||
node['mac'] = [mac]
|
||||
if not cache.get(baremetal.flavor['id']):
|
||||
cache[baremetal.flavor['id']] = nova.flavors.get(
|
||||
baremetal.flavor['id'])
|
||||
|
@ -280,7 +290,8 @@ def main():
|
|||
extra_nodes,
|
||||
network_details) = _build_nodes(nova, glance, bmc_ports, bm_ports,
|
||||
provision_net, baremetal_base,
|
||||
undercloud_name, args.driver)
|
||||
undercloud_name, args.driver,
|
||||
args.physical_network)
|
||||
_write_nodes(nodes, extra_nodes, network_details, args)
|
||||
_write_role_nodes(nodes, args)
|
||||
_write_pairs(bmc_bm_pairs)
|
||||
|
|
|
@ -52,7 +52,8 @@ class TestBuildNodesJson(testtools.TestCase):
|
|||
mock_argv = ['build-nodes-json', '--env', 'foo.yaml', '--bmc_prefix',
|
||||
'bmc-foo', '--baremetal_prefix', 'baremetal-foo',
|
||||
'--provision_net', 'provision-foo', '--nodes_json',
|
||||
'nodes-foo.json', '--driver', 'ipmi'
|
||||
'nodes-foo.json', '--driver', 'ipmi',
|
||||
'--physical_network',
|
||||
]
|
||||
with mock.patch.object(sys, 'argv', mock_argv):
|
||||
args = build_nodes_json._parse_args()
|
||||
|
@ -62,6 +63,7 @@ class TestBuildNodesJson(testtools.TestCase):
|
|||
self.assertEqual('provision-foo', args.provision_net)
|
||||
self.assertEqual('nodes-foo.json', args.nodes_json)
|
||||
self.assertEqual('ipmi', args.driver)
|
||||
self.assertTrue(args.physical_network)
|
||||
|
||||
def test_get_names_no_env(self):
|
||||
args = mock.Mock()
|
||||
|
@ -274,6 +276,7 @@ class TestBuildNodesJson(testtools.TestCase):
|
|||
{'fixed_ips': [{'ip_address': '1.1.1.2'}]}
|
||||
]
|
||||
bm_ports = [{'device_id': '1'}, {'device_id': '2'}]
|
||||
physical_network = False
|
||||
nova = mock.Mock()
|
||||
servers = [mock.Mock(), mock.Mock(), mock.Mock()]
|
||||
self._create_build_nodes_mocks(nova, servers)
|
||||
|
@ -302,7 +305,7 @@ class TestBuildNodesJson(testtools.TestCase):
|
|||
extra_nodes,
|
||||
network_details) = build_nodes_json._build_nodes(
|
||||
nova, glance, bmc_ports, bm_ports, 'provision', 'bm', 'undercloud',
|
||||
'pxe_ipmitool')
|
||||
'pxe_ipmitool', physical_network)
|
||||
expected_nodes = copy.deepcopy(TEST_NODES)
|
||||
expected_nodes[1]['disk'] = 100
|
||||
self.assertEqual(expected_nodes, nodes)
|
||||
|
@ -321,6 +324,7 @@ class TestBuildNodesJson(testtools.TestCase):
|
|||
{'fixed_ips': [{'ip_address': '1.1.1.2'}]}
|
||||
]
|
||||
bm_ports = [{'device_id': '1'}, {'device_id': '2'}]
|
||||
physical_network = False
|
||||
nova = mock.Mock()
|
||||
servers = [mock.Mock(), mock.Mock(), mock.Mock()]
|
||||
self._create_build_nodes_mocks(nova, servers)
|
||||
|
@ -349,7 +353,7 @@ class TestBuildNodesJson(testtools.TestCase):
|
|||
extra_nodes,
|
||||
network_details) = build_nodes_json._build_nodes(
|
||||
nova, glance, bmc_ports, bm_ports, 'provision', 'bm', 'undercloud',
|
||||
'ipmi')
|
||||
'ipmi', physical_network)
|
||||
expected_nodes = copy.deepcopy(TEST_NODES)
|
||||
expected_nodes[1]['disk'] = 100
|
||||
for node in expected_nodes:
|
||||
|
@ -369,6 +373,7 @@ class TestBuildNodesJson(testtools.TestCase):
|
|||
{'fixed_ips': [{'ip_address': '1.1.1.2'}]}
|
||||
]
|
||||
bm_ports = [{'device_id': '1'}, {'device_id': '2'}]
|
||||
physical_network = False
|
||||
nova = mock.Mock()
|
||||
servers = [mock.Mock(), mock.Mock(), mock.Mock()]
|
||||
self._create_build_nodes_mocks(nova, servers)
|
||||
|
@ -384,7 +389,7 @@ class TestBuildNodesJson(testtools.TestCase):
|
|||
|
||||
nodes, bmc_bm_pairs, extra_nodes, _ = build_nodes_json._build_nodes(
|
||||
nova, glance, bmc_ports, bm_ports, 'provision', 'bm-foo', None,
|
||||
'pxe_ipmitool')
|
||||
'pxe_ipmitool', physical_network)
|
||||
expected_nodes = copy.deepcopy(TEST_NODES)
|
||||
expected_nodes[0]['name'] = 'bm-foo-control-0'
|
||||
expected_nodes[0]['capabilities'] = ('boot_option:local,'
|
||||
|
@ -519,7 +524,8 @@ class TestBuildNodesJson(testtools.TestCase):
|
|||
bm_ports, provision_net,
|
||||
baremetal_base,
|
||||
undercloud_name,
|
||||
args.driver)
|
||||
args.driver,
|
||||
args.physical_network)
|
||||
mock_write_nodes.assert_called_once_with(nodes, extra_nodes,
|
||||
network_details, args)
|
||||
mock_write_role_nodes.assert_called_once_with(nodes, args)
|
||||
|
|
Loading…
Reference in New Issue