From 7bea8397ca0815609b62b0799f9159492399fe13 Mon Sep 17 00:00:00 2001 From: "Mytnyk, Volodymyr" Date: Wed, 18 Jul 2018 16:56:23 +0100 Subject: kubernetes_utils: avoid 404 error code in delete_network() JIRA: YARDSTICK-1316 Change-Id: I792c873b42aba80be62ff7a93f6d02ea89e42356 Signed-off-by: Mytnyk, Volodymyr --- yardstick/common/kubernetes_utils.py | 12 ++++++++---- yardstick/orchestrator/kubernetes.py | 2 +- .../tests/unit/common/test_kubernetes_utils.py | 21 +++++++++++++++++---- .../tests/unit/orchestrator/test_kubernetes.py | 2 +- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/yardstick/common/kubernetes_utils.py b/yardstick/common/kubernetes_utils.py index f5b0443ea..c90f73e43 100644 --- a/yardstick/common/kubernetes_utils.py +++ b/yardstick/common/kubernetes_utils.py @@ -266,7 +266,8 @@ def create_network(scope, group, version, plural, body, namespace='default'): action='create', resource='Custom Object: Network') -def delete_network(scope, group, version, plural, name, namespace='default'): +def delete_network(scope, group, version, plural, name, namespace='default', skip_codes=None): + skip_codes = [] if not skip_codes else skip_codes api = get_custom_objects_api() try: if scope == consts.SCOPE_CLUSTER: @@ -274,9 +275,12 @@ def delete_network(scope, group, version, plural, name, namespace='default'): else: api.delete_namespaced_custom_object( group, version, namespace, plural, name, {}) - except ApiException: - raise exceptions.KubernetesApiException( - action='delete', resource='Custom Object: Network') + except ApiException as e: + if e.status in skip_codes: + LOG.info(e.reason) + else: + raise exceptions.KubernetesApiException( + action='delete', resource='Custom Object: Network') def get_pod_list(namespace='default'): # pragma: no cover diff --git a/yardstick/orchestrator/kubernetes.py b/yardstick/orchestrator/kubernetes.py index 7b1450230..594f679c0 100644 --- a/yardstick/orchestrator/kubernetes.py +++ b/yardstick/orchestrator/kubernetes.py @@ -441,7 +441,7 @@ class NetworkObject(object): def delete(self): k8s_utils.delete_network(self.scope, self.group, self.version, - self.plural, self._name) + self.plural, self._name, skip_codes=[404]) class KubernetesTemplate(object): diff --git a/yardstick/tests/unit/common/test_kubernetes_utils.py b/yardstick/tests/unit/common/test_kubernetes_utils.py index 42aa9f7e0..9dca2700d 100644 --- a/yardstick/tests/unit/common/test_kubernetes_utils.py +++ b/yardstick/tests/unit/common/test_kubernetes_utils.py @@ -240,6 +240,19 @@ class DeleteNetworkTestCase(base.BaseUnitTestCase): constants.SCOPE_CLUSTER, mock.ANY, mock.ANY, mock.ANY, mock.ANY) + @mock.patch.object(kubernetes_utils, 'get_custom_objects_api') + @mock.patch.object(kubernetes_utils, 'LOG') + def test_execute_skip_exception(self, mock_log, mock_get_api): + mock_api = mock.Mock() + mock_api.delete_cluster_custom_object.side_effect = rest.ApiException(status=404) + + mock_get_api.return_value = mock_api + kubernetes_utils.delete_network( + constants.SCOPE_CLUSTER, mock.ANY, mock.ANY, mock.ANY, + mock.ANY, skip_codes=[404]) + + mock_log.info.assert_called_once() + class DeletePodTestCase(base.BaseUnitTestCase): @mock.patch.object(kubernetes_utils, 'get_core_api') @@ -260,8 +273,9 @@ class DeletePodTestCase(base.BaseUnitTestCase): with self.assertRaises(exceptions.KubernetesApiException): kubernetes_utils.delete_pod(mock.ANY, skip_codes=[404]) + @mock.patch.object(kubernetes_utils, 'LOG') @mock.patch.object(kubernetes_utils, 'get_core_api') - def test_execute_skip_exception(self, mock_get_api): + def test_execute_skip_exception(self, mock_get_api, *args): mock_api = mock.Mock() mock_api.delete_namespaced_pod.side_effect = rest.ApiException(status=404) @@ -289,12 +303,11 @@ class DeleteServiceTestCase(base.BaseUnitTestCase): with self.assertRaises(exceptions.KubernetesApiException): kubernetes_utils.delete_service(mock.ANY, skip_codes=[404]) - @mock.patch.object(kubernetes_utils, 'get_core_api') @mock.patch.object(kubernetes_utils, 'LOG') - def test_execute_skip_exception(self, mock_log, mock_get_api): + @mock.patch.object(kubernetes_utils, 'get_core_api') + def test_execute_skip_exception(self, mock_get_api, *args): mock_api = mock.Mock() mock_api.delete_namespaced_service.side_effect = rest.ApiException(status=404) mock_get_api.return_value = mock_api kubernetes_utils.delete_service(mock.ANY, skip_codes=[404]) - mock_log.info.assert_called_once() diff --git a/yardstick/tests/unit/orchestrator/test_kubernetes.py b/yardstick/tests/unit/orchestrator/test_kubernetes.py index 5a6f8c6a0..4bf678390 100644 --- a/yardstick/tests/unit/orchestrator/test_kubernetes.py +++ b/yardstick/tests/unit/orchestrator/test_kubernetes.py @@ -543,7 +543,7 @@ class NetworkObjectTestCase(base.BaseUnitTestCase): net_obj._name = 'name' net_obj.delete() mock_delete_network.assert_called_once_with( - 'scope', 'group', 'version', 'plural', 'name') + 'scope', 'group', 'version', 'plural', 'name', skip_codes=[404]) class ServiceNodePortObjectTestCase(base.BaseUnitTestCase): -- cgit 1.2.3-korg