diff --git a/kuryr_kubernetes/cni/binding/base.py b/kuryr_kubernetes/cni/binding/base.py index b2e33f66f..6eae629d2 100644 --- a/kuryr_kubernetes/cni/binding/base.py +++ b/kuryr_kubernetes/cni/binding/base.py @@ -30,11 +30,11 @@ class BaseBindingDriver(object): """Interface to attach ports to pods.""" @abc.abstractmethod - def connect(self, vif, ifname, netns): + def connect(self, vif, ifname, netns, container_id): raise NotImplementedError() @abc.abstractmethod - def disconnect(self, vif, ifname, netns): + def disconnect(self, vif, ifname, netns, container_id): raise NotImplementedError() @@ -92,19 +92,19 @@ def _configure_l3(vif, ifname, netns, is_default_gateway): def connect(vif, instance_info, ifname, netns=None, report_health=None, - is_default_gateway=True): + is_default_gateway=True, container_id=None): driver = _get_binding_driver(vif) if report_health: report_health(driver.is_healthy()) os_vif.plug(vif, instance_info) - driver.connect(vif, ifname, netns) + driver.connect(vif, ifname, netns, container_id) _configure_l3(vif, ifname, netns, is_default_gateway) def disconnect(vif, instance_info, ifname, netns=None, report_health=None, - **kwargs): + container_id=None, **kwargs): driver = _get_binding_driver(vif) if report_health: report_health(driver.is_healthy()) - driver.disconnect(vif, ifname, netns) + driver.disconnect(vif, ifname, netns, container_id) os_vif.unplug(vif, instance_info) diff --git a/kuryr_kubernetes/cni/binding/bridge.py b/kuryr_kubernetes/cni/binding/bridge.py index c524d6dfb..ee50a4f5d 100644 --- a/kuryr_kubernetes/cni/binding/bridge.py +++ b/kuryr_kubernetes/cni/binding/bridge.py @@ -29,7 +29,7 @@ class BaseBridgeDriver(health.HealthHandler, b_base.BaseBindingDriver): def __init__(self): super(BaseBridgeDriver, self).__init__() - def connect(self, vif, ifname, netns): + def connect(self, vif, ifname, netns, container_id): host_ifname = vif.vif_name with b_base.get_ipdb() as h_ipdb: @@ -67,7 +67,7 @@ class BaseBridgeDriver(health.HealthHandler, b_base.BaseBindingDriver): h_iface.mtu = interface_mtu h_iface.up() - def disconnect(self, vif, ifname, netns): + def disconnect(self, vif, ifname, netns, container_id): pass @@ -75,8 +75,8 @@ class BridgeDriver(BaseBridgeDriver): def __init__(self): super(BridgeDriver, self).__init__() - def connect(self, vif, ifname, netns): - super(BridgeDriver, self).connect(vif, ifname, netns) + def connect(self, vif, ifname, netns, container_id): + super(BridgeDriver, self).connect(vif, ifname, netns, container_id) host_ifname = vif.vif_name bridge_name = vif.bridge_name @@ -84,7 +84,7 @@ class BridgeDriver(BaseBridgeDriver): with h_ipdb.interfaces[bridge_name] as h_br: h_br.add_port(host_ifname) - def disconnect(self, vif, ifname, netns): + def disconnect(self, vif, ifname, netns, container_id): # NOTE(ivc): veth pair is destroyed automatically along with the # container namespace pass @@ -95,16 +95,18 @@ class VIFOpenVSwitchDriver(BaseBridgeDriver): def __init__(self): super(VIFOpenVSwitchDriver, self).__init__() - def connect(self, vif, ifname, netns): - super(VIFOpenVSwitchDriver, self).connect(vif, ifname, netns) + def connect(self, vif, ifname, netns, container_id): + super(VIFOpenVSwitchDriver, self).connect(vif, ifname, netns, + container_id) # FIXME(irenab) use pod_id (neutron port device_id) instance_id = 'kuryr' net_utils.create_ovs_vif_port(vif.bridge_name, vif.vif_name, vif.port_profile.interface_id, vif.address, instance_id) - def disconnect(self, vif, ifname, netns): - super(VIFOpenVSwitchDriver, self).disconnect(vif, ifname, netns) + def disconnect(self, vif, ifname, netns, container_id): + super(VIFOpenVSwitchDriver, self).disconnect(vif, ifname, netns, + container_id) net_utils.delete_ovs_vif_port(vif.bridge_name, vif.vif_name) def is_healthy(self): diff --git a/kuryr_kubernetes/cni/binding/nested.py b/kuryr_kubernetes/cni/binding/nested.py index c969e0dca..36a96fc4b 100644 --- a/kuryr_kubernetes/cni/binding/nested.py +++ b/kuryr_kubernetes/cni/binding/nested.py @@ -35,7 +35,7 @@ class NestedDriver(health.HealthHandler, b_base.BaseBindingDriver): def _get_iface_create_args(self, vif): raise NotImplementedError() - def connect(self, vif, ifname, netns): + def connect(self, vif, ifname, netns, container_id): with b_base.get_ipdb() as h_ipdb: # NOTE(vikasc): Ideally 'ifname' should be used here but instead a # temporary name is being used while creating the device for @@ -62,7 +62,7 @@ class NestedDriver(health.HealthHandler, b_base.BaseBindingDriver): iface.address = str(vif.address) iface.up() - def disconnect(self, vif, ifname, netns): + def disconnect(self, vif, ifname, netns, container_id): # NOTE(vikasc): device will get deleted with container namespace, so # nothing to be done here. pass diff --git a/kuryr_kubernetes/cni/handlers.py b/kuryr_kubernetes/cni/handlers.py index 2a1c1dc11..47509c009 100644 --- a/kuryr_kubernetes/cni/handlers.py +++ b/kuryr_kubernetes/cni/handlers.py @@ -111,7 +111,8 @@ class AddHandler(CNIHandlerBase): is_default_gateway = (ifname == self._cni.CNI_IFNAME) b_base.connect(_vif, self._get_inst(pod), ifname, self._cni.CNI_NETNS, - is_default_gateway=is_default_gateway) + is_default_gateway=is_default_gateway, + container_id=self._cni.CNI_CONTAINERID) def should_callback(self, pod, vifs): """Called after all vifs have been processed @@ -147,7 +148,8 @@ class DelHandler(CNIHandlerBase): def on_vif(self, pod, vif, ifname): b_base.disconnect(vif, self._get_inst(pod), - self._cni.CNI_IFNAME, self._cni.CNI_NETNS) + self._cni.CNI_IFNAME, self._cni.CNI_NETNS, + container_id=self._cni.CNI_CONTAINERID) def should_callback(self, pod, vifs): """Called after all vifs have been processed diff --git a/kuryr_kubernetes/cni/plugins/k8s_cni_registry.py b/kuryr_kubernetes/cni/plugins/k8s_cni_registry.py index b00f38584..640c7d0b3 100644 --- a/kuryr_kubernetes/cni/plugins/k8s_cni_registry.py +++ b/kuryr_kubernetes/cni/plugins/k8s_cni_registry.py @@ -131,7 +131,8 @@ class K8sCNIRegistryPlugin(base_cni.CNIPlugin): is_default_gateway = (ifname == params.CNI_IFNAME) fn(vif, self._get_inst(pod), ifname, params.CNI_NETNS, report_health=self.report_drivers_health, - is_default_gateway=is_default_gateway) + is_default_gateway=is_default_gateway, + container_id=params.CNI_CONTAINERID) return vifs def _get_inst(self, pod): diff --git a/kuryr_kubernetes/tests/unit/cni/plugins/test_k8s_cni_registry.py b/kuryr_kubernetes/tests/unit/cni/plugins/test_k8s_cni_registry.py index 11c1d36f8..78d8254b0 100644 --- a/kuryr_kubernetes/tests/unit/cni/plugins/test_k8s_cni_registry.py +++ b/kuryr_kubernetes/tests/unit/cni/plugins/test_k8s_cni_registry.py @@ -45,7 +45,8 @@ class TestK8sCNIRegistryPlugin(base.TestCase): m_lock.assert_called_with('default/foo', external=True) m_connect.assert_called_with(mock.ANY, mock.ANY, 'eth0', 123, report_health=mock.ANY, - is_default_gateway=mock.ANY) + is_default_gateway=mock.ANY, + container_id='cont_id') self.assertEqual('cont_id', self.plugin.registry['default/foo']['containerid']) @@ -55,7 +56,8 @@ class TestK8sCNIRegistryPlugin(base.TestCase): m_disconnect.assert_called_with(mock.ANY, mock.ANY, 'eth0', 123, report_health=mock.ANY, - is_default_gateway=mock.ANY) + is_default_gateway=mock.ANY, + container_id='cont_id') @mock.patch('kuryr_kubernetes.cni.binding.base.disconnect') def test_del_wrong_container_id(self, m_disconnect): @@ -88,7 +90,8 @@ class TestK8sCNIRegistryPlugin(base.TestCase): 'containerid': 'cont_id'}) m_connect.assert_called_with(mock.ANY, mock.ANY, 'eth0', 123, report_health=mock.ANY, - is_default_gateway=mock.ANY) + is_default_gateway=mock.ANY, + container_id='cont_id') @mock.patch('time.sleep', mock.Mock()) def test_add_not_present(self):