helm: Add option 'atomic'

helm command provides option to remove installation on failure using
'atomic' flag.
This fix adds this parameter in helm module.

Fixes: #109

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
Abhijeet Kasurde
2020-06-18 16:26:29 +05:30
parent a9aab12e36
commit 5b7046470e
2 changed files with 15 additions and 15 deletions

View File

@@ -1,5 +1,5 @@
--- ---
requires_ansible: '>=2.9,<2.11' requires_ansible: '>=2.9'
action_groups: action_groups:
helm: helm:

View File

@@ -118,6 +118,11 @@ options:
description: description:
- Timeout when wait option is enabled (helm2 is a number of seconds, helm3 is a duration). - Timeout when wait option is enabled (helm2 is a number of seconds, helm3 is a duration).
type: str type: str
atomic:
description:
- If set, the installation process deletes the installation on failure.
type: bool
default: False
''' '''
EXAMPLES = r''' EXAMPLES = r'''
@@ -230,6 +235,7 @@ command:
sample: helm upgrade ... sample: helm upgrade ...
""" """
import tempfile
import traceback import traceback
try: try:
@@ -320,7 +326,7 @@ def fetch_chart_info(command, chart_ref):
return yaml.safe_load(out) return yaml.safe_load(out)
def deploy(command, release_name, release_values, chart_name, wait, wait_timeout, disable_hook, force): def deploy(command, release_name, release_values, chart_name, wait, wait_timeout, disable_hook, force, atomic=False):
""" """
Install/upgrade/rollback release chart Install/upgrade/rollback release chart
""" """
@@ -334,6 +340,9 @@ def deploy(command, release_name, release_values, chart_name, wait, wait_timeout
if wait_timeout is not None: if wait_timeout is not None:
deploy_command += " --timeout " + wait_timeout deploy_command += " --timeout " + wait_timeout
if atomic:
deploy_command += " --atomic"
if force: if force:
deploy_command += " --force" deploy_command += " --force"
@@ -341,17 +350,6 @@ def deploy(command, release_name, release_values, chart_name, wait, wait_timeout
deploy_command += " --no-hooks" deploy_command += " --no-hooks"
if release_values != {}: if release_values != {}:
try:
import tempfile
except ImportError:
module.fail_json(
msg=missing_required_lib("tempfile"),
exception=traceback.format_exc(),
stdout='',
stderr='',
command='',
)
fd, path = tempfile.mkstemp(suffix='.yml') fd, path = tempfile.mkstemp(suffix='.yml')
with open(path, 'w') as yaml_file: with open(path, 'w') as yaml_file:
yaml.dump(release_values, yaml_file, default_flow_style=False) yaml.dump(release_values, yaml_file, default_flow_style=False)
@@ -402,6 +400,7 @@ def main():
purge=dict(type='bool', default=True), purge=dict(type='bool', default=True),
wait=dict(type='bool', default=False), wait=dict(type='bool', default=False),
wait_timeout=dict(type='str'), wait_timeout=dict(type='str'),
atomic=dict(type='bool', default=False),
), ),
required_if=[ required_if=[
('release_state', 'present', ['release_name', 'chart_ref']), ('release_state', 'present', ['release_name', 'chart_ref']),
@@ -433,6 +432,7 @@ def main():
purge = module.params.get('purge') purge = module.params.get('purge')
wait = module.params.get('wait') wait = module.params.get('wait')
wait_timeout = module.params.get('wait_timeout') wait_timeout = module.params.get('wait_timeout')
atomic = module.params.get('atomic')
if bin_path is not None: if bin_path is not None:
helm_cmd_common = bin_path helm_cmd_common = bin_path
@@ -471,13 +471,13 @@ def main():
if release_status is None: # Not installed if release_status is None: # Not installed
helm_cmd = deploy(helm_cmd, release_name, release_values, chart_ref, wait, wait_timeout, helm_cmd = deploy(helm_cmd, release_name, release_values, chart_ref, wait, wait_timeout,
disable_hook, False) disable_hook, False, atomic=atomic)
changed = True changed = True
elif force or release_values != release_status['values'] \ elif force or release_values != release_status['values'] \
or (chart_info['name'] + '-' + chart_info['version']) != release_status["chart"]: or (chart_info['name'] + '-' + chart_info['version']) != release_status["chart"]:
helm_cmd = deploy(helm_cmd, release_name, release_values, chart_ref, wait, wait_timeout, helm_cmd = deploy(helm_cmd, release_name, release_values, chart_ref, wait, wait_timeout,
disable_hook, force) disable_hook, force, atomic=atomic)
changed = True changed = True
if module.check_mode: if module.check_mode: