mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-03-27 22:03:03 +00:00
* Rename from community.kubernetes to kubernetes.core This goes through and renames community.kubernetes to kubernetes.core. Most of this was generated from the downstream build script that was used on the community repository, plus whatever hand edits I could find that were needed. The downstream build and test process has also been removed as this repository is now the downstream repository. * Fix CONTRIBUTING.md
221 lines
6.2 KiB
Python
221 lines
6.2 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright: (c) 2021, Ansible Project
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
|
|
from __future__ import absolute_import, division, print_function
|
|
|
|
__metaclass__ = type
|
|
|
|
|
|
DOCUMENTATION = r'''
|
|
|
|
module: helm_template
|
|
|
|
short_description: Render chart templates
|
|
|
|
author:
|
|
- Mike Graves (@gravesm)
|
|
|
|
description:
|
|
- Render chart templates to an output directory or as text of concatenated yaml documents.
|
|
|
|
options:
|
|
binary_path:
|
|
description:
|
|
- The path of a helm binary to use.
|
|
required: false
|
|
type: path
|
|
chart_ref:
|
|
description:
|
|
- Chart reference with repo prefix, for example, C(nginx-stable/nginx-ingress).
|
|
- Path to a packaged chart.
|
|
- Path to an unpacked chart directory.
|
|
- Absolute URL.
|
|
required: true
|
|
type: path
|
|
chart_repo_url:
|
|
description:
|
|
- Chart repository URL where the requested chart is located.
|
|
required: false
|
|
type: str
|
|
chart_version:
|
|
description:
|
|
- Chart version to use. If this is not specified, the latest version is installed.
|
|
required: false
|
|
type: str
|
|
include_crds:
|
|
description:
|
|
- Include custom resource descriptions in rendered templates.
|
|
required: false
|
|
type: bool
|
|
default: false
|
|
output_dir:
|
|
description:
|
|
- Output directory where templates will be written.
|
|
- If the directory already exists, it will be overwritten.
|
|
required: false
|
|
type: path
|
|
release_values:
|
|
description:
|
|
- Values to pass to chart.
|
|
required: false
|
|
default: {}
|
|
aliases: [ values ]
|
|
type: dict
|
|
values_files:
|
|
description:
|
|
- Value files to pass to chart.
|
|
- Paths will be read from the target host's filesystem, not the host running ansible.
|
|
- I(values_files) option is evaluated before I(values) option if both are used.
|
|
- Paths are evaluated in the order the paths are specified.
|
|
required: false
|
|
default: []
|
|
type: list
|
|
elements: str
|
|
update_repo_cache:
|
|
description:
|
|
- Run C(helm repo update) before the operation. Can be run as part of the template generation or as a separate step.
|
|
default: false
|
|
type: bool
|
|
'''
|
|
|
|
EXAMPLES = r'''
|
|
- name: Render templates to specified directory
|
|
kubernetes.core.helm_template:
|
|
chart_ref: stable/prometheus
|
|
output_dir: mycharts
|
|
|
|
- name: Render templates
|
|
kubernetes.core.helm_template:
|
|
chart_ref: stable/prometheus
|
|
register: result
|
|
|
|
- name: Write templates to file
|
|
copy:
|
|
dest: myfile.yaml
|
|
content: "{{ result.stdout }}"
|
|
'''
|
|
|
|
RETURN = r'''
|
|
stdout:
|
|
type: str
|
|
description: Full C(helm) command stdout. If no I(output_dir) has been provided this will contain the rendered templates as concatenated yaml documents.
|
|
returned: always
|
|
sample: ''
|
|
stderr:
|
|
type: str
|
|
description: Full C(helm) command stderr, in case you want to display it or examine the event log.
|
|
returned: always
|
|
sample: ''
|
|
command:
|
|
type: str
|
|
description: Full C(helm) command run by this module, in case you want to re-run the command outside the module or debug a problem.
|
|
returned: always
|
|
sample: helm template --output-dir mychart nginx-stable/nginx-ingress
|
|
'''
|
|
|
|
import tempfile
|
|
import traceback
|
|
|
|
try:
|
|
import yaml
|
|
IMP_YAML = True
|
|
except ImportError:
|
|
IMP_YAML_ERR = traceback.format_exc()
|
|
IMP_YAML = False
|
|
|
|
from ansible.module_utils.basic import AnsibleModule, missing_required_lib
|
|
from ansible_collections.kubernetes.core.plugins.module_utils.helm import run_helm
|
|
|
|
|
|
def template(cmd, chart_ref, chart_repo_url=None, chart_version=None, output_dir=None,
|
|
release_values=None, values_files=None, include_crds=False):
|
|
cmd += " template " + chart_ref
|
|
|
|
if chart_repo_url:
|
|
cmd += " --repo=" + chart_repo_url
|
|
|
|
if chart_version:
|
|
cmd += " --version=" + chart_version
|
|
|
|
if output_dir:
|
|
cmd += " --output-dir=" + output_dir
|
|
|
|
if release_values:
|
|
fd, path = tempfile.mkstemp(suffix='.yml')
|
|
with open(path, 'w') as yaml_file:
|
|
yaml.dump(release_values, yaml_file, default_flow_style=False)
|
|
cmd += " -f=" + path
|
|
|
|
if values_files:
|
|
for values_file in values_files:
|
|
cmd += " -f=" + values_file
|
|
|
|
if include_crds:
|
|
cmd += " --include-crds"
|
|
|
|
return cmd
|
|
|
|
|
|
def main():
|
|
module = AnsibleModule(
|
|
argument_spec=dict(
|
|
binary_path=dict(type='path'),
|
|
chart_ref=dict(type='path', required=True),
|
|
chart_repo_url=dict(type='str'),
|
|
chart_version=dict(type='str'),
|
|
include_crds=dict(type='bool', default=False),
|
|
output_dir=dict(type='path'),
|
|
release_values=dict(type='dict', default={}, aliases=['values']),
|
|
values_files=dict(type='list', default=[], elements='str'),
|
|
update_repo_cache=dict(type='bool', default=False)
|
|
),
|
|
supports_check_mode=True
|
|
)
|
|
|
|
check_mode = module.check_mode
|
|
bin_path = module.params.get('binary_path')
|
|
chart_ref = module.params.get('chart_ref')
|
|
chart_repo_url = module.params.get('chart_repo_url')
|
|
chart_version = module.params.get('chart_version')
|
|
include_crds = module.params.get('include_crds')
|
|
output_dir = module.params.get('output_dir')
|
|
release_values = module.params.get('release_values')
|
|
values_files = module.params.get('values_files')
|
|
update_repo_cache = module.params.get('update_repo_cache')
|
|
|
|
if not IMP_YAML:
|
|
module.fail_json(msg=missing_required_lib("yaml"), exception=IMP_YAML_ERR)
|
|
|
|
helm_cmd = bin_path or module.get_bin_path('helm', required=True)
|
|
|
|
if update_repo_cache:
|
|
update_cmd = helm_cmd + " repo update"
|
|
run_helm(module, update_cmd)
|
|
|
|
tmpl_cmd = template(helm_cmd, chart_ref, chart_repo_url=chart_repo_url,
|
|
chart_version=chart_version, output_dir=output_dir,
|
|
release_values=release_values, values_files=values_files,
|
|
include_crds=include_crds)
|
|
|
|
if not check_mode:
|
|
rc, out, err = run_helm(module, tmpl_cmd)
|
|
else:
|
|
out = err = ""
|
|
rc = 0
|
|
|
|
module.exit_json(
|
|
failed=False,
|
|
changed=True,
|
|
command=tmpl_cmd,
|
|
stdout=out,
|
|
stderr=err,
|
|
rc=rc
|
|
)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
main()
|