Cloudify support for OOM
[oom.git] / cloudify-onap / plugins / onap-installation-plugin / k8s_installer / common / namespace.py
diff --git a/cloudify-onap/plugins/onap-installation-plugin/k8s_installer/common/namespace.py b/cloudify-onap/plugins/onap-installation-plugin/k8s_installer/common/namespace.py
new file mode 100644 (file)
index 0000000..d133676
--- /dev/null
@@ -0,0 +1,101 @@
+########
+# Copyright (c) 2017 GigaSpaces Technologies Ltd. All rights reserved
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#        http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+#    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#    * See the License for the specific language governing permissions and
+#    * limitations under the License.
+
+import cloudify_kubernetes.tasks as kubernetes_plugin
+from cloudify import ctx
+from cloudify.exceptions import NonRecoverableError
+
+import deployment_result
+
+
+def do_create_namespace():
+    namespace = _retrieve_namespace()
+    ctx.logger.info('Creating namespace: {0}'.format(namespace))
+
+    namespace_resource_template = _prepare_namespace_resource_template(
+        namespace
+    )
+
+    ctx.logger.debug(
+        'Kubernetes object which will be deployed: {0}'
+            .format(namespace_resource_template)
+    )
+
+    kubernetes_plugin.custom_resource_create(**namespace_resource_template)
+    deployment_result.save_deployment_result('namespace')
+    ctx.logger.info('Namespace created successfully')
+
+
+def do_delete_namespace():
+    namespace = _retrieve_namespace()
+    ctx.logger.info('Deleting namespace: {0}'.format(namespace))
+
+    namespace_resource_template = _prepare_namespace_resource_template(
+        namespace
+    )
+
+    ctx.logger.debug(
+        'Kubernetes object which will be deleted: {0}'
+            .format(namespace_resource_template)
+    )
+
+    deployment_result.set_deployment_result('namespace')
+    kubernetes_plugin.custom_resource_delete(**namespace_resource_template)
+    ctx.logger.info('Namespace deleted successfully')
+
+
+
+def _retrieve_namespace():
+
+    default_namespace = ctx.node.properties.get('options', {}).get('namespace')
+    namespace = ctx.node.properties.get('namespace', default_namespace)
+
+    if not namespace:
+        raise NonRecoverableError(
+            'Namespace is not defined (node={})'.format(ctx.node.name)
+        )
+
+    return namespace
+
+
+def _prepare_namespace_resource_template(name):
+    return {
+        'definition': {
+            'apiVersion': 'v1',
+            'kind': 'Namespace',
+            'metadata': {
+                'name': name,
+                'labels': {
+                    'name': name
+                },
+            },
+        },
+        'api_mapping': {
+            'create': {
+                'api': 'CoreV1Api',
+                'method': 'create_namespace',
+                'payload': 'V1Namespace'
+            },
+            'read': {
+                'api': 'CoreV1Api',
+                'method': 'read_namespace',
+            },
+            'delete': {
+                'api': 'CoreV1Api',
+                'method': 'delete_namespace',
+                'payload': 'V1DeleteOptions'
+            }
+        }
+    }