mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-03-27 22:03:03 +00:00
minor(doc): use the same style of version_added across repo SUMMARY Currently is no single style of version_added, in some places it's unquoted, somewhere single quote is used, in another places it's double quoted. Moreover, some file had different styles in one single file. The aim of this PR is to update whole repo to single style for version_added ISSUE TYPE Docs Pull Request COMPONENT NAME kustomize helm helm_info helm_plugin helm_plugin_info helm_pull helm_repository helm_template k8s_cluster_info k8s_cp k8s_drain k8s_exec k8s_log k8s_rollback k8s_taint ADDITIONAL INFORMATION The same style is proposed as used in amazon.aws collections Reviewed-by: Kelv Gooding Reviewed-by: Alina Buzachis Reviewed-by: Mike Graves <mgraves@redhat.com>
303 lines
9.0 KiB
Python
303 lines
9.0 KiB
Python
#!/usr/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright: (c) 2022, 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_pull
|
|
short_description: download a chart from a repository and (optionally) unpack it in local directory.
|
|
version_added: 2.4.0
|
|
author:
|
|
- Aubin Bikouo (@abikouo)
|
|
description:
|
|
- Retrieve a package from a package repository, and download it locally.
|
|
- It can also be used to perform cryptographic verification of a chart without installing the chart.
|
|
- There are options for unpacking the chart after download.
|
|
|
|
requirements:
|
|
- "helm >= 3.0 (https://github.com/helm/helm/releases)"
|
|
|
|
options:
|
|
chart_ref:
|
|
description:
|
|
- chart name on chart repository.
|
|
- absolute URL.
|
|
required: true
|
|
type: str
|
|
chart_version:
|
|
description:
|
|
- Specify a version constraint for the chart version to use.
|
|
- This constraint can be a specific tag (e.g. 1.1.1) or it may reference a valid range (e.g. ^2.0.0).
|
|
- Mutually exclusive with C(chart_devel).
|
|
type: str
|
|
verify_chart:
|
|
description:
|
|
- Verify the package before using it.
|
|
default: False
|
|
type: bool
|
|
verify_chart_keyring:
|
|
description:
|
|
- location of public keys used for verification.
|
|
type: path
|
|
provenance:
|
|
description:
|
|
- Fetch the provenance file, but don't perform verification.
|
|
type: bool
|
|
default: False
|
|
repo_url:
|
|
description:
|
|
- chart repository url where to locate the requested chart.
|
|
type: str
|
|
aliases: [ url, chart_repo_url ]
|
|
repo_username:
|
|
description:
|
|
- Chart repository username where to locate the requested chart.
|
|
- Required if C(repo_password) is specified.
|
|
type: str
|
|
aliases: [ username, chart_repo_username ]
|
|
repo_password:
|
|
description:
|
|
- Chart repository password where to locate the requested chart.
|
|
- Required if C(repo_username) is specified.
|
|
type: str
|
|
aliases: [ password, chart_repo_password ]
|
|
pass_credentials:
|
|
description:
|
|
- Pass credentials to all domains.
|
|
default: False
|
|
type: bool
|
|
skip_tls_certs_check:
|
|
description:
|
|
- Whether or not to check tls certificate for the chart download.
|
|
- Requires helm >= 3.3.0.
|
|
type: bool
|
|
default: False
|
|
chart_devel:
|
|
description:
|
|
- Use development versions, too. Equivalent to version '>0.0.0-0'.
|
|
- Mutually exclusive with C(chart_version).
|
|
type: bool
|
|
untar_chart:
|
|
description:
|
|
- if set to true, will untar the chart after downloading it.
|
|
type: bool
|
|
default: False
|
|
destination:
|
|
description:
|
|
- location to write the chart.
|
|
type: path
|
|
required: True
|
|
chart_ca_cert:
|
|
description:
|
|
- Verify certificates of HTTPS-enabled servers using this CA bundle.
|
|
- Requires helm >= 3.1.0.
|
|
type: path
|
|
chart_ssl_cert_file:
|
|
description:
|
|
- Identify HTTPS client using this SSL certificate file.
|
|
- Requires helm >= 3.1.0.
|
|
type: path
|
|
chart_ssl_key_file:
|
|
description:
|
|
- Identify HTTPS client using this SSL key file
|
|
- Requires helm >= 3.1.0.
|
|
type: path
|
|
binary_path:
|
|
description:
|
|
- The path of a helm binary to use.
|
|
required: false
|
|
type: path
|
|
"""
|
|
|
|
EXAMPLES = r"""
|
|
- name: Download chart using chart url
|
|
kubernetes.core.helm_pull:
|
|
chart_ref: https://github.com/grafana/helm-charts/releases/download/grafana-5.6.0/grafana-5.6.0.tgz
|
|
destination: /path/to/chart
|
|
|
|
- name: Download Chart using chart_name and repo_url
|
|
kubernetes.core.helm_pull:
|
|
chart_ref: redis
|
|
repo_url: https://charts.bitnami.com/bitnami
|
|
untar_chart: yes
|
|
destination: /path/to/chart
|
|
|
|
- name: Download Chart (skip tls certificate check)
|
|
kubernetes.core.helm_pull:
|
|
chart_ref: redis
|
|
repo_url: https://charts.bitnami.com/bitnami
|
|
untar_chart: yes
|
|
destination: /path/to/chart
|
|
skip_tls_certs_check: yes
|
|
|
|
- name: Download Chart using chart registry credentials
|
|
kubernetes.core.helm_pull:
|
|
chart_ref: redis
|
|
repo_url: https://charts.bitnami.com/bitnami
|
|
untar_chart: yes
|
|
destination: /path/to/chart
|
|
username: myuser
|
|
password: mypassword123
|
|
"""
|
|
|
|
RETURN = r"""
|
|
stdout:
|
|
type: str
|
|
description: Full `helm pull` command stdout, in case you want to display it or examine the event log
|
|
returned: always
|
|
sample: ''
|
|
stderr:
|
|
type: str
|
|
description: Full `helm pull` command stderr, in case you want to display it or examine the event log
|
|
returned: always
|
|
sample: ''
|
|
command:
|
|
type: str
|
|
description: Full `helm pull` command built by this module, in case you want to re-run the command outside the module or debug a problem.
|
|
returned: always
|
|
sample: helm pull --repo test ...
|
|
rc:
|
|
type: int
|
|
description: Helm pull command return code
|
|
returned: always
|
|
sample: 1
|
|
"""
|
|
|
|
from ansible_collections.kubernetes.core.plugins.module_utils.helm import (
|
|
AnsibleHelmModule,
|
|
)
|
|
from ansible_collections.kubernetes.core.plugins.module_utils.version import (
|
|
LooseVersion,
|
|
)
|
|
|
|
|
|
def main():
|
|
argspec = dict(
|
|
chart_ref=dict(type="str", required=True),
|
|
chart_version=dict(type="str"),
|
|
verify_chart=dict(type="bool", default=False),
|
|
verify_chart_keyring=dict(type="path"),
|
|
provenance=dict(type="bool", default=False),
|
|
repo_url=dict(type="str", aliases=["url", "chart_repo_url"]),
|
|
repo_username=dict(type="str", aliases=["username", "chart_repo_username"]),
|
|
repo_password=dict(
|
|
type="str", no_log=True, aliases=["password", "chart_repo_password"]
|
|
),
|
|
pass_credentials=dict(type="bool", default=False),
|
|
skip_tls_certs_check=dict(type="bool", default=False),
|
|
chart_devel=dict(type="bool"),
|
|
untar_chart=dict(type="bool", default=False),
|
|
destination=dict(type="path", required=True),
|
|
chart_ca_cert=dict(type="path"),
|
|
chart_ssl_cert_file=dict(type="path"),
|
|
chart_ssl_key_file=dict(type="path"),
|
|
binary_path=dict(type="path"),
|
|
)
|
|
module = AnsibleHelmModule(
|
|
argument_spec=argspec,
|
|
supports_check_mode=True,
|
|
required_by=dict(
|
|
repo_username=("repo_password"),
|
|
repo_password=("repo_username"),
|
|
),
|
|
mutually_exclusive=[("chart_version", "chart_devel")],
|
|
)
|
|
|
|
helm_version = module.get_helm_version()
|
|
if LooseVersion(helm_version) < LooseVersion("3.0.0"):
|
|
module.fail_json(
|
|
msg="This module requires helm >= 3.0.0, current version is {0}".format(
|
|
helm_version
|
|
)
|
|
)
|
|
|
|
helm_pull_opt_versionning = dict(
|
|
skip_tls_certs_check="3.3.0",
|
|
chart_ca_cert="3.1.0",
|
|
chart_ssl_cert_file="3.1.0",
|
|
chart_ssl_key_file="3.1.0",
|
|
)
|
|
|
|
def test_version_requirement(opt):
|
|
req_version = helm_pull_opt_versionning.get(opt)
|
|
if req_version and LooseVersion(helm_version) < LooseVersion(req_version):
|
|
module.fail_json(
|
|
msg="Parameter {0} requires helm >= {1}, current version is {2}".format(
|
|
opt, req_version, helm_version
|
|
)
|
|
)
|
|
|
|
# Set `helm pull` arguments requiring values
|
|
helm_pull_opts = []
|
|
|
|
helm_value_args = dict(
|
|
chart_version="version",
|
|
verify_chart_keyring="keyring",
|
|
repo_url="repo",
|
|
repo_username="username",
|
|
repo_password="password",
|
|
destination="destination",
|
|
chart_ca_cert="ca-file",
|
|
chart_ssl_cert_file="cert-file",
|
|
chart_ssl_key_file="key-file",
|
|
)
|
|
|
|
for opt, cmdkey in helm_value_args.items():
|
|
if module.params.get(opt):
|
|
test_version_requirement(opt)
|
|
helm_pull_opts.append("--{0} {1}".format(cmdkey, module.params.get(opt)))
|
|
|
|
# Set `helm pull` arguments flags
|
|
helm_flag_args = dict(
|
|
verify_chart=dict(key="verify"),
|
|
provenance=dict(key="prov"),
|
|
pass_credentials=dict(key="pass-credentials"),
|
|
skip_tls_certs_check=dict(key="insecure-skip-tls-verify"),
|
|
chart_devel=dict(key="devel"),
|
|
untar_chart=dict(key="untar"),
|
|
)
|
|
|
|
for k, v in helm_flag_args.items():
|
|
if module.params.get(k):
|
|
test_version_requirement(k)
|
|
helm_pull_opts.append("--{0}".format(v["key"]))
|
|
|
|
helm_cmd_common = "{0} pull {1} {2}".format(
|
|
module.get_helm_binary(),
|
|
module.params.get("chart_ref"),
|
|
" ".join(helm_pull_opts),
|
|
)
|
|
if not module.check_mode:
|
|
rc, out, err = module.run_helm_command(helm_cmd_common, fails_on_error=False)
|
|
else:
|
|
rc, out, err = (0, "", "")
|
|
|
|
if rc == 0:
|
|
module.exit_json(
|
|
failed=False,
|
|
changed=True,
|
|
command=helm_cmd_common,
|
|
stdout=out,
|
|
stderr=err,
|
|
rc=rc,
|
|
)
|
|
else:
|
|
module.fail_json(
|
|
msg="Failure when executing Helm command.",
|
|
command=helm_cmd_common,
|
|
changed=False,
|
|
stdout=out,
|
|
stderr=err,
|
|
rc=rc,
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|