Skip to content

Instantly share code, notes, and snippets.

@chhetripradeep
Created February 7, 2018 19:10
Show Gist options
  • Save chhetripradeep/12cd9f0b94572cede89e18502b84ced1 to your computer and use it in GitHub Desktop.
Save chhetripradeep/12cd9f0b94572cede89e18502b84ced1 to your computer and use it in GitHub Desktop.
Ansible module for Helm
#!/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