diff --git a/README.md b/README.md index 50260f496e..553d7f08b4 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ For more information about communication, see the [Ansible communication guide]( ## Requirements -### Ansible version compatibility +## Ansible version compatibility This collection has been tested against following Ansible versions: **>=2.15.0**. @@ -47,28 +47,28 @@ This collection supports Kubernetes versions >= 1.24. Click on the name of a plugin or module to view that content's documentation: -#### Connection plugins +### Connection plugins Name | Description --- | --- [kubernetes.core.kubectl](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.kubectl_connection.rst)|Execute tasks in pods running on Kubernetes. -#### K8s filter plugins +### K8s filter plugins Name | Description --- | --- kubernetes.core.k8s_config_resource_name|Generate resource name for the given resource of type ConfigMap, Secret -#### Inventory plugins +### Inventory plugins Name | Description --- | --- [kubernetes.core.k8s](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.k8s_inventory.rst)|Kubernetes (K8s) inventory source -#### Lookup plugins +### Lookup plugins Name | Description --- | --- [kubernetes.core.k8s](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.k8s_lookup.rst)|Query the K8s API [kubernetes.core.kustomize](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.kustomize_lookup.rst)|Build a set of kubernetes resources using a 'kustomization.yaml' file. -#### Modules +### Modules Name | Description --- | --- [kubernetes.core.helm](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.helm_module.rst)|Manages Kubernetes packages with the Helm package manager @@ -76,6 +76,7 @@ Name | Description [kubernetes.core.helm_plugin](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.helm_plugin_module.rst)|Manage Helm plugins [kubernetes.core.helm_plugin_info](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.helm_plugin_info_module.rst)|Gather information about Helm plugins [kubernetes.core.helm_pull](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.helm_pull_module.rst)|download a chart from a repository and (optionally) unpack it in local directory. +[kubernetes.core.helm_registry_auth](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.helm_registry_auth_module.rst)|Helm registry authentication module [kubernetes.core.helm_repository](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.helm_repository_module.rst)|Manage Helm repositories. [kubernetes.core.helm_template](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.helm_template_module.rst)|Render chart templates [kubernetes.core.k8s](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/kubernetes.core.k8s_module.rst)|Manage Kubernetes (K8s) objects diff --git a/docs/kubernetes.core.helm_registry_auth_module.rst b/docs/kubernetes.core.helm_registry_auth_module.rst new file mode 100644 index 0000000000..5860749f0c --- /dev/null +++ b/docs/kubernetes.core.helm_registry_auth_module.rst @@ -0,0 +1,332 @@ +.. _kubernetes.core.helm_registry_auth_module: + + +********************************** +kubernetes.core.helm_registry_auth +********************************** + +**Helm registry authentication module** + + +Version added: 5.1.0 + +.. contents:: + :local: + :depth: 1 + + +Synopsis +-------- +- Helm registry authentication module allows you to login ``helm registry login`` and logout ``helm registry logout`` from a Helm registry. + + + +Requirements +------------ +The below requirements are needed on the host that executes this module. + +- helm (https://github.com/helm/helm/releases) => 3.8.0 + + +Parameters +---------- + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ParameterChoices/DefaultsComments
+
+ binary_path + +
+ path +
+
+ +
The path of a helm binary to use.
+
+
+ ca_file + +
+ path +
+
+ +
Path to the CA certificate SSL file for verify registry server certificate.
+
+
+ cert_file + +
+ path +
+
+ +
Path to the client certificate SSL file for identify registry client using this certificate file.
+
+
+ host + +
+ string + / required +
+
+ +
Provide a URL for accessing the registry.
+

aliases: registry_url
+
+
+ insecure + +
+ boolean +
+
+
    Choices: +
  • no ←
  • +
  • yes
  • +
+
+
Allow connections to SSL sites without certs.
+
+
+ key_file + +
+ path +
+
+ +
Path to the client key SSL file for identify registry client using this key file.
+
+
+ password + +
+ string +
+
+ +
Password for the registry.
+

aliases: repo_password
+
+
+ state + +
+ string +
+
+
    Choices: +
  • present ←
  • +
  • absent
  • +
+
+
Desired state of the registry.
+
If set to V(present) attempt to log in to the remote registry server using the URL specified in O(host).
+
If set to V(absent) attempt to log out from the remote registry server using the URL specified in O(host).
+
+
+ username + +
+ string +
+
+ +
Username for the registry.
+

aliases: repo_username
+
+
+ + + + +Examples +-------- + +.. code-block:: yaml + + - name: Login to remote registry + kubernetes.core.helm_registry_auth: + username: admin + password: "sample_password" + host: localhost:5000 + + - name: Logout from remote registry + kubernetes.core.helm_registry_auth: + state: absent + host: localhost:5000 + + + +Return Values +------------- +Common return values are documented `here `_, the following are the fields unique to this module: + +.. raw:: html + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
KeyReturnedDescription
+
+ command + +
+ string +
+
always +
Full helm command executed
+
+
Sample:
+
/usr/local/bin/helm registry login oci-registry.domain.example --username=admin --password-stdin --insecure
+
+
+ failed + +
+ boolean +
+
always +
Indicate if the helm command failed
+
+
+
+ stderr + +
+ string +
+
always +
Full helm command stderr, in case you want to display it or examine the event log. Please be note that helm binnary may print messages to stderr even if the command is successful.
+
+
Sample:
+
Login Succeeded\n
+
+
+ stderr_lines + +
+ list +
+
always +
Full helm command stderr, in case you want to display it or examine the event log
+
+
+
+ stdout + +
+ string +
+
always +
Full helm command stdout, in case you want to display it or examine the event log
+
+
+
+ stout_lines + +
+ list +
+
always +
Full helm command stdout, in case you want to display it or examine the event log
+
+
+

+ + +Status +------ + + +Authors +~~~~~~~ + +- Yuriy Novostavskiy (@yurnov) diff --git a/plugins/module_utils/helm.py b/plugins/module_utils/helm.py index 4318ff0851..331c9ad718 100644 --- a/plugins/module_utils/helm.py +++ b/plugins/module_utils/helm.py @@ -159,11 +159,13 @@ def env_update(self): self.helm_env = self._prepare_helm_environment() return self.helm_env - def run_helm_command(self, command, fails_on_error=True): + def run_helm_command(self, command, fails_on_error=True, data=None): if not HAS_YAML: self.fail_json(msg=missing_required_lib("PyYAML"), exception=YAML_IMP_ERR) - rc, out, err = self.run_command(command, environ_update=self.env_update) + rc, out, err = self.run_command( + command, environ_update=self.env_update, data=data + ) if fails_on_error and rc != 0: self.fail_json( msg="Failure when executing Helm command. Exited {0}.\nstdout: {1}\nstderr: {2}".format( diff --git a/plugins/modules/helm_registry_auth.py b/plugins/modules/helm_registry_auth.py new file mode 100644 index 0000000000..b9cf4a012f --- /dev/null +++ b/plugins/modules/helm_registry_auth.py @@ -0,0 +1,238 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright: © Ericsson AB 2024 +# 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_registry_auth + +short_description: Helm registry authentication module + +version_added: 5.1.0 + +author: + - Yuriy Novostavskiy (@yurnov) + +requirements: + - "helm (https://github.com/helm/helm/releases) => 3.8.0" + +description: + - Helm registry authentication module allows you to login C(helm registry login) and logout C(helm registry logout) from a Helm registry. + +options: + state: + description: + - Desired state of the registry. + - If set to V(present) attempt to log in to the remote registry server using the URL specified in O(host). + - If set to V(absent) attempt to log out from the remote registry server using the URL specified in O(host). + required: false + default: present + choices: ['present', 'absent'] + type: str + host: + description: + - Provide a URL for accessing the registry. + required: true + aliases: [ registry_url ] + type: str + insecure: + description: + - Allow connections to SSL sites without certs. + required: false + default: false + type: bool + username: + description: + - Username for the registry. + required: false + type: str + aliases: [ repo_username ] + password: + description: + - Password for the registry. + required: false + type: str + aliases: [ repo_password ] + key_file: + description: + - Path to the client key SSL file for identify registry client using this key file. + required: false + type: path + cert_file: + description: + - Path to the client certificate SSL file for identify registry client using this certificate file. + required: false + type: path + ca_file: + description: + - Path to the CA certificate SSL file for verify registry server certificate. + required: false + type: path + binary_path: + description: + - The path of a helm binary to use. + required: false + type: path +""" + +EXAMPLES = r""" +- name: Login to remote registry + kubernetes.core.helm_registry_auth: + username: admin + password: "sample_password" + host: localhost:5000 + +- name: Logout from remote registry + kubernetes.core.helm_registry_auth: + state: absent + host: localhost:5000 +""" + +RETURN = r""" +stdout: + type: str + description: Full C(helm) command stdout, in case you want to display it or examine the event log + returned: always +stout_lines: + type: list + description: Full C(helm) command stdout, in case you want to display it or examine the event log + returned: always +stderr: + type: str + description: >- + Full C(helm) command stderr, in case you want to display it or examine the event log. + Please be note that helm binnary may print messages to stderr even if the command is successful. + returned: always + sample: 'Login Succeeded\n' +stderr_lines: + type: list + description: Full C(helm) command stderr, in case you want to display it or examine the event log + returned: always +command: + type: str + description: Full C(helm) command executed + returned: always + sample: '/usr/local/bin/helm registry login oci-registry.domain.example --username=admin --password-stdin --insecure' +failed: + type: bool + description: Indicate if the C(helm) command failed + returned: always + sample: false +""" + +from ansible_collections.kubernetes.core.plugins.module_utils.helm import ( + AnsibleHelmModule, +) + + +def arg_spec(): + return dict( + binary_path=dict(type="path", required=False), + host=dict(type="str", aliases=["registry_url"], required=True), + state=dict(default="present", choices=["present", "absent"], required=False), + insecure=dict(type="bool", default=False, required=False), + username=dict(type="str", aliases=["repo_username"], required=False), + password=dict( + type="str", aliases=["repo_password"], no_log=True, required=False + ), + key_file=dict(type="path", required=False), + cert_file=dict(type="path", required=False), + ca_file=dict(type="path", required=False), + ) + + +def login( + command, + host, + insecure, + username, + password, + key_file, + cert_file, + ca_file, +): + login_command = command + " registry login " + host + + if username is not None and password is not None: + login_command += " --username=" + username + " --password-stdin" + + if insecure: + login_command += " --insecure" + + if key_file is not None: + login_command += " --key-file=" + key_file + + if cert_file is not None: + login_command += " --cert-file=" + cert_file + + if ca_file is not None: + login_command += " --ca-file=" + ca_file + + return login_command + + +def logout(command, host): + return command + " registry logout " + host + + +def main(): + global module + + module = AnsibleHelmModule( + argument_spec=arg_spec(), + required_together=[["username", "password"]], + supports_check_mode=True, + ) + + changed = False + + host = module.params.get("host") + state = module.params.get("state") + insecure = module.params.get("insecure") + username = module.params.get("username") + password = module.params.get("password") + key_file = module.params.get("key_file") + cert_file = module.params.get("cert_file") + ca_file = module.params.get("ca_file") + + helm_cmd = module.get_helm_binary() + + if state == "absent": + helm_cmd = logout(helm_cmd, host) + changed = True + elif state == "present": + helm_cmd = login( + helm_cmd, host, insecure, username, password, key_file, cert_file, ca_file + ) + changed = True + + if module.check_mode: + module.exit_json(changed=changed, command=helm_cmd) + + rc, out, err = module.run_helm_command( + helm_cmd, data=password, fails_on_error=False + ) + + if rc != 0: + if state == "absent" and "Error: not logged in" in err: + changed = False + else: + module.fail_json( + msg="Failure when executing Helm command. Exited {0}.\nstdout: {1}\nstderr: {2}".format( + rc, out, err + ), + stderr=err, + command=helm_cmd, + ) + + module.exit_json(changed=changed, stdout=out, stderr=err, command=helm_cmd) + + +if __name__ == "__main__": + main() diff --git a/tests/integration/targets/helm_registry_auth/aliases b/tests/integration/targets/helm_registry_auth/aliases new file mode 100644 index 0000000000..3a20824104 --- /dev/null +++ b/tests/integration/targets/helm_registry_auth/aliases @@ -0,0 +1,2 @@ +time=16 +helm_registry_auth \ No newline at end of file diff --git a/tests/integration/targets/helm_registry_auth/defaults/main.yaml b/tests/integration/targets/helm_registry_auth/defaults/main.yaml new file mode 100644 index 0000000000..da3f3368c7 --- /dev/null +++ b/tests/integration/targets/helm_registry_auth/defaults/main.yaml @@ -0,0 +1,9 @@ +--- +# Username and password for the registry +# ../files/registry.password contains username and hashed password +username: testuser +password: testpassword +wrong_password: 'WrongPassword' +registry_name: oci_registry +registry_port: 5000 +test_chart: https://github.com/grafana/helm-charts/releases/download/k8s-monitoring-1.6.8/k8s-monitoring-1.6.8.tgz diff --git a/tests/integration/targets/helm_registry_auth/files/registry.password b/tests/integration/targets/helm_registry_auth/files/registry.password new file mode 100644 index 0000000000..0b76d4d0c3 --- /dev/null +++ b/tests/integration/targets/helm_registry_auth/files/registry.password @@ -0,0 +1 @@ +testuser:$2y$05$PmdUjSCJYdRUZlsYy8QGWuJDiwuHtWXa28YrELlN5haeHkZ1seZZG diff --git a/tests/integration/targets/helm_registry_auth/meta/main.yml b/tests/integration/targets/helm_registry_auth/meta/main.yml new file mode 100644 index 0000000000..cf4590dee9 --- /dev/null +++ b/tests/integration/targets/helm_registry_auth/meta/main.yml @@ -0,0 +1,3 @@ +--- +dependencies: + - install_helm diff --git a/tests/integration/targets/helm_registry_auth/playbook.yaml b/tests/integration/targets/helm_registry_auth/playbook.yaml new file mode 100644 index 0000000000..6444271ae6 --- /dev/null +++ b/tests/integration/targets/helm_registry_auth/playbook.yaml @@ -0,0 +1,7 @@ +--- +- name: Test helm_registry_auth module + hosts: localhost + connection: local + gather_facts: true + roles: + - helm_registry_auth diff --git a/tests/integration/targets/helm_registry_auth/runme.sh b/tests/integration/targets/helm_registry_auth/runme.sh new file mode 100755 index 0000000000..29fda1c9af --- /dev/null +++ b/tests/integration/targets/helm_registry_auth/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@" diff --git a/tests/integration/targets/helm_registry_auth/tasks/main.yaml b/tests/integration/targets/helm_registry_auth/tasks/main.yaml new file mode 100644 index 0000000000..096f4e31d7 --- /dev/null +++ b/tests/integration/targets/helm_registry_auth/tasks/main.yaml @@ -0,0 +1,178 @@ +--- +- name: Run module test + # using a shell and command module to run the test as test can be non-idempotent + # and it allow to not install any additional dependencies + block: + - name: Ensure that helm is installed + ansible.builtin.shell: helm version --client --short | grep v3 + register: _helm_version + failed_when: _helm_version.rc != 0 + + - name: Ensure that Docker demon is running + ansible.builtin.command: "docker info" + register: _docker_info + failed_when: _docker_info.rc != 0 + + - name: Create a tmpfile htpasswd directory + ansible.builtin.tempfile: + state: directory + suffix: .httppasswd + register: _tmpfile + + - name: Copy htpasswd to the tmpfile directory + ansible.builtin.copy: + src: registry.password + dest: "{{ _tmpfile.path }}/registry.password" + + - name: Setup the registry + ansible.builtin.command: >- + docker run -d --rm + -p {{ registry_port }}:5000 + --name "{{ registry_name }}" + -v "{{ _tmpfile.path }}:/auth" + -e "REGISTRY_AUTH=htpasswd" + -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" + -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/registry.password + registry:2 + register: _setup_registry + failed_when: _setup_registry.rc != 0 + + - name: Ensure that the registry is running and rechable + ansible.builtin.wait_for: + host: localhost + port: "{{ registry_port }}" + + - name: Test the registry with correct credentials to ensure that the registry is running + ansible.builtin.shell: >- + echo {{ password | quote }} | helm registry login localhost:{{ registry_port }} + -u {{ username }} --password-stdin + register: _login_correct + failed_when: _login_correct.rc != 0 + + - name: Clean up credentials to run test on clean environment + ansible.builtin.shell: >- + helm registry logout localhost:{{ registry_port }} + register: _logout + failed_when: _logout.rc != 0 + + - name: Create directory for helm chart + ansible.builtin.tempfile: + state: directory + suffix: ".helm" + register: _destination + + - name: Pull test helm chart + ansible.builtin.uri: + url: "{{ test_chart }}" + dest: "{{ _destination.path }}/k8s-monitoring-1.6.8.tgz" + return_content: no + status_code: 200 + + - name: Test module helm_registry_auth with correct credentials + helm_registry_auth: + username: "{{ username }}" + password: "{{ password }}" + host: localhost:{{ registry_port }} + state: present + register: _helm_registry_auth_correct + + - name: Assert that the registry is logged in + # Helm binary prints the message to stderr, refence: https://github.com/helm/helm/issues/13464 + assert: + that: + - "'Login Succeeded' in _helm_registry_auth_correct.stderr" + - "'{{ password }}' not in _helm_registry_auth_correct.command" + - "'{{ password }}' not in _helm_registry_auth_correct.stdout" + - "'{{ password }}' not in _helm_registry_auth_correct.stderr" + + - name: Ensure that push to the registry is working + ansible.builtin.shell: >- + helm push "{{ _destination.path }}/k8s-monitoring-1.6.8.tgz" oci://localhost:{{ registry_port }}/test/ + register: _save_chart + failed_when: _save_chart.rc != 0 + + - name: Assert that the chart is saved + # Helm binary prints the message to stderr, refence: https://github.com/helm/helm/issues/13464 + assert: + that: "'Pushed: localhost:{{ registry_port }}/test/k8s-monitoring' in _save_chart.stderr" + + + - name: Test logout + helm_registry_auth: + host: localhost:{{ registry_port }} + state: absent + register: _helm_registry_auth_logout + + - name: Assert logout + # Helm binary prints the message to stderr + assert: + that: "'Removing login credentials' in _helm_registry_auth_logout.stderr" + + - name: Test logout idempotency + helm_registry_auth: + host: localhost:{{ registry_port }} + state: absent + register: _helm_registry_auth_logout_idempotency + + - name: Assert logout operation did not report change + ansible.builtin.assert: + that: _helm_registry_auth_logout_idempotency is not changed + + - name: Ensure that not able to push to the registry + ansible.builtin.shell: >- + helm push "{{ _destination.path }}/k8s-monitoring-1.6.8.tgz" oci://localhost:{{ registry_port }}/test/ + register: _save_chart + failed_when: _save_chart.rc == 0 + + - name: Read content of ~/.config/helm/registry/config.json + ansible.builtin.slurp: + src: ~/.config/helm/registry/config.json + register: _config_json + + - name: Assert that auth data is remove and the chart is not saved + # Helm binary prints the message to stderr + ansible.builtin.assert: + that: + - "'push access denied' in _save_chart.stderr" + - "'authorization failed' in _save_chart.stderr" + - "_save_chart.rc != 0" + - "'localhost:{{ registry_port }}' not in _config_json.content | b64decode" + + - name: Test module helm_registry_auth with wrong credentials + helm_registry_auth: + username: "{{ username }}" + password: "{{ wrong_password }}" + host: localhost:{{ registry_port }} + state: present + register: _helm_registry_auth_wrong + ignore_errors: true + + - name: Read content of ~/.config/helm/registry/config.json + ansible.builtin.slurp: + src: ~/.config/helm/registry/config.json + register: _config_json + + - name: Assert that the registry is not logged in and auth data is not saved + ansible.builtin.assert: + that: + - "'401 Unauthorized' in _helm_registry_auth_wrong.stderr" + - "'{{ wrong_password }}' not in _helm_registry_auth_correct.command" + - "'{{ wrong_password }}' not in _helm_registry_auth_correct.stdout" + - "'{{ wrong_password }}' not in _helm_registry_auth_correct.stderr" + - "'localhost:{{ registry_port }}' not in _config_json.content | b64decode" + + # Clean up + always: + - name: Stop and remove the registry + ansible.builtin.command: docker stop {{ registry_name }} + ignore_errors: true + + - name: Remove the tmpfile + ansible.builtin.file: + state: absent + path: "{{ item }}" + force: true + loop: + - "{{ _tmpfile.path }}" + - "{{ _destination.path }}" + ignore_errors: true diff --git a/tests/sanity/ignore-2.14.txt b/tests/sanity/ignore-2.14.txt index 66d03d7b21..0069053bf4 100644 --- a/tests/sanity/ignore-2.14.txt +++ b/tests/sanity/ignore-2.14.txt @@ -25,4 +25,6 @@ plugins/modules/k8s_service.py validate-modules:return-syntax-error plugins/modules/k8s_taint.py validate-modules:return-syntax-error tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip +tests/integration/targets/helm_registry_auth/tasks/main.yaml yamllint!skip tests/integration/targets/helm_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip + diff --git a/tests/sanity/ignore-2.15.txt b/tests/sanity/ignore-2.15.txt index cfcff02404..f6189e3a11 100644 --- a/tests/sanity/ignore-2.15.txt +++ b/tests/sanity/ignore-2.15.txt @@ -26,4 +26,5 @@ plugins/modules/k8s_scale.py validate-modules:return-syntax-error plugins/modules/k8s_service.py validate-modules:return-syntax-error plugins/modules/k8s_taint.py validate-modules:return-syntax-error tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip +tests/integration/targets/helm_registry_auth/tasks/main.yaml yamllint!skip tests/integration/targets/helm_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip diff --git a/tests/sanity/ignore-2.16.txt b/tests/sanity/ignore-2.16.txt index c8e746f58d..d152cbda5e 100644 --- a/tests/sanity/ignore-2.16.txt +++ b/tests/sanity/ignore-2.16.txt @@ -29,4 +29,5 @@ plugins/modules/k8s_scale.py validate-modules:return-syntax-error plugins/modules/k8s_service.py validate-modules:return-syntax-error plugins/modules/k8s_taint.py validate-modules:return-syntax-error tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip +tests/integration/targets/helm_registry_auth/tasks/main.yaml yamllint!skip tests/integration/targets/helm_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip diff --git a/tests/sanity/ignore-2.17.txt b/tests/sanity/ignore-2.17.txt index c8e746f58d..d152cbda5e 100644 --- a/tests/sanity/ignore-2.17.txt +++ b/tests/sanity/ignore-2.17.txt @@ -29,4 +29,5 @@ plugins/modules/k8s_scale.py validate-modules:return-syntax-error plugins/modules/k8s_service.py validate-modules:return-syntax-error plugins/modules/k8s_taint.py validate-modules:return-syntax-error tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip +tests/integration/targets/helm_registry_auth/tasks/main.yaml yamllint!skip tests/integration/targets/helm_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip diff --git a/tests/sanity/ignore-2.18.txt b/tests/sanity/ignore-2.18.txt index 615376934a..fc66cfc98a 100644 --- a/tests/sanity/ignore-2.18.txt +++ b/tests/sanity/ignore-2.18.txt @@ -26,4 +26,5 @@ plugins/modules/k8s_scale.py validate-modules:return-syntax-error plugins/modules/k8s_service.py validate-modules:return-syntax-error plugins/modules/k8s_taint.py validate-modules:return-syntax-error tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip +tests/integration/targets/helm_registry_auth/tasks/main.yaml yamllint!skip tests/integration/targets/helm_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip diff --git a/tests/sanity/ignore-2.19.txt b/tests/sanity/ignore-2.19.txt index 615376934a..fc66cfc98a 100644 --- a/tests/sanity/ignore-2.19.txt +++ b/tests/sanity/ignore-2.19.txt @@ -26,4 +26,5 @@ plugins/modules/k8s_scale.py validate-modules:return-syntax-error plugins/modules/k8s_service.py validate-modules:return-syntax-error plugins/modules/k8s_taint.py validate-modules:return-syntax-error tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml yamllint!skip +tests/integration/targets/helm_registry_auth/tasks/main.yaml yamllint!skip tests/integration/targets/helm_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip diff --git a/tests/unit/module_utils/test_helm.py b/tests/unit/module_utils/test_helm.py index c4b09e4083..ec181b2d93 100644 --- a/tests/unit/module_utils/test_helm.py +++ b/tests/unit/module_utils/test_helm.py @@ -242,7 +242,7 @@ def test_module_run_helm_command(_ansible_helm_module): assert (rc, out, err) == (0, output, error) _ansible_helm_module.run_command.assert_called_once_with( - command, environ_update=env_update + command, environ_update=env_update, data=None ) diff --git a/tests/unit/modules/test_helm_template_module.py b/tests/unit/modules/test_helm_template_module.py index 0ff6ad016a..499e01d921 100644 --- a/tests/unit/modules/test_helm_template_module.py +++ b/tests/unit/modules/test_helm_template_module.py @@ -51,7 +51,7 @@ def test_dependency_update_option_not_defined(self): with self.assertRaises(AnsibleExitJson) as result: helm_template.main() mock_run_command.assert_called_once_with( - "/usr/bin/helm template /tmp/path", environ_update={} + "/usr/bin/helm template /tmp/path", environ_update={}, data=None ) assert result.exception.args[0]["command"] == "/usr/bin/helm template /tmp/path" @@ -74,6 +74,7 @@ def test_dependency_update_option_false(self): mock_run_command.assert_called_once_with( "/usr/bin/helm template test --repo=https://charts.com/test", environ_update={}, + data=None, ) assert ( result.exception.args[0]["command"] @@ -95,6 +96,7 @@ def test_dependency_update_option_true(self): mock_run_command.assert_called_once_with( "/usr/bin/helm template https://charts/example.tgz --dependency-update", environ_update={}, + data=None, ) assert ( result.exception.args[0]["command"] diff --git a/tests/unit/modules/test_module_helm.py b/tests/unit/modules/test_module_helm.py index 199bd828f2..c22730e175 100644 --- a/tests/unit/modules/test_module_helm.py +++ b/tests/unit/modules/test_module_helm.py @@ -88,6 +88,7 @@ def test_dependency_update_option_not_defined(self): mock_run_command.assert_called_once_with( "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) assert ( result.exception.args[0]["command"] @@ -118,6 +119,7 @@ def test_dependency_update_option_false(self): mock_run_command.assert_called_once_with( "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) assert ( result.exception.args[0]["command"] @@ -147,6 +149,7 @@ def test_dependency_update_option_true(self): call( "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) ] ) @@ -181,6 +184,7 @@ def test_dependency_update_option_true_without_dependencies_block(self): call( "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) ] ) @@ -251,6 +255,7 @@ def test_dependency_update_option_not_defined(self): mock_run_command.assert_called_once_with( "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) assert ( result.exception.args[0]["command"] @@ -280,6 +285,7 @@ def test_dependency_update_option_False(self): mock_run_command.assert_called_once_with( "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) assert ( result.exception.args[0]["command"] @@ -338,6 +344,7 @@ def test_dependency_update_option_True_and_replace_option_enabled(self): mock_run_command.assert_called_once_with( "/usr/bin/helm --repo=http://repo.example/charts install --dependency-update --replace test 'chart1'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) assert ( result.exception.args[0]["command"] @@ -405,6 +412,7 @@ def test_dependency_update_option_not_defined(self): mock_run_command.assert_called_once_with( "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) assert ( result.exception.args[0]["command"] @@ -433,6 +441,7 @@ def test_dependency_update_option_False(self): mock_run_command.assert_called_once_with( "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) assert ( result.exception.args[0]["command"] @@ -489,6 +498,7 @@ def test_dependency_update_option_True_and_replace_option_enabled(self): mock_run_command.assert_called_once_with( "/usr/bin/helm install --dependency-update --replace test 'http://repo.example/charts/application.tgz'", environ_update={"HELM_NAMESPACE": "test"}, + data=None, ) assert ( result.exception.args[0]["command"]