| #!/usr/local/sbin/charm-env python3 |
| import os |
| from yaml import safe_load as load |
| from charmhelpers.core.hookenv import ( |
| action_get, |
| action_set, |
| action_fail, |
| action_name |
| ) |
| from charmhelpers.core.templating import render |
| from subprocess import check_output |
| |
| |
| os.environ['PATH'] += os.pathsep + os.path.join(os.sep, 'snap', 'bin') |
| |
| |
| def kubectl(args): |
| cmd = ['kubectl'] + args |
| return check_output(cmd) |
| |
| |
| def namespace_list(): |
| y = load(kubectl(['get', 'namespaces', '-o', 'yaml'])) |
| ns = [i['metadata']['name'] for i in y['items']] |
| action_set({'namespaces': ', '.join(ns)+'.'}) |
| return ns |
| |
| |
| def namespace_create(): |
| name = action_get('name') |
| if name in namespace_list(): |
| action_fail('Namespace "{}" already exists.'.format(name)) |
| return |
| |
| render('create-namespace.yaml.j2', '/etc/kubernetes/addons/create-namespace.yaml', |
| context={'name': name}) |
| kubectl(['create', '-f', '/etc/kubernetes/addons/create-namespace.yaml']) |
| action_set({'msg': 'Namespace "{}" created.'.format(name)}) |
| |
| |
| def namespace_delete(): |
| name = action_get('name') |
| if name in ['default', 'kube-system']: |
| action_fail('Not allowed to delete "{}".'.format(name)) |
| return |
| if name not in namespace_list(): |
| action_fail('Namespace "{}" does not exist.'.format(name)) |
| return |
| kubectl(['delete', 'ns/'+name]) |
| action_set({'msg': 'Namespace "{}" deleted.'.format(name)}) |
| |
| |
| action = action_name().replace('namespace-', '') |
| if action == 'create': |
| namespace_create() |
| elif action == 'list': |
| namespace_list() |
| elif action == 'delete': |
| namespace_delete() |