Merge "Introduce proper diver mapping in VIF handler"
This commit is contained in:
commit
17c2bf4e9e
|
@ -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]
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in New Issue