Merge "Use SDK for getting network metadata from node"

This commit is contained in:
Zuul
2023年12月07日 17:33:30 +00:00
committed by Gerrit Code Review

View File

@@ -2811,29 +2811,27 @@ class IronicDriverGenerateConfigDriveTestCase(test.NoDBTestCase):
network_info=self.network_info,
network_metadata=network_metadata_mock.return_value)
@mock.patch.object(FAKE_CLIENT.node, 'list_ports')
@mock.patch.object(FAKE_CLIENT.portgroup, 'list')
def _test_generate_network_metadata(self, mock_portgroups, mock_ports,
address=None, vif_internal_info=True):
def _test_generate_network_metadata(self, address=None,
vif_internal_info=True):
internal_info = ({'tenant_vif_port_id': utils.FAKE_VIF_UUID}
if vif_internal_info else {})
extra = ({'vif_port_id': utils.FAKE_VIF_UUID}
if not vif_internal_info else {})
portgroup = ironic_utils.get_test_portgroup(
node_uuid=self.node.uuid, address=address,
node_id=self.node.id, address=address,
extra=extra, internal_info=internal_info,
properties={'bond_miimon': 100, 'xmit_hash_policy': 'layer3+4'}
)
port1 = ironic_utils.get_test_port(uuid=uuidutils.generate_uuid(),
node_uuid=self.node.uuid,
port1 = ironic_utils.get_test_port(id=uuidutils.generate_uuid(),
node_id=self.node.id,
address='00:00:00:00:00:01',
portgroup_uuid=portgroup.uuid)
port2 = ironic_utils.get_test_port(uuid=uuidutils.generate_uuid(),
node_uuid=self.node.uuid,
port_group_id=portgroup.id)
port2 = ironic_utils.get_test_port(id=uuidutils.generate_uuid(),
node_id=self.node.id,
address='00:00:00:00:00:02',
portgroup_uuid=portgroup.uuid)
mock_ports.return_value = [port1, port2]
mock_portgroups.return_value = [portgroup]
port_group_id=portgroup.id)
self.mock_conn.ports.return_value = [port1, port2]
self.mock_conn.port_groups.return_value = [portgroup]
metadata = self.driver._get_network_metadata(self.node,
self.network_info)
@@ -2846,11 +2844,11 @@ class IronicDriverGenerateConfigDriveTestCase(test.NoDBTestCase):
self.assertEqual('layer3+4',
pg_vif['bond_xmit_hash_policy'])
self.assertEqual(100, pg_vif['bond_miimon'])
self.assertEqual([port1.uuid, port2.uuid],
self.assertEqual([port1.id, port2.id],
pg_vif['bond_links'])
self.assertEqual([{'id': port1.uuid, 'type': 'phy',
self.assertEqual([{'id': port1.id, 'type': 'phy',
'ethernet_mac_address': port1.address},
{'id': port2.uuid, 'type': 'phy',
{'id': port2.id, 'type': 'phy',
'ethernet_mac_address': port2.address}],
metadata['links'][1:])
# assert there are no duplicate links
@@ -2870,17 +2868,15 @@ class IronicDriverGenerateConfigDriveTestCase(test.NoDBTestCase):
mock_instance_meta):
self._test_generate_network_metadata(vif_internal_info=False)
@mock.patch.object(FAKE_CLIENT.node, 'list_ports')
@mock.patch.object(FAKE_CLIENT.portgroup, 'list')
def test_generate_network_metadata_ports_only(self, mock_portgroups,
mock_ports, mock_cd_builder,
def test_generate_network_metadata_ports_only(self, 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,
node_id=self.node.id, address=address,
internal_info={'tenant_vif_port_id': utils.FAKE_VIF_UUID})
mock_ports.return_value = [port]
mock_portgroups.return_value = []
self.mock_conn.ports.return_value = [port]
self.mock_conn.port_groups.return_value = []
metadata = self.driver._get_network_metadata(self.node,
self.network_info)

View File

@@ -1026,17 +1026,13 @@ class IronicDriver(virt_driver.ComputeDriver):
:param network_info: Instance network information.
"""
base_metadata = netutils.get_network_metadata(network_info)
# TODO(vdrok): change to doing a single "detailed vif list" call,
# when added to ironic API, response to that will contain all
# necessary information. Then we will be able to avoid looking at
# internal_info/extra fields.
ports = self.ironicclient.call("node.list_ports",
node.uuid, detail=True)
portgroups = self.ironicclient.call("portgroup.list", node=node.uuid,
detail=True)
ports = self.ironic_connection.ports(node=node.id, details=True)
port_groups = self.ironic_connection.port_groups(
node=node.id, details=True,
)
vif_id_to_objects = {'ports': {}, 'portgroups': {}}
for collection, name in ((ports, 'ports'), (portgroups, 'portgroups')):
for collection, name in ((ports, 'ports'),
(port_groups, 'portgroups')):
for p in collection:
vif_id = (p.internal_info.get('tenant_vif_port_id') or
p.extra.get('vif_port_id'))
@@ -1048,7 +1044,7 @@ class IronicDriver(virt_driver.ComputeDriver):
vif_id = link['vif_id']
if vif_id in vif_id_to_objects['portgroups']:
pg = vif_id_to_objects['portgroups'][vif_id]
pg_ports = [p for p in ports if p.portgroup_uuid == pg.uuid]
pg_ports = [p for p in ports if p.port_group_id == pg.id]
link.update({'type': 'bond', 'bond_mode': pg.mode,
'bond_links': []})
# If address is set on the portgroup, an (ironic) vif-attach
@@ -1069,10 +1065,11 @@ class IronicDriver(virt_driver.ComputeDriver):
# cannot be in more than one port group for the same
# node.
additional_links.append({
'id': port.uuid,
'type': 'phy', 'ethernet_mac_address': port.address,
'id': port.id,
'type': 'phy',
'ethernet_mac_address': port.address,
})
link['bond_links'].append(port.uuid)
link['bond_links'].append(port.id)
elif vif_id in vif_id_to_objects['ports']:
p = vif_id_to_objects['ports'][vif_id]
# Ironic updates neutron port's address during attachment
Reference in New Issue
openstack/nova
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.

The note is not visible to the blocked user.