Merge "Remove remaining notions of python-neutronclient"

This commit is contained in:
Zuul 2020-03-06 01:01:13 +00:00 committed by Gerrit Code Review
commit 44c0a307b5
13 changed files with 172 additions and 249 deletions

View File

@ -17,12 +17,12 @@ from functools import partial
import ipaddress import ipaddress
import os import os
from debtcollector import removals
from kuryr.lib import utils from kuryr.lib import utils
from openstack import connection from openstack import connection
from openstack import exceptions as os_exc from openstack import exceptions as os_exc
from openstack.network.v2 import port as os_port from openstack.network.v2 import port as os_port
from openstack.network.v2 import trunk as os_trunk from openstack.network.v2 import trunk as os_trunk
from openstack import resource as os_resource
from openstack import utils as os_utils from openstack import utils as os_utils
from kuryr_kubernetes import config from kuryr_kubernetes import config
@ -40,11 +40,6 @@ def get_network_client():
return _clients[_OPENSTACKSDK].network return _clients[_OPENSTACKSDK].network
@removals.remove
def get_neutron_client():
return _clients[_NEUTRON_CLIENT]
def get_openstacksdk(): def get_openstacksdk():
return _clients[_OPENSTACKSDK] return _clients[_OPENSTACKSDK]
@ -66,15 +61,10 @@ def get_compute_client():
def setup_clients(): def setup_clients():
setup_neutron_client()
setup_kubernetes_client() setup_kubernetes_client()
setup_openstacksdk() setup_openstacksdk()
def setup_neutron_client():
_clients[_NEUTRON_CLIENT] = utils.get_neutron_client()
def setup_kubernetes_client(): def setup_kubernetes_client():
if config.CONF.kubernetes.api_root: if config.CONF.kubernetes.api_root:
api_root = config.CONF.kubernetes.api_root api_root = config.CONF.kubernetes.api_root
@ -151,6 +141,11 @@ def handle_neutron_errors(method, *args, **kwargs):
def setup_openstacksdk(): def setup_openstacksdk():
auth_plugin = utils.get_auth_plugin('neutron') auth_plugin = utils.get_auth_plugin('neutron')
session = utils.get_keystone_session('neutron', auth_plugin) session = utils.get_keystone_session('neutron', auth_plugin)
# TODO(mdulko): To use Neutron's ability to do compare-and-swap updates we
# need to manually add support for inserting If-Match header
# into requests. At the moment we only need it for ports.
# Remove when lower-constraints openstacksdk supports this.
os_port.Port.if_match = os_resource.Header('If-Match')
conn = connection.Connection( conn = connection.Connection(
session=session, session=session,
region_name=getattr(config.CONF.neutron, 'region_name', None)) region_name=getattr(config.CONF.neutron, 'region_name', None))

View File

@ -31,10 +31,10 @@ class NestedDpdkPodVIFDriver(nested_vif.NestedPodVIFDriver):
# TODO(garyloug): maybe log a warning if the vswitch is not ovs-dpdk? # TODO(garyloug): maybe log a warning if the vswitch is not ovs-dpdk?
def request_vif(self, pod, project_id, subnets, security_groups): def request_vif(self, pod, project_id, subnets, security_groups):
neutron = clients.get_neutron_client() os_net = clients.get_network_client()
compute = clients.get_compute_client() compute = clients.get_compute_client()
vm_id = self._get_parent_port(neutron, pod)['device_id'] vm_id = self._get_parent_port(pod).device_id
net_id = utils.get_network_id(subnets) net_id = utils.get_network_id(subnets)
try: try:
@ -43,7 +43,7 @@ class NestedDpdkPodVIFDriver(nested_vif.NestedPodVIFDriver):
LOG.warning("Unable to create interface for server %s.", LOG.warning("Unable to create interface for server %s.",
vm_id) vm_id)
raise raise
port = neutron.show_port(result.port_id).get('port') port = os_net.get_port(result.port_id)
return ovu.neutron_to_osvif_vif_dpdk(port, subnets, pod) return ovu.neutron_to_osvif_vif_dpdk(port, subnets, pod)
def request_vifs(self, pod, project_id, subnets, security_groups, def request_vifs(self, pod, project_id, subnets, security_groups,
@ -52,10 +52,9 @@ class NestedDpdkPodVIFDriver(nested_vif.NestedPodVIFDriver):
raise NotImplementedError() raise NotImplementedError()
def release_vif(self, pod, vif, project_id=None, security_groups=None): def release_vif(self, pod, vif, project_id=None, security_groups=None):
neutron = clients.get_neutron_client()
compute = clients.get_compute_client() compute = clients.get_compute_client()
vm_id = self._get_parent_port(neutron, pod)['device_id'] vm_id = self._get_parent_port(pod).device_id
LOG.debug("release_vif for vm_id %s %s", vm_id, vif.id) LOG.debug("release_vif for vm_id %s %s", vm_id, vif.id)
try: try:

View File

@ -14,13 +14,14 @@
import threading import threading
from neutronclient.common import exceptions as n_exc from openstack import exceptions as o_exc
from oslo_config import cfg from oslo_config import cfg
from oslo_log import log as logging from oslo_log import log as logging
from kuryr_kubernetes import clients from kuryr_kubernetes import clients
from kuryr_kubernetes import config as kuryr_config from kuryr_kubernetes import config as kuryr_config
from kuryr_kubernetes.controller.drivers import nested_vif from kuryr_kubernetes.controller.drivers import nested_vif
from kuryr_kubernetes.controller.drivers import utils
from kuryr_kubernetes import exceptions as k_exc from kuryr_kubernetes import exceptions as k_exc
from kuryr_kubernetes import os_vif_util as ovu from kuryr_kubernetes import os_vif_util as ovu
@ -35,7 +36,7 @@ class NestedMacvlanPodVIFDriver(nested_vif.NestedPodVIFDriver):
self.lock = threading.Lock() self.lock = threading.Lock()
def request_vif(self, pod, project_id, subnets, security_groups): def request_vif(self, pod, project_id, subnets, security_groups):
neutron = clients.get_neutron_client() os_net = clients.get_network_client()
req = self._get_port_request(pod, project_id, subnets, req = self._get_port_request(pod, project_id, subnets,
security_groups) security_groups)
attempts = kuryr_config.CONF.pod_vif_nested.rev_update_attempts attempts = kuryr_config.CONF.pod_vif_nested.rev_update_attempts
@ -44,12 +45,12 @@ class NestedMacvlanPodVIFDriver(nested_vif.NestedPodVIFDriver):
vm_port = self._get_parent_port(pod) vm_port = self._get_parent_port(pod)
if not container_port: if not container_port:
container_port = neutron.create_port({'port': req}).get('port') container_port = os_net.create_port(**req)
_tag_neutron_port(container_port['id']) utils.tag_neutron_resources([container_port])
container_mac = container_port['mac_address'] container_mac = container_port.mac_address
container_ips = frozenset(entry['ip_address'] for entry in container_ips = frozenset(entry['ip_address'] for entry in
container_port['fixed_ips']) container_port.fixed_ips)
attempts = self._try_update_port( attempts = self._try_update_port(
attempts, self._add_to_allowed_address_pairs, vm_port, attempts, self._add_to_allowed_address_pairs, vm_port,
@ -63,23 +64,23 @@ class NestedMacvlanPodVIFDriver(nested_vif.NestedPodVIFDriver):
raise NotImplementedError() raise NotImplementedError()
def release_vif(self, pod, vif, project_id=None, security_groups=None): def release_vif(self, pod, vif, project_id=None, security_groups=None):
neutron = clients.get_neutron_client() os_net = clients.get_network_client()
attempts = kuryr_config.CONF.pod_vif_nested.rev_update_attempts attempts = kuryr_config.CONF.pod_vif_nested.rev_update_attempts
while attempts > 0: while attempts > 0:
container_port = neutron.show_port(vif.id).get('port') container_port = os_net.get_port(vif.id)
container_mac = container_port['mac_address'] container_mac = container_port.mac_address
container_ips = frozenset(entry['ip_address'] for entry in container_ips = frozenset(entry['ip_address'] for entry in
container_port['fixed_ips']) container_port.fixed_ips)
vm_port = self._get_parent_port(pod) vm_port = self._get_parent_port(pod)
attempts = self._try_update_port( attempts = self._try_update_port(
attempts, self._remove_from_allowed_address_pairs, attempts, self._remove_from_allowed_address_pairs,
vm_port, container_ips, container_mac) vm_port, container_ips, container_mac)
try: try:
neutron.delete_port(vif.id) os_net.delete_port(vif.id, ignore_missing=False)
except n_exc.PortNotFoundClient: except o_exc.ResourceNotFound:
LOG.warning("Unable to release port %s as it no longer exists.", LOG.warning("Unable to release port %s as it no longer exists.",
vif.id) vif.id)
@ -97,10 +98,10 @@ class NestedMacvlanPodVIFDriver(nested_vif.NestedPodVIFDriver):
raise k_exc.IntegrityError( raise k_exc.IntegrityError(
"Cannot add pair from the " "Cannot add pair from the "
"allowed_address_pairs of port %s: missing IP address", "allowed_address_pairs of port %s: missing IP address",
port['id']) port.id)
mac = mac_address if mac_address else port['mac_address'] mac = mac_address if mac_address else port.mac_address
address_pairs = port['allowed_address_pairs'] address_pairs = port.allowed_address_pairs
# look for duplicates or near-matches # look for duplicates or near-matches
for pair in address_pairs: for pair in address_pairs:
@ -121,8 +122,8 @@ class NestedMacvlanPodVIFDriver(nested_vif.NestedPodVIFDriver):
address_pairs.append({'ip_address': ip, 'mac_address': mac}) address_pairs.append({'ip_address': ip, 'mac_address': mac})
self._update_port_address_pairs( self._update_port_address_pairs(
port['id'], address_pairs, port.id, address_pairs,
revision_number=port['revision_number']) revision_number=port.revision_number)
LOG.debug("Added allowed_address_pair %s %s" % LOG.debug("Added allowed_address_pair %s %s" %
(str(ip_addresses,), mac_address)) (str(ip_addresses,), mac_address))
@ -133,10 +134,10 @@ class NestedMacvlanPodVIFDriver(nested_vif.NestedPodVIFDriver):
raise k_exc.IntegrityError( raise k_exc.IntegrityError(
"Cannot remove pair from the " "Cannot remove pair from the "
"allowed_address_pairs of port %s: missing IP address", "allowed_address_pairs of port %s: missing IP address",
port['id']) port.id)
mac = mac_address if mac_address else port['mac_address'] mac = mac_address if mac_address else port.mac_address
address_pairs = port['allowed_address_pairs'] address_pairs = port.allowed_address_pairs
updated = False updated = False
for ip in ip_addresses: for ip in ip_addresses:
@ -150,18 +151,15 @@ class NestedMacvlanPodVIFDriver(nested_vif.NestedPodVIFDriver):
if updated: if updated:
self._update_port_address_pairs( self._update_port_address_pairs(
port['id'], port.id,
address_pairs, address_pairs,
revision_number=port['revision_number']) revision_number=port.revision_number)
def _update_port_address_pairs(self, port_id, address_pairs, def _update_port_address_pairs(self, port_id, address_pairs,
revision_number=None): revision_number=None):
neutron = clients.get_neutron_client() os_net = clients.get_network_client()
neutron.update_port( os_net.update_port(port_id, allowed_address_pairs=address_pairs,
port_id, if_match=f'revision_number={revision_number}')
{'port': {'allowed_address_pairs': address_pairs}},
revision_number=revision_number
)
def _try_update_port(self, attempts, f, def _try_update_port(self, attempts, f,
vm_port, container_ips, container_mac): vm_port, container_ips, container_mac):
@ -169,7 +167,7 @@ class NestedMacvlanPodVIFDriver(nested_vif.NestedPodVIFDriver):
with self.lock: with self.lock:
f(vm_port, container_ips, container_mac) f(vm_port, container_ips, container_mac)
attempts = 0 attempts = 0
except n_exc.NeutronClientException: except o_exc.SDKException:
attempts -= 1 attempts -= 1
if attempts == 0: if attempts == 0:
LOG.exception("Error happened during updating port %s", LOG.exception("Error happened during updating port %s",
@ -177,17 +175,3 @@ class NestedMacvlanPodVIFDriver(nested_vif.NestedPodVIFDriver):
raise raise
return attempts return attempts
def _tag_neutron_port(res_id):
tags = CONF.neutron_defaults.resource_tags
if not tags:
return
neutron = clients.get_neutron_client()
try:
neutron.replace_tag('ports', res_id, body={"tags": tags})
except n_exc.NeutronClientException:
LOG.warning("Failed to tag port %s with %s. Ignoring, but this is "
"still unexpected.", res_id, tags, exc_info=True)

View File

@ -13,7 +13,6 @@
# License for the specific language governing permissions and limitations # License for the specific language governing permissions and limitations
# under the License. # under the License.
from neutronclient.common import exceptions as n_exc
from openstack import exceptions as os_exc from openstack import exceptions as os_exc
from oslo_config import cfg as oslo_cfg from oslo_config import cfg as oslo_cfg
from oslo_log import log as logging from oslo_log import log as logging
@ -131,7 +130,7 @@ class VIFHandler(k8s_base.ResourceEventHandler):
try: try:
self._drv_vif_pool.activate_vif(pod, vif) self._drv_vif_pool.activate_vif(pod, vif)
changed = True changed = True
except n_exc.PortNotFoundClient: except os_exc.ResourceNotFound:
LOG.debug("Port not found, possibly already " LOG.debug("Port not found, possibly already "
"deleted. No need to activate it") "deleted. No need to activate it")
finally: finally:

View File

@ -16,7 +16,6 @@
import itertools import itertools
import time import time
from neutronclient.common import exceptions as n_exc
from openstack import exceptions as os_exc from openstack import exceptions as os_exc
from oslo_log import log as logging from oslo_log import log as logging
from oslo_utils import excutils from oslo_utils import excutils
@ -78,12 +77,6 @@ class Retry(base.EventHandler):
try: try:
self._handler(event) self._handler(event)
break break
except n_exc.OverQuotaClient:
# NOTE(gryf): this exception handling should be removed after
# nested_macvlan_driver convertion to OpenStackSDK.
with excutils.save_and_reraise_exception() as ex:
if self._sleep(deadline, attempt, ex.value):
ex.reraise = False
except os_exc.ConflictException as ex: except os_exc.ConflictException as ex:
if ex.details.startswith('Quota exceeded for resources'): if ex.details.startswith('Quota exceeded for resources'):
with excutils.save_and_reraise_exception() as ex: with excutils.save_and_reraise_exception() as ex:

View File

@ -90,7 +90,7 @@ def _fake_vifs_string(dictionary=None):
def get_port_obj(port_id='07cfe856-11cc-43d9-9200-ff4dc02d3620', def get_port_obj(port_id='07cfe856-11cc-43d9-9200-ff4dc02d3620',
device_owner='compute:kuryr', ip_address=None, device_owner='compute:kuryr', ip_address=None,
vif_details=None): vif_details=None, **kwargs):
fixed_ips = [{'subnet_id': 'e1942bb1-5f51-4646-9885-365b66215592', fixed_ips = [{'subnet_id': 'e1942bb1-5f51-4646-9885-365b66215592',
'ip_address': '10.10.0.5'}, 'ip_address': '10.10.0.5'},
@ -138,4 +138,5 @@ def get_port_obj(port_id='07cfe856-11cc-43d9-9200-ff4dc02d3620',
'tags': [], 'tags': [],
'trunk_details': None, 'trunk_details': None,
'updated_at': u'2019-12-04T15:06:09Z'} 'updated_at': u'2019-12-04T15:06:09Z'}
port_data.update(kwargs)
return os_port.Port(**port_data) return os_port.Port(**port_data)

View File

@ -16,7 +16,6 @@
import mock import mock
import munch import munch
from neutronclient.common import exceptions as n_exc
from openstack import exceptions as os_exc from openstack import exceptions as os_exc
from openstack.load_balancer.v2 import listener as o_lis from openstack.load_balancer.v2 import listener as o_lis
from openstack.load_balancer.v2 import load_balancer as o_lb from openstack.load_balancer.v2 import load_balancer as o_lb
@ -110,7 +109,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
d_lbaasv2.LBaaSv2Driver.get_octavia_version(None)) d_lbaasv2.LBaaSv2Driver.get_octavia_version(None))
def test_ensure_loadbalancer(self): def test_ensure_loadbalancer(self):
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
cls = d_lbaasv2.LBaaSv2Driver cls = d_lbaasv2.LBaaSv2Driver
m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver) m_driver = mock.Mock(spec=d_lbaasv2.LBaaSv2Driver)
expected_resp = obj_lbaas.LBaaSLoadBalancer( expected_resp = obj_lbaas.LBaaSLoadBalancer(
@ -123,7 +122,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
lb_name = 'just_a_name' lb_name = 'just_a_name'
m_driver._ensure.return_value = expected_resp m_driver._ensure.return_value = expected_resp
neutron.update_port = mock.Mock() os_net.update_port = mock.Mock()
resp = cls.ensure_loadbalancer(m_driver, lb_name, project_id, resp = cls.ensure_loadbalancer(m_driver, lb_name, project_id,
subnet_id, ip, sg_ids, 'ClusterIP') subnet_id, ip, sg_ids, 'ClusterIP')
m_driver._ensure.assert_called_once_with(mock.ANY, m_driver._ensure.assert_called_once_with(mock.ANY,
@ -135,7 +134,7 @@ class TestLBaaSv2Driver(test_base.TestCase):
self.assertEqual(subnet_id, req.subnet_id) self.assertEqual(subnet_id, req.subnet_id)
self.assertEqual(ip, str(req.ip)) self.assertEqual(ip, str(req.ip))
self.assertEqual(expected_resp, resp) self.assertEqual(expected_resp, resp)
neutron.update_port.assert_not_called() os_net.update_port.assert_not_called()
def test_ensure_loadbalancer_not_ready(self): def test_ensure_loadbalancer_not_ready(self):
cls = d_lbaasv2.LBaaSv2Driver cls = d_lbaasv2.LBaaSv2Driver
@ -611,10 +610,10 @@ class TestLBaaSv2Driver(test_base.TestCase):
'loadbalancer_id': pool.loadbalancer_id, 'loadbalancer_id': pool.loadbalancer_id,
'protocol': pool.protocol, 'protocol': pool.protocol,
'lb_algorithm': lb_algorithm} 'lb_algorithm': lb_algorithm}
lbaas.create_pool.side_effect = n_exc.StateInvalidClient lbaas.create_pool.side_effect = os_exc.BadRequestException
self.assertRaises(n_exc.StateInvalidClient, cls._create_pool, m_driver, self.assertRaises(os_exc.BadRequestException, cls._create_pool,
pool) m_driver, pool)
lbaas.create_pool.assert_called_once_with(**req) lbaas.create_pool.assert_called_once_with(**req)
def test_find_pool_by_listener(self): def test_find_pool_by_listener(self):

View File

@ -20,7 +20,6 @@ from kuryr_kubernetes.controller.drivers import nested_dpdk_vif
from kuryr_kubernetes.tests import base as test_base from kuryr_kubernetes.tests import base as test_base
from kuryr_kubernetes.tests.unit import kuryr_fixtures as k_fix from kuryr_kubernetes.tests.unit import kuryr_fixtures as k_fix
from neutronclient.common import exceptions as ntron_exc
from openstack import exceptions as o_exc from openstack import exceptions as o_exc
@ -33,7 +32,7 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
def test_request_vif(self, m_get_network_id, m_to_vif): def test_request_vif(self, m_get_network_id, m_to_vif):
cls = nested_dpdk_vif.NestedDpdkPodVIFDriver cls = nested_dpdk_vif.NestedDpdkPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
compute = self.useFixture(k_fix.MockComputeClient()).client compute = self.useFixture(k_fix.MockComputeClient()).client
pod = mock.sentinel.pod pod = mock.sentinel.pod
@ -49,22 +48,22 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
vif = mock.Mock() vif = mock.Mock()
result = mock.Mock() result = mock.Mock()
parent_port.__getitem__.return_value = vm_id parent_port.device_id = vm_id
result.port_id = port_id result.port_id = port_id
compute.create_server_interface.return_value = result compute.create_server_interface.return_value = result
m_to_vif.return_value = vif m_to_vif.return_value = vif
m_driver._get_parent_port.return_value = parent_port m_driver._get_parent_port.return_value = parent_port
m_get_network_id.return_value = net_id m_get_network_id.return_value = net_id
neutron.show_port.return_value.get.return_value = port os_net.get_port.return_value = port
self.assertEqual(vif, cls.request_vif(m_driver, pod, project_id, self.assertEqual(vif, cls.request_vif(m_driver, pod, project_id,
subnets, security_groups)) subnets, security_groups))
m_driver._get_parent_port.assert_called_once_with(neutron, pod) m_driver._get_parent_port.assert_called_once_with(pod)
m_get_network_id.assert_called_once_with(subnets) m_get_network_id.assert_called_once_with(subnets)
compute.create_server_interface.assert_called_once_with( compute.create_server_interface.assert_called_once_with(
vm_id, net_id=net_id) vm_id, net_id=net_id)
neutron.show_port.assert_called_once_with(result.port_id) os_net.get_port.assert_called_once_with(result.port_id)
m_to_vif.assert_called_once_with(port, subnets, pod) m_to_vif.assert_called_once_with(port, subnets, pod)
@mock.patch( @mock.patch(
@ -73,7 +72,7 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
def test_request_vif_parent_not_found(self, m_get_network_id, m_to_vif): def test_request_vif_parent_not_found(self, m_get_network_id, m_to_vif):
cls = nested_dpdk_vif.NestedDpdkPodVIFDriver cls = nested_dpdk_vif.NestedDpdkPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
compute = self.useFixture(k_fix.MockComputeClient()).client compute = self.useFixture(k_fix.MockComputeClient()).client
pod = mock.sentinel.pod pod = mock.sentinel.pod
@ -94,17 +93,17 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
compute.create_server_interface.return_value = result compute.create_server_interface.return_value = result
m_to_vif.return_value = vif m_to_vif.return_value = vif
m_driver._get_parent_port.side_effect = \ m_driver._get_parent_port.side_effect = \
ntron_exc.NeutronClientException o_exc.SDKException
m_get_network_id.return_value = net_id m_get_network_id.return_value = net_id
neutron.show_port.return_value.get.return_value = port os_net.get_port.return_value = port
self.assertRaises(ntron_exc.NeutronClientException, cls.request_vif, self.assertRaises(o_exc.SDKException, cls.request_vif,
m_driver, pod, project_id, subnets, security_groups) m_driver, pod, project_id, subnets, security_groups)
m_driver._get_parent_port.assert_called_once_with(neutron, pod) m_driver._get_parent_port.assert_called_once_with(pod)
m_get_network_id.assert_not_called() m_get_network_id.assert_not_called()
compute.create_server_interface.assert_not_called() compute.create_server_interface.assert_not_called()
neutron.show_port.assert_not_called() os_net.get_port.assert_not_called()
m_to_vif.assert_not_called() m_to_vif.assert_not_called()
@mock.patch( @mock.patch(
@ -113,7 +112,7 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
def test_request_vif_attach_failed(self, m_get_network_id, m_to_vif): def test_request_vif_attach_failed(self, m_get_network_id, m_to_vif):
cls = nested_dpdk_vif.NestedDpdkPodVIFDriver cls = nested_dpdk_vif.NestedDpdkPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
compute = self.useFixture(k_fix.MockComputeClient()).client compute = self.useFixture(k_fix.MockComputeClient()).client
pod = mock.sentinel.pod pod = mock.sentinel.pod
@ -129,28 +128,27 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
vif = mock.Mock() vif = mock.Mock()
result = mock.Mock() result = mock.Mock()
parent_port.__getitem__.return_value = vm_id parent_port.device_id = vm_id
result.port_id = port_id result.port_id = port_id
m_to_vif.return_value = vif m_to_vif.return_value = vif
m_driver._get_parent_port.return_value = parent_port m_driver._get_parent_port.return_value = parent_port
m_get_network_id.return_value = net_id m_get_network_id.return_value = net_id
neutron.show_port.return_value.get.return_value = port os_net.get_port.return_value = port
compute.create_server_interface.side_effect = o_exc.SDKException compute.create_server_interface.side_effect = o_exc.SDKException
self.assertRaises(o_exc.SDKException, cls.request_vif, self.assertRaises(o_exc.SDKException, cls.request_vif,
m_driver, pod, project_id, subnets, security_groups) m_driver, pod, project_id, subnets, security_groups)
m_driver._get_parent_port.assert_called_once_with(neutron, pod) m_driver._get_parent_port.assert_called_once_with(pod)
m_get_network_id.assert_called_once_with(subnets) m_get_network_id.assert_called_once_with(subnets)
compute.create_server_interface.assert_called_once_with( compute.create_server_interface.assert_called_once_with(
vm_id, net_id=net_id) vm_id, net_id=net_id)
neutron.show_port.assert_not_called() os_net.get_port.assert_not_called()
m_to_vif.assert_not_called() m_to_vif.assert_not_called()
def test_release_vif(self): def test_release_vif(self):
cls = nested_dpdk_vif.NestedDpdkPodVIFDriver cls = nested_dpdk_vif.NestedDpdkPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client
compute = self.useFixture(k_fix.MockComputeClient()).client compute = self.useFixture(k_fix.MockComputeClient()).client
port_id = mock.sentinel.port_id port_id = mock.sentinel.port_id
@ -160,20 +158,19 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
vm_id = mock.sentinel.vm_id vm_id = mock.sentinel.vm_id
vm_port = mock.MagicMock() vm_port = mock.MagicMock()
vm_port.__getitem__.return_value = vm_id vm_port.device_id = vm_id
m_driver._get_parent_port.return_value = vm_port m_driver._get_parent_port.return_value = vm_port
cls.release_vif(m_driver, pod, vif) cls.release_vif(m_driver, pod, vif)
m_driver._get_parent_port.assert_called_once_with(neutron, pod) m_driver._get_parent_port.assert_called_once_with(pod)
compute.delete_server_interface.assert_called_once_with( compute.delete_server_interface.assert_called_once_with(
vif.id, server=vm_id) vif.id, server=vm_id)
def test_release_parent_not_found(self): def test_release_parent_not_found(self):
cls = nested_dpdk_vif.NestedDpdkPodVIFDriver cls = nested_dpdk_vif.NestedDpdkPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client
compute = self.useFixture(k_fix.MockComputeClient()).client compute = self.useFixture(k_fix.MockComputeClient()).client
pod = mock.sentinel.pod pod = mock.sentinel.pod
@ -185,18 +182,17 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
parent_port.__getitem__.return_value = vm_id parent_port.__getitem__.return_value = vm_id
m_driver._get_parent_port.side_effect = \ m_driver._get_parent_port.side_effect = \
ntron_exc.NeutronClientException o_exc.SDKException
self.assertRaises(ntron_exc.NeutronClientException, cls.release_vif, self.assertRaises(o_exc.SDKException, cls.release_vif,
m_driver, pod, vif) m_driver, pod, vif)
m_driver._get_parent_port.assert_called_once_with(neutron, pod) m_driver._get_parent_port.assert_called_once_with(pod)
compute.delete_server_interface.assert_not_called() compute.delete_server_interface.assert_not_called()
def test_release_detach_failed(self): def test_release_detach_failed(self):
cls = nested_dpdk_vif.NestedDpdkPodVIFDriver cls = nested_dpdk_vif.NestedDpdkPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client
compute = self.useFixture(k_fix.MockComputeClient()).client compute = self.useFixture(k_fix.MockComputeClient()).client
pod = mock.sentinel.pod pod = mock.sentinel.pod
@ -205,7 +201,7 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
vm_id = mock.sentinel.parent_port_id vm_id = mock.sentinel.parent_port_id
parent_port = mock.MagicMock() parent_port = mock.MagicMock()
parent_port.__getitem__.return_value = vm_id parent_port.device_id = vm_id
compute.delete_server_interface.side_effect = o_exc.SDKException compute.delete_server_interface.side_effect = o_exc.SDKException
@ -214,7 +210,7 @@ class TestNestedDpdkVIFDriver(test_base.TestCase):
self.assertRaises(o_exc.SDKException, cls.release_vif, self.assertRaises(o_exc.SDKException, cls.release_vif,
m_driver, pod, vif) m_driver, pod, vif)
m_driver._get_parent_port.assert_called_once_with(neutron, pod) m_driver._get_parent_port.assert_called_once_with(pod)
compute.delete_server_interface.assert_called_once_with( compute.delete_server_interface.assert_called_once_with(
vif.id, server=vm_id) vif.id, server=vm_id)

View File

@ -15,11 +15,12 @@ import mock
import threading import threading
from kuryr.lib import utils as lib_utils from kuryr.lib import utils as lib_utils
from neutronclient.common import exceptions as n_exc from openstack import exceptions as o_exc
from kuryr_kubernetes.controller.drivers import nested_macvlan_vif from kuryr_kubernetes.controller.drivers import nested_macvlan_vif
from kuryr_kubernetes import exceptions as k_exc from kuryr_kubernetes import exceptions as k_exc
from kuryr_kubernetes.tests import base as test_base from kuryr_kubernetes.tests import base as test_base
from kuryr_kubernetes.tests import fake
from kuryr_kubernetes.tests.unit import kuryr_fixtures as k_fix from kuryr_kubernetes.tests.unit import kuryr_fixtures as k_fix
@ -31,7 +32,7 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
def test_request_vif(self, m_to_vif): def test_request_vif(self, m_to_vif):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
pod = mock.sentinel.pod pod = mock.sentinel.pod
project_id = mock.sentinel.project_id project_id = mock.sentinel.project_id
@ -39,51 +40,51 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
security_groups = mock.sentinel.security_groups security_groups = mock.sentinel.security_groups
container_mac = mock.sentinel.mac_address container_mac = mock.sentinel.mac_address
container_ip = mock.sentinel.ip_address container_ip = mock.sentinel.ip_address
container_port = self._get_fake_port(mac_address=container_mac, container_port = fake.get_port_obj(mac_address=container_mac,
ip_address=container_ip) ip_address=container_ip)
vif = mock.Mock() vif = mock.Mock()
port_request = mock.sentinel.port_request port_request = {'foo': mock.sentinel.port_request}
vm_port = self._get_fake_port() vm_port = fake.get_port_obj()
m_to_vif.return_value = vif m_to_vif.return_value = vif
m_driver._get_port_request.return_value = port_request m_driver._get_port_request.return_value = port_request
m_driver._get_parent_port.return_value = vm_port m_driver._get_parent_port.return_value = vm_port
m_driver._try_update_port.return_value = 0 m_driver._try_update_port.return_value = 0
m_driver.lock = mock.MagicMock(spec=threading.Lock()) m_driver.lock = mock.MagicMock(spec=threading.Lock())
neutron.create_port.return_value = container_port os_net.create_port.return_value = container_port
self.assertEqual(vif, cls.request_vif(m_driver, pod, project_id, self.assertEqual(vif, cls.request_vif(m_driver, pod, project_id,
subnets, security_groups)) subnets, security_groups))
m_driver._get_port_request.assert_called_once_with( m_driver._get_port_request.assert_called_once_with(
pod, project_id, subnets, security_groups) pod, project_id, subnets, security_groups)
neutron.create_port.assert_called_once_with({'port': port_request}) os_net.create_port.assert_called_once_with(**port_request)
m_driver._get_parent_port.assert_called_once_with(pod) m_driver._get_parent_port.assert_called_once_with(pod)
m_driver._try_update_port.assert_called_once() m_driver._try_update_port.assert_called_once()
m_to_vif.assert_called_once_with(container_port['port'], subnets) m_to_vif.assert_called_once_with(container_port, subnets)
@mock.patch( @mock.patch(
'kuryr_kubernetes.os_vif_util.neutron_to_osvif_vif_nested_macvlan') 'kuryr_kubernetes.os_vif_util.neutron_to_osvif_vif_nested_macvlan')
def test_request_vif_port_create_failed(self, m_to_vif): def test_request_vif_port_create_failed(self, m_to_vif):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
pod = mock.sentinel.pod pod = mock.sentinel.pod
project_id = mock.sentinel.project_id project_id = mock.sentinel.project_id
subnets = mock.sentinel.subnets subnets = mock.sentinel.subnets
security_groups = mock.sentinel.security_groups security_groups = mock.sentinel.security_groups
port_request = mock.sentinel.port_request port_request = {'foo': mock.sentinel.port_request}
m_driver._get_port_request.return_value = port_request m_driver._get_port_request.return_value = port_request
neutron.create_port.side_effect = n_exc.NeutronClientException os_net.create_port.side_effect = o_exc.SDKException
self.assertRaises(n_exc.NeutronClientException, cls.request_vif, self.assertRaises(o_exc.SDKException, cls.request_vif,
m_driver, pod, project_id, subnets, security_groups) m_driver, pod, project_id, subnets, security_groups)
m_driver._get_port_request.assert_called_once_with( m_driver._get_port_request.assert_called_once_with(
pod, project_id, subnets, security_groups) pod, project_id, subnets, security_groups)
neutron.create_port.assert_called_once_with({'port': port_request}) os_net.create_port.assert_called_once_with(**port_request)
m_driver._try_update_port.assert_not_called() m_driver._try_update_port.assert_not_called()
m_to_vif.assert_not_called() m_to_vif.assert_not_called()
@ -92,7 +93,7 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
def test_request_vif_parent_not_found(self, m_to_vif): def test_request_vif_parent_not_found(self, m_to_vif):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
pod = mock.sentinel.pod pod = mock.sentinel.pod
project_id = mock.sentinel.project_id project_id = mock.sentinel.project_id
@ -100,20 +101,20 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
security_groups = mock.sentinel.security_groups security_groups = mock.sentinel.security_groups
container_mac = mock.sentinel.mac_address container_mac = mock.sentinel.mac_address
container_ip = mock.sentinel.ip_address container_ip = mock.sentinel.ip_address
container_port = self._get_fake_port(mac_address=container_mac, container_port = fake.get_port_obj(mac_address=container_mac,
ip_address=container_ip) ip_address=container_ip)
port_request = mock.sentinel.port_request port_request = mock.sentinel.port_request
m_driver._get_port_request.return_value = port_request m_driver._get_port_request.return_value = port_request
m_driver.lock = mock.MagicMock(spec=threading.Lock()) m_driver.lock = mock.MagicMock(spec=threading.Lock())
neutron.create_port.return_value = container_port os_net.create_port.return_value = container_port
m_driver._get_parent_port.side_effect = n_exc.NeutronClientException m_driver._get_parent_port.side_effect = o_exc.SDKException
self.assertRaises(n_exc.NeutronClientException, cls.request_vif, self.assertRaises(o_exc.SDKException, cls.request_vif,
m_driver, pod, project_id, subnets, security_groups) m_driver, pod, project_id, subnets, security_groups)
m_driver._get_port_request.assert_called_once_with( m_driver._get_port_request.assert_called_once_with(
pod, project_id, subnets, security_groups) pod, project_id, subnets, security_groups)
neutron.create_port.assert_not_called() os_net.create_port.assert_not_called()
m_driver._get_parent_port.assert_called_once_with(pod) m_driver._get_parent_port.assert_called_once_with(pod)
m_driver._try_update_port.assert_not_called() m_driver._try_update_port.assert_not_called()
m_to_vif.assert_not_called() m_to_vif.assert_not_called()
@ -121,7 +122,7 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
def test_release_vif(self): def test_release_vif(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
pod = mock.sentinel.pod pod = mock.sentinel.pod
@ -130,42 +131,44 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
container_mac = mock.sentinel.mac_address container_mac = mock.sentinel.mac_address
container_ip = mock.sentinel.ip_address container_ip = mock.sentinel.ip_address
container_port = self._get_fake_port(port_id, container_ip, container_port = fake.get_port_obj(
container_mac) port_id=port_id, ip_address=container_ip,
neutron.show_port.return_value = container_port mac_address=container_mac)
os_net.get_port.return_value = container_port
vm_port = self._get_fake_port() vm_port = fake.get_port_obj()
m_driver._get_parent_port.return_value = vm_port m_driver._get_parent_port.return_value = vm_port
m_driver._try_update_port.return_value = 0 m_driver._try_update_port.return_value = 0
m_driver.lock = mock.MagicMock(spec=threading.Lock()) m_driver.lock = mock.MagicMock(spec=threading.Lock())
cls.release_vif(m_driver, pod, vif) cls.release_vif(m_driver, pod, vif)
neutron.show_port.assert_called_once_with(port_id) os_net.get_port.assert_called_once_with(port_id)
m_driver._get_parent_port.assert_called_once_with(pod) m_driver._get_parent_port.assert_called_once_with(pod)
m_driver._try_update_port.assert_called_once() m_driver._try_update_port.assert_called_once()
neutron.delete_port.assert_called_once_with(vif.id) os_net.delete_port.assert_called_once_with(vif.id,
ignore_missing=False)
def test_release_vif_not_found(self): def test_release_vif_not_found(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
pod = mock.sentinel.pod pod = mock.sentinel.pod
vif = mock.Mock() vif = mock.Mock()
vif.id = lib_utils.get_hash() vif.id = lib_utils.get_hash()
neutron.show_port.side_effect = n_exc.PortNotFoundClient os_net.get_port.side_effect = o_exc.NotFoundException
self.assertRaises(n_exc.PortNotFoundClient, cls.release_vif, self.assertRaises(o_exc.NotFoundException, cls.release_vif,
m_driver, pod, vif) m_driver, pod, vif)
m_driver._remove_from_allowed_address_pairs.assert_not_called() m_driver._remove_from_allowed_address_pairs.assert_not_called()
neutron.delete_port.assert_not_called() os_net.delete_port.assert_not_called()
def test_release_vif_parent_not_found(self): def test_release_vif_parent_not_found(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
pod = mock.sentinel.pod pod = mock.sentinel.pod
@ -174,26 +177,27 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
container_mac = mock.sentinel.mac_address container_mac = mock.sentinel.mac_address
container_ip = mock.sentinel.ip_address container_ip = mock.sentinel.ip_address
container_port = self._get_fake_port(port_id, container_ip, container_port = fake.get_port_obj(
container_mac) port_id=port_id, ip_address=container_ip,
neutron.show_port.return_value = container_port mac_address=container_mac)
os_net.get_port.return_value = container_port
m_driver.lock = mock.MagicMock(spec=threading.Lock()) m_driver.lock = mock.MagicMock(spec=threading.Lock())
m_driver._get_parent_port.side_effect = n_exc.NeutronClientException m_driver._get_parent_port.side_effect = o_exc.SDKException
self.assertRaises(n_exc.NeutronClientException, cls.release_vif, self.assertRaises(o_exc.SDKException, cls.release_vif,
m_driver, pod, vif) m_driver, pod, vif)
neutron.show_port.assert_called_with(port_id) os_net.get_port.assert_called_with(port_id)
self.assertEqual(neutron.show_port.call_count, 1) self.assertEqual(os_net.get_port.call_count, 1)
m_driver._get_parent_port.assert_called_with(pod) m_driver._get_parent_port.assert_called_with(pod)
self.assertEqual(m_driver._get_parent_port.call_count, 1) self.assertEqual(m_driver._get_parent_port.call_count, 1)
m_driver._remove_from_allowed_address_pairs.assert_not_called() m_driver._remove_from_allowed_address_pairs.assert_not_called()
neutron.delete_port.assert_not_called() os_net.delete_port.assert_not_called()
def test_release_vif_delete_failed(self): def test_release_vif_delete_failed(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
pod = mock.sentinel.pod pod = mock.sentinel.pod
@ -202,22 +206,24 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
container_mac = mock.sentinel.mac_address container_mac = mock.sentinel.mac_address
container_ip = mock.sentinel.ip_addresses container_ip = mock.sentinel.ip_addresses
container_port = self._get_fake_port(port_id, container_ip, container_port = fake.get_port_obj(
container_mac) port_id=port_id, ip_address=container_ip,
neutron.show_port.return_value = container_port mac_address=container_mac)
neutron.delete_port.side_effect = n_exc.PortNotFoundClient os_net.get_port.return_value = container_port
os_net.delete_port.side_effect = o_exc.NotFoundException
vm_port = self._get_fake_port() vm_port = fake.get_port_obj()
m_driver._get_parent_port.return_value = vm_port m_driver._get_parent_port.return_value = vm_port
m_driver._try_update_port.return_value = 0 m_driver._try_update_port.return_value = 0
m_driver.lock = mock.MagicMock(spec=threading.Lock()) m_driver.lock = mock.MagicMock(spec=threading.Lock())
cls.release_vif(m_driver, pod, vif) cls.release_vif(m_driver, pod, vif)
neutron.show_port.assert_called_once_with(port_id) os_net.get_port.assert_called_once_with(port_id)
m_driver._get_parent_port.assert_called_once_with(pod) m_driver._get_parent_port.assert_called_once_with(pod)
m_driver._try_update_port.assert_called_once() m_driver._try_update_port.assert_called_once()
neutron.delete_port.assert_called_once_with(vif.id) os_net.delete_port.assert_called_once_with(vif.id,
ignore_missing=False)
@ddt.data((False), (True)) @ddt.data((False), (True))
def test_activate_vif(self, active_value): def test_activate_vif(self, active_value):
@ -235,10 +241,10 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
def test_add_to_allowed_address_pairs(self, m_mac): def test_add_to_allowed_address_pairs(self, m_mac):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
mac_addr = 'fa:16:3e:1b:30:00' if m_mac else vm_port['mac_address'] mac_addr = 'fa:16:3e:1b:30:00' if m_mac else vm_port['mac_address']
address_pairs = [ address_pairs = [
@ -259,15 +265,15 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
frozenset([ip_addr]), m_mac) frozenset([ip_addr]), m_mac)
m_driver._update_port_address_pairs.assert_called_once_with( m_driver._update_port_address_pairs.assert_called_once_with(
port_id, address_pairs, revision_number=1) port_id, address_pairs, revision_number=9)
def test_add_to_allowed_address_pairs_no_ip_addresses(self): def test_add_to_allowed_address_pairs_no_ip_addresses(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
self.assertRaises(k_exc.IntegrityError, self.assertRaises(k_exc.IntegrityError,
cls._add_to_allowed_address_pairs, m_driver, cls._add_to_allowed_address_pairs, m_driver,
@ -276,10 +282,10 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
def test_add_to_allowed_address_pairs_same_ip(self): def test_add_to_allowed_address_pairs_same_ip(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
address_pairs = [ address_pairs = [
{'ip_address': '10.0.0.30', {'ip_address': '10.0.0.30',
'mac_address': 'fa:16:3e:1b:30:00'}, 'mac_address': 'fa:16:3e:1b:30:00'},
@ -296,15 +302,15 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
frozenset([ip_addr]), mac_addr) frozenset([ip_addr]), mac_addr)
m_driver._update_port_address_pairs.assert_called_once_with( m_driver._update_port_address_pairs.assert_called_once_with(
port_id, address_pairs, revision_number=1) port_id, address_pairs, revision_number=9)
def test_add_to_allowed_address_pairs_already_present(self): def test_add_to_allowed_address_pairs_already_present(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
address_pairs = [ address_pairs = [
{'ip_address': '10.0.0.30', {'ip_address': '10.0.0.30',
'mac_address': 'fa:16:3e:1b:30:00'}, 'mac_address': 'fa:16:3e:1b:30:00'},
@ -324,10 +330,10 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
def test_remove_from_allowed_address_pairs(self, m_mac): def test_remove_from_allowed_address_pairs(self, m_mac):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
mac_addr = 'fa:16:3e:1b:30:00' if m_mac else vm_port['mac_address'] mac_addr = 'fa:16:3e:1b:30:00' if m_mac else vm_port['mac_address']
address_pairs = [ address_pairs = [
@ -348,15 +354,15 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
m_driver, vm_port, frozenset([ip_addr]), m_mac) m_driver, vm_port, frozenset([ip_addr]), m_mac)
m_driver._update_port_address_pairs.assert_called_once_with( m_driver._update_port_address_pairs.assert_called_once_with(
port_id, address_pairs, revision_number=1) port_id, address_pairs, revision_number=9)
def test_remove_from_allowed_address_pairs_no_ip_addresses(self): def test_remove_from_allowed_address_pairs_no_ip_addresses(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
self.assertRaises(k_exc.IntegrityError, self.assertRaises(k_exc.IntegrityError,
cls._remove_from_allowed_address_pairs, m_driver, cls._remove_from_allowed_address_pairs, m_driver,
@ -366,10 +372,10 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
def test_remove_from_allowed_address_pairs_missing(self, m_mac): def test_remove_from_allowed_address_pairs_missing(self, m_mac):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
mac_addr = 'fa:16:3e:1b:30:00' if m_mac else vm_port['mac_address'] mac_addr = 'fa:16:3e:1b:30:00' if m_mac else vm_port['mac_address']
address_pairs = [ address_pairs = [
@ -388,16 +394,16 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
m_driver, vm_port, frozenset(ip_addr), m_mac) m_driver, vm_port, frozenset(ip_addr), m_mac)
m_driver._update_port_address_pairs.assert_called_once_with( m_driver._update_port_address_pairs.assert_called_once_with(
port_id, address_pairs, revision_number=1) port_id, address_pairs, revision_number=9)
@ddt.data((None), ('fa:16:3e:71:cb:80')) @ddt.data((None), ('fa:16:3e:71:cb:80'))
def test_remove_from_allowed_address_pairs_no_update(self, m_mac): def test_remove_from_allowed_address_pairs_no_update(self, m_mac):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
mac_addr = 'fa:16:3e:1b:30:00' if m_mac else vm_port['mac_address'] mac_addr = 'fa:16:3e:1b:30:00' if m_mac else vm_port['mac_address']
address_pairs = [ address_pairs = [
@ -418,36 +424,36 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
def test_update_port_address_pairs(self): def test_update_port_address_pairs(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
pairs = mock.sentinel.allowed_address_pairs pairs = mock.sentinel.allowed_address_pairs
cls._update_port_address_pairs(m_driver, port_id, pairs, cls._update_port_address_pairs(m_driver, port_id, pairs,
revision_number=1) revision_number=9)
neutron.update_port.assert_called_with( os_net.update_port.assert_called_with(
port_id, port_id,
{'port': {'allowed_address_pairs': pairs}}, allowed_address_pairs=pairs,
revision_number=1) if_match='revision_number=9')
def test_update_port_address_pairs_failure(self): def test_update_port_address_pairs_failure(self):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
pairs = mock.sentinel.allowed_address_pairs pairs = mock.sentinel.allowed_address_pairs
neutron.update_port.side_effect = n_exc.NeutronClientException os_net.update_port.side_effect = o_exc.SDKException
self.assertRaises(n_exc.NeutronClientException, self.assertRaises(o_exc.SDKException,
cls._update_port_address_pairs, m_driver, cls._update_port_address_pairs, m_driver,
port_id, pairs, revision_number=1) port_id, pairs, revision_number=9)
neutron.update_port.assert_called_with( os_net.update_port.assert_called_with(
port_id, port_id,
{'port': {'allowed_address_pairs': pairs}}, allowed_address_pairs=pairs,
revision_number=1) if_match='revision_number=9')
@mock.patch('kuryr_kubernetes.controller.drivers.nested_macvlan_vif.' @mock.patch('kuryr_kubernetes.controller.drivers.nested_macvlan_vif.'
'NestedMacvlanPodVIFDriver._add_to_allowed_address_pairs') 'NestedMacvlanPodVIFDriver._add_to_allowed_address_pairs')
@ -455,10 +461,10 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
m_driver.lock = mock.MagicMock(spec=threading.Lock()) m_driver.lock = mock.MagicMock(spec=threading.Lock())
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
mac_addr = 'fa:16:3e:1b:30:00' mac_addr = 'fa:16:3e:1b:30:00'
address_pairs = [ address_pairs = [
@ -482,10 +488,10 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver cls = nested_macvlan_vif.NestedMacvlanPodVIFDriver
m_driver = mock.Mock(spec=cls) m_driver = mock.Mock(spec=cls)
m_driver.lock = mock.MagicMock(spec=threading.Lock()) m_driver.lock = mock.MagicMock(spec=threading.Lock())
self.useFixture(k_fix.MockNeutronClient()).client self.useFixture(k_fix.MockNetworkClient()).client
port_id = lib_utils.get_hash() port_id = lib_utils.get_hash()
vm_port = self._get_fake_port(port_id)['port'] vm_port = fake.get_port_obj(port_id)
mac_addr = 'fa:16:3e:1b:30:00' mac_addr = 'fa:16:3e:1b:30:00'
address_pairs = [ address_pairs = [
@ -498,45 +504,8 @@ class TestNestedMacvlanPodVIFDriver(test_base.TestCase):
ip_addr = ['10.0.0.29'] ip_addr = ['10.0.0.29']
aaapf_mock.side_effect = n_exc.NeutronClientException aaapf_mock.side_effect = o_exc.SDKException
self.assertRaises(n_exc.NeutronClientException, self.assertRaises(o_exc.SDKException,
cls._try_update_port, m_driver, 1, cls._try_update_port, m_driver, 1,
cls._add_to_allowed_address_pairs, cls._add_to_allowed_address_pairs,
vm_port, frozenset(ip_addr), mac_addr) vm_port, frozenset(ip_addr), mac_addr)
# TODO(garyloug) consider exending and moving to a parent class
def _get_fake_port(self, port_id=None, ip_address=None, mac_address=None):
fake_port = {
'port': {
"mac_address": "fa:16:3e:20:57:c4",
"fixed_ips": [],
"id": "07b21ebf-b105-4720-9f2e-95670c4032e4",
"allowed_address_pairs": [],
"revision_number": 1
}
}
if port_id:
fake_port['port']['id'] = port_id
if ip_address:
fake_port['port']['fixed_ips'].append({
"subnet_id": lib_utils.get_hash(),
"ip_address": ip_address
})
if mac_address:
fake_port['port']['mac_address'] = mac_address
return fake_port
def _get_fake_ports(self, ip_address, mac_address):
fake_port = self._get_fake_port(ip_address=ip_address,
mac_address=mac_address)
fake_port = fake_port['port']
fake_ports = {
'ports': [
fake_port
]
}
return fake_ports

View File

@ -119,10 +119,10 @@ class TestFipPubIpDriver(test_base.TestCase):
res_id = mock.sentinel.res_id res_id = mock.sentinel.res_id
vip_port_id = mock.sentinel.vip_port_id vip_port_id = mock.sentinel.vip_port_id
neutron = self.useFixture(k_fix.MockNeutronClient()).client os_net = self.useFixture(k_fix.MockNetworkClient()).client
neutron.update_ip.side_effect = os_exc.ConflictException os_net.update_ip.side_effect = os_exc.ConflictException
neutron.get_ip.return_value = munch.Munch({'id': res_id, os_net.get_ip.return_value = munch.Munch({'id': res_id,
'port_id': vip_port_id}) 'port_id': vip_port_id})
self.assertIsNone(driver.associate(res_id, vip_port_id)) self.assertIsNone(driver.associate(res_id, vip_port_id))
def test_associate_conflict_incorrect(self): def test_associate_conflict_incorrect(self):

View File

@ -15,7 +15,7 @@
import mock import mock
from neutronclient.common import exceptions as n_exc from openstack import exceptions as o_exc
from kuryr_kubernetes.controller.drivers import base as drivers from kuryr_kubernetes.controller.drivers import base as drivers
from kuryr_kubernetes.controller.drivers import vif_pool from kuryr_kubernetes.controller.drivers import vif_pool
@ -153,9 +153,9 @@ class TestNamespaceHandler(test_base.TestCase):
self._get_net_crd_id.return_value = None self._get_net_crd_id.return_value = None
self._get_net_crd.return_value = None self._get_net_crd.return_value = None
self._create_namespace_network.side_effect = ( self._create_namespace_network.side_effect = (
n_exc.NeutronClientException) o_exc.SDKException)
self.assertRaises(n_exc.NeutronClientException, self.assertRaises(o_exc.SDKException,
namespace.NamespaceHandler.on_present, namespace.NamespaceHandler.on_present,
self._handler, self._namespace) self._handler, self._namespace)
@ -226,9 +226,9 @@ class TestNamespaceHandler(test_base.TestCase):
self._add_kuryrnet_crd.return_value = net_crd self._add_kuryrnet_crd.return_value = net_crd
self._set_net_crd.side_effect = k_exc.K8sClientException self._set_net_crd.side_effect = k_exc.K8sClientException
self._rollback_network_resources.side_effect = ( self._rollback_network_resources.side_effect = (
n_exc.NeutronClientException) o_exc.SDKException)
self.assertRaises(n_exc.NeutronClientException, self.assertRaises(o_exc.SDKException,
namespace.NamespaceHandler.on_present, namespace.NamespaceHandler.on_present,
self._handler, self._namespace) self._handler, self._namespace)

View File

@ -27,14 +27,6 @@ class MockK8sClient(fixtures.Fixture):
lambda: self.client)) lambda: self.client))
class MockNeutronClient(fixtures.Fixture):
def _setUp(self):
self.client = mock.Mock()
self.useFixture(fixtures.MockPatch(
'kuryr_kubernetes.clients.get_neutron_client',
lambda: self.client))
class MockLBaaSClient(fixtures.Fixture): class MockLBaaSClient(fixtures.Fixture):
def _setUp(self): def _setUp(self):
self.client = mock.Mock() self.client = mock.Mock()

View File

@ -24,11 +24,9 @@ class TestK8sClient(test_base.TestCase):
@mock.patch('openstack.connection.Connection') @mock.patch('openstack.connection.Connection')
@mock.patch('kuryr_kubernetes.config.CONF') @mock.patch('kuryr_kubernetes.config.CONF')
@mock.patch('kuryr_kubernetes.k8s_client.K8sClient') @mock.patch('kuryr_kubernetes.k8s_client.K8sClient')
@mock.patch('kuryr.lib.utils.get_neutron_client') def test_setup_clients(self, m_k8s, m_cfg, m_openstack):
def test_setup_clients(self, m_neutron, m_k8s, m_cfg, m_openstack):
k8s_api_root = 'http://127.0.0.1:1234' k8s_api_root = 'http://127.0.0.1:1234'
neutron_mock = mock.Mock()
openstacksdk_mock = mock.Mock() openstacksdk_mock = mock.Mock()
openstacksdk_mock.load_balancer = mock.Mock() openstacksdk_mock.load_balancer = mock.Mock()
openstacksdk_mock.network = mock.Mock() openstacksdk_mock.network = mock.Mock()
@ -36,7 +34,6 @@ class TestK8sClient(test_base.TestCase):
k8s_dummy = object() k8s_dummy = object()
m_cfg.kubernetes.api_root = k8s_api_root m_cfg.kubernetes.api_root = k8s_api_root
m_neutron.return_value = neutron_mock
m_k8s.return_value = k8s_dummy m_k8s.return_value = k8s_dummy
m_openstack.return_value = openstacksdk_mock m_openstack.return_value = openstacksdk_mock
@ -44,7 +41,6 @@ class TestK8sClient(test_base.TestCase):
m_k8s.assert_called_with(k8s_api_root) m_k8s.assert_called_with(k8s_api_root)
self.assertIs(k8s_dummy, clients.get_kubernetes_client()) self.assertIs(k8s_dummy, clients.get_kubernetes_client())
self.assertIs(neutron_mock, clients.get_neutron_client())
self.assertIs(openstacksdk_mock, clients.get_openstacksdk()) self.assertIs(openstacksdk_mock, clients.get_openstacksdk())
self.assertIs(openstacksdk_mock.load_balancer, self.assertIs(openstacksdk_mock.load_balancer,
clients.get_loadbalancer_client()) clients.get_loadbalancer_client())