Merge "network: fix instance cache refresh for empty list" into stable/juno
This commit is contained in:
@@ -1366,6 +1366,11 @@ class API(base_api.NetworkAPI):
|
||||
current_neutron_port_map[current_neutron_port['id']] = (
|
||||
current_neutron_port)
|
||||
|
||||
# In that case we should repopulate ports from the state of
|
||||
# Neutron.
|
||||
if not port_ids:
|
||||
port_ids = current_neutron_port_map.keys()
|
||||
|
||||
for port_id in port_ids:
|
||||
current_neutron_port = current_neutron_port_map.get(port_id)
|
||||
if current_neutron_port:
|
||||
|
||||
@@ -2528,6 +2528,55 @@ class TestNeutronv2(TestNeutronv2Base):
|
||||
self.assertEqual(nw_infos[4]['id'], 'port4')
|
||||
self.assertEqual(nw_infos[5]['id'], 'port5')
|
||||
|
||||
@mock.patch('nova.network.neutronv2.api.API._nw_info_get_subnets')
|
||||
@mock.patch('nova.network.neutronv2.api.API._nw_info_get_ips')
|
||||
@mock.patch('nova.network.neutronv2.api.API._nw_info_build_network')
|
||||
@mock.patch('nova.network.neutronv2.api.API._gather_port_ids_and_networks')
|
||||
def test_build_network_info_model_empty(
|
||||
self, mock_gather_port_ids_and_networks,
|
||||
mock_nw_info_build_network,
|
||||
mock_nw_info_get_ips,
|
||||
mock_nw_info_get_subnets):
|
||||
api = neutronapi.API()
|
||||
|
||||
fake_inst = objects.Instance()
|
||||
fake_inst.project_id = 'fake'
|
||||
fake_inst.uuid = 'uuid'
|
||||
fake_inst.info_cache = objects.InstanceInfoCache()
|
||||
fake_inst.info_cache.network_info = model.NetworkInfo()
|
||||
fake_ports = [
|
||||
# admin_state_up=True and status='ACTIVE' thus vif.active=True
|
||||
{'id': 'port1',
|
||||
'network_id': 'net-id',
|
||||
'admin_state_up': True,
|
||||
'status': 'ACTIVE',
|
||||
'fixed_ips': [{'ip_address': '1.1.1.1'}],
|
||||
'mac_address': 'de:ad:be:ef:00:01',
|
||||
'binding:vif_type': model.VIF_TYPE_BRIDGE,
|
||||
'binding:vnic_type': model.VNIC_TYPE_NORMAL,
|
||||
'binding:vif_details': {},
|
||||
},
|
||||
]
|
||||
fake_subnets = [model.Subnet(cidr='1.0.0.0/8')]
|
||||
|
||||
neutronv2.get_client(mox.IgnoreArg(), admin=True).MultipleTimes(
|
||||
).AndReturn(self.moxed_client)
|
||||
self.moxed_client.list_ports(
|
||||
tenant_id='fake', device_id='uuid').AndReturn(
|
||||
{'ports': fake_ports})
|
||||
|
||||
mock_gather_port_ids_and_networks.return_value = (None, None)
|
||||
mock_nw_info_build_network.return_value = (None, None)
|
||||
mock_nw_info_get_ips.return_value = []
|
||||
mock_nw_info_get_subnets.return_value = fake_subnets
|
||||
|
||||
self.mox.ReplayAll()
|
||||
neutronv2.get_client('fake')
|
||||
|
||||
nw_infos = api._build_network_info_model(
|
||||
self.context, fake_inst)
|
||||
self.assertEqual(len(nw_infos), 1)
|
||||
|
||||
def test_get_subnets_from_port(self):
|
||||
api = neutronapi.API()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user