60 lines
1.6 KiB
Plaintext
Executable File
60 lines
1.6 KiB
Plaintext
Executable File
#!/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()
|