Avoid raising ResourceNotReady exception at pod label handler

Pod label handler should not raise ResourceNotReady exception when
the pods don't have pod state annotations. The vif handler will add
those annotations and then a new on_modified event will be triggered
that the pod label will receive. Thus there is no need to ensure
the previous event gets re-executed.

Closes-Bug: 1808787
Partially Implements: blueprint k8s-network-policies

Change-Id: I7be86f7d03241e59164374c0712109e01c5c0842
This commit is contained in:
Luis Tomas Bolivar 2018-12-17 18:09:08 +01:00
parent f520f12f99
commit 4b832517db
2 changed files with 13 additions and 18 deletions

View File

@ -20,7 +20,6 @@ from kuryr_kubernetes import clients
from kuryr_kubernetes import constants
from kuryr_kubernetes.controller.drivers import base as drivers
from kuryr_kubernetes.controller.drivers import utils as driver_utils
from kuryr_kubernetes import exceptions
from kuryr_kubernetes.handlers import k8s_base
LOG = logging.getLogger(__name__)
@ -44,13 +43,11 @@ class PodLabelHandler(k8s_base.ResourceEventHandler):
specific_driver='multi_pool')
self._drv_vif_pool.set_vif_driver()
def on_modified(self, pod):
if driver_utils.is_host_network(pod):
def on_present(self, pod):
if driver_utils.is_host_network(pod) or not self._has_pod_state(pod):
# NOTE(ltomasbo): The event will be retried once the vif handler
# annotates the pod with the pod state.
return
if not self._has_pod_state(pod):
# NOTE(ltomasbo): Ensuring the event is retried and the right
# pod label annotation is added to the pod
raise exceptions.ResourceNotReady(pod)
current_pod_labels = pod['metadata'].get('labels')
previous_pod_labels = self._get_pod_labels(pod)

View File

@ -17,7 +17,6 @@ import mock
from kuryr_kubernetes import constants as k_const
from kuryr_kubernetes.controller.drivers import base as drivers
from kuryr_kubernetes.controller.handlers import pod_label as p_label
from kuryr_kubernetes import exceptions
from kuryr_kubernetes.tests import base as test_base
@ -73,11 +72,11 @@ class TestPodLabelHandler(test_base.TestCase):
self.assertEqual(sg_driver, handler._drv_sg)
self.assertEqual(vif_pool_driver, handler._drv_vif_pool)
def test_on_modified(self):
def test_on_present(self):
self._has_pod_state.return_value = True
self._get_pod_labels.return_value = {'test1': 'test'}
p_label.PodLabelHandler.on_modified(self._handler, self._pod)
p_label.PodLabelHandler.on_present(self._handler, self._pod)
self._has_pod_state.assert_called_once_with(self._pod)
self._get_pod_labels.assert_called_once_with(self._pod)
@ -86,34 +85,33 @@ class TestPodLabelHandler(test_base.TestCase):
self._update_vif_sgs.assert_called_once_with(self._pod, [self._sg_id])
self._set_pod_labels.assert_called_once_with(self._pod, None)
def test_on_modified_no_state(self):
def test_on_present_no_state(self):
self._has_pod_state.return_value = False
self.assertRaises(exceptions.ResourceNotReady,
p_label.PodLabelHandler.on_modified, self._handler,
self._pod)
resp = p_label.PodLabelHandler.on_present(self._handler, self._pod)
self.assertIsNone(resp)
self._has_pod_state.assert_called_once_with(self._pod)
self._get_pod_labels.assert_not_called()
self._set_pod_labels.assert_not_called()
def test_on_modified_no_labels(self):
def test_on_present_no_labels(self):
self._has_pod_state.return_value = True
self._get_pod_labels.return_value = None
p_label.PodLabelHandler.on_modified(self._handler, self._pod)
p_label.PodLabelHandler.on_present(self._handler, self._pod)
self._has_pod_state.assert_called_once_with(self._pod)
self._get_pod_labels.assert_called_once_with(self._pod)
self._set_pod_labels.assert_not_called()
def test_on_modified_no_changes(self):
def test_on_present_no_changes(self):
self._has_pod_state.return_value = True
pod_with_label = self._pod.copy()
pod_with_label['metadata']['labels'] = {'test1': 'test'}
self._get_pod_labels.return_value = {'test1': 'test'}
p_label.PodLabelHandler.on_modified(self._handler, pod_with_label)
p_label.PodLabelHandler.on_present(self._handler, pod_with_label)
self._has_pod_state.assert_called_once_with(pod_with_label)
self._get_pod_labels.assert_called_once_with(pod_with_label)