c0f1f19680ff4ed8198715f86298953a6195020d
[oom.git] / cloudify / scripts / onap / create_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 _save_deployment_result(key):
75     result = ctx.instance.runtime_properties['kubernetes']
76     ctx.instance.runtime_properties[key] = result
77     ctx.instance.runtime_properties['kubernetes'] = {}
78
79
80 def _do_create_namespace(kubernetes_plugin):
81     namespace = _retrieve_namespace()
82     ctx.logger.info('Creating namespace: {0}'.format(namespace))
83
84     namespace_resource_template = _prepare_namespace_resource_template(
85         namespace
86     )
87
88     ctx.logger.debug(
89         'Kubernetes object which will be deployed: {0}'
90             .format(namespace_resource_template)
91     )
92
93     kubernetes_plugin.custom_resource_create(**namespace_resource_template)
94     _save_deployment_result('namespace')
95     ctx.logger.info('Namespace created successfully')
96
97
98 if __name__ == '__main__':
99     _, kubernetes_plugin = _import_or_install()
100
101     _do_create_namespace(kubernetes_plugin)