Merge "Check for network already created k8"
[yardstick.git] / yardstick / common / kubernetes_utils.py
index 4bc1ac2..323f13a 100644 (file)
@@ -121,8 +121,10 @@ def create_replication_controller(template,
 def delete_replication_controller(name,
                                   namespace='default',
                                   wait=False,
-                                  **kwargs):    # pragma: no cover
+                                  skip_codes=None,
+                                  **kwargs):
     # pylint: disable=unused-argument
+    skip_codes = [] if not skip_codes else skip_codes
     core_v1_api = get_core_api()
     body = kwargs.get('body', client.V1DeleteOptions())
     kwargs.pop('body', None)
@@ -131,9 +133,12 @@ def delete_replication_controller(name,
                                                              namespace,
                                                              body,
                                                              **kwargs)
-    except ApiException:
-        LOG.exception('Delete replication controller failed')
-        raise
+    except ApiException as e:
+        if e.status in skip_codes:
+            LOG.info(e.reason)
+        else:
+            raise exceptions.KubernetesApiException(
+                action='delete', resource='ReplicationController')
 
 
 def delete_pod(name,
@@ -196,8 +201,10 @@ def create_config_map(name,
 def delete_config_map(name,
                       namespace='default',
                       wait=False,
-                      **kwargs):     # pragma: no cover
+                      skip_codes=None,
+                      **kwargs):
     # pylint: disable=unused-argument
+    skip_codes = [] if not skip_codes else skip_codes
     core_v1_api = get_core_api()
     body = kwargs.get('body', client.V1DeleteOptions())
     kwargs.pop('body', None)
@@ -206,9 +213,12 @@ def delete_config_map(name,
                                                  namespace,
                                                  body,
                                                  **kwargs)
-    except ApiException:
-        LOG.exception('Delete config map failed')
-        raise
+    except ApiException as e:
+        if e.status in skip_codes:
+            LOG.info(e.reason)
+        else:
+            raise exceptions.KubernetesApiException(
+                action='delete', resource='ConfigMap')
 
 
 def create_custom_resource_definition(body):
@@ -226,14 +236,18 @@ def create_custom_resource_definition(body):
             action='create', resource='CustomResourceDefinition')
 
 
-def delete_custom_resource_definition(name):
+def delete_custom_resource_definition(name, skip_codes=None):
+    skip_codes = [] if not skip_codes else skip_codes
     api = get_extensions_v1beta_api()
     body_obj = client.V1DeleteOptions()
     try:
         api.delete_custom_resource_definition(name, body_obj)
-    except ApiException:
-        raise exceptions.KubernetesApiException(
-            action='delete', resource='CustomResourceDefinition')
+    except ApiException as e:
+        if e.status in skip_codes:
+            LOG.info(e.reason)
+        else:
+            raise exceptions.KubernetesApiException(
+                action='delete', resource='CustomResourceDefinition')
 
 
 def get_custom_resource_definition(kind):
@@ -249,8 +263,28 @@ def get_custom_resource_definition(kind):
             action='delete', resource='CustomResourceDefinition')
 
 
-def create_network(scope, group, version, plural, body, namespace='default'):
+def get_network(scope, group, version, plural, name, namespace='default'):
     api = get_custom_objects_api()
+    try:
+        if scope == consts.SCOPE_CLUSTER:
+            network = api.get_cluster_custom_object(group, version, plural, name)
+        else:
+            network = api.get_namespaced_custom_object(
+                group, version, namespace, plural, name)
+    except ApiException as e:
+        if e.status in [404]:
+            return
+        else:
+            raise exceptions.KubernetesApiException(
+                action='get', resource='Custom Object: Network')
+    return network
+
+
+def create_network(scope, group, version, plural, body, name, namespace='default'):
+    api = get_custom_objects_api()
+    if get_network(scope, group, version, plural, name, namespace):
+        logging.info('Network %s already exists', name)
+        return
     try:
         if scope == consts.SCOPE_CLUSTER:
             api.create_cluster_custom_object(group, version, plural, body)
@@ -262,7 +296,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:
@@ -270,9 +305,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