Created
September 2, 2018 14:13
-
-
Save younes200/9733f64840d04e7c0451132f76cde6ef to your computer and use it in GitHub Desktop.
Ansible module for Helm
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/python | |
from __future__ import absolute_import, division, print_function | |
__metaclass__ = type | |
def install(module): | |
# Helm executable | |
executable = module.params['executable'] | |
# Set the global helm command line arguments | |
args = [executable] | |
# Add upgrade --install parameter | |
args.extend(['upgrade', '--install']) | |
# Set key-value pairs for values | |
values = module.params['values'] | |
if values: | |
for key, val in values.items(): | |
args.extend(['--set', '{}={}'.format(key, val)]) | |
# Kubernetes namespace | |
namespace = module.params['namespace'] | |
if namespace: | |
args.extend(['--namespace', namespace]) | |
# Wait flag | |
wait = module.params['wait'] | |
if wait: | |
args.extend(['--wait']) | |
# Force flag | |
force = module.params['force'] | |
if force: | |
args.extend(['--force']) | |
# Recreate Pods flag | |
recreate_pods = module.params['recreate_pods'] | |
if recreate_pods: | |
args.extend(['--recreate-pods']) | |
# Kubernetes context | |
kube_context = module.params['kube_context'] | |
if kube_context: | |
args.extend(['--kube-context', kube_context]) | |
# Timeout | |
timeout = module.params['timeout'] | |
if timeout: | |
args.extend(['--timeout', timeout]) | |
name = module.params['name'] | |
if name: | |
args.extend([name]) | |
chart = module.params['chart'] | |
if chart: | |
args.extend([chart]) | |
startd = datetime.datetime.now() | |
rc, out, err = module.run_command(args, executable, cwd='.') | |
endd = datetime.datetime.now() | |
delta = endd - startd | |
# STDOUT and STDERR should always be strings. | |
if out is None: | |
out = '' | |
if err is None: | |
err = '' | |
# Return the results. | |
module.exit_json( | |
cmd = args, | |
stdout = out.rstrip("\r\n"), | |
stderr = err.rstrip("\r\n"), | |
rc = rc, | |
start = str(startd), | |
end = str(endd), | |
delta = str(delta), | |
) | |
def delete(module, purge=False): | |
# Helm executable | |
executable = module.params['executable'] | |
# Set the global helm command line arguments | |
args = [executable] | |
# Add delete parameter | |
args.extend(['delete']) | |
# If need to purge the release | |
if purge: | |
args.extend(['--purge']) | |
# Kubernetes context | |
kube_context = module.params['kube_context'] | |
if kube_context: | |
args.extend(['--kube-context', kube_context]) | |
# Timeout | |
timeout = module.params['timeout'] | |
if timeout: | |
args.extend(['--timeout', timeout]) | |
name = module.params['name'] | |
if name: | |
args.extend([name]) | |
startd = datetime.datetime.now() | |
rc, out, err = module.run_command(args, executable, cwd='.') | |
endd = datetime.datetime.now() | |
delta = endd - startd | |
# STDOUT and STDERR should always be strings. | |
if out is None: | |
out = '' | |
if err is None: | |
err = '' | |
# Return the results. | |
module.exit_json( | |
cmd = args, | |
stdout = out.rstrip("\r\n"), | |
stderr = err.rstrip("\r\n"), | |
rc = rc, | |
start = str(startd), | |
end = str(endd), | |
delta = str(delta), | |
) | |
def main(): | |
module = AnsibleModule( | |
argument_spec = dict( | |
name = dict(type='str', default=''), | |
chart = dict(type='str'), | |
state = dict( | |
choices = ['absent', 'purged', 'present'], | |
default = 'present' | |
), | |
# Install options | |
values = dict(type='dict'), | |
# Kubernetes namespace | |
namespace = dict(type='str', default='default'), | |
# Wait option | |
wait = dict(type='bool', default=True), | |
# Force option | |
force = dict(type='bool', default=False), | |
# Recreate Pods flag | |
recreate_pods = dict(type='bool', default=False), | |
# Helm executable | |
executable = dict(type='str', default='/usr/local/bin/helm'), | |
# Kubernetes context | |
kube_context = dict(type='str'), | |
# Timeout | |
timeout = dict(type='str', default='600'), | |
), | |
supports_check_mode=True | |
) | |
state = module.params['state'] | |
if state == 'present': | |
install(module) | |
if state in 'absent': | |
delete(module) | |
if state in 'purged': | |
delete(module, True) | |
# import module snippets | |
from ansible.module_utils.basic import * | |
if __name__ == '__main__': | |
main() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment