Merge "Ensure we mark baremetal links as phy links"
This commit is contained in:
@@ -1748,11 +1748,15 @@ class IronicDriverGenerateConfigDriveTestCase(test.NoDBTestCase):
|
||||
mock_instance_meta.return_value = 'fake-instance'
|
||||
mock_make_drive = mock.MagicMock(make_drive=lambda *_: None)
|
||||
mock_cd_builder.return_value.__enter__.return_value = mock_make_drive
|
||||
network_metadata_mock = mock.Mock()
|
||||
self.driver._get_network_metadata = network_metadata_mock
|
||||
self.driver._generate_configdrive(None, self.instance,
|
||||
self.node, self.network_info)
|
||||
mock_cd_builder.assert_called_once_with(instance_md='fake-instance')
|
||||
mock_instance_meta.assert_called_once_with(self.instance,
|
||||
network_info=self.network_info, extra_md={}, content=None,
|
||||
mock_instance_meta.assert_called_once_with(
|
||||
self.instance, content=None, extra_md={},
|
||||
network_info=self.network_info,
|
||||
network_metadata=network_metadata_mock.return_value,
|
||||
request_context=None)
|
||||
|
||||
def test_generate_configdrive_fail(self, mock_cd_builder,
|
||||
@@ -1762,16 +1766,36 @@ class IronicDriverGenerateConfigDriveTestCase(test.NoDBTestCase):
|
||||
mock_instance_meta.return_value = 'fake-instance'
|
||||
mock_make_drive = mock.MagicMock(make_drive=lambda *_: None)
|
||||
mock_cd_builder.return_value.__enter__.return_value = mock_make_drive
|
||||
network_metadata_mock = mock.Mock()
|
||||
self.driver._get_network_metadata = network_metadata_mock
|
||||
|
||||
self.assertRaises(exception.ConfigDriveMountFailed,
|
||||
self.driver._generate_configdrive, None,
|
||||
self.instance, self.node, self.network_info)
|
||||
|
||||
mock_cd_builder.assert_called_once_with(instance_md='fake-instance')
|
||||
mock_instance_meta.assert_called_once_with(self.instance,
|
||||
network_info=self.network_info, extra_md={}, content=None,
|
||||
mock_instance_meta.assert_called_once_with(
|
||||
self.instance, content=None, extra_md={},
|
||||
network_info=self.network_info,
|
||||
network_metadata=network_metadata_mock.return_value,
|
||||
request_context=None)
|
||||
|
||||
@mock.patch.object(FAKE_CLIENT.node, 'list_ports')
|
||||
def test_generate_network_metadata_ports_only(
|
||||
self, mock_ports, mock_cd_builder, mock_instance_meta):
|
||||
address = self.network_info[0]['address']
|
||||
port = ironic_utils.get_test_port(
|
||||
node_uuid=self.node.uuid, address=address,
|
||||
internal_info={'tenant_vif_port_id': utils.FAKE_VIF_UUID})
|
||||
mock_ports.return_value = [port]
|
||||
|
||||
metadata = self.driver._get_network_metadata(self.node,
|
||||
self.network_info)
|
||||
|
||||
self.assertEqual(port.address,
|
||||
metadata['links'][0]['ethernet_mac_address'])
|
||||
self.assertEqual('phy', metadata['links'][0]['type'])
|
||||
|
||||
|
||||
class HashRingTestCase(test.NoDBTestCase):
|
||||
|
||||
|
||||
@@ -56,6 +56,7 @@ from nova.virt import hardware
|
||||
from nova.virt.ironic import client_wrapper
|
||||
from nova.virt.ironic import ironic_states
|
||||
from nova.virt.ironic import patcher
|
||||
from nova.virt import netutils
|
||||
|
||||
|
||||
ironic = None
|
||||
@@ -700,6 +701,27 @@ class IronicDriver(virt_driver.ComputeDriver):
|
||||
ports = self.ironicclient.call("node.list_ports", node.uuid)
|
||||
return set([p.address for p in ports])
|
||||
|
||||
def _get_network_metadata(self, node, network_info):
|
||||
"""Gets a more complete representation of the instance network info.
|
||||
|
||||
This data is exposed as network_data.json in the metadata service and
|
||||
the config drive.
|
||||
|
||||
:param node: The node object.
|
||||
:param network_info: Instance network information.
|
||||
"""
|
||||
base_metadata = netutils.get_network_metadata(network_info)
|
||||
|
||||
ports = self.ironicclient.call("node.list_ports",
|
||||
node.uuid, detail=True)
|
||||
|
||||
for port in ports:
|
||||
for link in base_metadata['links']:
|
||||
if link['ethernet_mac_address'] == port.address:
|
||||
link['type'] = 'phy'
|
||||
|
||||
return base_metadata
|
||||
|
||||
def _generate_configdrive(self, context, instance, node, network_info,
|
||||
extra_md=None, files=None):
|
||||
"""Generate a config drive.
|
||||
@@ -718,6 +740,7 @@ class IronicDriver(virt_driver.ComputeDriver):
|
||||
|
||||
i_meta = instance_metadata.InstanceMetadata(instance,
|
||||
content=files, extra_md=extra_md, network_info=network_info,
|
||||
network_metadata=self._get_network_metadata(node, network_info),
|
||||
request_context=context)
|
||||
|
||||
with tempfile.NamedTemporaryFile() as uncompressed:
|
||||
|
||||
Reference in New Issue
Block a user