Merge "Introduce proper diver mapping in VIF handler"

This commit is contained in:
Zuul 2018-09-07 09:36:51 +00:00 committed by Gerrit Code Review
commit 17c2bf4e9e
3 changed files with 21 additions and 17 deletions

View File

@ -81,6 +81,13 @@ MEMOIZE = cache.get_memoization_decorator(
cache.configure_cache_region(oslo_cfg.CONF, node_driver_cache_region)
VIF_TYPE_TO_DRIVER_MAPPING = {
'VIFOpenVSwitch': 'neutron-vif',
'VIFBridge': 'neutron-vif',
'VIFVlanNested': 'nested-vlan',
'VIFMacvlanNested': 'nested-macvlan'
}
class NoopVIFPool(base.VIFPoolDriver):
"""No pool VIFs for Kubernetes Pods"""
@ -794,12 +801,12 @@ class MultiVIFPool(base.VIFPoolDriver):
pod, project_id, subnets, security_groups)
def release_vif(self, pod, vif, *argv):
pod_vif_type = self._get_pod_vif_type(pod)
self._vif_drvs[pod_vif_type].release_vif(pod, vif, *argv)
vif_drv_alias = self._get_vif_drv_alias(vif)
self._vif_drvs[vif_drv_alias].release_vif(pod, vif, *argv)
def activate_vif(self, pod, vif):
pod_vif_type = self._get_pod_vif_type(pod)
self._vif_drvs[pod_vif_type].activate_vif(pod, vif)
vif_drv_alias = self._get_vif_drv_alias(vif)
self._vif_drvs[vif_drv_alias].activate_vif(pod, vif)
def delete_network_pools(self, net_id):
for vif_drv in self._vif_drvs.values():
@ -827,3 +834,7 @@ class MultiVIFPool(base.VIFPoolDriver):
oslo_cfg.CONF.kubernetes.pod_vif_driver)
return pod_vif
return oslo_cfg.CONF.kubernetes.pod_vif_driver
def _get_vif_drv_alias(self, vif):
vif_type_name = type(vif).__name__
return VIF_TYPE_TO_DRIVER_MAPPING[vif_type_name]

View File

@ -24,7 +24,6 @@ from kuryr_kubernetes.handlers import k8s_base
from kuryr_kubernetes import objects
from kuryr_kubernetes import utils
LOG = logging.getLogger(__name__)
@ -95,13 +94,14 @@ class VIFHandler(k8s_base.ResourceEventHandler):
# FIXME(ivc): improve granularity of K8sClient exceptions:
# only resourceVersion conflict should be ignored
for ifname, vif in state.vifs.items():
self._drv_for_vif(vif).release_vif(pod, vif, project_id,
security_groups)
self._drv_vif_pool.release_vif(pod, vif,
project_id,
security_groups)
else:
changed = False
for ifname, vif in state.vifs.items():
if not vif.active:
self._drv_for_vif(vif).activate_vif(pod, vif)
self._drv_vif_pool.activate_vif(pod, vif)
changed = True
if changed:
self._set_pod_state(pod, state)
@ -124,12 +124,8 @@ class VIFHandler(k8s_base.ResourceEventHandler):
state = self._get_pod_state(pod)
if state:
for ifname, vif in state.vifs.items():
self._drv_for_vif(vif).release_vif(pod, vif, project_id,
security_groups)
def _drv_for_vif(self, vif):
# TODO(danil): a better polymorphism is required here
return self._drv_vif_pool
self._drv_vif_pool.release_vif(pod, vif, project_id,
security_groups)
@staticmethod
def _is_host_network(pod):

View File

@ -84,9 +84,6 @@ class TestVIFHandler(test_base.TestCase):
self._set_vifs_driver.return_value = mock.Mock(
spec=drivers.PodVIFDriver)
self._handler._drv_for_vif = h_vif.VIFHandler._drv_for_vif.__get__(
self._handler)
@mock.patch.object(drivers.MultiVIFDriver, 'get_enabled_drivers')
@mock.patch.object(drivers.VIFPoolDriver, 'set_vif_driver')
@mock.patch.object(drivers.VIFPoolDriver, 'get_instance')