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)
|
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):
|
class NoopVIFPool(base.VIFPoolDriver):
|
||||||
"""No pool VIFs for Kubernetes Pods"""
|
"""No pool VIFs for Kubernetes Pods"""
|
||||||
@ -794,12 +801,12 @@ class MultiVIFPool(base.VIFPoolDriver):
|
|||||||
pod, project_id, subnets, security_groups)
|
pod, project_id, subnets, security_groups)
|
||||||
|
|
||||||
def release_vif(self, pod, vif, *argv):
|
def release_vif(self, pod, vif, *argv):
|
||||||
pod_vif_type = self._get_pod_vif_type(pod)
|
vif_drv_alias = self._get_vif_drv_alias(vif)
|
||||||
self._vif_drvs[pod_vif_type].release_vif(pod, vif, *argv)
|
self._vif_drvs[vif_drv_alias].release_vif(pod, vif, *argv)
|
||||||
|
|
||||||
def activate_vif(self, pod, vif):
|
def activate_vif(self, pod, vif):
|
||||||
pod_vif_type = self._get_pod_vif_type(pod)
|
vif_drv_alias = self._get_vif_drv_alias(vif)
|
||||||
self._vif_drvs[pod_vif_type].activate_vif(pod, vif)
|
self._vif_drvs[vif_drv_alias].activate_vif(pod, vif)
|
||||||
|
|
||||||
def delete_network_pools(self, net_id):
|
def delete_network_pools(self, net_id):
|
||||||
for vif_drv in self._vif_drvs.values():
|
for vif_drv in self._vif_drvs.values():
|
||||||
@ -827,3 +834,7 @@ class MultiVIFPool(base.VIFPoolDriver):
|
|||||||
oslo_cfg.CONF.kubernetes.pod_vif_driver)
|
oslo_cfg.CONF.kubernetes.pod_vif_driver)
|
||||||
return pod_vif
|
return pod_vif
|
||||||
return oslo_cfg.CONF.kubernetes.pod_vif_driver
|
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 objects
|
||||||
from kuryr_kubernetes import utils
|
from kuryr_kubernetes import utils
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
@ -95,13 +94,14 @@ class VIFHandler(k8s_base.ResourceEventHandler):
|
|||||||
# FIXME(ivc): improve granularity of K8sClient exceptions:
|
# FIXME(ivc): improve granularity of K8sClient exceptions:
|
||||||
# only resourceVersion conflict should be ignored
|
# only resourceVersion conflict should be ignored
|
||||||
for ifname, vif in state.vifs.items():
|
for ifname, vif in state.vifs.items():
|
||||||
self._drv_for_vif(vif).release_vif(pod, vif, project_id,
|
self._drv_vif_pool.release_vif(pod, vif,
|
||||||
security_groups)
|
project_id,
|
||||||
|
security_groups)
|
||||||
else:
|
else:
|
||||||
changed = False
|
changed = False
|
||||||
for ifname, vif in state.vifs.items():
|
for ifname, vif in state.vifs.items():
|
||||||
if not vif.active:
|
if not vif.active:
|
||||||
self._drv_for_vif(vif).activate_vif(pod, vif)
|
self._drv_vif_pool.activate_vif(pod, vif)
|
||||||
changed = True
|
changed = True
|
||||||
if changed:
|
if changed:
|
||||||
self._set_pod_state(pod, state)
|
self._set_pod_state(pod, state)
|
||||||
@ -124,12 +124,8 @@ class VIFHandler(k8s_base.ResourceEventHandler):
|
|||||||
state = self._get_pod_state(pod)
|
state = self._get_pod_state(pod)
|
||||||
if state:
|
if state:
|
||||||
for ifname, vif in state.vifs.items():
|
for ifname, vif in state.vifs.items():
|
||||||
self._drv_for_vif(vif).release_vif(pod, vif, project_id,
|
self._drv_vif_pool.release_vif(pod, vif, project_id,
|
||||||
security_groups)
|
security_groups)
|
||||||
|
|
||||||
def _drv_for_vif(self, vif):
|
|
||||||
# TODO(danil): a better polymorphism is required here
|
|
||||||
return self._drv_vif_pool
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _is_host_network(pod):
|
def _is_host_network(pod):
|
||||||
|
@ -84,9 +84,6 @@ class TestVIFHandler(test_base.TestCase):
|
|||||||
self._set_vifs_driver.return_value = mock.Mock(
|
self._set_vifs_driver.return_value = mock.Mock(
|
||||||
spec=drivers.PodVIFDriver)
|
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.MultiVIFDriver, 'get_enabled_drivers')
|
||||||
@mock.patch.object(drivers.VIFPoolDriver, 'set_vif_driver')
|
@mock.patch.object(drivers.VIFPoolDriver, 'set_vif_driver')
|
||||||
@mock.patch.object(drivers.VIFPoolDriver, 'get_instance')
|
@mock.patch.object(drivers.VIFPoolDriver, 'get_instance')
|
||||||
|
Loading…
Reference in New Issue
Block a user