6973e599441f844b5dd9f31f07ced463a3db421a
[oom.git] / cloudify / scripts / onap / delete_namespace.py
1 import pip
2
3 from cloudify import ctx
4 from cloudify.exceptions import NonRecoverableError
5
6
7 def _import_or_install():
8     try:
9         import yaml
10     except ImportError:
11         pip.main(["install", "pyaml"])
12
13     try:
14         import cloudify_kubernetes.tasks as kubernetes_plugin
15     except ImportError:
16         pip.main([
17             "install",
18             "https://github.com/cloudify-incubator/cloudify-kubernetes-plugin/archive/1.2.1rc1.zip"
19         ])
20
21     import yaml
22     import cloudify_kubernetes.tasks as kubernetes_plugin
23
24     return yaml, kubernetes_plugin
25
26
27 def _retrieve_namespace():
28     namespace = ctx.node.properties.get(
29         'namespace',
30         ctx.node.properties
31             .get('options', {})
32             .get('namespace', None)
33     )
34
35     if not namespace:
36         raise NonRecoverableError(
37             'Namespace is not defined (node={})'.format(ctx.node.name)
38         )
39
40     return namespace
41
42
43 def _prepare_namespace_resource_template(name):
44     return {
45         'definition': {
46             'apiVersion': 'v1',
47             'kind': 'Namespace',
48             'metadata': {
49                 'name': name,
50                 'labels': {
51                     'name': name
52                 },
53             },
54         },
55         'api_mapping': {
56             'create': {
57                 'api': 'CoreV1Api',
58                 'method': 'create_namespace',
59                 'payload': 'V1Namespace'
60             },
61             'read': {
62                 'api': 'CoreV1Api',
63                 'method': 'read_namespace',
64             },
65             'delete': {
66                 'api': 'CoreV1Api',
67                 'method': 'delete_namespace',
68                 'payload': 'V1DeleteOptions'
69             }
70         }
71     }
72
73
74 def _set_deployment_result(key):
75     result = ctx.instance.runtime_properties.pop(key)
76     ctx.instance.runtime_properties['kubernetes'] = result
77
78
79 def _do_delete_namespace(kubernetes_plugin):
80     namespace = _retrieve_namespace()
81     ctx.logger.info('Deleting namespace: {0}'.format(namespace))
82
83     namespace_resource_template = _prepare_namespace_resource_template(
84         namespace
85     )
86
87     ctx.logger.debug(
88         'Kubernetes object which will be deleted: {0}'
89             .format(namespace_resource_template)
90     )
91
92     _set_deployment_result('namespace')
93     kubernetes_plugin.custom_resource_delete(**namespace_resource_template)
94     ctx.logger.info('Namespace deleted successfully')
95
96
97 if __name__ == '__main__':
98     _, kubernetes_plugin = _import_or_install()
99
100     _do_delete_namespace(kubernetes_plugin)
101