mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-05-08 14:02:38 +00:00
helm: Add replace parameter (#214)
Fixes: #106 Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
2
changelogs/fragments/106-helm_replace.yml
Normal file
2
changelogs/fragments/106-helm_replace.yml
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
bugfixes:
|
||||||
|
- helm - add replace parameter (https://github.com/ansible-collections/community.kubernetes/issues/106).
|
||||||
@@ -201,6 +201,63 @@
|
|||||||
that:
|
that:
|
||||||
- install is not changed
|
- install is not changed
|
||||||
|
|
||||||
|
# Test --replace
|
||||||
|
- name: Install chart for replace option
|
||||||
|
helm:
|
||||||
|
binary_path: "{{ helm_binary }}"
|
||||||
|
name: test-0001
|
||||||
|
chart_ref: "{{ chart_source }}"
|
||||||
|
chart_version: "{{ chart_source_version | default(omit) }}"
|
||||||
|
namespace: "{{ helm_namespace }}"
|
||||||
|
register: install
|
||||||
|
|
||||||
|
- name: "Assert that {{ chart_test }} chart is installed from {{ source }}"
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- install is changed
|
||||||
|
|
||||||
|
- name: Remove {{ chart_test }} with --purge
|
||||||
|
helm:
|
||||||
|
binary_path: "{{ helm_binary }}"
|
||||||
|
state: absent
|
||||||
|
name: test-0001
|
||||||
|
purge: False
|
||||||
|
namespace: "{{ helm_namespace }}"
|
||||||
|
register: install
|
||||||
|
|
||||||
|
- name: Check if chart is removed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- install is changed
|
||||||
|
|
||||||
|
- name: Install chart again with same name test-0001
|
||||||
|
helm:
|
||||||
|
binary_path: "{{ helm_binary }}"
|
||||||
|
name: test-0001
|
||||||
|
chart_ref: "{{ chart_source }}"
|
||||||
|
chart_version: "{{ chart_source_version | default(omit) }}"
|
||||||
|
namespace: "{{ helm_namespace }}"
|
||||||
|
replace: True
|
||||||
|
register: install
|
||||||
|
|
||||||
|
- name: "Assert that {{ chart_test }} chart is installed from {{ source }}"
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- install is changed
|
||||||
|
|
||||||
|
- name: Remove {{ chart_test }} (cleanup)
|
||||||
|
helm:
|
||||||
|
binary_path: "{{ helm_binary }}"
|
||||||
|
state: absent
|
||||||
|
name: test-0001
|
||||||
|
namespace: "{{ helm_namespace }}"
|
||||||
|
register: install
|
||||||
|
|
||||||
|
- name: Check if chart is removed
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- install is changed
|
||||||
|
|
||||||
- name: Remove helm namespace
|
- name: Remove helm namespace
|
||||||
k8s:
|
k8s:
|
||||||
api_version: v1
|
api_version: v1
|
||||||
|
|||||||
@@ -115,6 +115,13 @@ options:
|
|||||||
type: bool
|
type: bool
|
||||||
default: False
|
default: False
|
||||||
version_added: "0.11.1"
|
version_added: "0.11.1"
|
||||||
|
replace:
|
||||||
|
description:
|
||||||
|
- Reuse the given name, only if that name is a deleted release which remains in the history.
|
||||||
|
- This is unsafe in production environment.
|
||||||
|
type: bool
|
||||||
|
default: False
|
||||||
|
version_added: "1.11.0"
|
||||||
extends_documentation_fragment:
|
extends_documentation_fragment:
|
||||||
- community.kubernetes.helm_common_options
|
- community.kubernetes.helm_common_options
|
||||||
'''
|
'''
|
||||||
@@ -320,14 +327,20 @@ 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, atomic=False, create_namespace=False):
|
def deploy(command, release_name, release_values, chart_name, wait,
|
||||||
|
wait_timeout, disable_hook, force, atomic=False, create_namespace=False,
|
||||||
|
replace=False):
|
||||||
"""
|
"""
|
||||||
Install/upgrade/rollback release chart
|
Install/upgrade/rollback release chart
|
||||||
"""
|
"""
|
||||||
deploy_command = command + " upgrade -i" # install/upgrade
|
if replace:
|
||||||
|
# '--replace' is not supported by 'upgrade -i'
|
||||||
|
deploy_command = command + " install"
|
||||||
|
else:
|
||||||
|
deploy_command = command + " upgrade -i" # install/upgrade
|
||||||
|
|
||||||
# Always reset values to keep release_values equal to values released
|
# Always reset values to keep release_values equal to values released
|
||||||
deploy_command += " --reset-values"
|
deploy_command += " --reset-values"
|
||||||
|
|
||||||
if wait:
|
if wait:
|
||||||
deploy_command += " --wait"
|
deploy_command += " --wait"
|
||||||
@@ -340,6 +353,9 @@ def deploy(command, release_name, release_values, chart_name, wait, wait_timeout
|
|||||||
if force:
|
if force:
|
||||||
deploy_command += " --force"
|
deploy_command += " --force"
|
||||||
|
|
||||||
|
if replace:
|
||||||
|
deploy_command += " --replace"
|
||||||
|
|
||||||
if disable_hook:
|
if disable_hook:
|
||||||
deploy_command += " --no-hooks"
|
deploy_command += " --no-hooks"
|
||||||
|
|
||||||
@@ -399,6 +415,7 @@ def main():
|
|||||||
wait_timeout=dict(type='str'),
|
wait_timeout=dict(type='str'),
|
||||||
atomic=dict(type='bool', default=False),
|
atomic=dict(type='bool', default=False),
|
||||||
create_namespace=dict(type='bool', default=False),
|
create_namespace=dict(type='bool', default=False),
|
||||||
|
replace=dict(type='bool', default=False),
|
||||||
),
|
),
|
||||||
required_if=[
|
required_if=[
|
||||||
('release_state', 'present', ['release_name', 'chart_ref']),
|
('release_state', 'present', ['release_name', 'chart_ref']),
|
||||||
@@ -432,6 +449,7 @@ def main():
|
|||||||
wait_timeout = module.params.get('wait_timeout')
|
wait_timeout = module.params.get('wait_timeout')
|
||||||
atomic = module.params.get('atomic')
|
atomic = module.params.get('atomic')
|
||||||
create_namespace = module.params.get('create_namespace')
|
create_namespace = module.params.get('create_namespace')
|
||||||
|
replace = module.params.get('replace')
|
||||||
|
|
||||||
if bin_path is not None:
|
if bin_path is not None:
|
||||||
helm_cmd_common = bin_path
|
helm_cmd_common = bin_path
|
||||||
@@ -455,6 +473,9 @@ def main():
|
|||||||
# keep helm_cmd_common for get_release_status in module_exit_json
|
# keep helm_cmd_common for get_release_status in module_exit_json
|
||||||
helm_cmd = helm_cmd_common
|
helm_cmd = helm_cmd_common
|
||||||
if release_state == "absent" and release_status is not None:
|
if release_state == "absent" and release_status is not None:
|
||||||
|
if replace:
|
||||||
|
module.fail_json(msg="replace is not applicable when state is absent")
|
||||||
|
|
||||||
helm_cmd = delete(helm_cmd, release_name, purge, disable_hook)
|
helm_cmd = delete(helm_cmd, release_name, purge, disable_hook)
|
||||||
changed = True
|
changed = True
|
||||||
elif release_state == "present":
|
elif release_state == "present":
|
||||||
@@ -470,13 +491,15 @@ 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, atomic=atomic, create_namespace=create_namespace)
|
disable_hook, False, atomic=atomic, create_namespace=create_namespace,
|
||||||
|
replace=replace)
|
||||||
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, atomic=atomic, create_namespace=create_namespace)
|
disable_hook, force, atomic=atomic, create_namespace=create_namespace,
|
||||||
|
replace=replace)
|
||||||
changed = True
|
changed = True
|
||||||
|
|
||||||
if module.check_mode:
|
if module.check_mode:
|
||||||
|
|||||||
Reference in New Issue
Block a user