Remove get_ports_by_attrs by simply use args in query ports.
get_ports_by_attrs was using neutron client for obtaining ports with specified attribites. OpenStackSDK have this OOTB, so that one can query for ports simply by using os.network.ports(name=…, tags=[…], …), so, there is no need for additional function. Also, make use of previously added real port object in tests. By using openstack.network.v2.port.Port objects we gain such confidence that we are dealing with an port object, dict, tuple, or any other data type, so that we can treat it accordingly in the code. Implements: blueprint switch-to-openstacksdk Change-Id: I7b597f7229113a598de631641bde04e083fea4b5
This commit is contained in:
parent
a4bc6e8c3a
commit
29e49616d1
|
@ -553,9 +553,3 @@ def get_port_annot_pci_info(nodename, neutron_port):
|
|||
LOG.exception('Exception when reading annotations '
|
||||
'%s and converting from json', annot_name)
|
||||
return pci_info
|
||||
|
||||
|
||||
def get_ports_by_attrs(**attrs):
|
||||
neutron = clients.get_neutron_client()
|
||||
ports = neutron.list_ports(**attrs)
|
||||
return ports['ports']
|
||||
|
|
|
@ -378,6 +378,7 @@ class BaseVIFPool(base.VIFPoolDriver):
|
|||
# precreated subports. For instance by shutting down and up a
|
||||
# kubernetes Worker VM with subports already attached, and the
|
||||
# controller is restarted in between.
|
||||
os_net = clients.get_network_client()
|
||||
parent_ports = {}
|
||||
subports = {}
|
||||
subnets = {}
|
||||
|
@ -386,70 +387,67 @@ class BaseVIFPool(base.VIFPoolDriver):
|
|||
tags = config.CONF.neutron_defaults.resource_tags
|
||||
if tags:
|
||||
attrs['tags'] = tags
|
||||
# TODO(gryf): look out for the object type in list when c_utils will
|
||||
# be migrated to OpenstackSDK
|
||||
all_active_ports = c_utils.get_ports_by_attrs(**attrs)
|
||||
|
||||
all_active_ports = os_net.ports(**attrs)
|
||||
in_use_ports = self._get_in_use_ports()
|
||||
|
||||
for port in all_active_ports:
|
||||
trunk_details = port.get('trunk_details')
|
||||
# Parent port
|
||||
if trunk_details:
|
||||
parent_ports[trunk_details['trunk_id']] = {
|
||||
'ip': port['fixed_ips'][0]['ip_address'],
|
||||
'subports': trunk_details['sub_ports']}
|
||||
if port.trunk_details:
|
||||
parent_ports[port.trunk_details['trunk_id']] = {
|
||||
'ip': port.fixed_ips[0]['ip_address'],
|
||||
'subports': port.trunk_details['sub_ports']}
|
||||
else:
|
||||
# Filter to only get subports that are not in use
|
||||
if (port['id'] not in in_use_ports and
|
||||
port['device_owner'] in ['trunk:subport',
|
||||
kl_const.DEVICE_OWNER]):
|
||||
subports[port['id']] = port
|
||||
if (port.id not in in_use_ports and
|
||||
port.device_owner in ['trunk:subport',
|
||||
kl_const.DEVICE_OWNER]):
|
||||
subports[port.id] = port
|
||||
# NOTE(ltomasbo): _get_subnet can be costly as it
|
||||
# needs to call neutron to get network and subnet
|
||||
# information. This ensures it is only called once
|
||||
# per subnet in use
|
||||
subnet_id = port['fixed_ips'][0]['subnet_id']
|
||||
subnet_id = port.fixed_ips[0]['subnet_id']
|
||||
if not subnets.get(subnet_id):
|
||||
subnets[subnet_id] = {subnet_id:
|
||||
utils.get_subnet(
|
||||
subnet_id)}
|
||||
utils.get_subnet(subnet_id)}
|
||||
return parent_ports, subports, subnets
|
||||
|
||||
def _cleanup_leftover_ports(self):
|
||||
os_net = clients.get_network_client()
|
||||
attrs = {'device_owner': kl_const.DEVICE_OWNER, 'status': 'DOWN'}
|
||||
existing_ports = c_utils.get_ports_by_attrs(**attrs)
|
||||
existing_ports = os_net.ports(device_owner=kl_const.DEVICE_OWNER,
|
||||
status='DOWN')
|
||||
|
||||
tags = config.CONF.neutron_defaults.resource_tags
|
||||
if tags:
|
||||
nets = os_net.networks(tags=tags)
|
||||
nets_ids = [n.id for n in nets]
|
||||
for port in existing_ports:
|
||||
net_id = port['network_id']
|
||||
net_id = port.network_id
|
||||
if net_id in nets_ids:
|
||||
if port.get('binding:host_id'):
|
||||
if set(tags).difference(set(port.get('tags', []))):
|
||||
if port.binding_host_id:
|
||||
if set(tags).difference(set(port.tags)):
|
||||
# delete the port if it has binding details, it
|
||||
# belongs to the deployment subnet and it does not
|
||||
# have the right tags
|
||||
try:
|
||||
os_net.delete_port(port['id'])
|
||||
os_net.delete_port(port.id)
|
||||
except os_exc.SDKException:
|
||||
LOG.debug("Problem deleting leftover port %s. "
|
||||
"Skipping.", port['id'])
|
||||
"Skipping.", port.id)
|
||||
else:
|
||||
# delete port if they have no binding but belong to the
|
||||
# deployment networks, regardless of their tagging
|
||||
try:
|
||||
os_net.delete_port(port['id'])
|
||||
os_net.delete_port(port.id)
|
||||
except os_exc.SDKException:
|
||||
LOG.debug("Problem deleting leftover port %s. "
|
||||
"Skipping.", port['id'])
|
||||
"Skipping.", port.id)
|
||||
continue
|
||||
else:
|
||||
for port in existing_ports:
|
||||
if not port.get('binding:host_id'):
|
||||
os_net.delete_port(port['id'])
|
||||
if not port.binding_host_id:
|
||||
os_net.delete_port(port.id)
|
||||
|
||||
|
||||
class NeutronVIFPool(BaseVIFPool):
|
||||
|
@ -530,11 +528,11 @@ class NeutronVIFPool(BaseVIFPool):
|
|||
tags = config.CONF.neutron_defaults.resource_tags
|
||||
if tags:
|
||||
attrs['tags'] = tags
|
||||
kuryr_ports = c_utils.get_ports_by_attrs(**attrs)
|
||||
for port in kuryr_ports:
|
||||
if port['id'] in self._recyclable_ports:
|
||||
sg_current[port['id']] = tuple(sorted(
|
||||
port['security_groups']))
|
||||
|
||||
for port in os_net.ports(**attrs):
|
||||
if port.id in self._recyclable_ports:
|
||||
sg_current[port.id] = tuple(sorted(
|
||||
port.security_group_ids))
|
||||
|
||||
for port_id, pool_key in list(self._recyclable_ports.items()):
|
||||
if (not oslo_cfg.CONF.vif_pool.ports_pool_max or
|
||||
|
@ -575,6 +573,7 @@ class NeutronVIFPool(BaseVIFPool):
|
|||
self._recovered_pools = True
|
||||
|
||||
def _recover_precreated_ports(self):
|
||||
os_net = clients.get_network_client()
|
||||
attrs = {'device_owner': kl_const.DEVICE_OWNER}
|
||||
tags = config.CONF.neutron_defaults.resource_tags
|
||||
if tags:
|
||||
|
@ -582,42 +581,39 @@ class NeutronVIFPool(BaseVIFPool):
|
|||
|
||||
if config.CONF.kubernetes.port_debug:
|
||||
attrs['name'] = constants.KURYR_PORT_NAME
|
||||
available_ports = c_utils.get_ports_by_attrs(**attrs)
|
||||
available_ports = os_net.ports(**attrs)
|
||||
else:
|
||||
kuryr_ports = c_utils.get_ports_by_attrs(**attrs)
|
||||
kuryr_ports = os_net.ports(**attrs)
|
||||
in_use_ports = self._get_in_use_ports()
|
||||
available_ports = [port for port in kuryr_ports
|
||||
if port['id'] not in in_use_ports]
|
||||
if port.id not in in_use_ports]
|
||||
|
||||
_, available_subports, _ = self._get_trunks_info()
|
||||
for port in available_ports:
|
||||
# NOTE(ltomasbo): ensure subports are not considered for
|
||||
# recovering in the case of multi pools
|
||||
if available_subports.get(port['id']):
|
||||
if available_subports.get(port.id):
|
||||
continue
|
||||
vif_plugin = port.get('binding:vif_type')
|
||||
port_host = port['binding:host_id']
|
||||
if not vif_plugin or not port_host:
|
||||
if not port.binding_vif_type or not port.binding_host_id:
|
||||
# NOTE(ltomasbo): kuryr-controller is running without the
|
||||
# rights to get the needed information to recover the ports.
|
||||
# Thus, removing the port instead
|
||||
os_net = clients.get_network_client()
|
||||
os_net.delete_port(port['id'])
|
||||
os_net.delete_port(port.id)
|
||||
continue
|
||||
subnet_id = port['fixed_ips'][0]['subnet_id']
|
||||
subnet_id = port.fixed_ips[0]['subnet_id']
|
||||
subnet = {
|
||||
subnet_id: utils.get_subnet(subnet_id)}
|
||||
vif = ovu.neutron_to_osvif_vif(vif_plugin, port, subnet)
|
||||
vif = ovu.neutron_to_osvif_vif(port.binding_vif_type, port, subnet)
|
||||
net_obj = subnet[subnet_id]
|
||||
pool_key = self._get_pool_key(port_host,
|
||||
port['project_id'],
|
||||
pool_key = self._get_pool_key(port.binding_host_id,
|
||||
port.project_id,
|
||||
net_obj.id, None)
|
||||
|
||||
self._existing_vifs[port['id']] = vif
|
||||
self._existing_vifs[port.id] = vif
|
||||
self._available_ports_pools.setdefault(
|
||||
pool_key, {}).setdefault(
|
||||
tuple(sorted(port['security_groups'])), []).append(
|
||||
port['id'])
|
||||
tuple(sorted(port.security_group_ids)), []).append(port.id)
|
||||
|
||||
LOG.info("PORTS POOL: pools updated with pre-created ports")
|
||||
self._create_healthcheck_file()
|
||||
|
@ -782,11 +778,11 @@ class NestedVIFPool(BaseVIFPool):
|
|||
tags = config.CONF.neutron_defaults.resource_tags
|
||||
if tags:
|
||||
attrs['tags'] = tags
|
||||
kuryr_subports = c_utils.get_ports_by_attrs(**attrs)
|
||||
kuryr_subports = os_net.ports(**attrs)
|
||||
for subport in kuryr_subports:
|
||||
if subport['id'] in self._recyclable_ports:
|
||||
sg_current[subport['id']] = tuple(sorted(
|
||||
subport['security_groups']))
|
||||
if subport.id in self._recyclable_ports:
|
||||
sg_current[subport.id] = tuple(sorted(
|
||||
subport.security_group_ids))
|
||||
|
||||
for port_id, pool_key in list(self._recyclable_ports.items()):
|
||||
if (not oslo_cfg.CONF.vif_pool.ports_pool_max or
|
||||
|
@ -879,7 +875,7 @@ class NestedVIFPool(BaseVIFPool):
|
|||
trunks_subports = [subport_id['port_id']
|
||||
for p_port in parent_ports.values()
|
||||
for subport_id in p_port['subports']]
|
||||
port_ids_to_delete = [p_id for p_id in available_subports.keys()
|
||||
port_ids_to_delete = [p_id for p_id in available_subports
|
||||
if p_id not in trunks_subports]
|
||||
for port_id in port_ids_to_delete:
|
||||
LOG.debug("Deleting port with wrong status: %s", port_id)
|
||||
|
@ -895,44 +891,46 @@ class NestedVIFPool(BaseVIFPool):
|
|||
|
||||
for subport in parent_port.get('subports'):
|
||||
kuryr_subport = available_subports.get(subport['port_id'])
|
||||
if kuryr_subport:
|
||||
subnet_id = kuryr_subport['fixed_ips'][0]['subnet_id']
|
||||
subnet = subnets[subnet_id]
|
||||
net_obj = subnet[subnet_id]
|
||||
pool_key = self._get_pool_key(host_addr,
|
||||
kuryr_subport['project_id'],
|
||||
net_obj.id, None)
|
||||
if not kuryr_subport:
|
||||
continue
|
||||
|
||||
if action == 'recover':
|
||||
vif = ovu.neutron_to_osvif_vif_nested_vlan(
|
||||
kuryr_subport, subnet, subport['segmentation_id'])
|
||||
subnet_id = kuryr_subport.fixed_ips[0]['subnet_id']
|
||||
subnet = subnets[subnet_id]
|
||||
net_obj = subnet[subnet_id]
|
||||
pool_key = self._get_pool_key(host_addr,
|
||||
kuryr_subport.project_id,
|
||||
net_obj.id, None)
|
||||
|
||||
self._existing_vifs[kuryr_subport['id']] = vif
|
||||
self._available_ports_pools.setdefault(
|
||||
pool_key, {}).setdefault(tuple(sorted(
|
||||
kuryr_subport['security_groups'])),
|
||||
[]).append(kuryr_subport['id'])
|
||||
if action == 'recover':
|
||||
vif = ovu.neutron_to_osvif_vif_nested_vlan(
|
||||
kuryr_subport, subnet, subport['segmentation_id'])
|
||||
|
||||
elif action == 'free':
|
||||
try:
|
||||
self._drv_vif._remove_subport(trunk_id,
|
||||
kuryr_subport['id'])
|
||||
os_net.delete_port(kuryr_subport['id'])
|
||||
self._drv_vif._release_vlan_id(
|
||||
subport['segmentation_id'])
|
||||
del self._existing_vifs[kuryr_subport['id']]
|
||||
self._available_ports_pools[pool_key][
|
||||
tuple(sorted(kuryr_subport['security_groups']
|
||||
))].remove(kuryr_subport['id'])
|
||||
except KeyError:
|
||||
LOG.debug('Port %s is not in the ports list.',
|
||||
kuryr_subport['id'])
|
||||
except (os_exc.SDKException, os_exc.HttpException):
|
||||
LOG.warning('Error removing the subport %s',
|
||||
kuryr_subport['id'])
|
||||
except ValueError:
|
||||
LOG.debug('Port %s is not in the available ports '
|
||||
'pool.', kuryr_subport['id'])
|
||||
self._existing_vifs[kuryr_subport.id] = vif
|
||||
self._available_ports_pools.setdefault(
|
||||
pool_key, {}).setdefault(tuple(sorted(
|
||||
kuryr_subport.security_group_ids)),
|
||||
[]).append(kuryr_subport.id)
|
||||
|
||||
elif action == 'free':
|
||||
try:
|
||||
self._drv_vif._remove_subport(trunk_id,
|
||||
kuryr_subport.id)
|
||||
os_net.delete_port(kuryr_subport.id)
|
||||
self._drv_vif._release_vlan_id(
|
||||
subport['segmentation_id'])
|
||||
del self._existing_vifs[kuryr_subport.id]
|
||||
self._available_ports_pools[pool_key][
|
||||
tuple(sorted(kuryr_subport.security_group_ids
|
||||
))].remove(kuryr_subport.id)
|
||||
except KeyError:
|
||||
LOG.debug('Port %s is not in the ports list.',
|
||||
kuryr_subport.id)
|
||||
except (os_exc.SDKException, os_exc.HttpException):
|
||||
LOG.warning('Error removing the subport %s',
|
||||
kuryr_subport.id)
|
||||
except ValueError:
|
||||
LOG.debug('Port %s is not in the available ports '
|
||||
'pool.', kuryr_subport.id)
|
||||
|
||||
@lockutils.synchronized('return_to_pool_nested')
|
||||
def populate_pool(self, trunk_ip, project_id, subnets, security_groups):
|
||||
|
|
|
@ -68,48 +68,6 @@ def get_pod_name(pod):
|
|||
return "%(namespace)s/%(name)s" % pod['metadata']
|
||||
|
||||
|
||||
def get_neutron_port(port_id=None, device_owner=None, ip_address=None):
|
||||
port_obj = {
|
||||
'allowed_address_pairs': [],
|
||||
'extra_dhcp_opts': [],
|
||||
'device_owner': 'compute:kuryr',
|
||||
'revision_number': 9,
|
||||
'port_security_enabled': True,
|
||||
'binding:profile': {},
|
||||
'fixed_ips': [
|
||||
{'subnet_id': 'e1942bb1-5f51-4646-9885-365b66215592',
|
||||
'ip_address': '10.10.0.5'},
|
||||
{'subnet_id': '4894baaf-df06-4a54-9885-9cd99d1cc245',
|
||||
'ip_address': 'fd35:7db5:e3fc:0:f816:3eff:fe80:d421'}],
|
||||
'id': '07cfe856-11cc-43d9-9200-ff4dc02d3620',
|
||||
'security_groups': ['cfb3dfc4-7a43-4ba1-b92d-b8b2650d7f88'],
|
||||
'binding:vif_details': {'port_filter': True,
|
||||
'ovs_hybrid_plug': False},
|
||||
'binding:vif_type': 'ovs',
|
||||
'mac_address': 'fa:16:3e:80:d4:21',
|
||||
'project_id': 'b6e8fb2bde594673923afc19cf168f3a',
|
||||
'status': 'DOWN',
|
||||
'binding:host_id': 'kuryr-devstack',
|
||||
'description': '',
|
||||
'tags': [],
|
||||
'device_id': '',
|
||||
'name': constants.KURYR_PORT_NAME,
|
||||
'admin_state_up': True,
|
||||
'network_id': 'ba44f957-c467-412b-b985-ae720514bc46',
|
||||
'tenant_id': 'b6e8fb2bde594673923afc19cf168f3a',
|
||||
'created_at': '2017-06-09T13:23:24Z',
|
||||
'binding:vnic_type': 'normal'}
|
||||
|
||||
if ip_address:
|
||||
port_obj['fixed_ips'][0].ip_address = ip_address
|
||||
if port_id:
|
||||
port_obj['id'] = port_id
|
||||
if device_owner:
|
||||
port_obj['device_owner'] = device_owner
|
||||
|
||||
return port_obj
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
class BaseVIFPool(test_base.TestCase):
|
||||
|
||||
|
@ -363,19 +321,18 @@ class BaseVIFPool(test_base.TestCase):
|
|||
|
||||
self.assertEqual(resp, [])
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test_cleanup_leftover_ports(self, m_get_ports):
|
||||
def test_cleanup_leftover_ports(self):
|
||||
cls = vif_pool.BaseVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
port_id = str(uuid.uuid4())
|
||||
port = get_neutron_port(port_id=port_id)
|
||||
net_id = port['network_id']
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
net_id = port.network_id
|
||||
tags = 'clusterTest'
|
||||
port['tags'] = [tags]
|
||||
m_get_ports.return_value = [port]
|
||||
port.tags = [tags]
|
||||
os_net.ports.return_value = [port]
|
||||
oslo_cfg.CONF.set_override('resource_tags',
|
||||
tags,
|
||||
group='neutron_defaults')
|
||||
|
@ -388,18 +345,17 @@ class BaseVIFPool(test_base.TestCase):
|
|||
os_net.networks.assert_called()
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test_cleanup_leftover_ports_different_network(self, m_get_ports):
|
||||
def test_cleanup_leftover_ports_different_network(self):
|
||||
cls = vif_pool.BaseVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
port_id = str(uuid.uuid4())
|
||||
port = get_neutron_port(port_id=port_id)
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
tags = 'clusterTest'
|
||||
port['tags'] = [tags]
|
||||
m_get_ports.return_value = [port]
|
||||
port.tags = [tags]
|
||||
os_net.ports.return_value = [port]
|
||||
oslo_cfg.CONF.set_override('resource_tags',
|
||||
tags,
|
||||
group='neutron_defaults')
|
||||
|
@ -411,20 +367,19 @@ class BaseVIFPool(test_base.TestCase):
|
|||
os_net.networks.assert_called()
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test_cleanup_leftover_ports_no_binding(self, m_get_ports):
|
||||
def test_cleanup_leftover_ports_no_binding(self):
|
||||
cls = vif_pool.BaseVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
port_id = str(uuid.uuid4())
|
||||
port = get_neutron_port(port_id=port_id)
|
||||
net_id = port['network_id']
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
net_id = port.network_id
|
||||
tags = 'clusterTest'
|
||||
port['tags'] = [tags]
|
||||
port['binding:host_id'] = None
|
||||
m_get_ports.return_value = [port]
|
||||
port.tags = [tags]
|
||||
port.binding_host_id = None
|
||||
os_net.ports.return_value = [port]
|
||||
oslo_cfg.CONF.set_override('resource_tags',
|
||||
tags,
|
||||
group='neutron_defaults')
|
||||
|
@ -435,20 +390,19 @@ class BaseVIFPool(test_base.TestCase):
|
|||
|
||||
cls._cleanup_leftover_ports(m_driver)
|
||||
os_net.networks.assert_called()
|
||||
os_net.delete_port.assert_called_once_with(port['id'])
|
||||
os_net.delete_port.assert_called_once_with(port.id)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test_cleanup_leftover_ports_no_tags(self, m_get_ports):
|
||||
def test_cleanup_leftover_ports_no_tags(self):
|
||||
cls = vif_pool.BaseVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
port_id = str(uuid.uuid4())
|
||||
port = get_neutron_port(port_id=port_id)
|
||||
net_id = port['network_id']
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
net_id = port.network_id
|
||||
tags = 'clusterTest'
|
||||
m_get_ports.return_value = [port]
|
||||
os_net.ports.return_value = [port]
|
||||
oslo_cfg.CONF.set_override('resource_tags',
|
||||
tags,
|
||||
group='neutron_defaults')
|
||||
|
@ -459,38 +413,36 @@ class BaseVIFPool(test_base.TestCase):
|
|||
|
||||
cls._cleanup_leftover_ports(m_driver)
|
||||
os_net.networks.assert_called()
|
||||
os_net.delete_port.assert_called_once_with(port['id'])
|
||||
os_net.delete_port.assert_called_once_with(port.id)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test_cleanup_leftover_ports_no_tagging(self, m_get_ports):
|
||||
def test_cleanup_leftover_ports_no_tagging(self):
|
||||
cls = vif_pool.BaseVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
port_id = str(uuid.uuid4())
|
||||
port = get_neutron_port(port_id=port_id)
|
||||
m_get_ports.return_value = [port]
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
os_net.ports.return_value = [port]
|
||||
|
||||
cls._cleanup_leftover_ports(m_driver)
|
||||
os_net.networks.assert_not_called()
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test_cleanup_leftover_ports_no_tagging_no_binding(self, m_get_ports):
|
||||
def test_cleanup_leftover_ports_no_tagging_no_binding(self):
|
||||
cls = vif_pool.BaseVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
port_id = str(uuid.uuid4())
|
||||
port = get_neutron_port(port_id=port_id)
|
||||
port['binding:host_id'] = None
|
||||
m_get_ports.return_value = [port]
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
port.binding_host_id = None
|
||||
os_net.ports.return_value = [port]
|
||||
|
||||
cls._cleanup_leftover_ports(m_driver)
|
||||
os_net.networks.assert_not_called()
|
||||
os_net.delete_port.assert_called_once_with(port['id'])
|
||||
os_net.delete_port.assert_called_once_with(port.id)
|
||||
|
||||
|
||||
@ddt.ddt
|
||||
|
@ -697,9 +649,8 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
|
||||
os_net.update_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
@ddt.data((0), (10))
|
||||
def test__trigger_return_to_pool(self, max_pool, m_get_ports):
|
||||
def test__trigger_return_to_pool(self, max_pool):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -717,8 +668,9 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('port_debug',
|
||||
True,
|
||||
group='kubernetes')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
os_net.ports.return_value = [
|
||||
munch.Munch({'id': port_id,
|
||||
'security_group_ids': ['security_group_modified']})]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
|
||||
cls._trigger_return_to_pool(m_driver)
|
||||
|
@ -727,9 +679,8 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
port_id, name=constants.KURYR_PORT_NAME, device_id='')
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
@ddt.data((0), (10))
|
||||
def test__trigger_return_to_pool_no_update(self, max_pool, m_get_ports):
|
||||
def test__trigger_return_to_pool_no_update(self, max_pool):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -747,8 +698,10 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('port_debug',
|
||||
False,
|
||||
group='kubernetes')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group']}]
|
||||
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
port.security_group_ids = ['security_group']
|
||||
os_net.ports.return_value = (p for p in [port])
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
|
||||
cls._trigger_return_to_pool(m_driver)
|
||||
|
@ -756,8 +709,7 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
os_net.update_port.assert_not_called()
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__trigger_return_to_pool_delete_port(self, m_get_ports):
|
||||
def test__trigger_return_to_pool_delete_port(self):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -774,8 +726,9 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('ports_pool_max',
|
||||
10,
|
||||
group='vif_pool')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
os_net.ports.return_value = [
|
||||
munch.Munch({'id': port_id,
|
||||
'security_group_ids': ['security_group_modified']})]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
|
||||
cls._trigger_return_to_pool(m_driver)
|
||||
|
@ -783,8 +736,7 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
os_net.update_port.assert_not_called()
|
||||
os_net.delete_port.assert_called_once_with(port_id)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__trigger_return_to_pool_update_exception(self, m_get_ports):
|
||||
def test__trigger_return_to_pool_update_exception(self):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -805,8 +757,9 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('port_debug',
|
||||
True,
|
||||
group='kubernetes')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
os_net.ports.return_value = [
|
||||
munch.Munch({'id': port_id,
|
||||
'security_group_ids': ['security_group_modified']})]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
os_net.update_port.side_effect = os_exc.SDKException
|
||||
|
||||
|
@ -816,8 +769,7 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
port_id, name=constants.KURYR_PORT_NAME, device_id='')
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__trigger_return_to_pool_delete_exception(self, m_get_ports):
|
||||
def test__trigger_return_to_pool_delete_exception(self):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -834,8 +786,9 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('ports_pool_max',
|
||||
5,
|
||||
group='vif_pool')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
os_net.ports.return_value = [
|
||||
munch.Munch({'id': port_id,
|
||||
'security_group_ids': ['security_group_modified']})]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
|
||||
cls._trigger_return_to_pool(m_driver)
|
||||
|
@ -843,8 +796,7 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
os_net.update_port.assert_not_called()
|
||||
os_net.delete_port.assert_called_once_with(port_id)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__trigger_return_to_pool_delete_key_error(self, m_get_ports):
|
||||
def test__trigger_return_to_pool_delete_key_error(self):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -860,8 +812,9 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('ports_pool_max',
|
||||
5,
|
||||
group='vif_pool')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
os_net.ports.return_value = [
|
||||
munch.Munch({'id': port_id,
|
||||
'security_group_ids': ['security_group_modified']})]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
|
||||
cls._trigger_return_to_pool(m_driver)
|
||||
|
@ -869,13 +822,12 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
os_net.update_port.assert_not_called()
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.neutron_to_osvif_vif')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test__recover_precreated_ports(self, m_get_subnet, m_to_osvif,
|
||||
m_get_ports):
|
||||
def test__recover_precreated_ports(self, m_get_subnet, m_to_osvif):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
cls_vif_driver = neutron_vif.NeutronPodVIFDriver
|
||||
vif_driver = mock.MagicMock(spec=cls_vif_driver)
|
||||
|
@ -885,17 +837,17 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
m_driver._available_ports_pools = {}
|
||||
|
||||
port_id = str(uuid.uuid4())
|
||||
port = get_neutron_port(port_id=port_id)
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
filtered_ports = [port]
|
||||
m_get_ports.return_value = filtered_ports
|
||||
os_net.ports.return_value = filtered_ports
|
||||
vif_plugin = mock.sentinel.plugin
|
||||
port['binding:vif_type'] = vif_plugin
|
||||
port.binding_vif_type = vif_plugin
|
||||
|
||||
oslo_cfg.CONF.set_override('port_debug',
|
||||
False,
|
||||
group='kubernetes')
|
||||
|
||||
subnet_id = port['fixed_ips'][0]['subnet_id']
|
||||
subnet_id = port.fixed_ips[0]['subnet_id']
|
||||
net_id = str(uuid.uuid4())
|
||||
_net = munch.Munch({'id': net_id,
|
||||
'name': None,
|
||||
|
@ -907,30 +859,29 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
vif = mock.sentinel.vif
|
||||
m_to_osvif.return_value = vif
|
||||
|
||||
pool_key = (port['binding:host_id'], port['project_id'], net_id)
|
||||
pool_key = (port.binding_host_id, port.project_id, net_id)
|
||||
m_driver._get_pool_key.return_value = pool_key
|
||||
m_driver._get_trunks_info.return_value = ({}, {}, {})
|
||||
|
||||
cls._recover_precreated_ports(m_driver)
|
||||
|
||||
m_get_ports.assert_called_once()
|
||||
os_net.ports.assert_called_once()
|
||||
m_get_subnet.assert_called_with(subnet_id)
|
||||
m_to_osvif.assert_called_once_with(vif_plugin, port, subnet)
|
||||
|
||||
self.assertEqual(m_driver._existing_vifs[port_id], vif)
|
||||
self.assertEqual(m_driver._available_ports_pools[pool_key],
|
||||
{tuple(port['security_groups']): [port_id]})
|
||||
{tuple(port.security_group_ids): [port_id]})
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.neutron_to_osvif_vif')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test__recover_precreated_ports_empty(self, m_get_subnet, m_to_osvif,
|
||||
m_get_ports):
|
||||
def test__recover_precreated_ports_empty(self, m_get_subnet, m_to_osvif):
|
||||
cls = vif_pool.NeutronVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
filtered_ports = []
|
||||
m_get_ports.return_value = filtered_ports
|
||||
os_net.ports.return_value = filtered_ports
|
||||
m_driver._get_trunks_info.return_value = ({}, {}, {})
|
||||
|
||||
oslo_cfg.CONF.set_override('port_debug',
|
||||
|
@ -939,7 +890,7 @@ class NeutronVIFPool(test_base.TestCase):
|
|||
|
||||
cls._recover_precreated_ports(m_driver)
|
||||
|
||||
m_get_ports.assert_called_once()
|
||||
os_net.ports.assert_called_once()
|
||||
m_get_subnet.assert_not_called()
|
||||
m_to_osvif.assert_not_called()
|
||||
|
||||
|
@ -1239,9 +1190,8 @@ class NestedVIFPool(test_base.TestCase):
|
|||
|
||||
os_net.update_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
@ddt.data((0), (10))
|
||||
def test__trigger_return_to_pool(self, max_pool, m_get_ports):
|
||||
def test__trigger_return_to_pool(self, max_pool):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -1259,8 +1209,9 @@ class NestedVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('port_debug',
|
||||
True,
|
||||
group='kubernetes')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
os_net.ports.return_value = [
|
||||
munch.Munch({'id': port_id,
|
||||
'security_group_ids': ['security_group_modified']})]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
|
||||
cls._trigger_return_to_pool(m_driver)
|
||||
|
@ -1270,9 +1221,8 @@ class NestedVIFPool(test_base.TestCase):
|
|||
name=constants.KURYR_PORT_NAME))
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
@ddt.data((0), (10))
|
||||
def test__trigger_return_to_pool_no_update(self, max_pool, m_get_ports):
|
||||
def test__trigger_return_to_pool_no_update(self, max_pool):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -1290,8 +1240,9 @@ class NestedVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('port_debug',
|
||||
False,
|
||||
group='kubernetes')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group']}]
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
port.security_group_ids = ['security_group']
|
||||
os_net.ports.return_value = [port]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
|
||||
cls._trigger_return_to_pool(m_driver)
|
||||
|
@ -1299,8 +1250,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
os_net.update_port.assert_not_called()
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__trigger_return_to_pool_delete_port(self, m_get_ports):
|
||||
def test__trigger_return_to_pool_delete_port(self):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -1323,8 +1273,9 @@ class NestedVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('ports_pool_max',
|
||||
10,
|
||||
group='vif_pool')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
port.security_group_ids = ['security_group_modified']
|
||||
os_net.ports.return_value = [port]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
m_driver._get_trunk_id.return_value = trunk_id
|
||||
m_driver._known_trunk_ids = {}
|
||||
|
@ -1337,8 +1288,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
m_driver._drv_vif._remove_subport.assert_called_once_with(trunk_id,
|
||||
port_id)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__trigger_return_to_pool_update_exception(self, m_get_ports):
|
||||
def test__trigger_return_to_pool_update_exception(self):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
|
||||
|
@ -1356,8 +1306,9 @@ class NestedVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('port_debug',
|
||||
True,
|
||||
group='kubernetes')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
port.security_group_ids = ['security_group_modified']
|
||||
os_net.ports.return_value = [port]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
os_net.update_port.side_effect = os_exc.SDKException
|
||||
|
||||
|
@ -1367,8 +1318,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
port_id, name=constants.KURYR_PORT_NAME)
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__trigger_return_to_pool_delete_exception(self, m_get_ports):
|
||||
def test__trigger_return_to_pool_delete_exception(self):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
@ -1389,8 +1339,9 @@ class NestedVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('ports_pool_max',
|
||||
5,
|
||||
group='vif_pool')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
port.security_group_ids = ['security_group_modified']
|
||||
os_net.ports.return_value = [port]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
m_driver._get_trunk_id.return_value = trunk_id
|
||||
m_driver._known_trunk_ids = {}
|
||||
|
@ -1403,8 +1354,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
port_id)
|
||||
os_net.delete_port.assert_called_once_with(port_id)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__trigger_return_to_pool_delete_key_error(self, m_get_ports):
|
||||
def test__trigger_return_to_pool_delete_key_error(self):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
@ -1423,8 +1373,9 @@ class NestedVIFPool(test_base.TestCase):
|
|||
oslo_cfg.CONF.set_override('ports_pool_max',
|
||||
5,
|
||||
group='vif_pool')
|
||||
m_get_ports.return_value = [
|
||||
{'id': port_id, 'security_groups': ['security_group_modified']}]
|
||||
port = fake.get_port_obj(port_id=port_id)
|
||||
port.security_group_ids = ['security_group_modified']
|
||||
os_net.ports.return_value = [port]
|
||||
m_driver._get_pool_size.return_value = pool_length
|
||||
m_driver._known_trunk_ids = {}
|
||||
m_driver._get_trunk_id.return_value = trunk_id
|
||||
|
@ -1452,14 +1403,14 @@ class NestedVIFPool(test_base.TestCase):
|
|||
self.assertEqual(ip_address, cls._get_parent_port_ip(m_driver,
|
||||
port_id))
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
@mock.patch('kuryr_kubernetes.utils.get_subnet')
|
||||
def test__get_trunk_info(self, m_get_subnet, m_get_ports):
|
||||
def test__get_trunk_info(self, m_get_subnet):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
port_id = str(uuid.uuid4())
|
||||
trunk_port = get_neutron_port(port_id=port_id)
|
||||
trunk_port = fake.get_port_obj(port_id=port_id)
|
||||
trunk_id = str(uuid.uuid4())
|
||||
trunk_details = {
|
||||
'trunk_id': trunk_id,
|
||||
|
@ -1467,34 +1418,35 @@ class NestedVIFPool(test_base.TestCase):
|
|||
'port_id': '85104e7d-8597-4bf7-94e7-a447ef0b50f1',
|
||||
'segmentation_type': 'vlan',
|
||||
'segmentation_id': 4056}]}
|
||||
trunk_port['trunk_details'] = trunk_details
|
||||
trunk_port.trunk_details = trunk_details
|
||||
|
||||
subport_id = str(uuid.uuid4())
|
||||
subport = get_neutron_port(port_id=subport_id,
|
||||
device_owner='trunk:subport')
|
||||
m_get_ports.return_value = [trunk_port, subport]
|
||||
subport = fake.get_port_obj(port_id=subport_id,
|
||||
device_owner='trunk:subport')
|
||||
os_net.ports.return_value = [trunk_port, subport]
|
||||
m_driver._get_in_use_ports.return_value = []
|
||||
subnet = mock.sentinel.subnet
|
||||
m_get_subnet.return_value = subnet
|
||||
|
||||
exp_p_ports = {trunk_id: {
|
||||
'ip': trunk_port['fixed_ips'][0]['ip_address'],
|
||||
'ip': trunk_port.fixed_ips[0]['ip_address'],
|
||||
'subports': trunk_details['sub_ports']}}
|
||||
exp_subnets = {subport['fixed_ips'][0]['subnet_id']:
|
||||
{subport['fixed_ips'][0]['subnet_id']: subnet}}
|
||||
exp_subnets = {subport.fixed_ips[0]['subnet_id']:
|
||||
{subport.fixed_ips[0]['subnet_id']: subnet}}
|
||||
|
||||
r_p_ports, r_subports, r_subnets = cls._get_trunks_info(m_driver)
|
||||
|
||||
self.assertEqual(r_p_ports, exp_p_ports)
|
||||
self.assertEqual(r_subports, {subport_id: subport})
|
||||
self.assertDictEqual(r_subports[subport_id].to_dict(),
|
||||
subport.to_dict())
|
||||
self.assertEqual(r_subnets, exp_subnets)
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__get_trunk_info_empty(self, m_get_ports):
|
||||
def test__get_trunk_info_empty(self):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
m_get_ports.return_value = []
|
||||
os_net.ports.return_value = []
|
||||
m_driver._get_in_use_ports.return_value = []
|
||||
|
||||
r_p_ports, r_subports, r_subnets = cls._get_trunks_info(m_driver)
|
||||
|
@ -1503,14 +1455,14 @@ class NestedVIFPool(test_base.TestCase):
|
|||
self.assertEqual(r_subports, {})
|
||||
self.assertEqual(r_subnets, {})
|
||||
|
||||
@mock.patch('kuryr_kubernetes.controller.drivers.utils.get_ports_by_attrs')
|
||||
def test__get_trunk_info_no_trunk_details(self, m_get_ports):
|
||||
def test__get_trunk_info_no_trunk_details(self):
|
||||
cls = vif_pool.NestedVIFPool
|
||||
m_driver = mock.MagicMock(spec=cls)
|
||||
os_net = self.useFixture(k_fix.MockNetworkClient()).client
|
||||
|
||||
port_id = str(uuid.uuid4())
|
||||
port = get_neutron_port(port_id=port_id, device_owner='compute:nova')
|
||||
m_get_ports.return_value = [port]
|
||||
port = fake.get_port_obj(port_id=port_id, device_owner='compute:nova')
|
||||
os_net.ports.return_value = [port]
|
||||
m_driver._get_in_use_ports.return_value = []
|
||||
|
||||
r_p_ports, r_subports, r_subnets = cls._get_trunks_info(m_driver)
|
||||
|
@ -1536,11 +1488,11 @@ class NestedVIFPool(test_base.TestCase):
|
|||
port_id = str(uuid.uuid4())
|
||||
trunk_id = str(uuid.uuid4())
|
||||
trunk_obj = self._get_trunk_obj(port_id=trunk_id, subport_id=port_id)
|
||||
port = get_neutron_port(port_id=port_id, device_owner='trunk:subport')
|
||||
port = fake.get_port_obj(port_id=port_id, device_owner='trunk:subport')
|
||||
|
||||
p_ports = self._get_parent_ports([trunk_obj])
|
||||
a_subports = {port_id: port}
|
||||
subnet_id = port['fixed_ips'][0]['subnet_id']
|
||||
subnet_id = port.fixed_ips[0]['subnet_id']
|
||||
net_id = str(uuid.uuid4())
|
||||
_net = munch.Munch({'id': net_id,
|
||||
'name': None,
|
||||
|
@ -1554,7 +1506,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
vif = mock.sentinel.vif
|
||||
m_to_osvif.return_value = vif
|
||||
|
||||
pool_key = (port['binding:host_id'], port['project_id'], net_id)
|
||||
pool_key = (port.binding_host_id, port.project_id, net_id)
|
||||
m_driver._get_pool_key.return_value = pool_key
|
||||
|
||||
cls._precreated_ports(m_driver, 'recover')
|
||||
|
@ -1562,7 +1514,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
m_driver._get_trunks_info.assert_called_once()
|
||||
self.assertEqual(m_driver._existing_vifs[port_id], vif)
|
||||
self.assertEqual(m_driver._available_ports_pools[pool_key],
|
||||
{tuple(port['security_groups']): [port_id]})
|
||||
{tuple(port.security_group_ids): [port_id]})
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.'
|
||||
|
@ -1582,14 +1534,14 @@ class NestedVIFPool(test_base.TestCase):
|
|||
port_id = str(uuid.uuid4())
|
||||
trunk_id = str(uuid.uuid4())
|
||||
trunk_obj = self._get_trunk_obj(port_id=trunk_id, subport_id=port_id)
|
||||
port = get_neutron_port(port_id=port_id, device_owner='trunk:subport')
|
||||
port = fake.get_port_obj(port_id=port_id, device_owner='trunk:subport')
|
||||
port_to_delete_id = str(uuid.uuid4())
|
||||
port_to_delete = get_neutron_port(port_id=port_to_delete_id,
|
||||
device_owner='trunk:subport')
|
||||
port_to_delete = fake.get_port_obj(port_id=port_to_delete_id,
|
||||
device_owner='trunk:subport')
|
||||
|
||||
p_ports = self._get_parent_ports([trunk_obj])
|
||||
a_subports = {port_id: port, port_to_delete_id: port_to_delete}
|
||||
subnet_id = port['fixed_ips'][0]['subnet_id']
|
||||
subnet_id = port.fixed_ips[0]['subnet_id']
|
||||
net_id = str(uuid.uuid4())
|
||||
_net = munch.Munch({'id': net_id,
|
||||
'name': None,
|
||||
|
@ -1603,7 +1555,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
vif = mock.sentinel.vif
|
||||
m_to_osvif.return_value = vif
|
||||
|
||||
pool_key = (port['binding:host_id'], port['project_id'], net_id)
|
||||
pool_key = (port.binding_host_id, port.project_id, net_id)
|
||||
m_driver._get_pool_key.return_value = pool_key
|
||||
|
||||
cls._precreated_ports(m_driver, 'recover')
|
||||
|
@ -1611,7 +1563,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
m_driver._get_trunks_info.assert_called_once()
|
||||
self.assertEqual(m_driver._existing_vifs[port_id], vif)
|
||||
self.assertEqual(m_driver._available_ports_pools[pool_key],
|
||||
{tuple(port['security_groups']): [port_id]})
|
||||
{tuple(port.security_group_ids): [port_id]})
|
||||
os_net.delete_port.assert_called_with(port_to_delete_id)
|
||||
|
||||
def test__precreated_ports_free(self):
|
||||
|
@ -1629,11 +1581,12 @@ class NestedVIFPool(test_base.TestCase):
|
|||
port_id = str(uuid.uuid4())
|
||||
trunk_id = str(uuid.uuid4())
|
||||
trunk_obj = self._get_trunk_obj(port_id=trunk_id, subport_id=port_id)
|
||||
port = get_neutron_port(port_id=port_id, device_owner='trunk:subport')
|
||||
port = fake.get_port_obj(port_id=port_id,
|
||||
device_owner='trunk:subport')
|
||||
|
||||
p_ports = self._get_parent_ports([trunk_obj])
|
||||
a_subports = {port_id: port}
|
||||
subnet_id = port['fixed_ips'][0]['subnet_id']
|
||||
subnet_id = port.fixed_ips[0]['subnet_id']
|
||||
net_id = str(uuid.uuid4())
|
||||
_net = munch.Munch({'id': net_id,
|
||||
'name': None,
|
||||
|
@ -1644,10 +1597,10 @@ class NestedVIFPool(test_base.TestCase):
|
|||
m_driver._get_trunks_info.return_value = (p_ports, a_subports,
|
||||
subnets)
|
||||
|
||||
pool_key = (port['binding:host_id'], port['project_id'], net_id)
|
||||
pool_key = (port.binding_host_id, port.project_id, net_id)
|
||||
m_driver._get_pool_key.return_value = pool_key
|
||||
m_driver._available_ports_pools = {
|
||||
pool_key: {tuple(port['security_groups']): [port_id]}}
|
||||
pool_key: {tuple(port.security_group_ids): [port_id]}}
|
||||
m_driver._existing_vifs = {port_id: mock.sentinel.vif}
|
||||
|
||||
cls._precreated_ports(m_driver, 'free')
|
||||
|
@ -1659,7 +1612,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
|
||||
self.assertEqual(m_driver._existing_vifs, {})
|
||||
self.assertEqual(m_driver._available_ports_pools[pool_key][tuple(
|
||||
port['security_groups'])], [])
|
||||
port.security_group_ids)], [])
|
||||
|
||||
@mock.patch('kuryr_kubernetes.os_vif_util.'
|
||||
'neutron_to_osvif_vif_nested_vlan')
|
||||
|
@ -1688,14 +1641,14 @@ class NestedVIFPool(test_base.TestCase):
|
|||
subport_id=port_id2,
|
||||
trunk_id=str(uuid.uuid4()))
|
||||
|
||||
port1 = get_neutron_port(port_id=port_id1,
|
||||
device_owner='trunk:subport')
|
||||
port2 = get_neutron_port(port_id=port_id2,
|
||||
device_owner='trunk:subport')
|
||||
port1 = fake.get_port_obj(port_id=port_id1,
|
||||
device_owner='trunk:subport')
|
||||
port2 = fake.get_port_obj(port_id=port_id2,
|
||||
device_owner='trunk:subport')
|
||||
|
||||
p_ports = self._get_parent_ports([trunk_obj1, trunk_obj2])
|
||||
a_subports = {port_id1: port1, port_id2: port2}
|
||||
subnet_id = port1['fixed_ips'][0]['subnet_id']
|
||||
subnet_id = port1.fixed_ips[0]['subnet_id']
|
||||
net_id = str(uuid.uuid4())
|
||||
_net = munch.Munch({'id': net_id,
|
||||
'name': None,
|
||||
|
@ -1739,14 +1692,14 @@ class NestedVIFPool(test_base.TestCase):
|
|||
trunk_obj['sub_ports'].append({'port_id': port_id2,
|
||||
'segmentation_type': 'vlan',
|
||||
'segmentation_id': 101})
|
||||
port1 = get_neutron_port(port_id=port_id1,
|
||||
device_owner='trunk:subport')
|
||||
port2 = get_neutron_port(port_id=port_id2,
|
||||
device_owner='trunk:subport')
|
||||
port1 = fake.get_port_obj(port_id=port_id1,
|
||||
device_owner='trunk:subport')
|
||||
port2 = fake.get_port_obj(port_id=port_id2,
|
||||
device_owner='trunk:subport')
|
||||
|
||||
p_ports = self._get_parent_ports([trunk_obj])
|
||||
a_subports = {port_id1: port1, port_id2: port2}
|
||||
subnet_id = port1['fixed_ips'][0]['subnet_id']
|
||||
subnet_id = port1.fixed_ips[0]['subnet_id']
|
||||
net_id = str(uuid.uuid4())
|
||||
_net = munch.Munch({'id': net_id,
|
||||
'name': None,
|
||||
|
@ -1761,7 +1714,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
vif = mock.sentinel.vif
|
||||
m_to_osvif.return_value = vif
|
||||
|
||||
pool_key = (port1['binding:host_id'], port1['project_id'], net_id)
|
||||
pool_key = (port1.binding_host_id, port1.project_id, net_id)
|
||||
m_driver._get_pool_key.return_value = pool_key
|
||||
cls._precreated_ports(m_driver, 'recover')
|
||||
|
||||
|
@ -1769,7 +1722,7 @@ class NestedVIFPool(test_base.TestCase):
|
|||
self.assertEqual(m_driver._existing_vifs, {port_id1: vif,
|
||||
port_id2: vif})
|
||||
self.assertEqual(m_driver._available_ports_pools[pool_key],
|
||||
{tuple(port1['security_groups']): [port_id1,
|
||||
{tuple(port1.security_group_ids): [port_id1,
|
||||
port_id2]})
|
||||
os_net.delete_port.assert_not_called()
|
||||
|
||||
|
|
Loading…
Reference in New Issue