Compare commits

37 Commits
3.0.0 ... 3.3.0

Author SHA1 Message Date
Yuriy Novostavskiy
8feb564b4d prepare release 3.3.0 (#863)
SUMMARY
Version 3.3.0 of ansible-collection kubernetes.core came with several improvements and bugfixes
ISSUE TYPE

New release pull request

Changelog
Minor Changes

k8s_drain - Improve error message for pod disruption budget when draining a node (#797).

Bugfixes

helm - Helm version checks did not support RC versions. They now accept any version tags. (#745).
helm_pull - Apply no_log=True to pass_credentials to silence false positive warning.. (#796).
k8s_drain - Fix k8s_drain does not wait for single pod (#769).
k8s_drain - Fix k8s_drain runs into a timeout when evicting a pod which is part of a stateful set  (#792).
kubeconfig option should not appear in module invocation log (#782).
kustomize - kustomize plugin fails with deprecation warnings (#639).
waiter - Fix waiting for daemonset when desired number of pods is 0. (#756).

ADDITIONAL INFORMATION
Collection kubernets.core version 3.3.0 is compatible with ansible-core>=2.14.0

Reviewed-by: Alina Buzachis
Reviewed-by: Yuriy Novostavskiy
Reviewed-by: Mike Graves <mgraves@redhat.com>
2025-01-20 13:55:22 +00:00
patchback[bot]
42832bc9d2 trivial doc: replace 2.5.0 with 3.0.0 (#831) (#855)
This is a backport of PR #831 as merged into main (bc0de24).
SUMMARY
Some parameters were added to the master in time where the latest version was 2.4.0 with version_added: 2.5.0, however the next version after 2.4.0 was a 3.0.0.
So, with this trivial doc PR (that most probably doesn't require a changelog fragment and including to changelog) I replacing  version_added: 2.5.0 to  version_added: 3.0.0 for:

reuse_values in kubernetes.core.helm module
reset_values in kubernetes.core.helm module
delete_all in  kubernetes.core.k8s module
hidden_fields  in  kubernetes.core.k8s module
hidden_fields   in  kubernetes.core.k8s_info module

All of them are introduced in kubernetes.core 3.0.0
ISSUE TYPE

Docs Pull Request

COMPONENT NAME

helm
k8s
8s_info


ADDITIONAL INFORMATION
PR to be backported to stable-3 and stable-5
2025-01-17 18:54:26 +00:00
patchback[bot]
19b2efd0dd Remove deprecated .github/stale.yml to address #837 (#838) (#859)
This is a backport of PR #838 as merged into main (eb731cd).
SUMMARY
I noticed that even config for probot/stale is present in the repo, but the old issues and PRs weren't marked as stale and not closed by the bot. Investigated and found that this bot was added to community.kubernetes as ansible-collections/community.kubernetes#53 but wasn't moved to kubernetes.core and never worked here.
Moreover, this bot is completely deprecated and down, ref: probot/stale#430
So, the config to be removed.
ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME
.github/stale.yml
ADDITIONAL INFORMATION
Closes #837
Trivial change that not require changelog
2025-01-17 16:51:18 +00:00
patchback[bot]
1c3bf95b74 helm_pull: Silence false no_log warning (#796) (#857)
This is a backport of PR #796 as merged into main (ecc64ca).
SUMMARY
Apply no_log=True to pass_credentials to silence false positive warning.
Fixes similar issue to: #423
ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME
changelog/fragements/796-false-positive-helmull.yaml
plugins/modules/helm_pull.py
2025-01-17 16:19:38 +00:00
Yuriy Novostavskiy
018c92429b Backport "fix linters in github actions (#848)" to stable-3 (#850)
Fix bug #846
within this commit ansible/ansible-lint updated to 24.12.2 and config moved to .config folder
(cherry picked from commit 159a63a)
This is cherry-pic of #848 as patchback failed here

Reviewed-by: Mike Graves <mgraves@redhat.com>
2025-01-17 15:52:54 +00:00
patchback[bot]
9267e03538 Clean up test namespace (#852) (#853)
This is a backport of PR #852 as merged into main (9f60b15).
SUMMARY

The helm_set_values test target did not clean up its namespace which is leading to unstable tests in the k8s_drain target.

ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME

ADDITIONAL INFORMATION
2025-01-17 15:29:19 +00:00
Yuriy Novostavskiy
eb3ab99709 Backport to Stable-3: Fix helm tests (#827) and Fix helm integration tests (#830) (#829)
SUMMARY
Some of the charts we've used for testing are no longer available at the old helm repository urls, as they've been moved to oci registries. This updates those charts. In the longer term, we should find a better way to handle these kinds of test fixtures, probably by switching to local charts as much as possible.
ISSUE TYPE
Bugfix Pull Request
Docs Pull Request
Feature Pull Request
New Module Pull Request
COMPONENT NAME
ADDITIONAL INFORMATION
Reviewed-by: Helen Bailey hebailey@redhat.com
Reviewed-by: Yuriy Novostavskiy
SUMMARY


ISSUE TYPE


Bugfix Pull Request
Docs Pull Request
Feature Pull Request
New Module Pull Request

COMPONENT NAME


This is a backport of PR #830 as merged into main (7559b65).
SUMMARY
Fix charts ref on integration tests targets
ISSUE TYPE
Bugfix Pull Request

Reviewed-by: Mike Graves <mgraves@redhat.com>
2025-01-16 19:03:45 +00:00
patchback[bot]
a1ac6b99dc Remove kubeconfig value from module invocation log (#826) (#839)
(cherry picked from commit 6efabd3418)

Co-authored-by: Bikouo Aubin <79859644+abikouo@users.noreply.github.com>
2024-12-19 12:06:45 +01:00
Yuriy Novostavskiy
4ad57fdb6c Cherry-pic to stable-3: Update Readme to match the template (#767) (#822)
SUMMARY
Refer: https://issues.redhat.com/browse/ACA-1749
This PR updates the README doc to match the template ISSUE TYPE
Bugfix Pull Request
Docs Pull Request
Feature Pull Request
New Module Pull Request
COMPONENT NAME
ADDITIONAL INFORMATION
Reviewed-by: Alina Buzachis
(cherry picked from commit fdb8af7)
SUMMARY


ISSUE TYPE


Bugfix Pull Request
Docs Pull Request
Feature Pull Request
New Module Pull Request

COMPONENT NAME

ADDITIONAL INFORMATION

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-12-11 16:41:52 +00:00
patchback[bot]
ee9939c54f Make k8s_drain work when only one pod is present (#770) (#821)
This is a backport of PR #770 as merged into main (4c305e7).
SUMMARY
Fixes #769 .
k8s_drain was not checking if a pod has been deleted when there was only one pod on the node to be drained.
The list of pods, pods, was being "popped" before the first iteration of the while loop:
        pod = pods.pop()
        while (_elapsed_time() < wait_timeout or wait_timeout == 0) and pods:
When pods contains only one element, the while loop is skipped.


ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME

k8s_drain
2024-12-11 16:24:33 +00:00
patchback[bot]
c1549db1bb Improve error message for pod disruption budget when draining a node (#798) (#815)
This is a backport of PR #798 as merged into main (52f2cb5).
SUMMARY
Closes #797 .
The error message "Too Many Requests" is confusing and is changed to a more meaningful message:
TASK [Drain node] *************************************************************************
Montag 25 November 2024  09:20:28 +0100 (0:00:00.014)       0:00:00.014 ******* 
fatal: [host -> localhost]: FAILED! => {"changed": false, "msg": "Failed to delete pod kube-public/draintest-6b84677b99-9jf7m due to: Cannot evict pod as it would violate the pod's disruption budget."}


The new task output would allow to deal with a pod disruption budget with the retries/until logic in a more controlled way:
---
- hosts: "{{ target }}"
  serial: 1
  gather_facts: false
  tasks:
    - name: Drain node
      kubernetes.core.k8s_drain:
        kubeconfig: "{{ kubeconfig_path }}"
        name: "{{ inventory_hostname }}"
        delete_options:
          ignore_daemonsets: true
          delete_emptydir_data: true
          wait_timeout: 100
          disable_eviction: false
          wait_sleep: 1
      delegate_to: localhost
      retries: 10
      delay: 5
      until: drain_result is success or 'disruption budget' not in drain_result.msg
      register: drain_result

ISSUE TYPE


Feature Pull Request

COMPONENT NAME
k8s_drain
2024-12-11 15:14:46 +00:00
patchback[bot]
c6bd8ab453 Fix k8s_drain runs into timeout with pods from stateful sets. (#793) (#807)
This is a backport of PR #793 as merged into main (fca0dc0).
SUMMARY
Fixes #792 .
The function wait_for_pod_deletion in k8s_drain never checks on which node a pod is actually running:
            try:
                response = self._api_instance.read_namespaced_pod(
                    namespace=pod[0], name=pod[1]
                )
                if not response:
                    pod = None
                time.sleep(wait_sleep)
This means that if a pod is successfully evicted and restarted with the same name on a new node, k8s_drain does not notice and thinks that the original pod is still running. This is the case for pods which are part of a stateful set.

ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME
k8s_drain
2024-12-11 14:12:32 +00:00
patchback[bot]
6299f242a2 Remove kubevirt integration test workflow (#806) (#809)
This is a backport of PR #806 as merged into main (513ff66).
SUMMARY

This removes the kubevirt integration tests. We don't maintain that collection or have any permissions on that repo, so there's no reason for these tests to be here.

ISSUE TYPE


Bugfix Pull Request


COMPONENT NAME

ADDITIONAL INFORMATION

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-12-10 18:08:31 +00:00
patchback[bot]
cd55f596ab [ci] fix github actions post 2.18 (#789) (#811)
This is a backport of PR #789 as merged into main (cd68631).
This PR includes a trivial fix for the GitHub Actions issue #788 and related to switching milestone and devel branches of ansible/ansible to version 2.19 and prepare repo to be ready to include test with Python 3.13 when ansible-network/github_actions/pull/162 is merged.
ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME
GitHub actions/test

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-12-10 17:28:59 +00:00
patchback[bot]
00bbf16cff fix: kustomize plugin fails with deprecation warnings (#728) (#763)
This is a backport of PR #728 as merged into main (5bc53db).
SUMMARY

error judgments are based on the exit codes of command execution, where 0 represents success and non-zero represents failure.
Optimize the run_command function to return a tuple like the run_command method of AnsibleModule.

Fixes #639
ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME

kustomize lookup plugin
ADDITIONAL INFORMATION

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-07-15 14:06:29 +00:00
patchback[bot]
31fd4058f1 Fix waiting for daemonset when desired number of pods is 0 (#756) (#761)
This is a backport of PR #756 as merged into main (b07fbd6).
Fixes #755
SUMMARY
Because we don't have any node with non_exisiting_label (see code below) desired number of Pods will be 0. Kubernetes won't create .status.updatedNumberScheduled field (at least on version v1.27), because we still are not going to create any Pods. So that if .status.updatedNumberScheduled doesn't exist we should assume that number is 0
Code to reproduce:
- name: Create daemonset
  kubernetes.core.k8s:
    state: present
    wait: true
    definition:
      apiVersion: apps/v1
      kind: DaemonSet
      metadata:
        name: my-daemonset
        namespace: default
      spec:
        selector:
          matchLabels:
            app: my-app
        template:
          metadata:
            labels:
              app: my-app
          spec:
            containers:
              - name: my-container
                image: nginx
            nodeSelector:
              non_exisiting_label: 1
ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME
kubernetes.core.plugins.module_utils.k8s.waiter
ADDITIONAL INFORMATION



TASK [Create daemonset] **********************************************************************************************************************************
changed: [controlplane] => {"changed": true, "duration": 5, "method": "create", "result": {"apiVersion": "apps/v1", "kind": "DaemonSet", "metadata": {"annotations": {"deprecated.daemonset.template.generation": "1"}, "creationTimestamp": "2024-06-28T08:23:41Z", "generation": 1, "managedFields": [{"apiVersion": "apps/v1", "fieldsType": "FieldsV1", "fieldsV1": {"f:metadata": {"f:annotations": {".": {}, "f:deprecated.daemonset.template.generation": {}}}, "f:spec": {"f:revisionHistoryLimit": {}, "f:selector": {}, "f:template": {"f:metadata": {"f:labels": {".": {}, "f:app": {}}}, "f:spec": {"f:containers": {"k:{\"name\":\"my-container\"}": {".": {}, "f:image": {}, "f:imagePullPolicy": {}, "f:name": {}, "f:resources": {}, "f:terminationMessagePath": {}, "f:terminationMessagePolicy": {}}}, "f:dnsPolicy": {}, "f:nodeSelector": {}, "f:restartPolicy": {}, "f:schedulerName": {}, "f:securityContext": {}, "f:terminationGracePeriodSeconds": {}}}, "f:updateStrategy": {"f:rollingUpdate": {".": {}, "f:maxSurge": {}, "f:maxUnavailable": {}}, "f:type": {}}}}, "manager": "OpenAPI-Generator", "operation": "Update", "time": "2024-06-28T08:23:41Z"}, {"apiVersion": "apps/v1", "fieldsType": "FieldsV1", "fieldsV1": {"f:status": {"f:observedGeneration": {}}}, "manager": "kube-controller-manager", "operation": "Update", "subresource": "status", "time": "2024-06-28T08:23:41Z"}], "name": "my-daemonset", "namespace": "default", "resourceVersion": "1088421", "uid": "faafdbf7-4388-4cec-88d5-84657966312d"}, "spec": {"revisionHistoryLimit": 10, "selector": {"matchLabels": {"app": "my-app"}}, "template": {"metadata": {"creationTimestamp": null, "labels": {"app": "my-app"}}, "spec": {"containers": [{"image": "nginx", "imagePullPolicy": "Always", "name": "my-container", "resources": {}, "terminationMessagePath": "/dev/termination-log", "terminationMessagePolicy": "File"}], "dnsPolicy": "ClusterFirst", "nodeSelector": {"non_exisiting_label": "1"}, "restartPolicy": "Always", "schedulerName": "default-scheduler", "securityContext": {}, "terminationGracePeriodSeconds": 30}}, "updateStrategy": {"rollingUpdate": {"maxSurge": 0, "maxUnavailable": 1}, "type": "RollingUpdate"}}, "status": {"currentNumberScheduled": 0, "desiredNumberScheduled": 0, "numberMisscheduled": 0, "numberReady": 0, "observedGeneration": 1}}}

~$ kubectl get ds
NAME           DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR           AGE
my-daemonset   0         0         0       0            0           non_exisiting_label=1   30s

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-07-10 14:32:08 +00:00
patchback[bot]
5c748bd4e9 Merge pull request #757 from gravesm/gha-python-version (#758)
This is a backport of PR #757 as merged into main (44a2fc3).
SUMMARY

Ansible 2.17 is already included in the ubuntu-latest runner image, so there's no need for a separate install step. It was broken in any case because the python version being used was too low for ansible 2.18.

ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME

ADDITIONAL INFORMATION

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-07-10 13:09:23 +00:00
patchback[bot]
1c295560ba helm: Accept release candidate versions for compatibility checks (#745) (#753)
This is a backport of PR #745 as merged into main (6a04f42).
SUMMARY

If the helm CLI version includes -rc.1 for example, the version checks fails due to an incomplete regex.
The error can be triggered if you use helm v3.15.0-rc.1 for example, and apply a helm chart with wait: true 
ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME
helm
helm_pull
ADDITIONAL INFORMATION

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-06-18 13:05:53 +00:00
Yuriy Novostavskiy
615d3d8bd0 Prepare release 3.2.0 (#746)
SUMMARY
Prepare version 3.2.0
ISSUE TYPE

New Version Pull Request

ADDITIONAL INFORMATION
The current version of a major Ansible (Ansible 10) includes a collection version 3.1.0, meaning that the minor version (i.e. Ansible 10.1) will pick versions from the stable-3 branch. Hence, a recent documentation update will not be in Ansible and Ansible documentation site/kubernetes.core collection chapter until a new minor version released from stable-3 branch.
This PR also includes changes in README.md and Makefile that were missed in 3.1.0

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-06-14 15:31:50 +00:00
patchback[bot]
4854d7fbd9 Doc: add example of using kubectl connection plugin (#741) (#743)
[PR #741/fb80d973 backport][stable-3] Doc: add example of using kubectl connection plugin

This is a backport of PR #741 as merged into main (fb80d97).
SUMMARY
Currently documentation for collection don't include any examples of using kubenrenes.core.kubectl connection plugin and it's hard to start using that plugin.
ISSUE TYPE

Docs Pull Request

COMPONENT NAME
kubenrenes.core.kubectl connection plugin
ADDITIONAL INFORMATION
This PR was inspired by #288 and based on feedback on that PR and my own experience. Thanks @tpo for his try and @geerlingguy for his Ansible for DevOps book

Reviewed-by: Yuriy Novostavskiy
Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-06-06 14:28:18 +00:00
patchback[bot]
baa59f388c Defer removal of inventory/k8s to 6.0.0 (#734) (#738)
Defer removal of inventory/k8s to 6.0.0

SUMMARY
Defer removal of inventory plugin k8s to release 6.0.0.

ISSUE TYPE

Feature Pull Request

Reviewed-by: Alina Buzachis
Reviewed-by: Mike Graves <mgraves@redhat.com>
(cherry picked from commit 0c5233a650)

Co-authored-by: Bikouo Aubin <79859644+abikouo@users.noreply.github.com>
2024-05-31 09:59:45 +02:00
patchback[bot]
e071ae73b6 kubevirt.core collection cross testing (#731) (#735)
* Initial

* update python version

* update python version

* checkout local version of collection

* add integration job

* indent

* Set workflow as non blocking

(cherry picked from commit c0666a5137)

Co-authored-by: Bikouo Aubin <79859644+abikouo@users.noreply.github.com>
2024-05-31 09:46:31 +02:00
patchback[bot]
00cb40094a Defer removal of k8s inventory plugin to version 5.0. (#723) (#724)
[PR #723/cbadbe32 backport][stable-3] Defer removal of k8s inventory plugin to version 5.0.

This is a backport of PR #723 as merged into main (cbadbe3).
SUMMARY

Defer removal of k8s inventory plugin to version 5.0.

ISSUE TYPE


Bugfix Pull Request
Docs Pull Request
Feature Pull Request
New Module Pull Request

COMPONENT NAME

inventory/k8s.py
ADDITIONAL INFORMATION

Reviewed-by: Alina Buzachis
2024-05-22 11:56:29 +00:00
Mike Graves
ef829b8a56 Release 3.1.0 (#719)
Release 3.1.0

SUMMARY

Release prep for 3.1.0

ISSUE TYPE


Bugfix Pull Request
Docs Pull Request
Feature Pull Request
New Module Pull Request

COMPONENT NAME

ADDITIONAL INFORMATION

Reviewed-by: Alina Buzachis
Reviewed-by: Helen Bailey <hebailey@redhat.com>
2024-05-16 14:15:47 +00:00
patchback[bot]
d86a652c36 Update deprecation version for merge_type=json (#700) (#718)
[PR #700/a4c1bd85 backport][stable-3] Update deprecation version for merge_type=json

This is a backport of PR #700 as merged into main (a4c1bd8).
SUMMARY
When looking at the parts of plugins/module_utils/common.py and plugins/module_utils/k8s/service.py during the post 3.0.0 release (see https://github.com/ansible-collections/kubernetes.core/pull/663/files#diff-9ee2d0860a5643da4e1f35136e9e7c3a41c5f2fd2952c197e7e32b941e5a301c) that affect merge_type when set to json, I don't believe merge_type=json was deprecated for (and removed from) the k8s module, and instead the deprecation version has moved to 4.0.0. Hence, the documentation update.
ISSUE TYPE

Docs Pull Request

COMPONENT NAME
k8s module

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-05-15 18:57:45 +00:00
patchback[bot]
a4242f0131 minor: doc: use the same style of version_added across repo (#703) (#715)
[PR #703/63607630 backport][stable-3] minor(doc): use the same style of version_added across repo

This is a backport of PR #703 as merged into main (6360763).
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: Mike Graves <mgraves@redhat.com>
2024-05-15 15:10:34 +00:00
Mike Graves
d75e9a0fa3 Fix unsafe text assertion in tests (#716) (#717)
[Manual backport/stable-3] Fix unsafe text assertion in tests (#716)

Fix unsafe text assertion in tests
SUMMARY
This fixes a problem with unsafe text in an assertion.
ISSUE TYPE
Bugfix Pull Request
COMPONENT NAME
ADDITIONAL INFORMATION
Reviewed-by: GomathiselviS
Reviewed-by: Bikouo Aubin
(cherry picked from commit 8858b19)
2024-05-15 14:35:14 +00:00
patchback[bot]
5044cfc030 fixed typo in filename of 'k8s_json_patch'-action (#652) (#714)
[PR #652/ac943e98 backport][stable-3] fixed typo in filename of 'k8s_json_patch'-action 

This is a backport of PR #652 as merged into main (ac943e9).
SUMMARY

The filename/symlink of the action for the 'k8s_json_patch'-module was wrong. Renamed file from 'ks8_json_patch.py' to ' k8s_json_patch.py'

ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME

k8s_json_patch
ADDITIONAL INFORMATION


Because of the wrong filename things like unvaulting kubeconfig files did not worked.

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-05-14 17:07:48 +00:00
patchback[bot]
ddd7e79a12 Update kustomize.py add --enable-helm support (#592) (#712)
[PR #592/0408aa93 backport][stable-3] Update kustomize.py add --enable-helm support

This is a backport of PR #592 as merged into main (0408aa9).
Add --enable-helm support
SUMMARY
Fixes #568
ISSUE TYPE

Feature Pull Request

COMPONENT NAME
Lookup plugin: kubernetes.core.kustomize
ADDITIONAL INFORMATION
Current and maintained arg:
lookup('kubernetes.core.kustomize', dir=item)

Additional feature args:
lookup('kubernetes.core.kustomize', dir=item, enable_helm=false)
lookup('kubernetes.core.kustomize', dir=item, enable_helm=true)

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-05-13 17:58:34 +00:00
patchback[bot]
edc979ff11 add support of kubectl_local_env_vars (#698) (#702) (#705)
[PR #702/fb25ff44 backport][stable-3] add support of kubectl_local_env_vars (#698)

This is a backport of PR #702 as merged into main (fb25ff4).
SUMMARY
Support of local environmental variable that may be required to be set on Ansible Controller before the connection is set and may be used for kubectl command. This PR addressed for #698
The main idea is to have the support of  additional/extra local environmental variable that may be required for kubectl itself, i.e. for authorization in case of public clouds
ISSUE TYPE

Feature Pull Request

COMPONENT NAME
kubernetes.core.kubectl connection plugin
ADDITIONAL INFORMATION
This PR attempts to implement local env support for the kubectl connection plugin that may be useful in case of using kubectl against public cloud kubernetes environment that uses some authorization (i.e. aws cli) additionally to kubeconfig file. More detail in #698
The output that shows that the connection plugin can use local environment variable for kubectl command (with some debug that used during development but removed then):
root@ubuntu-shell:/# cat test.yaml
- hosts: localhost
  gather_facts: no
  any_errors_fatal: yes
  vars:
    ansible_connection: "kubectl"
    ansible_kubectl_namespace: "test"
    ansible_kubectl_config: "/.kube/config"
    ansible_kubectl_pod: "ubuntu"
    ansible_kubectl_container: "ubuntu"
    ansible_kubectl_local_env_vars:
      TESTVAR1: "test"
      TESTVAR2: "test"
      TESTVAR3: "test"
  environment:
    TEST_ENV1: value1
    TEST_ENV2: value2

  tasks:
  - name: test
    ansible.builtin.shell: env
    register: result
  - debug:
      var: result.stdout_lines
root@ubuntu-shell:/# ansible-playbook test.yaml
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'

PLAY [localhost] **************************************************************************************************************************************

TASK [test] *******************************************************************************************************************************************
changed: [localhost]

TASK [debug] ******************************************************************************************************************************************
ok: [localhost] => {
    "result.stdout_lines": [
        "KUBERNETES_PORT=tcp://10.96.0.1:443",
        "KUBERNETES_SERVICE_PORT=443",
        "HOSTNAME=ubuntu",
        "HOME=/root",
        "LC_CTYPE=C.UTF-8",
        "TEST_ENV1=value1",
        "TEST_ENV2=value2",
        "TERM=xterm",
        "KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1",
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "KUBERNETES_PORT_443_TCP_PORT=443",
        "KUBERNETES_PORT_443_TCP_PROTO=tcp",
        "KUBERNETES_SERVICE_PORT_HTTPS=443",
        "KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443",
        "KUBERNETES_SERVICE_HOST=10.96.0.1",
        "PWD=/"
    ]
}

PLAY RECAP ********************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

root@ubuntu-shell:/# ansible-playbook test.yaml -vvv
ansible-playbook [core 2.14.5]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.10/dist-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible-playbook
  python version = 3.10.12 (main, Nov 20 2023, 15:14:05) [GCC 11.4.0] (/usr/bin/python3)
  jinja version = 3.1.3
  libyaml = True
No config file found; using defaults
host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
yaml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
ini declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
toml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.

PLAYBOOK: test.yaml ***********************************************************************************************************************************
1 plays in test.yaml

PLAY [localhost] **************************************************************************************************************************************

TASK [test] *******************************************************************************************************************************************
task path: /test.yaml:19
redirecting (type: connection) ansible.builtin.kubectl to kubernetes.core.kubectl
<127.0.0.1> ESTABLISH kubectl CONNECTION
<127.0.0.1> ENV: KUBERNETES_SERVICE_PORT_HTTPS=443
<127.0.0.1> ENV: KUBERNETES_SERVICE_PORT=443
<127.0.0.1> ENV: HOSTNAME=ubuntu-shell
<127.0.0.1> ENV: PWD=/
<127.0.0.1> ENV: HOME=/root
<127.0.0.1> ENV: KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443
<127.0.0.1> ENV: LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.zst=01;31:*.tzst=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.wim=01;31:*.swm=01;31:*.dwm=01;31:*.esd=01;31:*.jpg=01;35:*.jpeg=01;35:*.mjpg=01;35:*.mjpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.webp=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.m4a=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.oga=00;36:*.opus=00;36:*.spx=00;36:*.xspf=00;36:
<127.0.0.1> ENV: TERM=xterm
<127.0.0.1> ENV: SHLVL=1
<127.0.0.1> ENV: KUBERNETES_PORT_443_TCP_PROTO=tcp
<127.0.0.1> ENV: KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1
<127.0.0.1> ENV: KUBERNETES_SERVICE_HOST=10.96.0.1
<127.0.0.1> ENV: KUBERNETES_PORT=tcp://10.96.0.1:443
<127.0.0.1> ENV: KUBERNETES_PORT_443_TCP_PORT=443
<127.0.0.1> ENV: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
<127.0.0.1> ENV: _=/usr/local/bin/ansible-playbook
<127.0.0.1> ENV: LC_CTYPE=C.UTF-8
<127.0.0.1> ENV: TESTVAR1=test
<127.0.0.1> ENV: TESTVAR2=test
<127.0.0.1> ENV: TESTVAR3=test
<127.0.0.1> EXEC ['/usr/local/bin/kubectl', '-n', 'test', '--kubeconfig', '/.kube/config', 'exec', '-i', 'ubuntu', '-c', 'ubuntu', '--', '/bin/sh', '-c', "/bin/sh -c 'echo ~ && sleep 0'"]
<127.0.0.1> EXEC ['/usr/local/bin/kubectl', '-n', 'test', '--kubeconfig', '/.kube/config', 'exec', '-i', 'ubuntu', '-c', 'ubuntu', '--', '/bin/sh', '-c', '/bin/sh -c \'( umask 77 && mkdir -p "` echo /root/.ansible/tmp `"&& mkdir "` echo /root/.ansible/tmp/ansible-tmp-1713785852.548581-6866-69007595335133 `" && echo ansible-tmp-1713785852.548581-6866-69007595335133="` echo /root/.ansible/tmp/ansible-tmp-1713785852.548581-6866-69007595335133 `" ) && sleep 0\'']
Using module file /usr/local/lib/python3.10/dist-packages/ansible/modules/command.py
<127.0.0.1> PUT /root/.ansible/tmp/ansible-local-6862s5_lr_wb/tmpxwmx0qeh TO /root/.ansible/tmp/ansible-tmp-1713785852.548581-6866-69007595335133/AnsiballZ_command.py
<127.0.0.1> EXEC ['/usr/local/bin/kubectl', '-n', 'test', '--kubeconfig', '/.kube/config', 'exec', '-i', 'ubuntu', '-c', 'ubuntu', '--', '/bin/sh', '-c', "/bin/sh -c 'chmod u+x /root/.ansible/tmp/ansible-tmp-1713785852.548581-6866-69007595335133/ /root/.ansible/tmp/ansible-tmp-1713785852.548581-6866-69007595335133/AnsiballZ_command.py && sleep 0'"]
<127.0.0.1> EXEC ['/usr/local/bin/kubectl', '-n', 'test', '--kubeconfig', '/.kube/config', 'exec', '-i', 'ubuntu', '-c', 'ubuntu', '--', '/bin/sh', '-c', "/bin/sh -c 'TEST_ENV1=value1 TEST_ENV2=value2 /usr/bin/python3 /root/.ansible/tmp/ansible-tmp-1713785852.548581-6866-69007595335133/AnsiballZ_command.py && sleep 0'"]
<127.0.0.1> EXEC ['/usr/local/bin/kubectl', '-n', 'test', '--kubeconfig', '/.kube/config', 'exec', '-i', 'ubuntu', '-c', 'ubuntu', '--', '/bin/sh', '-c', "/bin/sh -c 'rm -f -r /root/.ansible/tmp/ansible-tmp-1713785852.548581-6866-69007595335133/ > /dev/null 2>&1 && sleep 0'"]
changed: [localhost] => {
    "changed": true,
    "cmd": "env",
    "delta": "0:00:00.005088",
    "end": "2024-04-22 11:37:33.655340",
    "invocation": {
        "module_args": {
            "_raw_params": "env",
            "_uses_shell": true,
            "argv": null,
            "chdir": null,
            "creates": null,
            "executable": null,
            "removes": null,
            "stdin": null,
            "stdin_add_newline": true,
            "strip_empty_ends": true
        }
    },
    "msg": "",
    "rc": 0,
    "start": "2024-04-22 11:37:33.650252",
    "stderr": "",
    "stderr_lines": [],
    "stdout": "KUBERNETES_PORT=tcp://10.96.0.1:443\nKUBERNETES_SERVICE_PORT=443\nHOSTNAME=ubuntu\nHOME=/root\nLC_CTYPE=C.UTF-8\nTEST_ENV1=value1\nTEST_ENV2=value2\nTERM=xterm\nKUBERNETES_PORT_443_TCP_ADDR=10.96.0.1\nPATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin\nKUBERNETES_PORT_443_TCP_PORT=443\nKUBERNETES_PORT_443_TCP_PROTO=tcp\nKUBERNETES_SERVICE_PORT_HTTPS=443\nKUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443\nKUBERNETES_SERVICE_HOST=10.96.0.1\nPWD=/",
    "stdout_lines": [
        "KUBERNETES_PORT=tcp://10.96.0.1:443",
        "KUBERNETES_SERVICE_PORT=443",
        "HOSTNAME=ubuntu",
        "HOME=/root",
        "LC_CTYPE=C.UTF-8",
        "TEST_ENV1=value1",
        "TEST_ENV2=value2",
        "TERM=xterm",
        "KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1",
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "KUBERNETES_PORT_443_TCP_PORT=443",
        "KUBERNETES_PORT_443_TCP_PROTO=tcp",
        "KUBERNETES_SERVICE_PORT_HTTPS=443",
        "KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443",
        "KUBERNETES_SERVICE_HOST=10.96.0.1",
        "PWD=/"
    ]
}

TASK [debug] ******************************************************************************************************************************************
task path: /test.yaml:22
redirecting (type: connection) ansible.builtin.kubectl to kubernetes.core.kubectl
ok: [localhost] => {
    "result.stdout_lines": [
        "KUBERNETES_PORT=tcp://10.96.0.1:443",
        "KUBERNETES_SERVICE_PORT=443",
        "HOSTNAME=ubuntu",
        "HOME=/root",
        "LC_CTYPE=C.UTF-8",
        "TEST_ENV1=value1",
        "TEST_ENV2=value2",
        "TERM=xterm",
        "KUBERNETES_PORT_443_TCP_ADDR=10.96.0.1",
        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
        "KUBERNETES_PORT_443_TCP_PORT=443",
        "KUBERNETES_PORT_443_TCP_PROTO=tcp",
        "KUBERNETES_SERVICE_PORT_HTTPS=443",
        "KUBERNETES_PORT_443_TCP=tcp://10.96.0.1:443",
        "KUBERNETES_SERVICE_HOST=10.96.0.1",
        "PWD=/"
    ]
}

PLAY RECAP ********************************************************************************************************************************************
localhost                  : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

root@ubuntu-shell:/#

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-05-08 19:53:12 +00:00
patchback[bot]
37c1f911cb Add tests/sanity/ignore-2.18.txt (#704) (#706)
[PR #704/86d9a3f4 backport][stable-3] Add tests/sanity/ignore-2.18.txt

This is a backport of PR #704 as merged into main (86d9a3f).
SUMMARY

Add tests/sanity/ignore-2.18.txt

ISSUE TYPE


Bugfix Pull Request
Docs Pull Request
Feature Pull Request
New Module Pull Request

COMPONENT NAME

ADDITIONAL INFORMATION
2024-05-08 19:00:55 +00:00
patchback[bot]
80a5bf623a Merge pull request #707 from gravesm/linting-fix (#708)
[PR #707/874fbfed backport][stable-3] Update ansible-lint GHA

This is a backport of PR #707 as merged into main (874fbfe).
SUMMARY

There seems to be a bug in older versions of ansible-lint where pinning to a version for the GHA still installs the main branch.
See ansible/ansible-lint#3762 for more info.

ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME

ADDITIONAL INFORMATION

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-05-08 15:32:59 +00:00
patchback[bot]
8f653558f6 helm - expand kubeconfig path with user's home dir (#654) (#695)
[PR #654/9f7c865c backport][stable-3] helm - expand kubeconfig path with user's home dir

This is a backport of PR #654 as merged into main (9f7c865).
SUMMARY

Currently the helm module fails when providing the default kubeconfig path explicitly, while the same path is fine for the k8s module.

ISSUE TYPE


Bugfix Pull Request

COMPONENT NAME

helm
ADDITIONAL INFORMATION



- name: Deploy kubelet-csr-approver
  delegate_to: client
  run_once: true
  kubernetes.core.helm:
    update_repo_cache: true
    kubeconfig: "~/.kube/config"
    state: present
    name: kubelet-csr-approver
    namespace: kubelet-csr-approver
    create_namespace: true
    chart_ref: kubelet-csr-approver/kubelet-csr-approver
    chart_version: 1.0.5
    values: "{{ lookup('template', 'values.yaml.j2') | from_yaml }}"
    atomic: true

Before change:
TASK [kubernetes/kubelet_csr_approver : Deploy kubelet-csr-approver] ***
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: FileNotFoundError: [Errno 2] No such file or directory: '~/.kube/config'
fatal: [node-1 -> client(192.168.121.56)]: FAILED! => {"changed": false, "module_stderr": "", "module_stdout": "Traceback (most recent call last):\r\n  File \"/home/vagrant/.ansible/tmp/ansible-tmp-1697293347.7135417-118207-9805169252135/AnsiballZ_helm.py\", line 107, in <module>\r\n    _ansiballz_main()\r\n  File \"/home/vagrant/.ansible/tmp/ansible-tmp-1697293347.7135417-118207-9805169252135/AnsiballZ_helm.py\", line 99, in _ansiballz_main\r\n    invoke_module(zipped_mod, temp_path, ANSIBALLZ_PARAMS)\r\n  File \"/home/vagrant/.ansible/tmp/ansible-tmp-1697293347.7135417-118207-9805169252135/AnsiballZ_helm.py\", line 47, in invoke_module\r\n    runpy.run_module(mod_name='ansible_collections.kubernetes.core.plugins.modules.helm', init_globals=dict(_module_fqn='ansible_collections.kubernetes.core.plugins.modules.helm', _modlib_path=modlib_path),\r\n  File \"/usr/lib/python3.10/runpy.py\", line 224, in run_module\r\n    return _run_module_code(code, init_globals, run_name, mod_spec)\r\n  File \"/usr/lib/python3.10/runpy.py\", line 96, in _run_module_code\r\n    _run_code(code, mod_globals, init_globals,\r\n  File \"/usr/lib/python3.10/runpy.py\", line 86, in _run_code\r\n    exec(code, run_globals)\r\n  File \"/tmp/ansible_kubernetes.core.helm_payload_o8s36dti/ansible_kubernetes.core.helm_payload.zip/ansible_collections/kubernetes/core/plugins/modules/helm.py\", line 924, in <module>\r\n  File \"/tmp/ansible_kubernetes.core.helm_payload_o8s36dti/ansible_kubernetes.core.helm_payload.zip/ansible_collections/kubernetes/core/plugins/modules/helm.py\", line 737, in main\r\n  File \"/tmp/ansible_kubernetes.core.helm_payload_o8s36dti/ansible_kubernetes.core.helm_payload.zip/ansible_collections/kubernetes/core/plugins/modules/helm.py\", line 435, in run_repo_update\r\n  File \"/tmp/ansible_kubernetes.core.helm_payload_o8s36dti/ansible_kubernetes.core.helm_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/helm.py\", line 169, in run_helm_command\r\n  File \"/tmp/ansible_kubernetes.core.helm_payload_o8s36dti/ansible_kubernetes.core.helm_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/helm.py\", line 162, in env_update\r\n  File \"/tmp/ansible_kubernetes.core.helm_payload_o8s36dti/ansible_kubernetes.core.helm_payload.zip/ansible_collections/kubernetes/core/plugins/module_utils/helm.py\", line 120, in _prepare_helm_environment\r\nFileNotFoundError: [Errno 2] No such file or directory: '~/.kube/config'\r\n", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}

After change:
TASK [kubernetes/kubelet_csr_approver : Deploy kubelet-csr-approver] ***
changed: [node-1 -> client(192.168.121.56)]

Reviewed-by: Mike Graves <mgraves@redhat.com>
2024-03-13 13:57:36 +00:00
Bikouo Aubin
1c0734dd4e Prepare release 3.0.1 (#693) 2024-03-04 11:02:29 +01:00
patchback[bot]
e6d138dbf0 helm - Add reuse-values when running helm diff (#683) (#692)
helm - Add reuse-values when running helm diff

SUMMARY

closes #680

ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME

helm

Reviewed-by: GomathiselviS
Reviewed-by: Alina Buzachis
(cherry picked from commit 23e94b60c1)

Co-authored-by: Bikouo Aubin <79859644+abikouo@users.noreply.github.com>
2024-03-01 18:01:13 +01:00
patchback[bot]
eed4ebb0af Align helmdiff_check behavior with the deploy function (#670) (#690)
Align `helmdiff_check` behavior with the `deploy` function

SUMMARY
Align helmdiff_check behavior with the deploy function

Fixes #638
helmdiff_check respects set_values parameter
Fixes #669
helmdiff_check command line parameters sequence aligned to the deploy function

ISSUE TYPE

Bugfix Pull Request

COMPONENT NAME
kubernetes.core.helm

Reviewed-by: Mike Graves <mgraves@redhat.com>
(cherry picked from commit 7c4ec3b982)

Co-authored-by: psmolkin <pavel.smolkin@gmail.com>
2024-03-01 17:50:35 +01:00
patchback[bot]
d3031fcbd3 [PR #676/19559892 backport][stable-3] fix(Collection's util resource discovery fails when complex subresources present #659) (#687)
* fix(Collection's util resource discovery fails when complex subresources present #659) (#676)

* fix(Collection's util resource discovery fails when complex subresources present #659)

* fix(add changelog fragment)

* update node image

* Create discovery.yml

* Update main.yml

---------

Co-authored-by: Bastien Bosser <bastien.bosser@eviden.com>
Co-authored-by: Bikouo Aubin <79859644+abikouo@users.noreply.github.com>
(cherry picked from commit 1955989278)

* adding sanity ignore file

* Remove refresh_ignore_files

* Update ignore files content

---------

Co-authored-by: bastienbosser <55381632+bastienbosser@users.noreply.github.com>
Co-authored-by: abikouo <abikouo@redhat.com>
2024-03-01 16:44:19 +01:00
86 changed files with 1137 additions and 2360 deletions

View File

@@ -0,0 +1,3 @@
# no-changed-when is not requried for examples
plugins/connection/kubectl.py no-changed-when
meta/runtime.yml meta-runtime[unsupported-version]

View File

@@ -2,5 +2,7 @@
profile: production
exclude_paths:
- .ansible/
- tests/integration
- tests/unit
- tests/sanity

60
.github/stale.yml vendored
View File

@@ -1,60 +0,0 @@
---
# Configuration for probot-stale - https://github.com/probot/stale
# Number of days of inactivity before an Issue or Pull Request becomes stale
daysUntilStale: 90
# Number of days of inactivity before an Issue or Pull Request with the stale
# label is closed. Set to false to disable. If disabled, issues still need to be
# closed manually, but will remain marked as stale.
daysUntilClose: 30
# Only issues or pull requests with all of these labels are check if stale.
# Defaults to `[]` (disabled)
onlyLabels: []
# Issues or Pull Requests with these labels will never be considered stale. Set
# to `[]` to disable
exemptLabels:
- security
- planned
- priority/critical
- lifecycle/frozen
- verified
# Set to true to ignore issues in a project (defaults to false)
exemptProjects: false
# Set to true to ignore issues in a milestone (defaults to false)
exemptMilestones: true
# Set to true to ignore issues with an assignee (defaults to false)
exemptAssignees: false
# Label to use when marking as stale
staleLabel: lifecycle/stale
# Limit the number of actions per hour, from 1-30. Default is 30
limitPerRun: 30
pulls:
markComment: |-
PRs go stale after 90 days of inactivity.
If there is no further activity, the PR will be closed in another 30 days.
unmarkComment: >-
This pull request is no longer stale.
closeComment: >-
This pull request has been closed due to inactivity.
issues:
markComment: |-
Issues go stale after 90 days of inactivity.
If there is no further activity, the issue will be closed in another 30 days.
unmarkComment: >-
This issue is no longer stale.
closeComment: >-
This issue has been closed due to inactivity.

View File

@@ -132,6 +132,8 @@ jobs:
- name: create kubernetes cluster
uses: helm/kind-action@v1.8.0
with:
node_image: "kindest/node:v1.29.2"
- name: Run integration tests
uses: ansible-network/github_actions/.github/actions/ansible_test_integration@main

View File

@@ -19,6 +19,5 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run ansible-lint
uses: ansible/ansible-lint@v6.21.0
- name: run-ansible-lint
uses: ansible/ansible-lint@v24.12.2

View File

@@ -4,6 +4,76 @@ Kubernetes Collection Release Notes
.. contents:: Topics
v3.3.0
======
Minor Changes
-------------
- inventory/k8s.py - Defer removal of k8s inventory plugin to version 5.0 (https://github.com/ansible-collections/kubernetes.core/pull/723).
- inventory/k8s.py - Defer removal of k8s inventory plugin to version 6.0.0 (https://github.com/ansible-collections/kubernetes.core/pull/734).
- k8s_drain - Improve error message for pod disruption budget when draining a node (https://github.com/ansible-collections/kubernetes.core/issues/797).
Bugfixes
--------
- helm - Helm version checks did not support RC versions. They now accept any version tags. (https://github.com/ansible-collections/kubernetes.core/pull/745).
- helm_pull - Apply no_log=True to pass_credentials to silence false positive warning.. (https://github.com/ansible-collections/kubernetes.core/pull/796).
- k8s_drain - Fix k8s_drain does not wait for single pod (https://github.com/ansible-collections/kubernetes.core/issues/769).
- k8s_drain - Fix k8s_drain runs into a timeout when evicting a pod which is part of a stateful set (https://github.com/ansible-collections/kubernetes.core/issues/792).
- kubeconfig option should not appear in module invocation log (https://github.com/ansible-collections/kubernetes.core/issues/782).
- kustomize - kustomize plugin fails with deprecation warnings (https://github.com/ansible-collections/kubernetes.core/issues/639).
- waiter - Fix waiting for daemonset when desired number of pods is 0. (https://github.com/ansible-collections/kubernetes.core/pull/756).
v3.2.0
======
Release Summary
---------------
This release comes with documentation updates.
Minor Changes
-------------
- connection/kubectl.py - Added an example of using the kubectl connection plugin to the documentation (https://github.com/ansible-collections/kubernetes.core/pull/741).
- inventory/k8s.py - Defer removal of k8s inventory plugin to version 6.0.0 (https://github.com/ansible-collections/kubernetes.core/pull/734).
v3.1.0
======
Release Summary
---------------
This release comes with some bugfixes and documentation updates. It also adds new features to the kubectl connection plugin and the kustomize lookup plugin.
Minor Changes
-------------
- kubectl - added support of local enviroment variable that will be used for kubectl and may be requried for establishing connections ifself (https://github.com/ansible-collections/kubernetes.core/pull/702)
- kustomize - new parameter added to --enable-helm (https://github.com/ansible-collections/kubernetes.core/issues/568)
Bugfixes
--------
- helm - expand kubeconfig path with user's home directory for consistency with k8s
- k8s_json_patch - rename action symlink to ensure k8s action plugin is used (https://github.com/ansible-collections/kubernetes.core/pull/652).
v3.0.1
======
Release Summary
---------------
This release fixes issue with resources discovery when complex subresources are present, and fixes issues with `reuse-values` parameter for helm module.
Bugfixes
--------
- Resolve Collections util resource discovery fails when complex subresources present (https://github.com/ansible-collections/kubernetes.core/pull/676).
- align `helmdiff_check()` function commandline rendering with the `deploy()` function (https://github.com/ansible-collections/kubernetes.core/pull/670).
- helm - use ``reuse-values`` when running ``helm diff`` command (https://github.com/ansible-collections/kubernetes.core/issues/680).
- integrations test helm_kubeconfig - set helm version to v3.10.3 to avoid incompatability with new bitnami charts (https://github.com/ansible-collections/kubernetes.core/pull/670).
v3.0.0
======

View File

@@ -1,5 +1,5 @@
# Also needs to be updated in galaxy.yml
VERSION = 3.0.0
VERSION = 3.3.0
TEST_ARGS ?= ""
PYTHON_VERSION ?= `python -c 'import platform; print(".".join(platform.python_version_tuple()[0:2]))'`

View File

@@ -4,10 +4,14 @@
This repository hosts the `kubernetes.core` (formerly known as `community.kubernetes`) Ansible Collection.
## Description
The collection includes a variety of Ansible content to help automate the management of applications in Kubernetes and OpenShift clusters, as well as the provisioning and maintenance of clusters themselves.
## Requirements
<!--start requires_ansible-->
## Ansible version compatibility
### Ansible version compatibility
This collection has been tested against following Ansible versions: **>=2.14.0**.
@@ -18,43 +22,43 @@ A collection may contain metadata that identifies these versions.
PEP440 is the schema used to describe the versions of Ansible.
<!--end requires_ansible-->
## Python Support
### Python Support
* Collection supports 3.9+
Note: Python2 is deprecated from [1st January 2020](https://www.python.org/doc/sunset-python-2/). Please switch to Python3.
## Kubernetes Version Support
### Kubernetes Version Support
This collection supports Kubernetes versions >= 1.24.
## Included content
### Included content
Click on the name of a plugin or module to view that content's documentation:
<!--start collection content-->
### 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
@@ -79,9 +83,7 @@ Name | Description
<!--end collection content-->
## Installation and Usage
### Installing the Collection from Ansible Galaxy
## Installation
Before using the Kubernetes collection, you need to install it with the Ansible Galaxy CLI:
@@ -93,7 +95,7 @@ You can also include it in a `requirements.yml` file and install it via `ansible
---
collections:
- name: kubernetes.core
version: 3.0.0
version: 3.3.0
```
### Installing the Kubernetes Python Library
@@ -102,7 +104,7 @@ Content in this collection requires the [Kubernetes Python client](https://pypi.
pip3 install kubernetes
### Using modules from the Kubernetes Collection in your playbooks
## Use Cases
It's preferable to use content in this collection using their Fully Qualified Collection Namespace (FQCN), for example `kubernetes.core.k8s_info`:
@@ -189,12 +191,16 @@ defined in the playbook using `environment` keyword as above, you must set it us
Please read more about Ansible Turbo mode - [here](https://github.com/ansible-collections/kubernetes.core/blob/main/docs/ansible_turbo_mode.rst).
## Testing and Development
## Contributing to this collection
If you want to develop new content for this collection or improve what's already here, the easiest way to work on the collection is to clone it into one of the configured [`COLLECTIONS_PATHS`](https://docs.ansible.com/ansible/latest/reference_appendices/config.html#collections-paths), and work on it there.
See [Contributing to kubernetes.core](CONTRIBUTING.md).
## Testing
[![Linters](https://img.shields.io/github/actions/workflow/status/ansible-collections/kubernetes.core/linters.yaml?label=linters)](https://github.com/ansible-collections/kubernetes.core/actions/workflows/linters.yaml) [![Integration tests](https://img.shields.io/github/actions/workflow/status/ansible-collections/kubernetes.core/integration-tests.yaml?label=integration%20tests)](https://github.com/ansible-collections/kubernetes.core/actions/workflows/integration-tests.yaml) [![Sanity tests](https://img.shields.io/github/actions/workflow/status/ansible-collections/kubernetes.core/sanity-tests.yaml?label=sanity%20tests)](https://github.com/ansible-collections/kubernetes.core/actions/workflows/sanity-tests.yaml) [![Unit tests](https://img.shields.io/github/actions/workflow/status/ansible-collections/kubernetes.core/unit-tests.yaml?label=unit%20tests)](https://github.com/ansible-collections/kubernetes.core/actions/workflows/unit-tests.yaml) [![Codecov](https://img.shields.io/codecov/c/github/ansible-collections/kubernetes.core)](https://app.codecov.io/gh/ansible-collections/kubernetes.core)
### Testing with `ansible-test`
The `tests` directory contains configuration for running sanity and integration tests using [`ansible-test`](https://docs.ansible.com/ansible/latest/dev_guide/testing_integration.html).
@@ -231,10 +237,36 @@ After the version is published, verify it exists on the [Kubernetes Collection G
The process for uploading a supported release to Automation Hub is documented separately.
## Support
<!--List available communication channels. In addition to channels specific to your collection, we also recommend to use the following ones.-->
We announce releases and important changes through Ansible's [The Bullhorn newsletter](https://github.com/ansible/community/wiki/News#the-bullhorn). Be sure you are [subscribed](https://eepurl.com/gZmiEP).
We take part in the global quarterly [Ansible Contributor Summit](https://github.com/ansible/community/wiki/Contributor-Summit) virtually or in-person. Track [The Bullhorn newsletter](https://eepurl.com/gZmiEP) and join us.
For more information about communication, refer to the [Ansible Communication guide](https://docs.ansible.com/ansible/devel/community/communication.html).
For the latest supported versions, refer to the release notes below.
If you encounter issues or have questions, you can submit a support request through the following channels:
- GitHub Issues: Report bugs, request features, or ask questions by opening an issue in the [GitHub repository]((https://github.com/ansible-collections/kubernetes.core/).
## Release notes
See the [raw generated changelog](https://github.com/ansible-collections/kubernetes.core/blob/main/CHANGELOG.rst).
## More Information
For more information about Ansible's Kubernetes integration, join the `#ansible-kubernetes` channel on [libera.chat](https://libera.chat/) IRC, and browse the resources in the [Kubernetes Working Group](https://github.com/ansible/community/wiki/Kubernetes) Community wiki page.
## Code of Conduct
We follow the [Ansible Code of Conduct](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html) in all our interactions within this project.
If you encounter abusive behavior, please refer to the [policy violations](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html#policy-violations) section of the Code for information on how to raise a complaint.
## License
GNU General Public License v3.0 or later

View File

@@ -814,3 +814,88 @@ releases:
- remove_ansible_2_13.yaml
- update_supported_versions.yaml
release_date: '2023-11-17'
3.0.1:
changes:
bugfixes:
- Resolve Collections util resource discovery fails when complex subresources
present (https://github.com/ansible-collections/kubernetes.core/pull/676).
- align `helmdiff_check()` function commandline rendering with the `deploy()`
function (https://github.com/ansible-collections/kubernetes.core/pull/670).
- helm - use ``reuse-values`` when running ``helm diff`` command (https://github.com/ansible-collections/kubernetes.core/issues/680).
- integrations test helm_kubeconfig - set helm version to v3.10.3 to avoid incompatability
with new bitnami charts (https://github.com/ansible-collections/kubernetes.core/pull/670).
release_summary: This release fixes issue with resources discovery when complex
subresources are present, and fixes issues with `reuse-values` parameter for
helm module.
fragments:
- 20240117-fix-helm-diff-cmd-line-rendering.yml
- 20240222-Collections-util-resource-discovery-fails-when-complex-subresources-present.yml
- 20240228-fix-helm-diff-with-reuse-values.yml
- 3.0.1.yml
release_date: '2024-03-01'
3.1.0:
changes:
bugfixes:
- helm - expand kubeconfig path with user's home directory for consistency with
k8s
- k8s_json_patch - rename action symlink to ensure k8s action plugin is used
(https://github.com/ansible-collections/kubernetes.core/pull/652).
minor_changes:
- kubectl - added support of local enviroment variable that will be used for
kubectl and may be requried for establishing connections ifself (https://github.com/ansible-collections/kubernetes.core/pull/702)
- kustomize - new parameter added to --enable-helm (https://github.com/ansible-collections/kubernetes.core/issues/568)
release_summary: This release comes with some bugfixes and documentation updates.
It also adds new features to the kubectl connection plugin and the kustomize
lookup plugin.
fragments:
- 20240426-add-support-of-kubectl-local-env-vars-for-connection-plugin.yml
- 3.1.0.yml
- 592-kustomize-helm-support.yml
- 652-fix-json-patch-action.yml
- 654-helm-expand-user.yml
release_date: '2024-05-16'
3.2.0:
changes:
minor_changes:
- connection/kubectl.py - Added an example of using the kubectl connection plugin
to the documentation (https://github.com/ansible-collections/kubernetes.core/pull/741).
- inventory/k8s.py - Defer removal of k8s inventory plugin to version 6.0.0
(https://github.com/ansible-collections/kubernetes.core/pull/734).
- inventory/k8s.py - Defer removal of k8s inventory plugin to version 5.0 (https://github.com/ansible-collections/kubernetes.core/pull/723).
release_summary: This release comes with documentation updates.
fragments:
- 20240530-defer-removal-and-ansible-core-support-update.yaml
- 20240601-doc-example-of-using-kubectl.yaml
- inventory-update_removal_date.yml
- 3.2.0.yml
release_date: '2024-06-14'
3.3.0:
changes:
bugfixes:
- helm - Helm version checks did not support RC versions. They now accept any
version tags. (https://github.com/ansible-collections/kubernetes.core/pull/745).
- helm_pull - Apply no_log=True to pass_credentials to silence false positive
warning. (https://github.com/ansible-collections/kubernetes.core/pull/796).
- k8s_drain - Fix k8s_drain does not wait for single pod (https://github.com/ansible-collections/kubernetes.core/issues/769).
- k8s_drain - Fix k8s_drain runs into a timeout when evicting a pod which is
part of a stateful set (https://github.com/ansible-collections/kubernetes.core/issues/792).
- kubeconfig option should not appear in module invocation log (https://github.com/ansible-collections/kubernetes.core/issues/782).
- kustomize - kustomize plugin fails with deprecation warnings (https://github.com/ansible-collections/kubernetes.core/issues/639).
- waiter - Fix waiting for daemonset when desired number of pods is 0. (https://github.com/ansible-collections/kubernetes.core/pull/756).
minor_changes:
- k8s_drain - Improve error message for pod disruption budget when draining
a node (https://github.com/ansible-collections/kubernetes.core/issues/797).
release_summary: This release comes with improvements to the error messages in the k8s_drain module and several bug fixes.
fragments:
- 20240530-ansible-core-support-update.yaml
- 20240611-helm-rc-version.yaml
- 20240620-fix-kustomize-plugin-fails-with-deprecation-warnings.yml
- 20241102-fix-ci-post-2.18-issue.yaml
- 20241213-kubeconfig-set-no_log-true.yaml
- 756-fix-daemonset-waiting.yaml
- 770-fix-k8s-drain-doesnt-wait-for-single-pod.yaml
- 793-fix-k8s-drain-runs-into-timeout.yaml
- 796-false-positive-helmull.yaml
- 798-drain-pdb-error-message.yaml
- readme_template_update.yml
release_date: '2025-01-22'

View File

@@ -443,7 +443,7 @@ Parameters
<div style="font-size: small">
<span style="color: purple">boolean</span>
</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 3.0.0</div>
</td>
<td>
<ul style="margin: 0; padding: 0"><b>Choices:</b>
@@ -463,7 +463,7 @@ Parameters
<div style="font-size: small">
<span style="color: purple">boolean</span>
</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 3.0.0</div>
</td>
<td>
<ul style="margin: 0; padding: 0"><b>Choices:</b>

View File

@@ -423,7 +423,7 @@ Parameters
<span style="color: purple">list</span>
/ <span style="color: purple">elements=string</span>
</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 3.0.0</div>
</td>
<td>
</td>

View File

@@ -168,7 +168,7 @@ Parameters
<span style="color: purple">list</span>
/ <span style="color: purple">elements=string</span>
</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 3.0.0</div>
</td>
<td>
</td>

View File

@@ -17,7 +17,7 @@ DEPRECATED
----------
:Removed in collection release after
:Why: As discussed in https://github.com/ansible-collections/kubernetes.core/issues/31, we decided to
remove the k8s inventory plugin in release 4.0.0.
remove the k8s inventory plugin in release 6.0.0.
:Alternative: Use :ref:`kubernetes.core.k8s_info <kubernetes.core.k8s_info_module>` and :ref:`ansible.builtin.add_host <ansible.builtin.add_host_module>` instead.
@@ -357,7 +357,7 @@ Status
------
- This inventory will be removed in version 4.0.0. *[deprecated]*
- This inventory will be removed in version 6.0.0. *[deprecated]*
- For more information see `DEPRECATED`_.

View File

@@ -216,7 +216,7 @@ Parameters
<div style="font-size: small">
<span style="color: purple">boolean</span>
</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 3.0.0</div>
</td>
<td>
<ul style="margin: 0; padding: 0"><b>Choices:</b>
@@ -389,7 +389,7 @@ Parameters
<span style="color: purple">list</span>
/ <span style="color: purple">elements=string</span>
</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 2.5.0</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 3.0.0</div>
</td>
<td>
</td>
@@ -524,7 +524,7 @@ Parameters
<div>See <a href='https://kubernetes.io/docs/tasks/run-application/update-api-object-kubectl-patch/#use-a-json-merge-patch-to-update-a-deployment'>https://kubernetes.io/docs/tasks/run-application/update-api-object-kubectl-patch/#use-a-json-merge-patch-to-update-a-deployment</a></div>
<div>If more than one <code>merge_type</code> is given, the merge_types will be tried in order. This defaults to <code>[&#x27;strategic-merge&#x27;, &#x27;merge&#x27;]</code>, which is ideal for using the same parameters on resource kinds that combine Custom Resources and built-in resources.</div>
<div>mutually exclusive with <code>apply</code></div>
<div><em>merge_type=json</em> is deprecated and will be removed in version 3.0.0. Please use <span class='module'>kubernetes.core.k8s_json_patch</span> instead.</div>
<div><em>merge_type=json</em> is deprecated and will be removed in version 4.0.0. Please use <span class='module'>kubernetes.core.k8s_json_patch</span> instead.</div>
</td>
</tr>
<tr>

View File

@@ -211,6 +211,27 @@ Parameters
<div>The configuration can be provided as dictionary. Added in version 2.4.0.</div>
</td>
</tr>
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>kubectl_local_env_vars</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
<span style="color: purple">dictionary</span>
</div>
<div style="font-style: italic; font-size: small; color: darkgreen">added in 3.1.0</div>
</td>
<td>
<b>Default:</b><br/><div style="color: blue">{}</div>
</td>
<td>
<div>var: ansible_kubectl_local_env_vars</div>
</td>
<td>
<div>Local enviromantal variable to be passed locally to the kubectl command line.</div>
<div>Please be aware that this passes information directly on the command line and it could expose sensitive data.</div>
</td>
</tr>
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
@@ -344,6 +365,82 @@ Parameters
Examples
--------
.. code-block:: yaml
- name: Run a command in a pod using local kubectl with kubeconfig file ~/.kube/config
hosts: localhost
gather_facts: no
vars:
ansible_connection: kubernetes.core.kubectl
ansible_kubectl_namespace: my-namespace
ansible_kubectl_pod: my-pod
ansible_kubectl_container: my-container
tasks:
# be aware that the command is executed as the user that started the container
# and requires python to be installed in the image
- name: Run a command in a pod
ansible.builtin.command: echo "Hello, World!"
- name: Run a command in a pod using local kubectl with inventory variables
# Example inventory:
# k8s:
# hosts:
# foo.example.com:
# ansible_connection: kubernetes.core.kubectl
# ansible_kubectl_kubeconfig: /root/.kube/foo.example.com.config
# ansible_kubectl_pod: my-foo-pod
# ansible_kubectl_container: my-foo-container
# ansible_kubectl_namespace: my-foo-namespace
# bar.example.com:
# ansible_connection: kubernetes.core.kubectl
# ansible_kubectl_kubeconfig: /root/.kube/bar.example.com.config
# ansible_kubectl_pod: my-bar-pod
# ansible_kubectl_container: my-bar-container
# ansible_kubectl_namespace: my-bar-namespace
hosts: k8s
gather_facts: no
tasks:
# be aware that the command is executed as the user that started the container
# and requires python to be installed in the image
- name: Run a command in a pod
ansible.builtin.command: echo "Hello, World!"
- name: Run a command in a pod using dynamic inventory
hosts: localhost
gather_facts: no
vars:
kubeconfig: /root/.kube/config
namespace: my-namespace
my_app: my-app
tasks:
- name: Get My App pod info based on label
kubernetes.core.k8s_info:
kubeconfig: "{{ kubeconfig }}"
namespace: "{{ namespace }}"
kind: Pod
label_selectors: app.kubernetes.io/name = "{{ my_app }}"
register: my_app_pod
- name: Get My App pod name
ansible.builtin.set_fact:
my_app_pod_name: "{{ my_app_pod.resources[0].metadata.name }}"
- name: Add My App pod to inventory
ansible.builtin.add_host:
name: "{{ my_app_pod_name }}"
ansible_connection: kubernetes.core.kubectl
ansible_kubectl_kubeconfig: "{{ kubeconfig }}"
ansible_kubectl_pod: "{{ my_app_pod_name }}"
ansible_kubectl_namespace: "{{ namespace }}"
- name: Run a command in My App pod
# be aware that the command is executed as the user that started the container
# and requires python to be installed in the image
ansible.builtin.command: echo "Hello, World!"
delegate_to: "{{ my_app_pod_name }}"

View File

@@ -77,6 +77,24 @@ Parameters
<div>If omitted, &#x27;.&#x27; is assumed.</div>
</td>
</tr>
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
<b>enable_helm</b>
<a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a>
<div style="font-size: small">
<span style="color: purple">-</span>
</div>
</td>
<td>
<b>Default:</b><br/><div style="color: blue">"False"</div>
</td>
<td>
</td>
<td>
<div>Enable the helm chart inflation generator</div>
</td>
</tr>
<tr>
<td colspan="1">
<div class="ansibleOptionAnchor" id="parameter-"></div>
@@ -112,17 +130,21 @@ Examples
.. code-block:: yaml
- name: Run lookup using kustomize
set_fact:
ansible.builtin.set_fact:
resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kustomize') }}"
- name: Run lookup using kubectl kustomize
set_fact:
ansible.builtin.set_fact:
resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kubectl') }}"
- name: Create kubernetes resources for lookup output
k8s:
kubernetes.core.k8s:
definition: "{{ lookup('kubernetes.core.kustomize', dir='/path/to/kustomization') }}"
- name: Create kubernetes resources for lookup output with `--enable-helm` set
kubernetes.core.k8s:
definition: "{{ lookup('kubernetes.core.kustomize', dir='/path/to/kustomization', enable_helm=True) }}"
Return Values

View File

@@ -25,7 +25,7 @@ tags:
- openshift
- okd
- cluster
version: 3.0.0
version: 3.3.0
build_ignore:
- .DS_Store
- "*.tar.gz"

View File

@@ -22,10 +22,10 @@ plugin_routing:
redirect: community.okd.openshift
k8s:
deprecation:
removal_version: 4.0.0
removal_version: 6.0.0
warning_text: >-
The k8s inventory plugin has been deprecated and
will be removed in release 4.0.0.
will be removed in release 6.0.0.
modules:
k8s_auth:
redirect: community.okd.k8s_auth

View File

@@ -72,6 +72,15 @@ DOCUMENTATION = r"""
- name: ansible_kubectl_extra_args
env:
- name: K8S_AUTH_EXTRA_ARGS
kubectl_local_env_vars:
description:
- Local enviromantal variable to be passed locally to the kubectl command line.
- Please be aware that this passes information directly on the command line and it could expose sensitive data.
default: {}
type: dict
version_added: 3.1.0
vars:
- name: ansible_kubectl_local_env_vars
kubectl_kubeconfig:
description:
- Path to a kubectl config file. Defaults to I(~/.kube/config)
@@ -172,6 +181,81 @@ DOCUMENTATION = r"""
aliases: [ kubectl_verify_ssl ]
"""
EXAMPLES = r"""
- name: Run a command in a pod using local kubectl with kubeconfig file ~/.kube/config
hosts: localhost
gather_facts: no
vars:
ansible_connection: kubernetes.core.kubectl
ansible_kubectl_namespace: my-namespace
ansible_kubectl_pod: my-pod
ansible_kubectl_container: my-container
tasks:
# be aware that the command is executed as the user that started the container
# and requires python to be installed in the image
- name: Run a command in a pod
ansible.builtin.command: echo "Hello, World!"
- name: Run a command in a pod using local kubectl with inventory variables
# Example inventory:
# k8s:
# hosts:
# foo.example.com:
# ansible_connection: kubernetes.core.kubectl
# ansible_kubectl_kubeconfig: /root/.kube/foo.example.com.config
# ansible_kubectl_pod: my-foo-pod
# ansible_kubectl_container: my-foo-container
# ansible_kubectl_namespace: my-foo-namespace
# bar.example.com:
# ansible_connection: kubernetes.core.kubectl
# ansible_kubectl_kubeconfig: /root/.kube/bar.example.com.config
# ansible_kubectl_pod: my-bar-pod
# ansible_kubectl_container: my-bar-container
# ansible_kubectl_namespace: my-bar-namespace
hosts: k8s
gather_facts: no
tasks:
# be aware that the command is executed as the user that started the container
# and requires python to be installed in the image
- name: Run a command in a pod
ansible.builtin.command: echo "Hello, World!"
- name: Run a command in a pod using dynamic inventory
hosts: localhost
gather_facts: no
vars:
kubeconfig: /root/.kube/config
namespace: my-namespace
my_app: my-app
tasks:
- name: Get My App pod info based on label
kubernetes.core.k8s_info:
kubeconfig: "{{ kubeconfig }}"
namespace: "{{ namespace }}"
kind: Pod
label_selectors: app.kubernetes.io/name = "{{ my_app }}"
register: my_app_pod
- name: Get My App pod name
ansible.builtin.set_fact:
my_app_pod_name: "{{ my_app_pod.resources[0].metadata.name }}"
- name: Add My App pod to inventory
ansible.builtin.add_host:
name: "{{ my_app_pod_name }}"
ansible_connection: kubernetes.core.kubectl
ansible_kubectl_kubeconfig: "{{ kubeconfig }}"
ansible_kubectl_pod: "{{ my_app_pod_name }}"
ansible_kubectl_namespace: "{{ namespace }}"
- name: Run a command in My App pod
# be aware that the command is executed as the user that started the container
# and requires python to be installed in the image
ansible.builtin.command: echo "Hello, World!"
delegate_to: "{{ my_app_pod_name }}"
"""
import json
import os
import os.path
@@ -301,6 +385,19 @@ class Connection(ConnectionBase):
return local_cmd, censored_local_cmd
def _local_env(self):
"""Return a dict of local environment variables to pass to the kubectl command"""
local_env = {}
local_local_env_vars_name = "{0}_local_env_vars".format(self.transport)
local_env_vars = self.get_option(local_local_env_vars_name)
if local_env_vars:
if isinstance(local_env_vars, dict):
local_env_vars = json.dumps(local_env_vars)
local_env = os.environ.copy()
local_env.update(json.loads(local_env_vars))
return local_env
return None
def _connect(self, port=None):
"""Connect to the container. Nothing to do"""
super(Connection, self)._connect()
@@ -329,6 +426,7 @@ class Connection(ConnectionBase):
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=self._local_env(),
)
stdout, stderr = p.communicate(in_data)
@@ -378,7 +476,11 @@ class Connection(ConnectionBase):
args = [to_bytes(i, errors="surrogate_or_strict") for i in args]
try:
p = subprocess.Popen(
args, stdin=in_file, stdout=subprocess.PIPE, stderr=subprocess.PIPE
args,
stdin=in_file,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
env=self._local_env(),
)
except OSError:
raise AnsibleError(
@@ -415,7 +517,11 @@ class Connection(ConnectionBase):
) as out_file:
try:
p = subprocess.Popen(
args, stdin=subprocess.PIPE, stdout=out_file, stderr=subprocess.PIPE
args,
stdin=subprocess.PIPE,
stdout=out_file,
stderr=subprocess.PIPE,
env=self._local_env(),
)
except OSError:
raise AnsibleError(

View File

@@ -36,12 +36,12 @@ options:
description:
- Provide a URL for accessing the API. Can also be specified via C(K8S_AUTH_HOST) environment variable.
type: str
version_added: "1.2.0"
version_added: 1.2.0
api_key:
description:
- Token used to authenticate with the API. Can also be specified via C(K8S_AUTH_API_KEY) environment variable.
type: str
version_added: "1.2.0"
version_added: 1.2.0
validate_certs:
description:
- Whether or not to verify the API server's SSL certificates. Can also be specified via C(K8S_AUTH_VERIFY_SSL)
@@ -49,12 +49,12 @@ options:
type: bool
aliases: [ verify_ssl ]
default: True
version_added: "1.2.0"
version_added: 1.2.0
ca_cert:
description:
- Path to a CA certificate used to authenticate with the API. The full certificate chain must be provided to
avoid certificate validation errors. Can also be specified via C(K8S_AUTH_SSL_CA_CERT) environment variable.
type: path
aliases: [ ssl_ca_cert ]
version_added: "1.2.0"
version_added: 1.2.0
"""

View File

@@ -15,7 +15,7 @@ class ModuleDocFragment(object):
options:
delete_options:
type: dict
version_added: '1.2.0'
version_added: 1.2.0
description:
- Configure behavior when deleting an object.
- Only used when I(state=absent).

View File

@@ -20,10 +20,10 @@ DOCUMENTATION = """
- Uses k8s.(yml|yaml) YAML configuration file to set parameter values.
deprecated:
removed_in: 4.0.0
removed_in: 6.0.0
why: |
As discussed in U(https://github.com/ansible-collections/kubernetes.core/issues/31), we decided to
remove the k8s inventory plugin in release 4.0.0.
remove the k8s inventory plugin in release 6.0.0.
alternative: "Use M(kubernetes.core.k8s_info) and M(ansible.builtin.add_host) instead."
options:
@@ -164,8 +164,8 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable):
super(InventoryModule, self).parse(inventory, loader, path)
self.display.deprecated(
"The 'k8s' inventory plugin has been deprecated and will be removed in release 4.0.0",
version="4.0.0",
"The 'k8s' inventory plugin has been deprecated and will be removed in release 6.0.0",
version="6.0.0",
collection_name="kubernetes.core",
)
cache_key = self._get_cache_prefix(path)

View File

@@ -8,7 +8,7 @@ DOCUMENTATION = """
short_description: Build a set of kubernetes resources using a 'kustomization.yaml' file.
version_added: "2.2.0"
version_added: 2.2.0
author:
- Aubin Bikouo (@abikouo)
@@ -30,6 +30,10 @@ DOCUMENTATION = """
opt_dirs:
description:
- An optional list of directories to search for the executable in addition to PATH.
enable_helm:
description:
- Enable the helm chart inflation generator
default: "False"
requirements:
- "python >= 3.6"
@@ -37,16 +41,20 @@ DOCUMENTATION = """
EXAMPLES = """
- name: Run lookup using kustomize
set_fact:
ansible.builtin.set_fact:
resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kustomize') }}"
- name: Run lookup using kubectl kustomize
set_fact:
ansible.builtin.set_fact:
resources: "{{ lookup('kubernetes.core.kustomize', binary_path='/path/to/kubectl') }}"
- name: Create kubernetes resources for lookup output
k8s:
kubernetes.core.k8s:
definition: "{{ lookup('kubernetes.core.kustomize', dir='/path/to/kustomization') }}"
- name: Create kubernetes resources for lookup output with `--enable-helm` set
kubernetes.core.k8s:
definition: "{{ lookup('kubernetes.core.kustomize', dir='/path/to/kustomization', enable_helm=True) }}"
"""
RETURN = """
@@ -86,12 +94,20 @@ def get_binary_from_path(name, opt_dirs=None):
def run_command(command):
cmd = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
return cmd.communicate()
stdout, stderr = cmd.communicate()
return cmd.returncode, stdout, stderr
class LookupModule(LookupBase):
def run(
self, terms, variables=None, dir=".", binary_path=None, opt_dirs=None, **kwargs
self,
terms,
variables=None,
dir=".",
binary_path=None,
opt_dirs=None,
enable_helm=False,
**kwargs
):
executable_path = binary_path
if executable_path is None:
@@ -122,9 +138,21 @@ class LookupModule(LookupBase):
)
)
(out, err) = run_command(command)
if err:
raise AnsibleLookupError(
"kustomize command failed with: {0}".format(err.decode("utf-8"))
)
if enable_helm:
command += ["--enable-helm"]
(ret, out, err) = run_command(command)
if ret != 0:
if err:
raise AnsibleLookupError(
"kustomize command failed. exit code: {0}, error: {1}".format(
ret, err.decode("utf-8")
)
)
else:
raise AnsibleLookupError(
"kustomize command failed with unknown error. exit code: {0}".format(
ret
)
)
return [out.decode("utf-8")]

View File

@@ -18,7 +18,7 @@ AUTH_PROXY_HEADERS_SPEC = dict(
)
AUTH_ARG_SPEC = {
"kubeconfig": {"type": "raw"},
"kubeconfig": {"type": "raw", "no_log": True},
"context": {},
"host": {},
"api_key": {"no_log": True},

View File

@@ -113,7 +113,7 @@ class Discoverer(kubernetes.dynamic.discovery.Discoverer):
filter(lambda resource: "/" in resource["name"], resources_response)
)
for subresource in subresources_raw:
resource, name = subresource["name"].split("/")
resource, name = subresource["name"].split("/", 1)
subresources[resource][name] = subresource
for resource in resources_raw:

View File

@@ -77,7 +77,6 @@ def write_temp_kubeconfig(server, validate_certs=True, ca_cert=None, kubeconfig=
class AnsibleHelmModule(object):
"""
An Ansible module class for Kubernetes.core helm modules
"""
@@ -115,7 +114,7 @@ class AnsibleHelmModule(object):
kubeconfig = self.params.get("kubeconfig")
if kubeconfig:
if isinstance(kubeconfig, string_types):
with open(kubeconfig) as fd:
with open(os.path.expanduser(kubeconfig)) as fd:
kubeconfig_content = yaml.safe_load(fd)
elif isinstance(kubeconfig, dict):
kubeconfig_content = kubeconfig
@@ -184,10 +183,10 @@ class AnsibleHelmModule(object):
def get_helm_version(self):
command = self.get_helm_binary() + " version"
rc, out, err = self.run_command(command)
m = re.match(r'version.BuildInfo{Version:"v([0-9\.]*)",', out)
m = re.match(r'version.BuildInfo{Version:"v(.*?)",', out)
if m:
return m.group(1)
m = re.match(r'Client: &version.Version{SemVer:"v([0-9\.]*)", ', out)
m = re.match(r'Client: &version.Version{SemVer:"v(.*?)", ', out)
if m:
return m.group(1)
return None

View File

@@ -16,6 +16,7 @@ HELM_AUTH_ARG_SPEC = dict(
type="raw",
aliases=["kubeconfig_path"],
fallback=(env_fallback, ["K8S_AUTH_KUBECONFIG"]),
no_log=True,
),
host=dict(type="str", fallback=(env_fallback, ["K8S_AUTH_HOST"])),
ca_cert=dict(

View File

@@ -51,7 +51,7 @@ def daemonset_ready(daemonset: ResourceInstance) -> bool:
return bool(
daemonset.status
and daemonset.status.desiredNumberScheduled is not None
and daemonset.status.updatedNumberScheduled
and (daemonset.status.updatedNumberScheduled or 0)
== daemonset.status.desiredNumberScheduled
and daemonset.status.numberReady == daemonset.status.desiredNumberScheduled
and daemonset.status.observedGeneration == daemonset.metadata.generation

View File

@@ -14,7 +14,7 @@ module: helm
short_description: Manages Kubernetes packages with the Helm package manager
version_added: "0.11.0"
version_added: 0.11.0
author:
- Lucas Boisserie (@LucasBoisserie)
@@ -61,7 +61,7 @@ options:
default: false
type: bool
aliases: [ dep_up ]
version_added: "2.4.0"
version_added: 2.4.0
release_name:
description:
- Release name to manage.
@@ -99,7 +99,7 @@ options:
default: []
type: list
elements: str
version_added: '1.1.0'
version_added: 1.1.0
update_repo_cache:
description:
- Run C(helm repo update) before the operation. Can be run as part of the package installation or as a separate step (see Examples).
@@ -129,7 +129,7 @@ options:
- string
- json
- file
version_added: '2.4.0'
version_added: 2.4.0
reuse_values:
description:
- When upgrading package, specifies wether to reuse the last release's values and merge in any overrides from parameters I(release_values),
@@ -137,14 +137,14 @@ options:
- If I(reset_values) is set to C(True), this is ignored.
type: bool
required: false
version_added: '2.5.0'
version_added: 3.0.0
reset_values:
description:
- When upgrading package, reset the values to the ones built into the chart.
type: bool
required: false
default: True
version_added: '2.5.0'
version_added: 3.0.0
#Helm options
disable_hook:
@@ -181,7 +181,7 @@ options:
- similar to C(wait_timeout) but does not required C(wait) to be activated.
- Mutually exclusive with C(wait_timeout).
type: str
version_added: "2.3.0"
version_added: 2.3.0
atomic:
description:
- If set, the installation process deletes the installation on failure.
@@ -192,12 +192,12 @@ options:
- Create the release namespace if not present.
type: bool
default: False
version_added: "0.11.1"
version_added: 0.11.1
post_renderer:
description:
- Path to an executable to be used for post rendering.
type: str
version_added: "2.4.0"
version_added: 2.4.0
replace:
description:
- Reuse the given name, only if that name is a deleted release which remains in the history.
@@ -205,19 +205,19 @@ options:
- mutually exclusive with with C(history_max).
type: bool
default: False
version_added: "1.11.0"
version_added: 1.11.0
skip_crds:
description:
- Skip custom resource definitions when installing or upgrading.
type: bool
default: False
version_added: "1.2.0"
version_added: 1.2.0
history_max:
description:
- Limit the maximum number of revisions saved per release.
- mutually exclusive with with C(replace).
type: int
version_added: "2.2.0"
version_added: 2.2.0
extends_documentation_fragment:
- kubernetes.core.helm_common_options
"""
@@ -639,6 +639,9 @@ def helmdiff_check(
replace=False,
chart_repo_url=None,
post_renderer=False,
set_value_args=None,
reuse_values=None,
reset_values=True,
):
"""
Use helm diff to determine if a release would change by upgrading a chart.
@@ -652,10 +655,14 @@ def helmdiff_check(
if chart_version is not None:
cmd += " " + "--version=" + chart_version
if not replace:
cmd += " " + "--reset-values"
cmd += " " + "--reset-values=" + str(reset_values)
if post_renderer:
cmd += " --post-renderer=" + post_renderer
if values_files:
for value_file in values_files:
cmd += " --values=" + value_file
if release_values != {}:
fd, path = tempfile.mkstemp(suffix=".yml")
with open(path, "w") as yaml_file:
@@ -663,9 +670,11 @@ def helmdiff_check(
cmd += " -f=" + path
module.add_cleanup_file(path)
if values_files:
for values_file in values_files:
cmd += " -f=" + values_file
if set_value_args:
cmd += " " + set_value_args
if reuse_values:
cmd += " --reuse-values"
rc, out, err = module.run_helm_command(cmd)
return (len(out.strip()) > 0, out.strip())
@@ -847,11 +856,11 @@ def main():
"Please consider add dependencies block or disable dependency_update to remove this warning."
)
if release_status is None: # Not installed
set_value_args = None
if set_values:
set_value_args = module.get_helm_set_values_args(set_values)
set_value_args = None
if set_values:
set_value_args = module.get_helm_set_values_args(set_values)
if release_status is None: # Not installed
helm_cmd = deploy(
module,
helm_cmd,
@@ -896,6 +905,9 @@ def main():
replace,
chart_repo_url,
post_renderer,
set_value_args,
reuse_values=reuse_values,
reset_values=reset_values,
)
if would_change and module._diff:
opt_result["diff"] = {"prepared": prepared}
@@ -909,10 +921,6 @@ def main():
)
if force or would_change:
set_value_args = None
if set_values:
set_value_args = module.get_helm_set_values_args(set_values)
helm_cmd = deploy(
module,
helm_cmd,

View File

@@ -14,7 +14,7 @@ module: helm_info
short_description: Get information from Helm package deployed inside the cluster
version_added: "0.11.0"
version_added: 0.11.0
author:
- Lucas Boisserie (@LucasBoisserie)
@@ -53,7 +53,7 @@ options:
type: list
elements: str
default: []
version_added: "2.3.0"
version_added: 2.3.0
get_all_values:
description:
- Set to C(True) if you want to get all (computed) values of the release.
@@ -61,7 +61,7 @@ options:
required: false
default: false
type: bool
version_added: "2.4.0"
version_added: 2.4.0
extends_documentation_fragment:
- kubernetes.core.helm_common_options
"""
@@ -123,18 +123,18 @@ status:
elements: dict
description: Hooks of the release
returned: always
version_added: "2.4.0"
version_added: 2.4.0
notes:
type: str
description: Notes of the release
returned: always
version_added: "2.4.0"
version_added: 2.4.0
manifest:
type: list
elements: dict
description: Manifest of the release
returned: always
version_added: "2.4.0"
version_added: 2.4.0
"""
import copy

View File

@@ -12,7 +12,7 @@ DOCUMENTATION = r"""
---
module: helm_plugin
short_description: Manage Helm plugins
version_added: "1.0.0"
version_added: 1.0.0
author:
- Abhijeet Kasurde (@Akasurde)
requirements:
@@ -47,7 +47,7 @@ options:
- Ignored when C(state=absent) or C(state=latest).
required: false
type: str
version_added: "2.3.0"
version_added: 2.3.0
extends_documentation_fragment:
- kubernetes.core.helm_common_options
"""

View File

@@ -12,7 +12,7 @@ DOCUMENTATION = r"""
---
module: helm_plugin_info
short_description: Gather information about Helm plugins
version_added: "1.0.0"
version_added: 1.0.0
author:
- Abhijeet Kasurde (@Akasurde)
requirements:

View File

@@ -12,7 +12,7 @@ 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"
version_added: 2.4.0
author:
- Aubin Bikouo (@abikouo)
description:
@@ -189,7 +189,7 @@ def main():
repo_password=dict(
type="str", no_log=True, aliases=["password", "chart_repo_password"]
),
pass_credentials=dict(type="bool", default=False),
pass_credentials=dict(type="bool", default=False, no_log=False),
skip_tls_certs_check=dict(type="bool", default=False),
chart_devel=dict(type="bool"),
untar_chart=dict(type="bool", default=False),

View File

@@ -14,7 +14,7 @@ module: helm_repository
short_description: Manage Helm repositories.
version_added: "0.11.0"
version_added: 0.11.0
author:
- Lucas Boisserie (@LucasBoisserie)
@@ -76,12 +76,12 @@ options:
description:
- Provide a URL for accessing the API. Can also be specified via C(K8S_AUTH_HOST) environment variable.
type: str
version_added: "2.3.0"
version_added: 2.3.0
api_key:
description:
- Token used to authenticate with the API. Can also be specified via C(K8S_AUTH_API_KEY) environment variable.
type: str
version_added: "2.3.0"
version_added: 2.3.0
validate_certs:
description:
- Whether or not to verify the API server's SSL certificates. Can also be specified via C(K8S_AUTH_VERIFY_SSL)
@@ -89,21 +89,21 @@ options:
type: bool
aliases: [ verify_ssl ]
default: True
version_added: "2.3.0"
version_added: 2.3.0
ca_cert:
description:
- Path to a CA certificate used to authenticate with the API. The full certificate chain must be provided to
avoid certificate validation errors. Can also be specified via C(K8S_AUTH_SSL_CA_CERT) environment variable.
type: path
aliases: [ ssl_ca_cert ]
version_added: "2.3.0"
version_added: 2.3.0
context:
description:
- Helm option to specify which kubeconfig context to use.
- If the value is not specified in the task, the value of environment variable C(K8S_AUTH_CONTEXT) will be used instead.
type: str
aliases: [ kube_context ]
version_added: "2.4.0"
version_added: 2.4.0
kubeconfig:
description:
- Helm option to specify kubeconfig path to use.
@@ -111,14 +111,14 @@ options:
- The configuration can be provided as dictionary.
type: raw
aliases: [ kubeconfig_path ]
version_added: "2.4.0"
version_added: 2.4.0
force_update:
description:
- Whether or not to replace (overwrite) the repo if it already exists.
type: bool
aliases: [ force ]
default: False
version_added: "2.4.0"
version_added: 2.4.0
"""
EXAMPLES = r"""

View File

@@ -53,7 +53,7 @@ options:
default: false
type: bool
aliases: [ dep_up ]
version_added: "2.4.0"
version_added: 2.4.0
disable_hook:
description:
- Prevent hooks from running during install.
@@ -139,7 +139,7 @@ options:
- string
- json
- file
version_added: '2.4.0'
version_added: 2.4.0
"""
EXAMPLES = r"""

View File

@@ -63,7 +63,7 @@ options:
C(['strategic-merge', 'merge']), which is ideal for using the same parameters on resource kinds that
combine Custom Resources and built-in resources.
- mutually exclusive with C(apply)
- I(merge_type=json) is deprecated and will be removed in version 3.0.0. Please use M(kubernetes.core.k8s_json_patch) instead.
- I(merge_type=json) is deprecated and will be removed in version 4.0.0. Please use M(kubernetes.core.k8s_json_patch) instead.
choices:
- json
- merge
@@ -182,7 +182,7 @@ options:
- This parameter can be used with C(label_selectors) to restrict the resources to be deleted.
type: bool
default: false
version_added: 2.5.0
version_added: 3.0.0
aliases:
- all
hidden_fields:
@@ -192,7 +192,7 @@ options:
- Only field definitions that don't reference list items are supported (so V(spec.containers[0]) would not work)
type: list
elements: str
version_added: 2.5.0
version_added: 3.0.0
requirements:
- "python >= 3.9"

View File

@@ -11,7 +11,7 @@ __metaclass__ = type
DOCUMENTATION = r"""
module: k8s_cluster_info
version_added: "0.11.1"
version_added: 0.11.1
short_description: Describe Kubernetes (K8s) cluster, APIs available and their respective versions

View File

@@ -14,7 +14,7 @@ module: k8s_cp
short_description: Copy files and directories to and from pod.
version_added: "2.2.0"
version_added: 2.2.0
author:
- Aubin Bikouo (@abikouo)

View File

@@ -15,7 +15,7 @@ module: k8s_drain
short_description: Drain, Cordon, or Uncordon node in k8s cluster
version_added: "2.2.0"
version_added: 2.2.0
author: Aubin Bikouo (@abikouo)
@@ -47,7 +47,7 @@ options:
- This option has effect only when C(state) is set to I(drain).
type: list
elements: str
version_added: 2.5.0
version_added: 3.0.0
aliases:
- label_selectors
delete_options:
@@ -143,6 +143,7 @@ result:
"""
import copy
import json
import time
import traceback
from datetime import datetime
@@ -187,6 +188,17 @@ except ImportError:
HAS_EVICTION_API = False
def format_dynamic_api_exc(exc):
if exc.body:
if exc.headers and exc.headers.get("Content-Type") == "application/json":
message = json.loads(exc.body).get("message")
if message:
return message
return exc.body
else:
return "%s Reason: %s" % (exc.status, exc.reason)
def filter_pods(pods, force, ignore_daemonset, delete_emptydir_data):
k8s_kind_mirror = "kubernetes.io/config.mirror"
daemonSet, unmanaged, mirror, localStorage, to_delete = [], [], [], [], []
@@ -291,16 +303,19 @@ class K8sDrainAnsible(object):
return (datetime.now() - start).seconds
response = None
pod = pods.pop()
pod = None
while (_elapsed_time() < wait_timeout or wait_timeout == 0) and pods:
if not pod:
pod = pods.pop()
pod = pods[-1]
try:
response = self._api_instance.read_namespaced_pod(
namespace=pod[0], name=pod[1]
)
if not response:
if not response or response.spec.node_name != self._module.params.get(
"name"
):
pod = None
del pods[-1]
time.sleep(wait_sleep)
except ApiException as exc:
if exc.reason != "Not Found":
@@ -308,6 +323,7 @@ class K8sDrainAnsible(object):
msg="Exception raised: {0}".format(exc.reason)
)
pod = None
del pods[-1]
except Exception as e:
self._module.fail_json(msg="Exception raised: {0}".format(to_native(e)))
if not pods:
@@ -334,7 +350,7 @@ class K8sDrainAnsible(object):
if exc.reason != "Not Found":
self._module.fail_json(
msg="Failed to delete pod {0}/{1} due to: {2}".format(
namespace, name, exc.reason
namespace, name, to_native(format_dynamic_api_exc(exc))
)
)
except Exception as exc:

View File

@@ -15,7 +15,7 @@ module: k8s_exec
short_description: Execute command in Pod
version_added: "0.10.0"
version_added: 0.10.0
author: "Tristan de Cacqueray (@tristanC)"

View File

@@ -51,7 +51,7 @@ options:
- Only field definitions that don't reference list items are supported (so V(spec.containers[0]) would not work)
type: list
elements: str
version_added: 2.5.0
version_added: 3.0.0
extends_documentation_fragment:
- kubernetes.core.k8s_auth_options

View File

@@ -14,7 +14,7 @@ module: k8s_log
short_description: Fetch logs from Kubernetes resources
version_added: "0.10.0"
version_added: 0.10.0
author:
- "Fabian von Feilitzsch (@fabianvf)"
@@ -61,26 +61,26 @@ options:
- A relative time in seconds before the current time from which to show logs.
required: no
type: str
version_added: '2.2.0'
version_added: 2.2.0
previous:
description:
- If C(true), print the logs for the previous instance of the container in a pod if it exists.
required: no
type: bool
default: False
version_added: '2.4.0'
version_added: 2.4.0
tail_lines:
description:
- A number of lines from the end of the logs to retrieve.
required: no
type: int
version_added: '2.4.0'
version_added: 2.4.0
all_containers:
description:
- If set to C(true), retrieve all containers' logs in the pod(s).
- mutually exclusive with C(container).
type: bool
version_added: '2.4.0'
version_added: 2.4.0
requirements:
- "python >= 3.9"

View File

@@ -12,7 +12,7 @@ __metaclass__ = type
DOCUMENTATION = r"""
module: k8s_rollback
short_description: Rollback Kubernetes (K8S) Deployments and DaemonSets
version_added: "1.0.0"
version_added: 1.0.0
author:
- "Julien Huon (@julienhuon)"
description:

View File

@@ -13,7 +13,7 @@ __metaclass__ = type
DOCUMENTATION = r"""
module: k8s_taint
short_description: Taint a node in a Kubernetes/OpenShift cluster
version_added: "2.3.0"
version_added: 2.3.0
author: Alina Buzachis (@alinabuzachis)
description:
- Taint allows a node to refuse Pod to be scheduled unless that Pod has a matching toleration.

View File

@@ -4,4 +4,4 @@
loop_control:
loop_var: helm_version
with_items:
- "v3.7.0"
- "v3.8.0"

View File

@@ -17,8 +17,7 @@
- name: Initial chart installation
helm:
binary_path: "{{ helm_binary }}"
chart_ref: redis
chart_repo_url: https://charts.bitnami.com/bitnami
chart_ref: oci://registry-1.docker.io/bitnamicharts/redis
release_name: test-redis
release_namespace: "{{ helm_namespace }}"
create_namespace: true
@@ -42,8 +41,7 @@
- name: Upgrade chart using reuse_values=true
helm:
binary_path: "{{ helm_binary }}"
chart_ref: redis
chart_repo_url: https://charts.bitnami.com/bitnami
chart_ref: oci://registry-1.docker.io/bitnamicharts/redis
release_name: test-redis
release_namespace: "{{ helm_namespace }}"
reuse_values: true

View File

@@ -374,8 +374,8 @@
chart_ref: "{{ chart_source }}"
chart_version: "{{ chart_source_version | default(omit) }}"
disable_hook: True
release_name: "MyRelease"
release_namespace: "MyReleaseNamespace"
release_name: "myrelease"
release_namespace: "myreleasenamespace"
show_only:
- "templates/configmap.yaml"
release_values:
@@ -388,7 +388,7 @@
- result is changed
- result is not failed
- result.rc == 0
- result.command is match("{{ helm_binary }} template MyRelease {{ chart_source }}")
- result.command is match(helm_binary+" template myrelease "+chart_source)
- result.stdout is search("ThisValue")
when: chart_source is search("test-chart")
# limit assertion of test result to controlled (local) chart_source

View File

@@ -0,0 +1,6 @@
apiVersion: v2
name: test-chart-deployment-time
description: A chart with a config map containing the deployment time in data
type: application
version: 0.1.0
appVersion: "default"

View File

@@ -0,0 +1,7 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ default "ansible-configmap" .Values.myConfigmapName }}
data:
myValue: {{ default "test" .Values.myValue }}
deploymentTime: {{ now }}

View File

@@ -0,0 +1,24 @@
apiVersion: v2
name: chart-reuse-values
description: A Helm chart for Kubernetes
# A chart can be either an 'application' or a 'library' chart.
#
# Application charts are a collection of templates that can be packaged into versioned archives
# to be deployed.
#
# Library charts provide useful utilities or functions for the chart developer. They're included as
# a dependency of application charts to inject those utilities and functions into the rendering
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
type: application
# This is the chart version. This version number should be incremented each time you make changes
# to the chart and its templates, including the app version.
# Versions are expected to follow Semantic Versioning (https://semver.org/)
version: 0.1.0
# This is the version number of the application being deployed. This version number should be
# incremented each time you make changes to the application. Versions are not expected to
# follow Semantic Versioning. They should reflect the version the application is using.
# It is recommended to use it with quotes.
appVersion: "1.16.0"

View File

@@ -0,0 +1,7 @@
apiVersion: v1
kind: ConfigMap
metadata:
name: cmap
data:
ansible_version: {{ .Values.ansible_version }}
phase: {{ .Values.phase }}

View File

@@ -0,0 +1,2 @@
ansible_version: milestone
phase: uat

View File

@@ -2,3 +2,4 @@
dependencies:
- remove_namespace
- install_helm
- setup_helm_registry

View File

@@ -2,7 +2,6 @@
- name: Test helm diff functionality
vars:
test_chart_ref: "/tmp/test-chart"
redis_chart_version: '17.0.5'
block:
@@ -24,7 +23,7 @@
name: test-chart
namespace: "{{ helm_namespace }}"
chart_ref: "{{ test_chart_ref }}"
create_namespace: yes
create_namespace: true
register: install
- assert:
@@ -49,8 +48,8 @@
name: test-chart
namespace: "{{ helm_namespace }}"
chart_ref: "{{ test_chart_ref }}"
check_mode: yes
diff: yes
check_mode: true
diff: true
register: diff_result
- name: Check if helm diff check is correct
@@ -79,7 +78,7 @@
namespace: "{{ helm_namespace }}"
chart_ref: "{{ test_chart_ref }}"
check_mode: yes
diff: yes
diff: true
register: diff_result
- name: Check if no diff in check mode when no change
@@ -101,7 +100,7 @@
- name: Modify values
blockinfile:
create: yes
create: true
path: "{{ test_chart_ref }}/values.yml"
block: |
---
@@ -143,6 +142,8 @@
chart_ref: "{{ test_chart_ref }}"
values:
foo: gaz
values_files:
- "{{ test_chart_ref }}/values.yml"
register: install
- assert:
@@ -157,6 +158,46 @@
chart_ref: "{{ test_chart_ref }}"
values:
foo: gaz
values_files:
- "{{ test_chart_ref }}/values.yml"
register: install
- assert:
that:
- install is not changed
- name: Upgrade with set_values
helm:
binary_path: "{{ helm_binary }}"
name: test-chart
namespace: "{{ helm_namespace }}"
chart_ref: "{{ test_chart_ref }}"
values:
foo: gaz
values_files:
- "{{ test_chart_ref }}/values.yml"
set_values:
- value: foo=qux
value_type: string
register: install
- assert:
that:
- install is changed
- name: Upgrade with set_values idempotency check
helm:
binary_path: "{{ helm_binary }}"
name: test-chart
namespace: "{{ helm_namespace }}"
chart_ref: "{{ test_chart_ref }}"
values:
foo: gaz
values_files:
- "{{ test_chart_ref }}/values.yml"
set_values:
- value: foo=qux
value_type: string
register: install
- assert:
@@ -164,52 +205,76 @@
- install is not changed
# Test helm diff with chart_repo_url
- name: Define Redis chart values
set_fact:
redis_chart_values:
commonLabels:
phase: testing
company: RedHat
image:
tag: 6.2.6-debian-10-r135
architecture: standalone
- name: Install Redis chart
helm:
binary_path: "{{ helm_binary }}"
chart_repo_url: https://charts.bitnami.com/bitnami
chart_ref: redis
namespace: "{{ helm_namespace }}"
name: redis-chart
chart_version: "{{ redis_chart_version }}"
release_values: "{{ redis_chart_values }}"
- name: Upgrade Redis chart
helm:
binary_path: "{{ helm_binary }}"
chart_repo_url: https://charts.bitnami.com/bitnami
chart_ref: redis
namespace: "{{ helm_namespace }}"
name: redis-chart
chart_version: "{{ redis_chart_version }}"
release_values: "{{ redis_chart_values }}"
check_mode: yes
register: redis_upgrade
- name: Assert that module raised a warning
assert:
that:
- not redis_upgrade.changed
- redis_upgrade.warnings is defined
- redis_upgrade.warnings | length == 1
- redis_upgrade.warnings[0] == "The default idempotency check can fail to report changes in certain cases. Install helm diff >= 3.4.1 for better results."
- name: Uninstall helm diff
helm_plugin:
binary_path: "{{ helm_binary }}"
state: absent
plugin_name: diff
ignore_errors: yes
ignore_errors: true
- name: Define chart variables
set_fact:
test_chart_values:
myValue: 'Some ConfigMap data value'
myConfigmapName: 'ansible-config-from-url'
test_chart_version: 0.1.0
test_chart_ref_url: "oci://localhost:6035/testing/test-chart-deployment-time"
- name: Deploy chart to remote registry
block:
- name: Create local directory to copy chart in
ansible.builtin.tempfile:
suffix: .chart
state: directory
register: _tmpd
- name: Copy local registry
ansible.builtin.copy:
dest: "{{ _tmpd.path }}"
src: '{{ role_path }}/files/test-chart-deployment-time'
- name: Push chart to helm registry
ansible.builtin.include_role:
name: push_to_helm_registry
vars:
chart_local_path: '{{ _tmpd.path }}/test-chart-deployment-time'
chart_repo_path: 'testing'
always:
- name: Delete temporary directory
ansible.builtin.file:
state: absent
path: '{{ _tmpd.path }}'
- name: Log into Helm registry
ansible.builtin.command: "{{ helm_binary }} registry login -u testuser -p 'pass123!' localhost:6035"
- name: Install chart from remote URL
helm:
binary_path: "{{ helm_binary }}"
chart_ref: "{{ test_chart_ref_url }}"
chart_version: 0.1.0
namespace: "{{ helm_namespace }}"
name: another-chart
release_values: "{{ test_chart_values }}"
- name: Upgrade chart
helm:
binary_path: "{{ helm_binary }}"
chart_ref: "{{ test_chart_ref_url }}"
chart_version: 0.1.0
namespace: "{{ helm_namespace }}"
name: another-chart
release_values: "{{ test_chart_values }}"
check_mode: true
register: _upgrade
- name: Assert that module raised a warning
assert:
that:
- not _upgrade.changed
- _upgrade.warnings is defined
- _upgrade.warnings | length == 1
- _upgrade.warnings[0] == "The default idempotency check can fail to report changes in certain cases. Install helm diff >= 3.4.1 for better results."
- name: Install helm diff (version=3.4.1)
helm_plugin:
@@ -218,37 +283,36 @@
plugin_path: https://github.com/databus23/helm-diff
plugin_version: 3.4.1
- name: Upgrade Redis chart once again
- name: Upgrade chart once again
helm:
binary_path: "{{ helm_binary }}"
chart_repo_url: https://charts.bitnami.com/bitnami
chart_ref: redis
chart_ref: "{{ test_chart_ref_url }}"
chart_version: 0.1.0
namespace: "{{ helm_namespace }}"
name: redis-chart
chart_version: "{{ redis_chart_version }}"
release_values: "{{ redis_chart_values }}"
check_mode: yes
register: redis_upgrade_2
name: another-chart
release_values: "{{ test_chart_values }}"
check_mode: true
register: _upgrade_2
- name: Assert that module raised a warning
assert:
that:
- redis_upgrade_2.changed
- redis_upgrade_2.warnings is not defined
- _upgrade_2.changed
- _upgrade_2.warnings is not defined
always:
- name: Remove chart directory
file:
path: "{{ test_chart_ref }}"
state: absent
ignore_errors: yes
ignore_errors: true
- name: Uninstall helm diff
helm_plugin:
binary_path: "{{ helm_binary }}"
state: absent
plugin_name: diff
ignore_errors: yes
ignore_errors: true
- name: Remove helm namespace
k8s:
@@ -256,4 +320,7 @@
kind: Namespace
name: "{{ helm_namespace }}"
state: absent
ignore_errors: yes
wait: true
ignore_errors: true
- include_tasks: reuse_values.yml

View File

@@ -0,0 +1,93 @@
---
- name: Create temporary directory for helm chart
tempfile:
suffix: .helm
state: directory
register: helm_dir
- name: Test helm diff functionality
vars:
test_chart_path: "{{ helm_dir.path }}/test-chart-reuse-values"
test_release_name: "myrelease"
block:
- name: Install helm diff
kubernetes.core.helm_plugin:
binary_path: "{{ helm_binary }}"
state: present
plugin_path: https://github.com/databus23/helm-diff
plugin_version: 3.9.4
- name: Copy test chart
ansible.builtin.copy:
src: "test-chart-reuse-values"
dest: "{{ helm_dir.path }}"
- name: Create helm release
kubernetes.core.helm:
state: present
binary_path: "{{ helm_binary }}"
chart_ref: "{{ test_chart_path }}"
release_name: "{{ test_release_name }}"
release_namespace: "{{ helm_namespace }}"
create_namespace: true
release_values:
ansible_version: devel
phase: ci
wait: true
- name: Upgrade helm release (reset_values=false and reuse_values=true)
kubernetes.core.helm:
binary_path: "{{ helm_binary }}"
chart_ref: "{{ test_chart_path }}"
reset_values: false
reuse_values: true
release_name: "{{ test_release_name }}"
release_namespace: "{{ helm_namespace }}"
values:
ansible_version: devel
register: helm_upgrade
- name: Ensure task did not reported change
assert:
that:
- helm_upgrade is not changed
- name: Upgrade helm release (reuse_values=true with default value for reset_values)
kubernetes.core.helm:
binary_path: "{{ helm_binary }}"
chart_ref: "{{ test_chart_path }}"
reuse_values: true
release_name: "{{ test_release_name }}"
release_namespace: "{{ helm_namespace }}"
values:
ansible_version: devel
register: helm_upgrade
- name: Ensure task reported change
assert:
that:
- helm_upgrade is changed
always:
- name: Remove temporary directory
file:
path: "{{ helm_dir.path }}"
state: absent
ignore_errors: true
- name: Uninstall helm diff
kubernetes.core.helm_plugin:
binary_path: "{{ helm_binary }}"
state: absent
plugin_name: diff
ignore_errors: true
- name: Remove helm namespace
kubernetes.core.k8s:
api_version: v1
kind: Namespace
name: "{{ helm_namespace }}"
state: absent
ignore_errors: true

View File

@@ -1,6 +1,10 @@
---
- name: Test helm with in-memory kubeconfig
include_tasks: "from_in_memory_kubeconfig.yml"
loop_control:
loop_var: test_helm_version
with_items:
- "v3.10.3"
- name: Test helm with custom kubeconfig and validate_certs=false
include_tasks: "from_kubeconfig_with_validate_certs.yml"
@@ -8,12 +12,10 @@
loop_var: test_helm_version
with_items:
- "v3.10.3"
- "v3.8.2"
- name: Test helm with custom kubeconfig and ca_cert
include_tasks: "from_kubeconfig_with_cacert.yml"
loop_control:
loop_var: test_helm_version
with_items:
- "v3.5.1"
- "v3.4.2"
- "v3.10.3"

View File

@@ -18,7 +18,12 @@
- set_fact:
saved_kubeconfig_path: "{{ _dir.path }}/config"
- block:
- vars:
helm_repo_name: autoscaler
helm_repo_url: "https://kubernetes.github.io/autoscaler"
helm_release_name: "autoscaler"
helm_chart_name: "cluster-autoscaler"
block:
- name: Copy default kubeconfig
copy:
remote_src: true
@@ -59,14 +64,14 @@
- plugin_info.plugin_list != []
# helm_repository, helm, helm_info
- name: Add test_bitnami chart repository
- name: 'Add "{{ helm_repo_name }}" chart repository'
helm_repository:
binary_path: "{{ helm_binary }}"
name: test_bitnami
name: "{{ helm_repo_name }}"
kubeconfig: "{{ test_kubeconfig | default(omit) }}"
validate_certs: "{{ test_validate_certs | default(omit) }}"
ca_cert: "{{ test_ca_cert | default(omit) }}"
repo_url: https://charts.bitnami.com/bitnami
repo_url: "{{ helm_repo_url }}"
register: repository
- name: Assert that repository was added
@@ -77,8 +82,8 @@
- name: Install chart from repository added before
helm:
binary_path: "{{ helm_binary }}"
name: rabbitmq
chart_ref: test_bitnami/rabbitmq
name: "{{ helm_release_name }}"
chart_ref: "{{ helm_repo_name }}/{{ helm_chart_name }}"
namespace: "{{ helm_namespace }}"
update_repo_cache: true
kubeconfig: "{{ test_kubeconfig | default(omit) }}"
@@ -98,7 +103,7 @@
kubeconfig: "{{ test_kubeconfig | default(omit) }}"
validate_certs: "{{ test_validate_certs | default(omit) }}"
ca_cert: "{{ test_ca_cert | default(omit) }}"
name: "rabbitmq"
name: "{{ helm_release_name }}"
namespace: "{{ helm_namespace }}"
register: chart_info
@@ -112,7 +117,7 @@
- name: Remove chart
helm:
binary_path: "{{ helm_binary }}"
name: rabbitmq
name: "{{ helm_release_name }}"
namespace: "{{ helm_namespace }}"
kubeconfig: "{{ test_kubeconfig | default(omit) }}"
validate_certs: "{{ test_validate_certs | default(omit) }}"
@@ -131,7 +136,7 @@
kubeconfig: "{{ test_kubeconfig | default(omit) }}"
validate_certs: "{{ test_validate_certs | default(omit) }}"
ca_cert: "{{ test_ca_cert | default(omit) }}"
name: "rabbitmq"
name: "{{ helm_release_name }}"
namespace: "{{ helm_namespace }}"
register: chart_info
@@ -143,7 +148,7 @@
- name: Remove chart repository
helm_repository:
binary_path: "{{ helm_binary }}"
name: test_bitnami
name: "{{ helm_repo_name }}"
kubeconfig: "{{ test_kubeconfig | default(omit) }}"
validate_certs: "{{ test_validate_certs | default(omit) }}"
ca_cert: "{{ test_ca_cert | default(omit) }}"
@@ -192,6 +197,6 @@
- name: Delete helm repository
helm_repository:
binary_path: "{{ helm_binary }}"
name: test_bitnami
name: "{{ helm_repo_name }}"
state: absent
ignore_errors: true

View File

@@ -180,6 +180,7 @@
- '"--username ansible" in _result.command'
- '"--password ***" in _result.command'
- '"--keyring pubring.gpg" in _result.command'
- '"Module did not set no_log for pass_credentials" not in _result.stderr'
- name: Download chart using chart_ref
helm_pull:
@@ -203,9 +204,8 @@
- name: Download chart using untar_chart
helm_pull:
binary_path: "{{ helm_path }}"
chart_ref: redis
chart_ref: "oci://registry-1.docker.io/bitnamicharts/redis"
destination: "{{ destination }}"
repo_url: "https://charts.bitnami.com/bitnami"
untar_chart: true
register: _result

View File

@@ -1,8 +1,7 @@
- name: Install helm using set_values parameters
helm:
binary_path: "{{ helm_binary }}"
chart_ref: mariadb
chart_repo_url: https://charts.bitnami.com/bitnami
chart_ref: oci://registry-1.docker.io/bitnamicharts/mariadb
release_name: test-mariadb
release_namespace: "{{ helm_namespace }}"
create_namespace: true
@@ -36,8 +35,7 @@
- name: Install helm using set_values parameters
helm:
binary_path: "{{ helm_binary }}"
chart_ref: apache
chart_repo_url: https://charts.bitnami.com/bitnami
chart_ref: oci://registry-1.docker.io/bitnamicharts/apache
release_name: test-apache
release_namespace: "{{ helm_namespace }}"
create_namespace: true
@@ -79,8 +77,7 @@
- name: Install helm using set_values parameters
helm:
binary_path: "{{ helm_binary }}"
chart_ref: minio
chart_repo_url: https://charts.bitnami.com/bitnami
chart_ref: oci://registry-1.docker.io/bitnamicharts/minio
release_name: test-minio
release_namespace: "{{ helm_namespace }}"
create_namespace: true
@@ -107,3 +104,11 @@
file:
state: absent
path: "{{ ymlfile.path }}"
ignore_errors: true
- name: Delete namespace
k8s:
state: absent
kind: namespace
name: "{{ helm_namespace }}"
ignore_errors: true

View File

@@ -1,4 +1,4 @@
---
helm_version: v3.7.0
helm_version: v3.8.0
helm_install_path: /tmp/helm
helm_default_archive_name: "helm-{{ helm_version }}-{{ ansible_system | lower }}-amd64.tar.gz"

View File

@@ -0,0 +1,32 @@
---
# Testing fix for issue https://github.com/ansible-collections/kubernetes.core/pull/676
- vars:
kubevirt_release: "v1.1.1"
block:
- name: Delete existing namespace
kubernetes.core.k8s:
kind: namespace
namespace: kubevirt
state: absent
- name: Create kubevirt resources
kubernetes.core.k8s:
state: present
apply: true
src: "{{ item }}"
with_items:
- "https://github.com/kubevirt/kubevirt/releases/download/{{ kubevirt_release }}/kubevirt-operator.yaml"
- "https://github.com/kubevirt/kubevirt/releases/download/{{ kubevirt_release }}/kubevirt-cr.yaml"
- name: Read kubevirt Deployment
k8s_info:
kind: Deployment
namespace: kubevirt
always:
- name: Delete existing namespace
kubernetes.core.k8s:
kind: namespace
namespace: kubevirt
state: absent
wait: true
ignore_errors: true

View File

@@ -3,3 +3,4 @@
with_items:
- wait
- api-server-caching
- discovery

View File

@@ -192,7 +192,7 @@
- name: Check that module waited
assert:
that:
- "{{ lookup('pipe', 'date +%s') }} - {{ start }} > 30"
- ( lookup('pipe', 'date +%s')|int - start|int ) > 30
- name: Create simple pod
k8s:

View File

@@ -5,6 +5,7 @@ k8s_pod_metadata:
k8s_pod_spec:
serviceAccount: "{{ k8s_pod_service_account }}"
nodeSelector: "{{ k8s_pod_node_selector }}"
containers:
- image: "{{ k8s_pod_image }}"
imagePullPolicy: Always
@@ -33,6 +34,8 @@ k8s_pod_ports: []
k8s_pod_env: []
k8s_pod_node_selector: {}
k8s_pod_template:
metadata: "{{ k8s_pod_metadata }}"
spec: "{{ k8s_pod_spec }}"

View File

@@ -127,6 +127,48 @@
- ds.result.status.currentNumberScheduled == ds.result.status.desiredNumberScheduled
- updated_ds_pods.resources[0].spec.containers[0].image.endswith(":3")
- name: Create daemonset with nodeSelector and not existing label
k8s:
definition:
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: wait-daemonset-not-existing-label
namespace: "{{ wait_namespace }}"
spec:
selector:
matchLabels:
app: "{{ k8s_pod_name }}"
template: "{{ k8s_pod_template }}"
wait: yes
wait_sleep: 5
wait_timeout: "{{ k8s_wait_timeout | default(omit) }}"
vars:
k8s_pod_name: wait-daemonset-not-existing-label
k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:1
k8s_pod_command:
- sleep
- "600"
k8s_pod_node_selector:
nonExisitingLabel: test-not-exiting-label
register: ds_not_existing_label
- name: Get updated pods
k8s_info:
api_version: v1
kind: Pod
namespace: "{{ wait_namespace }}"
label_selectors:
- app=wait-daemonset-not-existing-label
register: updated_ds_pods_not_existing_label
- name: Check that daemonset wait worked (when desired number is 0)
assert:
that:
- ds_not_existing_label.result.status.currentNumberScheduled == ds_not_existing_label.result.status.desiredNumberScheduled
- ds_not_existing_label.result.status.desiredNumberScheduled == 0
- updated_ds_pods_not_existing_label.resources | length == 0
- name: Add a statefulset
k8s:
definition:

View File

@@ -0,0 +1 @@
disabled

View File

@@ -0,0 +1,5 @@
---
helm_binary_path: "helm"
chart_repo_url: 'localhost:6035'
chart_repo_username: testuser
chart_repo_password: 'pass123!'

View File

@@ -0,0 +1,38 @@
---
- name: Ensure we can log into the helm registry
command: >-
{{ helm_binary_path }} registry login
-u {{ chart_repo_username }}
-p {{ chart_repo_password }}
{{ chart_repo_url }}
- name: Package chart and push to helm registry
block:
- name: Create temporary directory to store chart
ansible.builtin.tempfile:
state: directory
suffix: .chart
register: _tmpfile
- name: Package helm chart
command: '{{ helm_binary_path }} package {{ chart_local_path }} --destination {{ _tmpfile.path }}'
- name: Locate helm chart package
ansible.builtin.find:
paths: "{{ _tmpfile.path }}"
patterns: '*.tgz'
register: _files
- name: Helm push chart to the registry
command: '{{ helm_binary_path }} push {{ _files.files.0.path }} oci://{{ chart_repo_url }}/{{ chart_repo_path }}'
always:
- name: Logout from registry
command: '{{ helm_binary_path }} registry logout {{ chart_repo_url }}'
ignore_errors: true
- name: Delete temporary directory
ansible.builtin.file:
state: absent
path: '{{ _tmpfile.path }}'
ignore_errors: true

View File

@@ -0,0 +1 @@
disabled

View File

@@ -0,0 +1,5 @@
---
# user: testuser, password: pass123!
registry_credentials: testuser:$2y$05$d8tw6L1hojRFW.FjHOAnIOihJWAvFb0/Pu/30hLbQNJIYzCmlyBCi
registry_name: helm_registry
registry_port: 6035

View File

@@ -0,0 +1,3 @@
---
- name: Teardown registry
include_tasks: teardown_registry.yml

View File

@@ -0,0 +1,32 @@
---
- name: Ensure we can talk to docker daemon
ansible.builtin.shell:
cmd: docker ps
- name: Create temporary directory to store file in
tempfile:
state: directory
suffix: .helm_registry
register: _tmpfile
# notify:
# - Teardown registry
- name: Create authentication file
copy:
content: "{{ registry_credentials }}"
dest: "{{ _tmpfile.path }}/htpasswd"
- name: Remove existing registry
ansible.builtin.include_tasks: remove_docker_container.yml
- name: Create registry container
command: >-
docker run -d
-p {{ registry_port }}:5000
--restart=always
--name "{{ registry_name }}"
-v "{{ _tmpfile.path }}:/auth"
-e "REGISTRY_AUTH=htpasswd"
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd
registry:2

View File

@@ -0,0 +1,15 @@
---
- name: Inspect docker container
command: docker container inspect {{ registry_name }} -f '{{ '{{' }} .State.Running {{ '}}' }}'
register: _inspect
ignore_errors: true
- name: Remove container
when: _inspect.rc == 0
block:
- name: Stop running container
command: docker container stop {{ registry_name }}
when: _inspect.stdout == "true"
- name: Remove container
command: docker container rm {{ registry_name }}

View File

@@ -0,0 +1,9 @@
---
- name: Remove Docker container
ansible.builtin.include_tasks: remove_docker_container.yml
- name: Delete temporary directory
file:
state: absent
path: '{{ _tmpfile.path }}'
ignore_errors: true

View File

@@ -1,616 +0,0 @@
plugins/module_utils/client/discovery.py import-3.6!skip
plugins/module_utils/client/discovery.py import-3.7!skip
plugins/module_utils/client/discovery.py import-3.8!skip
plugins/module_utils/client/discovery.py import-3.9!skip
plugins/module_utils/client/resource.py import-3.6!skip
plugins/module_utils/client/resource.py import-3.7!skip
plugins/module_utils/client/resource.py import-3.8!skip
plugins/module_utils/client/resource.py import-3.9!skip
plugins/module_utils/k8sdynamicclient.py import-3.6!skip
plugins/module_utils/k8sdynamicclient.py import-3.7!skip
plugins/module_utils/k8sdynamicclient.py import-3.8!skip
plugins/module_utils/k8sdynamicclient.py import-3.9!skip
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
tests/sanity/refresh_ignore_files shebang!skip
plugins/doc_fragments/k8s_name_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_auth_options.py future-import-boilerplate!skip
plugins/doc_fragments/helm_common_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_state_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_wait_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_scale_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_delete_options.py future-import-boilerplate!skip
plugins/doc_fragments/__init__.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_resource_options.py future-import-boilerplate!skip
plugins/module_utils/helm.py future-import-boilerplate!skip
plugins/module_utils/apply.py future-import-boilerplate!skip
plugins/module_utils/hashes.py future-import-boilerplate!skip
plugins/module_utils/helm_args_common.py future-import-boilerplate!skip
plugins/module_utils/version.py future-import-boilerplate!skip
plugins/module_utils/_version.py future-import-boilerplate!skip
plugins/module_utils/copy.py future-import-boilerplate!skip
plugins/module_utils/args_common.py future-import-boilerplate!skip
plugins/module_utils/__init__.py future-import-boilerplate!skip
plugins/module_utils/selector.py future-import-boilerplate!skip
plugins/module_utils/k8sdynamicclient.py future-import-boilerplate!skip
plugins/module_utils/common.py future-import-boilerplate!skip
plugins/module_utils/ansiblemodule.py future-import-boilerplate!skip
plugins/module_utils/exceptions.py future-import-boilerplate!skip
plugins/module_utils/client/resource.py future-import-boilerplate!skip
plugins/module_utils/client/discovery.py future-import-boilerplate!skip
plugins/module_utils/k8s/resource.py future-import-boilerplate!skip
plugins/module_utils/k8s/core.py future-import-boilerplate!skip
plugins/module_utils/k8s/waiter.py future-import-boilerplate!skip
plugins/module_utils/k8s/client.py future-import-boilerplate!skip
plugins/module_utils/k8s/runner.py future-import-boilerplate!skip
plugins/module_utils/k8s/service.py future-import-boilerplate!skip
plugins/module_utils/k8s/exceptions.py future-import-boilerplate!skip
plugins/connection/kubectl.py future-import-boilerplate!skip
plugins/inventory/k8s.py future-import-boilerplate!skip
plugins/lookup/k8s.py future-import-boilerplate!skip
plugins/lookup/kustomize.py future-import-boilerplate!skip
plugins/modules/k8s_scale.py future-import-boilerplate!skip
plugins/modules/helm_template.py future-import-boilerplate!skip
plugins/modules/k8s_exec.py future-import-boilerplate!skip
plugins/modules/helm.py future-import-boilerplate!skip
plugins/modules/helm_plugin_info.py future-import-boilerplate!skip
plugins/modules/helm_info.py future-import-boilerplate!skip
plugins/modules/helm_repository.py future-import-boilerplate!skip
plugins/modules/k8s_rollback.py future-import-boilerplate!skip
plugins/modules/k8s_log.py future-import-boilerplate!skip
plugins/modules/k8s_drain.py future-import-boilerplate!skip
plugins/modules/helm_plugin.py future-import-boilerplate!skip
plugins/modules/k8s_taint.py future-import-boilerplate!skip
plugins/modules/k8s.py future-import-boilerplate!skip
plugins/modules/k8s_service.py future-import-boilerplate!skip
plugins/modules/k8s_cluster_info.py future-import-boilerplate!skip
plugins/modules/k8s_info.py future-import-boilerplate!skip
plugins/modules/k8s_cp.py future-import-boilerplate!skip
plugins/modules/__init__.py future-import-boilerplate!skip
plugins/modules/k8s_json_patch.py future-import-boilerplate!skip
plugins/action/k8s_info.py future-import-boilerplate!skip
plugins/filter/k8s.py future-import-boilerplate!skip
tests/unit/conftest.py future-import-boilerplate!skip
tests/unit/utils/ansible_module_mock.py future-import-boilerplate!skip
tests/unit/module_utils/test_helm.py future-import-boilerplate!skip
tests/unit/module_utils/test_marshal.py future-import-boilerplate!skip
tests/unit/module_utils/test_discoverer.py future-import-boilerplate!skip
tests/unit/module_utils/test_hashes.py future-import-boilerplate!skip
tests/unit/module_utils/test_resource.py future-import-boilerplate!skip
tests/unit/module_utils/test_service.py future-import-boilerplate!skip
tests/unit/module_utils/test_waiter.py future-import-boilerplate!skip
tests/unit/module_utils/test_common.py future-import-boilerplate!skip
tests/unit/module_utils/test_selector.py future-import-boilerplate!skip
tests/unit/module_utils/test_apply.py future-import-boilerplate!skip
tests/unit/module_utils/test_runner.py future-import-boilerplate!skip
tests/unit/module_utils/test_client.py future-import-boilerplate!skip
tests/unit/module_utils/test_core.py future-import-boilerplate!skip
tests/unit/modules/test_helm_template_module.py future-import-boilerplate!skip
tests/unit/modules/test_helm_template.py future-import-boilerplate!skip
tests/unit/modules/test_module_helm.py future-import-boilerplate!skip
tests/unit/action/test_remove_omit.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_name_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_auth_options.py metaclass-boilerplate!skip
plugins/doc_fragments/helm_common_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_state_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_wait_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_scale_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_delete_options.py metaclass-boilerplate!skip
plugins/doc_fragments/__init__.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_resource_options.py metaclass-boilerplate!skip
plugins/module_utils/helm.py metaclass-boilerplate!skip
plugins/module_utils/apply.py metaclass-boilerplate!skip
plugins/module_utils/hashes.py metaclass-boilerplate!skip
plugins/module_utils/helm_args_common.py metaclass-boilerplate!skip
plugins/module_utils/version.py metaclass-boilerplate!skip
plugins/module_utils/_version.py metaclass-boilerplate!skip
plugins/module_utils/copy.py metaclass-boilerplate!skip
plugins/module_utils/args_common.py metaclass-boilerplate!skip
plugins/module_utils/__init__.py metaclass-boilerplate!skip
plugins/module_utils/selector.py metaclass-boilerplate!skip
plugins/module_utils/k8sdynamicclient.py metaclass-boilerplate!skip
plugins/module_utils/common.py metaclass-boilerplate!skip
plugins/module_utils/ansiblemodule.py metaclass-boilerplate!skip
plugins/module_utils/exceptions.py metaclass-boilerplate!skip
plugins/module_utils/client/resource.py metaclass-boilerplate!skip
plugins/module_utils/client/discovery.py metaclass-boilerplate!skip
plugins/module_utils/k8s/resource.py metaclass-boilerplate!skip
plugins/module_utils/k8s/core.py metaclass-boilerplate!skip
plugins/module_utils/k8s/waiter.py metaclass-boilerplate!skip
plugins/module_utils/k8s/client.py metaclass-boilerplate!skip
plugins/module_utils/k8s/runner.py metaclass-boilerplate!skip
plugins/module_utils/k8s/service.py metaclass-boilerplate!skip
plugins/module_utils/k8s/exceptions.py metaclass-boilerplate!skip
plugins/connection/kubectl.py metaclass-boilerplate!skip
plugins/inventory/k8s.py metaclass-boilerplate!skip
plugins/lookup/k8s.py metaclass-boilerplate!skip
plugins/lookup/kustomize.py metaclass-boilerplate!skip
plugins/modules/k8s_scale.py metaclass-boilerplate!skip
plugins/modules/helm_template.py metaclass-boilerplate!skip
plugins/modules/k8s_exec.py metaclass-boilerplate!skip
plugins/modules/helm.py metaclass-boilerplate!skip
plugins/modules/helm_plugin_info.py metaclass-boilerplate!skip
plugins/modules/helm_info.py metaclass-boilerplate!skip
plugins/modules/helm_repository.py metaclass-boilerplate!skip
plugins/modules/k8s_rollback.py metaclass-boilerplate!skip
plugins/modules/k8s_log.py metaclass-boilerplate!skip
plugins/modules/k8s_drain.py metaclass-boilerplate!skip
plugins/modules/helm_plugin.py metaclass-boilerplate!skip
plugins/modules/k8s_taint.py metaclass-boilerplate!skip
plugins/modules/k8s.py metaclass-boilerplate!skip
plugins/modules/k8s_service.py metaclass-boilerplate!skip
plugins/modules/k8s_cluster_info.py metaclass-boilerplate!skip
plugins/modules/k8s_info.py metaclass-boilerplate!skip
plugins/modules/k8s_cp.py metaclass-boilerplate!skip
plugins/modules/__init__.py metaclass-boilerplate!skip
plugins/modules/k8s_json_patch.py metaclass-boilerplate!skip
plugins/action/k8s_info.py metaclass-boilerplate!skip
plugins/filter/k8s.py metaclass-boilerplate!skip
tests/unit/conftest.py metaclass-boilerplate!skip
tests/unit/utils/ansible_module_mock.py metaclass-boilerplate!skip
tests/unit/module_utils/test_helm.py metaclass-boilerplate!skip
tests/unit/module_utils/test_marshal.py metaclass-boilerplate!skip
tests/unit/module_utils/test_discoverer.py metaclass-boilerplate!skip
tests/unit/module_utils/test_hashes.py metaclass-boilerplate!skip
tests/unit/module_utils/test_resource.py metaclass-boilerplate!skip
tests/unit/module_utils/test_service.py metaclass-boilerplate!skip
tests/unit/module_utils/test_waiter.py metaclass-boilerplate!skip
tests/unit/module_utils/test_common.py metaclass-boilerplate!skip
tests/unit/module_utils/test_selector.py metaclass-boilerplate!skip
tests/unit/module_utils/test_apply.py metaclass-boilerplate!skip
tests/unit/module_utils/test_runner.py metaclass-boilerplate!skip
tests/unit/module_utils/test_client.py metaclass-boilerplate!skip
tests/unit/module_utils/test_core.py metaclass-boilerplate!skip
tests/unit/modules/test_helm_template_module.py metaclass-boilerplate!skip
tests/unit/modules/test_helm_template.py metaclass-boilerplate!skip
tests/unit/modules/test_module_helm.py metaclass-boilerplate!skip
tests/unit/action/test_remove_omit.py metaclass-boilerplate!skip
plugins/modules/k8s_scale.py import-2.6!skip
plugins/modules/k8s_scale.py import-2.7!skip
plugins/modules/k8s_scale.py import-3.5!skip
plugins/modules/helm_template.py import-2.6!skip
plugins/modules/helm_template.py import-2.7!skip
plugins/modules/helm_template.py import-3.5!skip
plugins/modules/k8s_exec.py import-2.6!skip
plugins/modules/k8s_exec.py import-2.7!skip
plugins/modules/k8s_exec.py import-3.5!skip
plugins/modules/helm.py import-2.6!skip
plugins/modules/helm.py import-2.7!skip
plugins/modules/helm.py import-3.5!skip
plugins/modules/helm_plugin_info.py import-2.6!skip
plugins/modules/helm_plugin_info.py import-2.7!skip
plugins/modules/helm_plugin_info.py import-3.5!skip
plugins/modules/helm_info.py import-2.6!skip
plugins/modules/helm_info.py import-2.7!skip
plugins/modules/helm_info.py import-3.5!skip
plugins/modules/helm_repository.py import-2.6!skip
plugins/modules/helm_repository.py import-2.7!skip
plugins/modules/helm_repository.py import-3.5!skip
plugins/modules/k8s_rollback.py import-2.6!skip
plugins/modules/k8s_rollback.py import-2.7!skip
plugins/modules/k8s_rollback.py import-3.5!skip
plugins/modules/k8s_log.py import-2.6!skip
plugins/modules/k8s_log.py import-2.7!skip
plugins/modules/k8s_log.py import-3.5!skip
plugins/modules/k8s_drain.py import-2.6!skip
plugins/modules/k8s_drain.py import-2.7!skip
plugins/modules/k8s_drain.py import-3.5!skip
plugins/modules/helm_plugin.py import-2.6!skip
plugins/modules/helm_plugin.py import-2.7!skip
plugins/modules/helm_plugin.py import-3.5!skip
plugins/modules/k8s_taint.py import-2.6!skip
plugins/modules/k8s_taint.py import-2.7!skip
plugins/modules/k8s_taint.py import-3.5!skip
plugins/modules/k8s.py import-2.6!skip
plugins/modules/k8s.py import-2.7!skip
plugins/modules/k8s.py import-3.5!skip
plugins/modules/k8s_service.py import-2.6!skip
plugins/modules/k8s_service.py import-2.7!skip
plugins/modules/k8s_service.py import-3.5!skip
plugins/modules/k8s_cluster_info.py import-2.6!skip
plugins/modules/k8s_cluster_info.py import-2.7!skip
plugins/modules/k8s_cluster_info.py import-3.5!skip
plugins/modules/k8s_info.py import-2.6!skip
plugins/modules/k8s_info.py import-2.7!skip
plugins/modules/k8s_info.py import-3.5!skip
plugins/modules/k8s_cp.py import-2.6!skip
plugins/modules/k8s_cp.py import-2.7!skip
plugins/modules/k8s_cp.py import-3.5!skip
plugins/modules/__init__.py import-2.6!skip
plugins/modules/__init__.py import-2.7!skip
plugins/modules/__init__.py import-3.5!skip
plugins/modules/k8s_json_patch.py import-2.6!skip
plugins/modules/k8s_json_patch.py import-2.7!skip
plugins/modules/k8s_json_patch.py import-3.5!skip
plugins/module_utils/helm.py import-2.6!skip
plugins/module_utils/helm.py import-2.7!skip
plugins/module_utils/helm.py import-3.5!skip
plugins/module_utils/apply.py import-2.6!skip
plugins/module_utils/apply.py import-2.7!skip
plugins/module_utils/apply.py import-3.5!skip
plugins/module_utils/hashes.py import-2.6!skip
plugins/module_utils/hashes.py import-2.7!skip
plugins/module_utils/hashes.py import-3.5!skip
plugins/module_utils/helm_args_common.py import-2.6!skip
plugins/module_utils/helm_args_common.py import-2.7!skip
plugins/module_utils/helm_args_common.py import-3.5!skip
plugins/module_utils/version.py import-2.6!skip
plugins/module_utils/version.py import-2.7!skip
plugins/module_utils/version.py import-3.5!skip
plugins/module_utils/_version.py import-2.6!skip
plugins/module_utils/_version.py import-2.7!skip
plugins/module_utils/_version.py import-3.5!skip
plugins/module_utils/copy.py import-2.6!skip
plugins/module_utils/copy.py import-2.7!skip
plugins/module_utils/copy.py import-3.5!skip
plugins/module_utils/args_common.py import-2.6!skip
plugins/module_utils/args_common.py import-2.7!skip
plugins/module_utils/args_common.py import-3.5!skip
plugins/module_utils/__init__.py import-2.6!skip
plugins/module_utils/__init__.py import-2.7!skip
plugins/module_utils/__init__.py import-3.5!skip
plugins/module_utils/selector.py import-2.6!skip
plugins/module_utils/selector.py import-2.7!skip
plugins/module_utils/selector.py import-3.5!skip
plugins/module_utils/k8sdynamicclient.py import-2.6!skip
plugins/module_utils/k8sdynamicclient.py import-2.7!skip
plugins/module_utils/k8sdynamicclient.py import-3.5!skip
plugins/module_utils/common.py import-2.6!skip
plugins/module_utils/common.py import-2.7!skip
plugins/module_utils/common.py import-3.5!skip
plugins/module_utils/ansiblemodule.py import-2.6!skip
plugins/module_utils/ansiblemodule.py import-2.7!skip
plugins/module_utils/ansiblemodule.py import-3.5!skip
plugins/module_utils/exceptions.py import-2.6!skip
plugins/module_utils/exceptions.py import-2.7!skip
plugins/module_utils/exceptions.py import-3.5!skip
plugins/module_utils/client/resource.py import-2.6!skip
plugins/module_utils/client/resource.py import-2.7!skip
plugins/module_utils/client/resource.py import-3.5!skip
plugins/module_utils/client/discovery.py import-2.6!skip
plugins/module_utils/client/discovery.py import-2.7!skip
plugins/module_utils/client/discovery.py import-3.5!skip
plugins/module_utils/k8s/resource.py import-2.6!skip
plugins/module_utils/k8s/resource.py import-2.7!skip
plugins/module_utils/k8s/resource.py import-3.5!skip
plugins/module_utils/k8s/core.py import-2.6!skip
plugins/module_utils/k8s/core.py import-2.7!skip
plugins/module_utils/k8s/core.py import-3.5!skip
plugins/module_utils/k8s/waiter.py import-2.6!skip
plugins/module_utils/k8s/waiter.py import-2.7!skip
plugins/module_utils/k8s/waiter.py import-3.5!skip
plugins/module_utils/k8s/client.py import-2.6!skip
plugins/module_utils/k8s/client.py import-2.7!skip
plugins/module_utils/k8s/client.py import-3.5!skip
plugins/module_utils/k8s/runner.py import-2.6!skip
plugins/module_utils/k8s/runner.py import-2.7!skip
plugins/module_utils/k8s/runner.py import-3.5!skip
plugins/module_utils/k8s/service.py import-2.6!skip
plugins/module_utils/k8s/service.py import-2.7!skip
plugins/module_utils/k8s/service.py import-3.5!skip
plugins/module_utils/k8s/exceptions.py import-2.6!skip
plugins/module_utils/k8s/exceptions.py import-2.7!skip
plugins/module_utils/k8s/exceptions.py import-3.5!skip
plugins/doc_fragments/k8s_name_options.py compile-2.6!skip
plugins/doc_fragments/k8s_name_options.py compile-2.7!skip
plugins/doc_fragments/k8s_name_options.py compile-3.5!skip
plugins/doc_fragments/k8s_auth_options.py compile-2.6!skip
plugins/doc_fragments/k8s_auth_options.py compile-2.7!skip
plugins/doc_fragments/k8s_auth_options.py compile-3.5!skip
plugins/doc_fragments/helm_common_options.py compile-2.6!skip
plugins/doc_fragments/helm_common_options.py compile-2.7!skip
plugins/doc_fragments/helm_common_options.py compile-3.5!skip
plugins/doc_fragments/k8s_state_options.py compile-2.6!skip
plugins/doc_fragments/k8s_state_options.py compile-2.7!skip
plugins/doc_fragments/k8s_state_options.py compile-3.5!skip
plugins/doc_fragments/k8s_wait_options.py compile-2.6!skip
plugins/doc_fragments/k8s_wait_options.py compile-2.7!skip
plugins/doc_fragments/k8s_wait_options.py compile-3.5!skip
plugins/doc_fragments/k8s_scale_options.py compile-2.6!skip
plugins/doc_fragments/k8s_scale_options.py compile-2.7!skip
plugins/doc_fragments/k8s_scale_options.py compile-3.5!skip
plugins/doc_fragments/k8s_delete_options.py compile-2.6!skip
plugins/doc_fragments/k8s_delete_options.py compile-2.7!skip
plugins/doc_fragments/k8s_delete_options.py compile-3.5!skip
plugins/doc_fragments/__init__.py compile-2.6!skip
plugins/doc_fragments/__init__.py compile-2.7!skip
plugins/doc_fragments/__init__.py compile-3.5!skip
plugins/doc_fragments/k8s_resource_options.py compile-2.6!skip
plugins/doc_fragments/k8s_resource_options.py compile-2.7!skip
plugins/doc_fragments/k8s_resource_options.py compile-3.5!skip
plugins/module_utils/helm.py compile-2.6!skip
plugins/module_utils/helm.py compile-2.7!skip
plugins/module_utils/helm.py compile-3.5!skip
plugins/module_utils/apply.py compile-2.6!skip
plugins/module_utils/apply.py compile-2.7!skip
plugins/module_utils/apply.py compile-3.5!skip
plugins/module_utils/hashes.py compile-2.6!skip
plugins/module_utils/hashes.py compile-2.7!skip
plugins/module_utils/hashes.py compile-3.5!skip
plugins/module_utils/helm_args_common.py compile-2.6!skip
plugins/module_utils/helm_args_common.py compile-2.7!skip
plugins/module_utils/helm_args_common.py compile-3.5!skip
plugins/module_utils/version.py compile-2.6!skip
plugins/module_utils/version.py compile-2.7!skip
plugins/module_utils/version.py compile-3.5!skip
plugins/module_utils/_version.py compile-2.6!skip
plugins/module_utils/_version.py compile-2.7!skip
plugins/module_utils/_version.py compile-3.5!skip
plugins/module_utils/copy.py compile-2.6!skip
plugins/module_utils/copy.py compile-2.7!skip
plugins/module_utils/copy.py compile-3.5!skip
plugins/module_utils/args_common.py compile-2.6!skip
plugins/module_utils/args_common.py compile-2.7!skip
plugins/module_utils/args_common.py compile-3.5!skip
plugins/module_utils/__init__.py compile-2.6!skip
plugins/module_utils/__init__.py compile-2.7!skip
plugins/module_utils/__init__.py compile-3.5!skip
plugins/module_utils/selector.py compile-2.6!skip
plugins/module_utils/selector.py compile-2.7!skip
plugins/module_utils/selector.py compile-3.5!skip
plugins/module_utils/k8sdynamicclient.py compile-2.6!skip
plugins/module_utils/k8sdynamicclient.py compile-2.7!skip
plugins/module_utils/k8sdynamicclient.py compile-3.5!skip
plugins/module_utils/common.py compile-2.6!skip
plugins/module_utils/common.py compile-2.7!skip
plugins/module_utils/common.py compile-3.5!skip
plugins/module_utils/ansiblemodule.py compile-2.6!skip
plugins/module_utils/ansiblemodule.py compile-2.7!skip
plugins/module_utils/ansiblemodule.py compile-3.5!skip
plugins/module_utils/exceptions.py compile-2.6!skip
plugins/module_utils/exceptions.py compile-2.7!skip
plugins/module_utils/exceptions.py compile-3.5!skip
plugins/module_utils/client/resource.py compile-2.6!skip
plugins/module_utils/client/resource.py compile-2.7!skip
plugins/module_utils/client/resource.py compile-3.5!skip
plugins/module_utils/client/discovery.py compile-2.6!skip
plugins/module_utils/client/discovery.py compile-2.7!skip
plugins/module_utils/client/discovery.py compile-3.5!skip
plugins/module_utils/k8s/resource.py compile-2.6!skip
plugins/module_utils/k8s/resource.py compile-2.7!skip
plugins/module_utils/k8s/resource.py compile-3.5!skip
plugins/module_utils/k8s/core.py compile-2.6!skip
plugins/module_utils/k8s/core.py compile-2.7!skip
plugins/module_utils/k8s/core.py compile-3.5!skip
plugins/module_utils/k8s/waiter.py compile-2.6!skip
plugins/module_utils/k8s/waiter.py compile-2.7!skip
plugins/module_utils/k8s/waiter.py compile-3.5!skip
plugins/module_utils/k8s/client.py compile-2.6!skip
plugins/module_utils/k8s/client.py compile-2.7!skip
plugins/module_utils/k8s/client.py compile-3.5!skip
plugins/module_utils/k8s/runner.py compile-2.6!skip
plugins/module_utils/k8s/runner.py compile-2.7!skip
plugins/module_utils/k8s/runner.py compile-3.5!skip
plugins/module_utils/k8s/service.py compile-2.6!skip
plugins/module_utils/k8s/service.py compile-2.7!skip
plugins/module_utils/k8s/service.py compile-3.5!skip
plugins/module_utils/k8s/exceptions.py compile-2.6!skip
plugins/module_utils/k8s/exceptions.py compile-2.7!skip
plugins/module_utils/k8s/exceptions.py compile-3.5!skip
plugins/connection/kubectl.py compile-2.6!skip
plugins/connection/kubectl.py compile-2.7!skip
plugins/connection/kubectl.py compile-3.5!skip
plugins/inventory/k8s.py compile-2.6!skip
plugins/inventory/k8s.py compile-2.7!skip
plugins/inventory/k8s.py compile-3.5!skip
plugins/lookup/k8s.py compile-2.6!skip
plugins/lookup/k8s.py compile-2.7!skip
plugins/lookup/k8s.py compile-3.5!skip
plugins/lookup/kustomize.py compile-2.6!skip
plugins/lookup/kustomize.py compile-2.7!skip
plugins/lookup/kustomize.py compile-3.5!skip
plugins/modules/k8s_scale.py compile-2.6!skip
plugins/modules/k8s_scale.py compile-2.7!skip
plugins/modules/k8s_scale.py compile-3.5!skip
plugins/modules/helm_template.py compile-2.6!skip
plugins/modules/helm_template.py compile-2.7!skip
plugins/modules/helm_template.py compile-3.5!skip
plugins/modules/k8s_exec.py compile-2.6!skip
plugins/modules/k8s_exec.py compile-2.7!skip
plugins/modules/k8s_exec.py compile-3.5!skip
plugins/modules/helm.py compile-2.6!skip
plugins/modules/helm.py compile-2.7!skip
plugins/modules/helm.py compile-3.5!skip
plugins/modules/helm_plugin_info.py compile-2.6!skip
plugins/modules/helm_plugin_info.py compile-2.7!skip
plugins/modules/helm_plugin_info.py compile-3.5!skip
plugins/modules/helm_info.py compile-2.6!skip
plugins/modules/helm_info.py compile-2.7!skip
plugins/modules/helm_info.py compile-3.5!skip
plugins/modules/helm_repository.py compile-2.6!skip
plugins/modules/helm_repository.py compile-2.7!skip
plugins/modules/helm_repository.py compile-3.5!skip
plugins/modules/k8s_rollback.py compile-2.6!skip
plugins/modules/k8s_rollback.py compile-2.7!skip
plugins/modules/k8s_rollback.py compile-3.5!skip
plugins/modules/k8s_log.py compile-2.6!skip
plugins/modules/k8s_log.py compile-2.7!skip
plugins/modules/k8s_log.py compile-3.5!skip
plugins/modules/k8s_drain.py compile-2.6!skip
plugins/modules/k8s_drain.py compile-2.7!skip
plugins/modules/k8s_drain.py compile-3.5!skip
plugins/modules/helm_plugin.py compile-2.6!skip
plugins/modules/helm_plugin.py compile-2.7!skip
plugins/modules/helm_plugin.py compile-3.5!skip
plugins/modules/k8s_taint.py compile-2.6!skip
plugins/modules/k8s_taint.py compile-2.7!skip
plugins/modules/k8s_taint.py compile-3.5!skip
plugins/modules/k8s.py compile-2.6!skip
plugins/modules/k8s.py compile-2.7!skip
plugins/modules/k8s.py compile-3.5!skip
plugins/modules/k8s_service.py compile-2.6!skip
plugins/modules/k8s_service.py compile-2.7!skip
plugins/modules/k8s_service.py compile-3.5!skip
plugins/modules/k8s_cluster_info.py compile-2.6!skip
plugins/modules/k8s_cluster_info.py compile-2.7!skip
plugins/modules/k8s_cluster_info.py compile-3.5!skip
plugins/modules/k8s_info.py compile-2.6!skip
plugins/modules/k8s_info.py compile-2.7!skip
plugins/modules/k8s_info.py compile-3.5!skip
plugins/modules/k8s_cp.py compile-2.6!skip
plugins/modules/k8s_cp.py compile-2.7!skip
plugins/modules/k8s_cp.py compile-3.5!skip
plugins/modules/__init__.py compile-2.6!skip
plugins/modules/__init__.py compile-2.7!skip
plugins/modules/__init__.py compile-3.5!skip
plugins/modules/k8s_json_patch.py compile-2.6!skip
plugins/modules/k8s_json_patch.py compile-2.7!skip
plugins/modules/k8s_json_patch.py compile-3.5!skip
plugins/action/k8s_info.py compile-2.6!skip
plugins/action/k8s_info.py compile-2.7!skip
plugins/action/k8s_info.py compile-3.5!skip
plugins/filter/k8s.py compile-2.6!skip
plugins/filter/k8s.py compile-2.7!skip
plugins/filter/k8s.py compile-3.5!skip
tests/unit/conftest.py compile-2.6!skip
tests/unit/conftest.py compile-2.7!skip
tests/unit/conftest.py compile-3.5!skip
tests/unit/utils/ansible_module_mock.py compile-2.6!skip
tests/unit/utils/ansible_module_mock.py compile-2.7!skip
tests/unit/utils/ansible_module_mock.py compile-3.5!skip
tests/unit/module_utils/test_helm.py compile-2.6!skip
tests/unit/module_utils/test_helm.py compile-2.7!skip
tests/unit/module_utils/test_helm.py compile-3.5!skip
tests/unit/module_utils/test_marshal.py compile-2.6!skip
tests/unit/module_utils/test_marshal.py compile-2.7!skip
tests/unit/module_utils/test_marshal.py compile-3.5!skip
tests/unit/module_utils/test_discoverer.py compile-2.6!skip
tests/unit/module_utils/test_discoverer.py compile-2.7!skip
tests/unit/module_utils/test_discoverer.py compile-3.5!skip
tests/unit/module_utils/test_hashes.py compile-2.6!skip
tests/unit/module_utils/test_hashes.py compile-2.7!skip
tests/unit/module_utils/test_hashes.py compile-3.5!skip
tests/unit/module_utils/test_resource.py compile-2.6!skip
tests/unit/module_utils/test_resource.py compile-2.7!skip
tests/unit/module_utils/test_resource.py compile-3.5!skip
tests/unit/module_utils/test_service.py compile-2.6!skip
tests/unit/module_utils/test_service.py compile-2.7!skip
tests/unit/module_utils/test_service.py compile-3.5!skip
tests/unit/module_utils/test_waiter.py compile-2.6!skip
tests/unit/module_utils/test_waiter.py compile-2.7!skip
tests/unit/module_utils/test_waiter.py compile-3.5!skip
tests/unit/module_utils/test_common.py compile-2.6!skip
tests/unit/module_utils/test_common.py compile-2.7!skip
tests/unit/module_utils/test_common.py compile-3.5!skip
tests/unit/module_utils/test_selector.py compile-2.6!skip
tests/unit/module_utils/test_selector.py compile-2.7!skip
tests/unit/module_utils/test_selector.py compile-3.5!skip
tests/unit/module_utils/test_apply.py compile-2.6!skip
tests/unit/module_utils/test_apply.py compile-2.7!skip
tests/unit/module_utils/test_apply.py compile-3.5!skip
tests/unit/module_utils/test_runner.py compile-2.6!skip
tests/unit/module_utils/test_runner.py compile-2.7!skip
tests/unit/module_utils/test_runner.py compile-3.5!skip
tests/unit/module_utils/test_client.py compile-2.6!skip
tests/unit/module_utils/test_client.py compile-2.7!skip
tests/unit/module_utils/test_client.py compile-3.5!skip
tests/unit/module_utils/test_core.py compile-2.6!skip
tests/unit/module_utils/test_core.py compile-2.7!skip
tests/unit/module_utils/test_core.py compile-3.5!skip
tests/unit/modules/test_helm_template_module.py compile-2.6!skip
tests/unit/modules/test_helm_template_module.py compile-2.7!skip
tests/unit/modules/test_helm_template_module.py compile-3.5!skip
tests/unit/modules/test_helm_template.py compile-2.6!skip
tests/unit/modules/test_helm_template.py compile-2.7!skip
tests/unit/modules/test_helm_template.py compile-3.5!skip
tests/unit/modules/test_module_helm.py compile-2.6!skip
tests/unit/modules/test_module_helm.py compile-2.7!skip
tests/unit/modules/test_module_helm.py compile-3.5!skip
tests/unit/action/test_remove_omit.py compile-2.6!skip
tests/unit/action/test_remove_omit.py compile-2.7!skip
tests/unit/action/test_remove_omit.py compile-3.5!skip
tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.6!skip
tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.7!skip
tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-3.5!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.6!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.7!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-3.5!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.6!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.7!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-3.5!skip
tests/integration/targets/helm/library/helm_test_version.py compile-2.6!skip
tests/integration/targets/helm/library/helm_test_version.py compile-2.7!skip
tests/integration/targets/helm/library/helm_test_version.py compile-3.5!skip
plugins/modules/k8s_scale.py pylint!skip
plugins/modules/helm_template.py pylint!skip
plugins/modules/k8s_exec.py pylint!skip
plugins/modules/helm.py pylint!skip
plugins/modules/helm_plugin_info.py pylint!skip
plugins/modules/helm_info.py pylint!skip
plugins/modules/helm_repository.py pylint!skip
plugins/modules/k8s_rollback.py pylint!skip
plugins/modules/k8s_log.py pylint!skip
plugins/modules/k8s_drain.py pylint!skip
plugins/modules/helm_plugin.py pylint!skip
plugins/modules/k8s_taint.py pylint!skip
plugins/modules/k8s.py pylint!skip
plugins/modules/k8s_service.py pylint!skip
plugins/modules/k8s_cluster_info.py pylint!skip
plugins/modules/k8s_info.py pylint!skip
plugins/modules/k8s_cp.py pylint!skip
plugins/modules/__init__.py pylint!skip
plugins/modules/k8s_json_patch.py pylint!skip
plugins/module_utils/helm.py pylint!skip
plugins/module_utils/apply.py pylint!skip
plugins/module_utils/hashes.py pylint!skip
plugins/module_utils/helm_args_common.py pylint!skip
plugins/module_utils/version.py pylint!skip
plugins/module_utils/_version.py pylint!skip
plugins/module_utils/copy.py pylint!skip
plugins/module_utils/args_common.py pylint!skip
plugins/module_utils/__init__.py pylint!skip
plugins/module_utils/selector.py pylint!skip
plugins/module_utils/k8sdynamicclient.py pylint!skip
plugins/module_utils/common.py pylint!skip
plugins/module_utils/ansiblemodule.py pylint!skip
plugins/module_utils/exceptions.py pylint!skip
plugins/module_utils/client/resource.py pylint!skip
plugins/module_utils/client/discovery.py pylint!skip
plugins/module_utils/k8s/resource.py pylint!skip
plugins/module_utils/k8s/core.py pylint!skip
plugins/module_utils/k8s/waiter.py pylint!skip
plugins/module_utils/k8s/client.py pylint!skip
plugins/module_utils/k8s/runner.py pylint!skip
plugins/module_utils/k8s/service.py pylint!skip
plugins/module_utils/k8s/exceptions.py pylint!skip
tests/integration/targets/k8s_copy/library/k8s_create_file.py pylint!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py pylint!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py pylint!skip
tests/integration/targets/helm/library/helm_test_version.py pylint!skip
tests/unit/conftest.py pylint!skip
tests/unit/utils/ansible_module_mock.py pylint!skip
tests/unit/module_utils/test_helm.py pylint!skip
tests/unit/module_utils/test_marshal.py pylint!skip
tests/unit/module_utils/test_discoverer.py pylint!skip
tests/unit/module_utils/test_hashes.py pylint!skip
tests/unit/module_utils/test_resource.py pylint!skip
tests/unit/module_utils/test_service.py pylint!skip
tests/unit/module_utils/test_waiter.py pylint!skip
tests/unit/module_utils/test_common.py pylint!skip
tests/unit/module_utils/test_selector.py pylint!skip
tests/unit/module_utils/test_apply.py pylint!skip
tests/unit/module_utils/test_runner.py pylint!skip
tests/unit/module_utils/test_client.py pylint!skip
tests/unit/module_utils/test_core.py pylint!skip
tests/unit/modules/test_helm_template_module.py pylint!skip
tests/unit/modules/test_helm_template.py pylint!skip
tests/unit/modules/test_module_helm.py pylint!skip
tests/unit/action/test_remove_omit.py pylint!skip
plugins/modules/k8s.py validate-modules!skip
plugins/modules/k8s_cp.py validate-modules!skip
plugins/modules/k8s_drain.py validate-modules!skip
plugins/modules/k8s_exec.py validate-modules!skip
plugins/modules/k8s_info.py validate-modules!skip
plugins/modules/k8s_json_patch.py validate-modules!skip
plugins/modules/k8s_log.py validate-modules!skip
plugins/modules/k8s_rollback.py validate-modules!skip
plugins/modules/k8s_scale.py validate-modules!skip
plugins/modules/k8s_service.py validate-modules!skip
plugins/modules/k8s_taint.py validate-modules!skip

View File

@@ -1,593 +0,0 @@
plugins/module_utils/client/discovery.py import-3.6!skip
plugins/module_utils/client/discovery.py import-3.7!skip
plugins/module_utils/client/discovery.py import-3.8!skip
plugins/module_utils/client/discovery.py import-3.9!skip
plugins/module_utils/client/resource.py import-3.6!skip
plugins/module_utils/client/resource.py import-3.7!skip
plugins/module_utils/client/resource.py import-3.8!skip
plugins/module_utils/client/resource.py import-3.9!skip
plugins/module_utils/k8sdynamicclient.py import-3.6!skip
plugins/module_utils/k8sdynamicclient.py import-3.7!skip
plugins/module_utils/k8sdynamicclient.py import-3.8!skip
plugins/module_utils/k8sdynamicclient.py import-3.9!skip
plugins/modules/k8s.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
tests/sanity/refresh_ignore_files shebang!skip
plugins/modules/k8s.py validate-modules:return-syntax-error
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
plugins/doc_fragments/k8s_name_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_auth_options.py future-import-boilerplate!skip
plugins/doc_fragments/helm_common_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_state_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_wait_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_scale_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_delete_options.py future-import-boilerplate!skip
plugins/doc_fragments/__init__.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_resource_options.py future-import-boilerplate!skip
plugins/module_utils/helm.py future-import-boilerplate!skip
plugins/module_utils/apply.py future-import-boilerplate!skip
plugins/module_utils/hashes.py future-import-boilerplate!skip
plugins/module_utils/helm_args_common.py future-import-boilerplate!skip
plugins/module_utils/version.py future-import-boilerplate!skip
plugins/module_utils/_version.py future-import-boilerplate!skip
plugins/module_utils/copy.py future-import-boilerplate!skip
plugins/module_utils/args_common.py future-import-boilerplate!skip
plugins/module_utils/__init__.py future-import-boilerplate!skip
plugins/module_utils/selector.py future-import-boilerplate!skip
plugins/module_utils/k8sdynamicclient.py future-import-boilerplate!skip
plugins/module_utils/common.py future-import-boilerplate!skip
plugins/module_utils/ansiblemodule.py future-import-boilerplate!skip
plugins/module_utils/exceptions.py future-import-boilerplate!skip
plugins/module_utils/client/resource.py future-import-boilerplate!skip
plugins/module_utils/client/discovery.py future-import-boilerplate!skip
plugins/module_utils/k8s/resource.py future-import-boilerplate!skip
plugins/module_utils/k8s/core.py future-import-boilerplate!skip
plugins/module_utils/k8s/waiter.py future-import-boilerplate!skip
plugins/module_utils/k8s/client.py future-import-boilerplate!skip
plugins/module_utils/k8s/runner.py future-import-boilerplate!skip
plugins/module_utils/k8s/service.py future-import-boilerplate!skip
plugins/module_utils/k8s/exceptions.py future-import-boilerplate!skip
plugins/connection/kubectl.py future-import-boilerplate!skip
plugins/inventory/k8s.py future-import-boilerplate!skip
plugins/lookup/k8s.py future-import-boilerplate!skip
plugins/lookup/kustomize.py future-import-boilerplate!skip
plugins/modules/k8s_scale.py future-import-boilerplate!skip
plugins/modules/helm_template.py future-import-boilerplate!skip
plugins/modules/k8s_exec.py future-import-boilerplate!skip
plugins/modules/helm.py future-import-boilerplate!skip
plugins/modules/helm_plugin_info.py future-import-boilerplate!skip
plugins/modules/helm_info.py future-import-boilerplate!skip
plugins/modules/helm_repository.py future-import-boilerplate!skip
plugins/modules/k8s_rollback.py future-import-boilerplate!skip
plugins/modules/k8s_log.py future-import-boilerplate!skip
plugins/modules/k8s_drain.py future-import-boilerplate!skip
plugins/modules/helm_plugin.py future-import-boilerplate!skip
plugins/modules/k8s_taint.py future-import-boilerplate!skip
plugins/modules/k8s.py future-import-boilerplate!skip
plugins/modules/k8s_service.py future-import-boilerplate!skip
plugins/modules/k8s_cluster_info.py future-import-boilerplate!skip
plugins/modules/k8s_info.py future-import-boilerplate!skip
plugins/modules/k8s_cp.py future-import-boilerplate!skip
plugins/modules/__init__.py future-import-boilerplate!skip
plugins/modules/k8s_json_patch.py future-import-boilerplate!skip
plugins/action/k8s_info.py future-import-boilerplate!skip
plugins/filter/k8s.py future-import-boilerplate!skip
tests/unit/conftest.py future-import-boilerplate!skip
tests/unit/utils/ansible_module_mock.py future-import-boilerplate!skip
tests/unit/module_utils/test_helm.py future-import-boilerplate!skip
tests/unit/module_utils/test_marshal.py future-import-boilerplate!skip
tests/unit/module_utils/test_discoverer.py future-import-boilerplate!skip
tests/unit/module_utils/test_hashes.py future-import-boilerplate!skip
tests/unit/module_utils/test_resource.py future-import-boilerplate!skip
tests/unit/module_utils/test_service.py future-import-boilerplate!skip
tests/unit/module_utils/test_waiter.py future-import-boilerplate!skip
tests/unit/module_utils/test_common.py future-import-boilerplate!skip
tests/unit/module_utils/test_selector.py future-import-boilerplate!skip
tests/unit/module_utils/test_apply.py future-import-boilerplate!skip
tests/unit/module_utils/test_runner.py future-import-boilerplate!skip
tests/unit/module_utils/test_client.py future-import-boilerplate!skip
tests/unit/module_utils/test_core.py future-import-boilerplate!skip
tests/unit/modules/test_helm_template_module.py future-import-boilerplate!skip
tests/unit/modules/test_helm_template.py future-import-boilerplate!skip
tests/unit/modules/test_module_helm.py future-import-boilerplate!skip
tests/unit/action/test_remove_omit.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_name_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_auth_options.py metaclass-boilerplate!skip
plugins/doc_fragments/helm_common_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_state_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_wait_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_scale_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_delete_options.py metaclass-boilerplate!skip
plugins/doc_fragments/__init__.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_resource_options.py metaclass-boilerplate!skip
plugins/module_utils/helm.py metaclass-boilerplate!skip
plugins/module_utils/apply.py metaclass-boilerplate!skip
plugins/module_utils/hashes.py metaclass-boilerplate!skip
plugins/module_utils/helm_args_common.py metaclass-boilerplate!skip
plugins/module_utils/version.py metaclass-boilerplate!skip
plugins/module_utils/_version.py metaclass-boilerplate!skip
plugins/module_utils/copy.py metaclass-boilerplate!skip
plugins/module_utils/args_common.py metaclass-boilerplate!skip
plugins/module_utils/__init__.py metaclass-boilerplate!skip
plugins/module_utils/selector.py metaclass-boilerplate!skip
plugins/module_utils/k8sdynamicclient.py metaclass-boilerplate!skip
plugins/module_utils/common.py metaclass-boilerplate!skip
plugins/module_utils/ansiblemodule.py metaclass-boilerplate!skip
plugins/module_utils/exceptions.py metaclass-boilerplate!skip
plugins/module_utils/client/resource.py metaclass-boilerplate!skip
plugins/module_utils/client/discovery.py metaclass-boilerplate!skip
plugins/module_utils/k8s/resource.py metaclass-boilerplate!skip
plugins/module_utils/k8s/core.py metaclass-boilerplate!skip
plugins/module_utils/k8s/waiter.py metaclass-boilerplate!skip
plugins/module_utils/k8s/client.py metaclass-boilerplate!skip
plugins/module_utils/k8s/runner.py metaclass-boilerplate!skip
plugins/module_utils/k8s/service.py metaclass-boilerplate!skip
plugins/module_utils/k8s/exceptions.py metaclass-boilerplate!skip
plugins/connection/kubectl.py metaclass-boilerplate!skip
plugins/inventory/k8s.py metaclass-boilerplate!skip
plugins/lookup/k8s.py metaclass-boilerplate!skip
plugins/lookup/kustomize.py metaclass-boilerplate!skip
plugins/modules/k8s_scale.py metaclass-boilerplate!skip
plugins/modules/helm_template.py metaclass-boilerplate!skip
plugins/modules/k8s_exec.py metaclass-boilerplate!skip
plugins/modules/helm.py metaclass-boilerplate!skip
plugins/modules/helm_plugin_info.py metaclass-boilerplate!skip
plugins/modules/helm_info.py metaclass-boilerplate!skip
plugins/modules/helm_repository.py metaclass-boilerplate!skip
plugins/modules/k8s_rollback.py metaclass-boilerplate!skip
plugins/modules/k8s_log.py metaclass-boilerplate!skip
plugins/modules/k8s_drain.py metaclass-boilerplate!skip
plugins/modules/helm_plugin.py metaclass-boilerplate!skip
plugins/modules/k8s_taint.py metaclass-boilerplate!skip
plugins/modules/k8s.py metaclass-boilerplate!skip
plugins/modules/k8s_service.py metaclass-boilerplate!skip
plugins/modules/k8s_cluster_info.py metaclass-boilerplate!skip
plugins/modules/k8s_info.py metaclass-boilerplate!skip
plugins/modules/k8s_cp.py metaclass-boilerplate!skip
plugins/modules/__init__.py metaclass-boilerplate!skip
plugins/modules/k8s_json_patch.py metaclass-boilerplate!skip
plugins/action/k8s_info.py metaclass-boilerplate!skip
plugins/filter/k8s.py metaclass-boilerplate!skip
tests/unit/conftest.py metaclass-boilerplate!skip
tests/unit/utils/ansible_module_mock.py metaclass-boilerplate!skip
tests/unit/module_utils/test_helm.py metaclass-boilerplate!skip
tests/unit/module_utils/test_marshal.py metaclass-boilerplate!skip
tests/unit/module_utils/test_discoverer.py metaclass-boilerplate!skip
tests/unit/module_utils/test_hashes.py metaclass-boilerplate!skip
tests/unit/module_utils/test_resource.py metaclass-boilerplate!skip
tests/unit/module_utils/test_service.py metaclass-boilerplate!skip
tests/unit/module_utils/test_waiter.py metaclass-boilerplate!skip
tests/unit/module_utils/test_common.py metaclass-boilerplate!skip
tests/unit/module_utils/test_selector.py metaclass-boilerplate!skip
tests/unit/module_utils/test_apply.py metaclass-boilerplate!skip
tests/unit/module_utils/test_runner.py metaclass-boilerplate!skip
tests/unit/module_utils/test_client.py metaclass-boilerplate!skip
tests/unit/module_utils/test_core.py metaclass-boilerplate!skip
tests/unit/modules/test_helm_template_module.py metaclass-boilerplate!skip
tests/unit/modules/test_helm_template.py metaclass-boilerplate!skip
tests/unit/modules/test_module_helm.py metaclass-boilerplate!skip
tests/unit/action/test_remove_omit.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_name_options.py import-2.6!skip
plugins/doc_fragments/k8s_name_options.py import-2.7!skip
plugins/doc_fragments/k8s_name_options.py import-3.5!skip
plugins/doc_fragments/k8s_auth_options.py import-2.6!skip
plugins/doc_fragments/k8s_auth_options.py import-2.7!skip
plugins/doc_fragments/k8s_auth_options.py import-3.5!skip
plugins/doc_fragments/helm_common_options.py import-2.6!skip
plugins/doc_fragments/helm_common_options.py import-2.7!skip
plugins/doc_fragments/helm_common_options.py import-3.5!skip
plugins/doc_fragments/k8s_state_options.py import-2.6!skip
plugins/doc_fragments/k8s_state_options.py import-2.7!skip
plugins/doc_fragments/k8s_state_options.py import-3.5!skip
plugins/doc_fragments/k8s_wait_options.py import-2.6!skip
plugins/doc_fragments/k8s_wait_options.py import-2.7!skip
plugins/doc_fragments/k8s_wait_options.py import-3.5!skip
plugins/doc_fragments/k8s_scale_options.py import-2.6!skip
plugins/doc_fragments/k8s_scale_options.py import-2.7!skip
plugins/doc_fragments/k8s_scale_options.py import-3.5!skip
plugins/doc_fragments/k8s_delete_options.py import-2.6!skip
plugins/doc_fragments/k8s_delete_options.py import-2.7!skip
plugins/doc_fragments/k8s_delete_options.py import-3.5!skip
plugins/doc_fragments/__init__.py import-2.6!skip
plugins/doc_fragments/__init__.py import-2.7!skip
plugins/doc_fragments/__init__.py import-3.5!skip
plugins/doc_fragments/k8s_resource_options.py import-2.6!skip
plugins/doc_fragments/k8s_resource_options.py import-2.7!skip
plugins/doc_fragments/k8s_resource_options.py import-3.5!skip
plugins/module_utils/helm.py import-2.6!skip
plugins/module_utils/helm.py import-2.7!skip
plugins/module_utils/helm.py import-3.5!skip
plugins/module_utils/apply.py import-2.6!skip
plugins/module_utils/apply.py import-2.7!skip
plugins/module_utils/apply.py import-3.5!skip
plugins/module_utils/hashes.py import-2.6!skip
plugins/module_utils/hashes.py import-2.7!skip
plugins/module_utils/hashes.py import-3.5!skip
plugins/module_utils/helm_args_common.py import-2.6!skip
plugins/module_utils/helm_args_common.py import-2.7!skip
plugins/module_utils/helm_args_common.py import-3.5!skip
plugins/module_utils/version.py import-2.6!skip
plugins/module_utils/version.py import-2.7!skip
plugins/module_utils/version.py import-3.5!skip
plugins/module_utils/_version.py import-2.6!skip
plugins/module_utils/_version.py import-2.7!skip
plugins/module_utils/_version.py import-3.5!skip
plugins/module_utils/copy.py import-2.6!skip
plugins/module_utils/copy.py import-2.7!skip
plugins/module_utils/copy.py import-3.5!skip
plugins/module_utils/args_common.py import-2.6!skip
plugins/module_utils/args_common.py import-2.7!skip
plugins/module_utils/args_common.py import-3.5!skip
plugins/module_utils/__init__.py import-2.6!skip
plugins/module_utils/__init__.py import-2.7!skip
plugins/module_utils/__init__.py import-3.5!skip
plugins/module_utils/selector.py import-2.6!skip
plugins/module_utils/selector.py import-2.7!skip
plugins/module_utils/selector.py import-3.5!skip
plugins/module_utils/k8sdynamicclient.py import-2.6!skip
plugins/module_utils/k8sdynamicclient.py import-2.7!skip
plugins/module_utils/k8sdynamicclient.py import-3.5!skip
plugins/module_utils/common.py import-2.6!skip
plugins/module_utils/common.py import-2.7!skip
plugins/module_utils/common.py import-3.5!skip
plugins/module_utils/ansiblemodule.py import-2.6!skip
plugins/module_utils/ansiblemodule.py import-2.7!skip
plugins/module_utils/ansiblemodule.py import-3.5!skip
plugins/module_utils/exceptions.py import-2.6!skip
plugins/module_utils/exceptions.py import-2.7!skip
plugins/module_utils/exceptions.py import-3.5!skip
plugins/module_utils/client/resource.py import-2.6!skip
plugins/module_utils/client/resource.py import-2.7!skip
plugins/module_utils/client/resource.py import-3.5!skip
plugins/module_utils/client/discovery.py import-2.6!skip
plugins/module_utils/client/discovery.py import-2.7!skip
plugins/module_utils/client/discovery.py import-3.5!skip
plugins/module_utils/k8s/resource.py import-2.6!skip
plugins/module_utils/k8s/resource.py import-2.7!skip
plugins/module_utils/k8s/resource.py import-3.5!skip
plugins/module_utils/k8s/core.py import-2.6!skip
plugins/module_utils/k8s/core.py import-2.7!skip
plugins/module_utils/k8s/core.py import-3.5!skip
plugins/module_utils/k8s/waiter.py import-2.6!skip
plugins/module_utils/k8s/waiter.py import-2.7!skip
plugins/module_utils/k8s/waiter.py import-3.5!skip
plugins/module_utils/k8s/client.py import-2.6!skip
plugins/module_utils/k8s/client.py import-2.7!skip
plugins/module_utils/k8s/client.py import-3.5!skip
plugins/module_utils/k8s/runner.py import-2.6!skip
plugins/module_utils/k8s/runner.py import-2.7!skip
plugins/module_utils/k8s/runner.py import-3.5!skip
plugins/module_utils/k8s/service.py import-2.6!skip
plugins/module_utils/k8s/service.py import-2.7!skip
plugins/module_utils/k8s/service.py import-3.5!skip
plugins/module_utils/k8s/exceptions.py import-2.6!skip
plugins/module_utils/k8s/exceptions.py import-2.7!skip
plugins/module_utils/k8s/exceptions.py import-3.5!skip
plugins/connection/kubectl.py import-2.6!skip
plugins/connection/kubectl.py import-2.7!skip
plugins/connection/kubectl.py import-3.5!skip
plugins/inventory/k8s.py import-2.6!skip
plugins/inventory/k8s.py import-2.7!skip
plugins/inventory/k8s.py import-3.5!skip
plugins/lookup/k8s.py import-2.6!skip
plugins/lookup/k8s.py import-2.7!skip
plugins/lookup/k8s.py import-3.5!skip
plugins/lookup/kustomize.py import-2.6!skip
plugins/lookup/kustomize.py import-2.7!skip
plugins/lookup/kustomize.py import-3.5!skip
plugins/modules/k8s_scale.py import-2.6!skip
plugins/modules/k8s_scale.py import-2.7!skip
plugins/modules/k8s_scale.py import-3.5!skip
plugins/modules/helm_template.py import-2.6!skip
plugins/modules/helm_template.py import-2.7!skip
plugins/modules/helm_template.py import-3.5!skip
plugins/modules/k8s_exec.py import-2.6!skip
plugins/modules/k8s_exec.py import-2.7!skip
plugins/modules/k8s_exec.py import-3.5!skip
plugins/modules/helm.py import-2.6!skip
plugins/modules/helm.py import-2.7!skip
plugins/modules/helm.py import-3.5!skip
plugins/modules/helm_plugin_info.py import-2.6!skip
plugins/modules/helm_plugin_info.py import-2.7!skip
plugins/modules/helm_plugin_info.py import-3.5!skip
plugins/modules/helm_info.py import-2.6!skip
plugins/modules/helm_info.py import-2.7!skip
plugins/modules/helm_info.py import-3.5!skip
plugins/modules/helm_repository.py import-2.6!skip
plugins/modules/helm_repository.py import-2.7!skip
plugins/modules/helm_repository.py import-3.5!skip
plugins/modules/k8s_rollback.py import-2.6!skip
plugins/modules/k8s_rollback.py import-2.7!skip
plugins/modules/k8s_rollback.py import-3.5!skip
plugins/modules/k8s_log.py import-2.6!skip
plugins/modules/k8s_log.py import-2.7!skip
plugins/modules/k8s_log.py import-3.5!skip
plugins/modules/k8s_drain.py import-2.6!skip
plugins/modules/k8s_drain.py import-2.7!skip
plugins/modules/k8s_drain.py import-3.5!skip
plugins/modules/helm_plugin.py import-2.6!skip
plugins/modules/helm_plugin.py import-2.7!skip
plugins/modules/helm_plugin.py import-3.5!skip
plugins/modules/k8s_taint.py import-2.6!skip
plugins/modules/k8s_taint.py import-2.7!skip
plugins/modules/k8s_taint.py import-3.5!skip
plugins/modules/k8s.py import-2.6!skip
plugins/modules/k8s.py import-2.7!skip
plugins/modules/k8s.py import-3.5!skip
plugins/modules/k8s_service.py import-2.6!skip
plugins/modules/k8s_service.py import-2.7!skip
plugins/modules/k8s_service.py import-3.5!skip
plugins/modules/k8s_cluster_info.py import-2.6!skip
plugins/modules/k8s_cluster_info.py import-2.7!skip
plugins/modules/k8s_cluster_info.py import-3.5!skip
plugins/modules/k8s_info.py import-2.6!skip
plugins/modules/k8s_info.py import-2.7!skip
plugins/modules/k8s_info.py import-3.5!skip
plugins/modules/k8s_cp.py import-2.6!skip
plugins/modules/k8s_cp.py import-2.7!skip
plugins/modules/k8s_cp.py import-3.5!skip
plugins/modules/__init__.py import-2.6!skip
plugins/modules/__init__.py import-2.7!skip
plugins/modules/__init__.py import-3.5!skip
plugins/modules/k8s_json_patch.py import-2.6!skip
plugins/modules/k8s_json_patch.py import-2.7!skip
plugins/modules/k8s_json_patch.py import-3.5!skip
plugins/action/k8s_info.py import-2.6!skip
plugins/action/k8s_info.py import-2.7!skip
plugins/action/k8s_info.py import-3.5!skip
plugins/filter/k8s.py import-2.6!skip
plugins/filter/k8s.py import-2.7!skip
plugins/filter/k8s.py import-3.5!skip
plugins/doc_fragments/k8s_name_options.py compile-2.6!skip
plugins/doc_fragments/k8s_name_options.py compile-2.7!skip
plugins/doc_fragments/k8s_name_options.py compile-3.5!skip
plugins/doc_fragments/k8s_auth_options.py compile-2.6!skip
plugins/doc_fragments/k8s_auth_options.py compile-2.7!skip
plugins/doc_fragments/k8s_auth_options.py compile-3.5!skip
plugins/doc_fragments/helm_common_options.py compile-2.6!skip
plugins/doc_fragments/helm_common_options.py compile-2.7!skip
plugins/doc_fragments/helm_common_options.py compile-3.5!skip
plugins/doc_fragments/k8s_state_options.py compile-2.6!skip
plugins/doc_fragments/k8s_state_options.py compile-2.7!skip
plugins/doc_fragments/k8s_state_options.py compile-3.5!skip
plugins/doc_fragments/k8s_wait_options.py compile-2.6!skip
plugins/doc_fragments/k8s_wait_options.py compile-2.7!skip
plugins/doc_fragments/k8s_wait_options.py compile-3.5!skip
plugins/doc_fragments/k8s_scale_options.py compile-2.6!skip
plugins/doc_fragments/k8s_scale_options.py compile-2.7!skip
plugins/doc_fragments/k8s_scale_options.py compile-3.5!skip
plugins/doc_fragments/k8s_delete_options.py compile-2.6!skip
plugins/doc_fragments/k8s_delete_options.py compile-2.7!skip
plugins/doc_fragments/k8s_delete_options.py compile-3.5!skip
plugins/doc_fragments/__init__.py compile-2.6!skip
plugins/doc_fragments/__init__.py compile-2.7!skip
plugins/doc_fragments/__init__.py compile-3.5!skip
plugins/doc_fragments/k8s_resource_options.py compile-2.6!skip
plugins/doc_fragments/k8s_resource_options.py compile-2.7!skip
plugins/doc_fragments/k8s_resource_options.py compile-3.5!skip
plugins/module_utils/helm.py compile-2.6!skip
plugins/module_utils/helm.py compile-2.7!skip
plugins/module_utils/helm.py compile-3.5!skip
plugins/module_utils/apply.py compile-2.6!skip
plugins/module_utils/apply.py compile-2.7!skip
plugins/module_utils/apply.py compile-3.5!skip
plugins/module_utils/hashes.py compile-2.6!skip
plugins/module_utils/hashes.py compile-2.7!skip
plugins/module_utils/hashes.py compile-3.5!skip
plugins/module_utils/helm_args_common.py compile-2.6!skip
plugins/module_utils/helm_args_common.py compile-2.7!skip
plugins/module_utils/helm_args_common.py compile-3.5!skip
plugins/module_utils/version.py compile-2.6!skip
plugins/module_utils/version.py compile-2.7!skip
plugins/module_utils/version.py compile-3.5!skip
plugins/module_utils/_version.py compile-2.6!skip
plugins/module_utils/_version.py compile-2.7!skip
plugins/module_utils/_version.py compile-3.5!skip
plugins/module_utils/copy.py compile-2.6!skip
plugins/module_utils/copy.py compile-2.7!skip
plugins/module_utils/copy.py compile-3.5!skip
plugins/module_utils/args_common.py compile-2.6!skip
plugins/module_utils/args_common.py compile-2.7!skip
plugins/module_utils/args_common.py compile-3.5!skip
plugins/module_utils/__init__.py compile-2.6!skip
plugins/module_utils/__init__.py compile-2.7!skip
plugins/module_utils/__init__.py compile-3.5!skip
plugins/module_utils/selector.py compile-2.6!skip
plugins/module_utils/selector.py compile-2.7!skip
plugins/module_utils/selector.py compile-3.5!skip
plugins/module_utils/k8sdynamicclient.py compile-2.6!skip
plugins/module_utils/k8sdynamicclient.py compile-2.7!skip
plugins/module_utils/k8sdynamicclient.py compile-3.5!skip
plugins/module_utils/common.py compile-2.6!skip
plugins/module_utils/common.py compile-2.7!skip
plugins/module_utils/common.py compile-3.5!skip
plugins/module_utils/ansiblemodule.py compile-2.6!skip
plugins/module_utils/ansiblemodule.py compile-2.7!skip
plugins/module_utils/ansiblemodule.py compile-3.5!skip
plugins/module_utils/exceptions.py compile-2.6!skip
plugins/module_utils/exceptions.py compile-2.7!skip
plugins/module_utils/exceptions.py compile-3.5!skip
plugins/module_utils/client/resource.py compile-2.6!skip
plugins/module_utils/client/resource.py compile-2.7!skip
plugins/module_utils/client/resource.py compile-3.5!skip
plugins/module_utils/client/discovery.py compile-2.6!skip
plugins/module_utils/client/discovery.py compile-2.7!skip
plugins/module_utils/client/discovery.py compile-3.5!skip
plugins/module_utils/k8s/resource.py compile-2.6!skip
plugins/module_utils/k8s/resource.py compile-2.7!skip
plugins/module_utils/k8s/resource.py compile-3.5!skip
plugins/module_utils/k8s/core.py compile-2.6!skip
plugins/module_utils/k8s/core.py compile-2.7!skip
plugins/module_utils/k8s/core.py compile-3.5!skip
plugins/module_utils/k8s/waiter.py compile-2.6!skip
plugins/module_utils/k8s/waiter.py compile-2.7!skip
plugins/module_utils/k8s/waiter.py compile-3.5!skip
plugins/module_utils/k8s/client.py compile-2.6!skip
plugins/module_utils/k8s/client.py compile-2.7!skip
plugins/module_utils/k8s/client.py compile-3.5!skip
plugins/module_utils/k8s/runner.py compile-2.6!skip
plugins/module_utils/k8s/runner.py compile-2.7!skip
plugins/module_utils/k8s/runner.py compile-3.5!skip
plugins/module_utils/k8s/service.py compile-2.6!skip
plugins/module_utils/k8s/service.py compile-2.7!skip
plugins/module_utils/k8s/service.py compile-3.5!skip
plugins/module_utils/k8s/exceptions.py compile-2.6!skip
plugins/module_utils/k8s/exceptions.py compile-2.7!skip
plugins/module_utils/k8s/exceptions.py compile-3.5!skip
plugins/connection/kubectl.py compile-2.6!skip
plugins/connection/kubectl.py compile-2.7!skip
plugins/connection/kubectl.py compile-3.5!skip
plugins/inventory/k8s.py compile-2.6!skip
plugins/inventory/k8s.py compile-2.7!skip
plugins/inventory/k8s.py compile-3.5!skip
plugins/lookup/k8s.py compile-2.6!skip
plugins/lookup/k8s.py compile-2.7!skip
plugins/lookup/k8s.py compile-3.5!skip
plugins/lookup/kustomize.py compile-2.6!skip
plugins/lookup/kustomize.py compile-2.7!skip
plugins/lookup/kustomize.py compile-3.5!skip
plugins/modules/k8s_scale.py compile-2.6!skip
plugins/modules/k8s_scale.py compile-2.7!skip
plugins/modules/k8s_scale.py compile-3.5!skip
plugins/modules/helm_template.py compile-2.6!skip
plugins/modules/helm_template.py compile-2.7!skip
plugins/modules/helm_template.py compile-3.5!skip
plugins/modules/k8s_exec.py compile-2.6!skip
plugins/modules/k8s_exec.py compile-2.7!skip
plugins/modules/k8s_exec.py compile-3.5!skip
plugins/modules/helm.py compile-2.6!skip
plugins/modules/helm.py compile-2.7!skip
plugins/modules/helm.py compile-3.5!skip
plugins/modules/helm_plugin_info.py compile-2.6!skip
plugins/modules/helm_plugin_info.py compile-2.7!skip
plugins/modules/helm_plugin_info.py compile-3.5!skip
plugins/modules/helm_info.py compile-2.6!skip
plugins/modules/helm_info.py compile-2.7!skip
plugins/modules/helm_info.py compile-3.5!skip
plugins/modules/helm_repository.py compile-2.6!skip
plugins/modules/helm_repository.py compile-2.7!skip
plugins/modules/helm_repository.py compile-3.5!skip
plugins/modules/k8s_rollback.py compile-2.6!skip
plugins/modules/k8s_rollback.py compile-2.7!skip
plugins/modules/k8s_rollback.py compile-3.5!skip
plugins/modules/k8s_log.py compile-2.6!skip
plugins/modules/k8s_log.py compile-2.7!skip
plugins/modules/k8s_log.py compile-3.5!skip
plugins/modules/k8s_drain.py compile-2.6!skip
plugins/modules/k8s_drain.py compile-2.7!skip
plugins/modules/k8s_drain.py compile-3.5!skip
plugins/modules/helm_plugin.py compile-2.6!skip
plugins/modules/helm_plugin.py compile-2.7!skip
plugins/modules/helm_plugin.py compile-3.5!skip
plugins/modules/k8s_taint.py compile-2.6!skip
plugins/modules/k8s_taint.py compile-2.7!skip
plugins/modules/k8s_taint.py compile-3.5!skip
plugins/modules/k8s.py compile-2.6!skip
plugins/modules/k8s.py compile-2.7!skip
plugins/modules/k8s.py compile-3.5!skip
plugins/modules/k8s_service.py compile-2.6!skip
plugins/modules/k8s_service.py compile-2.7!skip
plugins/modules/k8s_service.py compile-3.5!skip
plugins/modules/k8s_cluster_info.py compile-2.6!skip
plugins/modules/k8s_cluster_info.py compile-2.7!skip
plugins/modules/k8s_cluster_info.py compile-3.5!skip
plugins/modules/k8s_info.py compile-2.6!skip
plugins/modules/k8s_info.py compile-2.7!skip
plugins/modules/k8s_info.py compile-3.5!skip
plugins/modules/k8s_cp.py compile-2.6!skip
plugins/modules/k8s_cp.py compile-2.7!skip
plugins/modules/k8s_cp.py compile-3.5!skip
plugins/modules/__init__.py compile-2.6!skip
plugins/modules/__init__.py compile-2.7!skip
plugins/modules/__init__.py compile-3.5!skip
plugins/modules/k8s_json_patch.py compile-2.6!skip
plugins/modules/k8s_json_patch.py compile-2.7!skip
plugins/modules/k8s_json_patch.py compile-3.5!skip
plugins/action/k8s_info.py compile-2.6!skip
plugins/action/k8s_info.py compile-2.7!skip
plugins/action/k8s_info.py compile-3.5!skip
plugins/filter/k8s.py compile-2.6!skip
plugins/filter/k8s.py compile-2.7!skip
plugins/filter/k8s.py compile-3.5!skip
tests/unit/conftest.py compile-2.6!skip
tests/unit/conftest.py compile-2.7!skip
tests/unit/conftest.py compile-3.5!skip
tests/unit/utils/ansible_module_mock.py compile-2.6!skip
tests/unit/utils/ansible_module_mock.py compile-2.7!skip
tests/unit/utils/ansible_module_mock.py compile-3.5!skip
tests/unit/module_utils/test_helm.py compile-2.6!skip
tests/unit/module_utils/test_helm.py compile-2.7!skip
tests/unit/module_utils/test_helm.py compile-3.5!skip
tests/unit/module_utils/test_marshal.py compile-2.6!skip
tests/unit/module_utils/test_marshal.py compile-2.7!skip
tests/unit/module_utils/test_marshal.py compile-3.5!skip
tests/unit/module_utils/test_discoverer.py compile-2.6!skip
tests/unit/module_utils/test_discoverer.py compile-2.7!skip
tests/unit/module_utils/test_discoverer.py compile-3.5!skip
tests/unit/module_utils/test_hashes.py compile-2.6!skip
tests/unit/module_utils/test_hashes.py compile-2.7!skip
tests/unit/module_utils/test_hashes.py compile-3.5!skip
tests/unit/module_utils/test_resource.py compile-2.6!skip
tests/unit/module_utils/test_resource.py compile-2.7!skip
tests/unit/module_utils/test_resource.py compile-3.5!skip
tests/unit/module_utils/test_service.py compile-2.6!skip
tests/unit/module_utils/test_service.py compile-2.7!skip
tests/unit/module_utils/test_service.py compile-3.5!skip
tests/unit/module_utils/test_waiter.py compile-2.6!skip
tests/unit/module_utils/test_waiter.py compile-2.7!skip
tests/unit/module_utils/test_waiter.py compile-3.5!skip
tests/unit/module_utils/test_common.py compile-2.6!skip
tests/unit/module_utils/test_common.py compile-2.7!skip
tests/unit/module_utils/test_common.py compile-3.5!skip
tests/unit/module_utils/test_selector.py compile-2.6!skip
tests/unit/module_utils/test_selector.py compile-2.7!skip
tests/unit/module_utils/test_selector.py compile-3.5!skip
tests/unit/module_utils/test_apply.py compile-2.6!skip
tests/unit/module_utils/test_apply.py compile-2.7!skip
tests/unit/module_utils/test_apply.py compile-3.5!skip
tests/unit/module_utils/test_runner.py compile-2.6!skip
tests/unit/module_utils/test_runner.py compile-2.7!skip
tests/unit/module_utils/test_runner.py compile-3.5!skip
tests/unit/module_utils/test_client.py compile-2.6!skip
tests/unit/module_utils/test_client.py compile-2.7!skip
tests/unit/module_utils/test_client.py compile-3.5!skip
tests/unit/module_utils/test_core.py compile-2.6!skip
tests/unit/module_utils/test_core.py compile-2.7!skip
tests/unit/module_utils/test_core.py compile-3.5!skip
tests/unit/modules/test_helm_template_module.py compile-2.6!skip
tests/unit/modules/test_helm_template_module.py compile-2.7!skip
tests/unit/modules/test_helm_template_module.py compile-3.5!skip
tests/unit/modules/test_helm_template.py compile-2.6!skip
tests/unit/modules/test_helm_template.py compile-2.7!skip
tests/unit/modules/test_helm_template.py compile-3.5!skip
tests/unit/modules/test_module_helm.py compile-2.6!skip
tests/unit/modules/test_module_helm.py compile-2.7!skip
tests/unit/modules/test_module_helm.py compile-3.5!skip
tests/unit/action/test_remove_omit.py compile-2.6!skip
tests/unit/action/test_remove_omit.py compile-2.7!skip
tests/unit/action/test_remove_omit.py compile-3.5!skip
tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.6!skip
tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-2.7!skip
tests/integration/targets/k8s_copy/library/k8s_create_file.py compile-3.5!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.6!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.7!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-3.5!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.6!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.7!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-3.5!skip
tests/integration/targets/helm/library/helm_test_version.py compile-2.6!skip
tests/integration/targets/helm/library/helm_test_version.py compile-2.7!skip
tests/integration/targets/helm/library/helm_test_version.py compile-3.5!skip
tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip

View File

@@ -28,9 +28,10 @@ tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yaml
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
tests/sanity/refresh_ignore_files shebang!skip
plugins/modules/k8s.py validate-modules:return-syntax-error
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/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_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip

View File

@@ -30,8 +30,9 @@ tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yaml
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
tests/sanity/refresh_ignore_files shebang!skip
plugins/modules/k8s.py validate-modules:return-syntax-error
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_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip

View File

@@ -33,8 +33,9 @@ tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yaml
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
tests/sanity/refresh_ignore_files shebang!skip
plugins/modules/k8s.py validate-modules:return-syntax-error
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_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip

View File

@@ -1,26 +1,22 @@
plugins/module_utils/client/discovery.py import-3.6!skip
plugins/module_utils/client/discovery.py import-3.7!skip
plugins/module_utils/client/discovery.py import-3.8!skip
plugins/module_utils/client/discovery.py import-3.9!skip
plugins/module_utils/client/discovery.py import-3.10!skip
plugins/module_utils/client/discovery.py import-3.11!skip
plugins/module_utils/client/resource.py import-3.6!skip
plugins/module_utils/client/resource.py import-3.7!skip
plugins/module_utils/client/resource.py import-3.8!skip
plugins/module_utils/client/discovery.py import-3.12!skip
plugins/module_utils/client/resource.py import-3.9!skip
plugins/module_utils/client/resource.py import-3.10!skip
plugins/module_utils/client/resource.py import-3.11!skip
plugins/module_utils/k8sdynamicclient.py import-3.6!skip
plugins/module_utils/k8sdynamicclient.py import-3.7!skip
plugins/module_utils/k8sdynamicclient.py import-3.8!skip
plugins/module_utils/client/resource.py import-3.12!skip
plugins/module_utils/k8sdynamicclient.py import-3.9!skip
plugins/module_utils/k8sdynamicclient.py import-3.10!skip
plugins/module_utils/k8sdynamicclient.py import-3.11!skip
plugins/module_utils/k8sdynamicclient.py import-3.12!skip
plugins/module_utils/version.py pylint!skip
plugins/modules/k8s.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
@@ -28,8 +24,9 @@ tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yaml
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
tests/sanity/refresh_ignore_files shebang!skip
plugins/modules/k8s.py validate-modules:return-syntax-error
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_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip

View File

@@ -1,23 +1,19 @@
plugins/module_utils/client/discovery.py import-3.6!skip
plugins/module_utils/client/discovery.py import-3.7!skip
plugins/module_utils/client/discovery.py import-3.8!skip
plugins/module_utils/client/discovery.py import-3.9!skip
plugins/module_utils/client/discovery.py import-3.10!skip
plugins/module_utils/client/resource.py import-3.6!skip
plugins/module_utils/client/resource.py import-3.7!skip
plugins/module_utils/client/resource.py import-3.8!skip
plugins/module_utils/client/resource.py import-3.9!skip
plugins/module_utils/client/resource.py import-3.10!skip
plugins/module_utils/k8sdynamicclient.py import-3.6!skip
plugins/module_utils/k8sdynamicclient.py import-3.7!skip
plugins/module_utils/k8sdynamicclient.py import-3.8!skip
plugins/module_utils/k8sdynamicclient.py import-3.9!skip
plugins/module_utils/k8sdynamicclient.py import-3.10!skip
plugins/module_utils/client/discovery.py import-3.11!skip
plugins/module_utils/client/discovery.py import-3.12!skip
plugins/module_utils/client/discovery.py import-3.13!skip
plugins/module_utils/client/resource.py import-3.11!skip
plugins/module_utils/client/resource.py import-3.12!skip
plugins/module_utils/client/resource.py import-3.13!skip
plugins/module_utils/k8sdynamicclient.py import-3.11!skip
plugins/module_utils/k8sdynamicclient.py import-3.12!skip
plugins/module_utils/k8sdynamicclient.py import-3.13!skip
plugins/module_utils/version.py pylint!skip
plugins/modules/k8s.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
@@ -25,9 +21,9 @@ tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yaml
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
tests/sanity/refresh_ignore_files shebang!skip
plugins/modules/k8s.py validate-modules:return-syntax-error
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/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_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip

View File

@@ -1,23 +1,19 @@
plugins/module_utils/client/discovery.py import-3.6!skip
plugins/module_utils/client/discovery.py import-3.7!skip
plugins/module_utils/client/discovery.py import-3.8!skip
plugins/module_utils/client/discovery.py import-3.9!skip
plugins/module_utils/client/discovery.py import-3.10!skip
plugins/module_utils/client/resource.py import-3.6!skip
plugins/module_utils/client/resource.py import-3.7!skip
plugins/module_utils/client/resource.py import-3.8!skip
plugins/module_utils/client/resource.py import-3.9!skip
plugins/module_utils/client/resource.py import-3.10!skip
plugins/module_utils/k8sdynamicclient.py import-3.6!skip
plugins/module_utils/k8sdynamicclient.py import-3.7!skip
plugins/module_utils/k8sdynamicclient.py import-3.8!skip
plugins/module_utils/k8sdynamicclient.py import-3.9!skip
plugins/module_utils/k8sdynamicclient.py import-3.10!skip
plugins/module_utils/client/discovery.py import-3.11!skip
plugins/module_utils/client/discovery.py import-3.12!skip
plugins/module_utils/client/discovery.py import-3.13!skip
plugins/module_utils/client/resource.py import-3.11!skip
plugins/module_utils/client/resource.py import-3.12!skip
plugins/module_utils/client/resource.py import-3.13!skip
plugins/module_utils/k8sdynamicclient.py import-3.11!skip
plugins/module_utils/k8sdynamicclient.py import-3.12!skip
plugins/module_utils/k8sdynamicclient.py import-3.13!skip
plugins/module_utils/version.py pylint!skip
plugins/modules/k8s.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_scale.py validate-modules:parameter-type-not-in-doc
plugins/modules/k8s_service.py validate-modules:parameter-type-not-in-doc
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
tests/integration/targets/k8s_delete/files/deployments.yaml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
@@ -25,9 +21,9 @@ tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yaml
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
tests/sanity/refresh_ignore_files shebang!skip
plugins/modules/k8s.py validate-modules:return-syntax-error
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/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_diff/files/test-chart-deployment-time/templates/configmap.yaml yamllint!skip

View File

@@ -1,609 +0,0 @@
plugins/module_utils/client/discovery.py import-3.6!skip
plugins/module_utils/client/discovery.py import-3.7!skip
plugins/module_utils/client/discovery.py import-3.8!skip
plugins/module_utils/client/resource.py import-3.6!skip
plugins/module_utils/client/resource.py import-3.7!skip
plugins/module_utils/client/resource.py import-3.8!skip
plugins/module_utils/k8sdynamicclient.py import-3.6!skip
plugins/module_utils/k8sdynamicclient.py import-3.7!skip
plugins/module_utils/k8sdynamicclient.py import-3.8!skip
tests/unit/module_utils/fixtures/definitions.yml yamllint!skip
tests/unit/module_utils/fixtures/deployments.yml yamllint!skip
tests/unit/module_utils/fixtures/pods.yml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml yamllint!skip
tests/integration/targets/k8s_scale/files/deployment.yaml yamllint!skip
tests/sanity/refresh_ignore_files shebang!skip
plugins/doc_fragments/k8s_name_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_auth_options.py future-import-boilerplate!skip
plugins/doc_fragments/helm_common_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_state_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_wait_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_scale_options.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_delete_options.py future-import-boilerplate!skip
plugins/doc_fragments/__init__.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_resource_options.py future-import-boilerplate!skip
plugins/module_utils/helm.py future-import-boilerplate!skip
plugins/module_utils/apply.py future-import-boilerplate!skip
plugins/module_utils/hashes.py future-import-boilerplate!skip
plugins/module_utils/helm_args_common.py future-import-boilerplate!skip
plugins/module_utils/version.py future-import-boilerplate!skip
plugins/module_utils/_version.py future-import-boilerplate!skip
plugins/module_utils/copy.py future-import-boilerplate!skip
plugins/module_utils/args_common.py future-import-boilerplate!skip
plugins/module_utils/__init__.py future-import-boilerplate!skip
plugins/module_utils/selector.py future-import-boilerplate!skip
plugins/module_utils/k8sdynamicclient.py future-import-boilerplate!skip
plugins/module_utils/common.py future-import-boilerplate!skip
plugins/module_utils/ansiblemodule.py future-import-boilerplate!skip
plugins/module_utils/exceptions.py future-import-boilerplate!skip
plugins/module_utils/client/resource.py future-import-boilerplate!skip
plugins/module_utils/client/discovery.py future-import-boilerplate!skip
plugins/module_utils/k8s/resource.py future-import-boilerplate!skip
plugins/module_utils/k8s/core.py future-import-boilerplate!skip
plugins/module_utils/k8s/waiter.py future-import-boilerplate!skip
plugins/module_utils/k8s/client.py future-import-boilerplate!skip
plugins/module_utils/k8s/runner.py future-import-boilerplate!skip
plugins/module_utils/k8s/service.py future-import-boilerplate!skip
plugins/module_utils/k8s/exceptions.py future-import-boilerplate!skip
plugins/connection/kubectl.py future-import-boilerplate!skip
plugins/inventory/k8s.py future-import-boilerplate!skip
plugins/lookup/k8s.py future-import-boilerplate!skip
plugins/lookup/kustomize.py future-import-boilerplate!skip
plugins/modules/k8s_scale.py future-import-boilerplate!skip
plugins/modules/helm_template.py future-import-boilerplate!skip
plugins/modules/k8s_exec.py future-import-boilerplate!skip
plugins/modules/helm.py future-import-boilerplate!skip
plugins/modules/helm_plugin_info.py future-import-boilerplate!skip
plugins/modules/helm_info.py future-import-boilerplate!skip
plugins/modules/helm_repository.py future-import-boilerplate!skip
plugins/modules/k8s_rollback.py future-import-boilerplate!skip
plugins/modules/k8s_log.py future-import-boilerplate!skip
plugins/modules/k8s_drain.py future-import-boilerplate!skip
plugins/modules/helm_plugin.py future-import-boilerplate!skip
plugins/modules/k8s_taint.py future-import-boilerplate!skip
plugins/modules/k8s.py future-import-boilerplate!skip
plugins/modules/k8s_service.py future-import-boilerplate!skip
plugins/modules/k8s_cluster_info.py future-import-boilerplate!skip
plugins/modules/k8s_info.py future-import-boilerplate!skip
plugins/modules/k8s_cp.py future-import-boilerplate!skip
plugins/modules/__init__.py future-import-boilerplate!skip
plugins/modules/k8s_json_patch.py future-import-boilerplate!skip
plugins/action/k8s_info.py future-import-boilerplate!skip
plugins/filter/k8s.py future-import-boilerplate!skip
tests/unit/conftest.py future-import-boilerplate!skip
tests/unit/utils/ansible_module_mock.py future-import-boilerplate!skip
tests/unit/module_utils/test_helm.py future-import-boilerplate!skip
tests/unit/module_utils/test_marshal.py future-import-boilerplate!skip
tests/unit/module_utils/test_discoverer.py future-import-boilerplate!skip
tests/unit/module_utils/test_hashes.py future-import-boilerplate!skip
tests/unit/module_utils/test_resource.py future-import-boilerplate!skip
tests/unit/module_utils/test_service.py future-import-boilerplate!skip
tests/unit/module_utils/test_waiter.py future-import-boilerplate!skip
tests/unit/module_utils/test_common.py future-import-boilerplate!skip
tests/unit/module_utils/test_selector.py future-import-boilerplate!skip
tests/unit/module_utils/test_apply.py future-import-boilerplate!skip
tests/unit/module_utils/test_runner.py future-import-boilerplate!skip
tests/unit/module_utils/test_client.py future-import-boilerplate!skip
tests/unit/module_utils/test_core.py future-import-boilerplate!skip
tests/unit/modules/test_helm_template_module.py future-import-boilerplate!skip
tests/unit/modules/test_helm_template.py future-import-boilerplate!skip
tests/unit/modules/test_module_helm.py future-import-boilerplate!skip
tests/unit/action/test_remove_omit.py future-import-boilerplate!skip
plugins/doc_fragments/k8s_name_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_auth_options.py metaclass-boilerplate!skip
plugins/doc_fragments/helm_common_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_state_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_wait_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_scale_options.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_delete_options.py metaclass-boilerplate!skip
plugins/doc_fragments/__init__.py metaclass-boilerplate!skip
plugins/doc_fragments/k8s_resource_options.py metaclass-boilerplate!skip
plugins/module_utils/helm.py metaclass-boilerplate!skip
plugins/module_utils/apply.py metaclass-boilerplate!skip
plugins/module_utils/hashes.py metaclass-boilerplate!skip
plugins/module_utils/helm_args_common.py metaclass-boilerplate!skip
plugins/module_utils/version.py metaclass-boilerplate!skip
plugins/module_utils/_version.py metaclass-boilerplate!skip
plugins/module_utils/copy.py metaclass-boilerplate!skip
plugins/module_utils/args_common.py metaclass-boilerplate!skip
plugins/module_utils/__init__.py metaclass-boilerplate!skip
plugins/module_utils/selector.py metaclass-boilerplate!skip
plugins/module_utils/k8sdynamicclient.py metaclass-boilerplate!skip
plugins/module_utils/common.py metaclass-boilerplate!skip
plugins/module_utils/ansiblemodule.py metaclass-boilerplate!skip
plugins/module_utils/exceptions.py metaclass-boilerplate!skip
plugins/module_utils/client/resource.py metaclass-boilerplate!skip
plugins/module_utils/client/discovery.py metaclass-boilerplate!skip
plugins/module_utils/k8s/resource.py metaclass-boilerplate!skip
plugins/module_utils/k8s/core.py metaclass-boilerplate!skip
plugins/module_utils/k8s/waiter.py metaclass-boilerplate!skip
plugins/module_utils/k8s/client.py metaclass-boilerplate!skip
plugins/module_utils/k8s/runner.py metaclass-boilerplate!skip
plugins/module_utils/k8s/service.py metaclass-boilerplate!skip
plugins/module_utils/k8s/exceptions.py metaclass-boilerplate!skip
plugins/connection/kubectl.py metaclass-boilerplate!skip
plugins/inventory/k8s.py metaclass-boilerplate!skip
plugins/lookup/k8s.py metaclass-boilerplate!skip
plugins/lookup/kustomize.py metaclass-boilerplate!skip
plugins/modules/k8s_scale.py metaclass-boilerplate!skip
plugins/modules/helm_template.py metaclass-boilerplate!skip
plugins/modules/k8s_exec.py metaclass-boilerplate!skip
plugins/modules/helm.py metaclass-boilerplate!skip
plugins/modules/helm_plugin_info.py metaclass-boilerplate!skip
plugins/modules/helm_info.py metaclass-boilerplate!skip
plugins/modules/helm_repository.py metaclass-boilerplate!skip
plugins/modules/k8s_rollback.py metaclass-boilerplate!skip
plugins/modules/k8s_log.py metaclass-boilerplate!skip
plugins/modules/k8s_drain.py metaclass-boilerplate!skip
plugins/modules/helm_plugin.py metaclass-boilerplate!skip
plugins/modules/k8s_taint.py metaclass-boilerplate!skip
plugins/modules/k8s.py metaclass-boilerplate!skip
plugins/modules/k8s_service.py metaclass-boilerplate!skip
plugins/modules/k8s_cluster_info.py metaclass-boilerplate!skip
plugins/modules/k8s_info.py metaclass-boilerplate!skip
plugins/modules/k8s_cp.py metaclass-boilerplate!skip
plugins/modules/__init__.py metaclass-boilerplate!skip
plugins/modules/k8s_json_patch.py metaclass-boilerplate!skip
plugins/action/k8s_info.py metaclass-boilerplate!skip
plugins/filter/k8s.py metaclass-boilerplate!skip
tests/unit/conftest.py metaclass-boilerplate!skip
tests/unit/utils/ansible_module_mock.py metaclass-boilerplate!skip
tests/unit/module_utils/test_helm.py metaclass-boilerplate!skip
tests/unit/module_utils/test_marshal.py metaclass-boilerplate!skip
tests/unit/module_utils/test_discoverer.py metaclass-boilerplate!skip
tests/unit/module_utils/test_hashes.py metaclass-boilerplate!skip
tests/unit/module_utils/test_resource.py metaclass-boilerplate!skip
tests/unit/module_utils/test_service.py metaclass-boilerplate!skip
tests/unit/module_utils/test_waiter.py metaclass-boilerplate!skip
tests/unit/module_utils/test_common.py metaclass-boilerplate!skip
tests/unit/module_utils/test_selector.py metaclass-boilerplate!skip
tests/unit/module_utils/test_apply.py metaclass-boilerplate!skip
tests/unit/module_utils/test_runner.py metaclass-boilerplate!skip
tests/unit/module_utils/test_client.py metaclass-boilerplate!skip
tests/unit/module_utils/test_core.py metaclass-boilerplate!skip
tests/unit/modules/test_helm_template_module.py metaclass-boilerplate!skip
tests/unit/modules/test_helm_template.py metaclass-boilerplate!skip
tests/unit/modules/test_module_helm.py metaclass-boilerplate!skip
tests/unit/action/test_remove_omit.py metaclass-boilerplate!skip
plugins/modules/k8s_scale.py import-2.6!skip
plugins/modules/k8s_scale.py import-2.7!skip
plugins/modules/k8s_scale.py import-3.5!skip
plugins/modules/helm_template.py import-2.6!skip
plugins/modules/helm_template.py import-2.7!skip
plugins/modules/helm_template.py import-3.5!skip
plugins/modules/k8s_exec.py import-2.6!skip
plugins/modules/k8s_exec.py import-2.7!skip
plugins/modules/k8s_exec.py import-3.5!skip
plugins/modules/helm.py import-2.6!skip
plugins/modules/helm.py import-2.7!skip
plugins/modules/helm.py import-3.5!skip
plugins/modules/helm_plugin_info.py import-2.6!skip
plugins/modules/helm_plugin_info.py import-2.7!skip
plugins/modules/helm_plugin_info.py import-3.5!skip
plugins/modules/helm_info.py import-2.6!skip
plugins/modules/helm_info.py import-2.7!skip
plugins/modules/helm_info.py import-3.5!skip
plugins/modules/helm_repository.py import-2.6!skip
plugins/modules/helm_repository.py import-2.7!skip
plugins/modules/helm_repository.py import-3.5!skip
plugins/modules/k8s_rollback.py import-2.6!skip
plugins/modules/k8s_rollback.py import-2.7!skip
plugins/modules/k8s_rollback.py import-3.5!skip
plugins/modules/k8s_log.py import-2.6!skip
plugins/modules/k8s_log.py import-2.7!skip
plugins/modules/k8s_log.py import-3.5!skip
plugins/modules/k8s_drain.py import-2.6!skip
plugins/modules/k8s_drain.py import-2.7!skip
plugins/modules/k8s_drain.py import-3.5!skip
plugins/modules/helm_plugin.py import-2.6!skip
plugins/modules/helm_plugin.py import-2.7!skip
plugins/modules/helm_plugin.py import-3.5!skip
plugins/modules/k8s_taint.py import-2.6!skip
plugins/modules/k8s_taint.py import-2.7!skip
plugins/modules/k8s_taint.py import-3.5!skip
plugins/modules/k8s.py import-2.6!skip
plugins/modules/k8s.py import-2.7!skip
plugins/modules/k8s.py import-3.5!skip
plugins/modules/k8s_service.py import-2.6!skip
plugins/modules/k8s_service.py import-2.7!skip
plugins/modules/k8s_service.py import-3.5!skip
plugins/modules/k8s_cluster_info.py import-2.6!skip
plugins/modules/k8s_cluster_info.py import-2.7!skip
plugins/modules/k8s_cluster_info.py import-3.5!skip
plugins/modules/k8s_info.py import-2.6!skip
plugins/modules/k8s_info.py import-2.7!skip
plugins/modules/k8s_info.py import-3.5!skip
plugins/modules/k8s_cp.py import-2.6!skip
plugins/modules/k8s_cp.py import-2.7!skip
plugins/modules/k8s_cp.py import-3.5!skip
plugins/modules/__init__.py import-2.6!skip
plugins/modules/__init__.py import-2.7!skip
plugins/modules/__init__.py import-3.5!skip
plugins/modules/k8s_json_patch.py import-2.6!skip
plugins/modules/k8s_json_patch.py import-2.7!skip
plugins/modules/k8s_json_patch.py import-3.5!skip
plugins/module_utils/helm.py import-2.6!skip
plugins/module_utils/helm.py import-2.7!skip
plugins/module_utils/helm.py import-3.5!skip
plugins/module_utils/apply.py import-2.6!skip
plugins/module_utils/apply.py import-2.7!skip
plugins/module_utils/apply.py import-3.5!skip
plugins/module_utils/hashes.py import-2.6!skip
plugins/module_utils/hashes.py import-2.7!skip
plugins/module_utils/hashes.py import-3.5!skip
plugins/module_utils/helm_args_common.py import-2.6!skip
plugins/module_utils/helm_args_common.py import-2.7!skip
plugins/module_utils/helm_args_common.py import-3.5!skip
plugins/module_utils/version.py import-2.6!skip
plugins/module_utils/version.py import-2.7!skip
plugins/module_utils/version.py import-3.5!skip
plugins/module_utils/_version.py import-2.6!skip
plugins/module_utils/_version.py import-2.7!skip
plugins/module_utils/_version.py import-3.5!skip
plugins/module_utils/copy.py import-2.6!skip
plugins/module_utils/copy.py import-2.7!skip
plugins/module_utils/copy.py import-3.5!skip
plugins/module_utils/args_common.py import-2.6!skip
plugins/module_utils/args_common.py import-2.7!skip
plugins/module_utils/args_common.py import-3.5!skip
plugins/module_utils/__init__.py import-2.6!skip
plugins/module_utils/__init__.py import-2.7!skip
plugins/module_utils/__init__.py import-3.5!skip
plugins/module_utils/selector.py import-2.6!skip
plugins/module_utils/selector.py import-2.7!skip
plugins/module_utils/selector.py import-3.5!skip
plugins/module_utils/k8sdynamicclient.py import-2.6!skip
plugins/module_utils/k8sdynamicclient.py import-2.7!skip
plugins/module_utils/k8sdynamicclient.py import-3.5!skip
plugins/module_utils/common.py import-2.6!skip
plugins/module_utils/common.py import-2.7!skip
plugins/module_utils/common.py import-3.5!skip
plugins/module_utils/ansiblemodule.py import-2.6!skip
plugins/module_utils/ansiblemodule.py import-2.7!skip
plugins/module_utils/ansiblemodule.py import-3.5!skip
plugins/module_utils/exceptions.py import-2.6!skip
plugins/module_utils/exceptions.py import-2.7!skip
plugins/module_utils/exceptions.py import-3.5!skip
plugins/module_utils/client/resource.py import-2.6!skip
plugins/module_utils/client/resource.py import-2.7!skip
plugins/module_utils/client/resource.py import-3.5!skip
plugins/module_utils/client/discovery.py import-2.6!skip
plugins/module_utils/client/discovery.py import-2.7!skip
plugins/module_utils/client/discovery.py import-3.5!skip
plugins/module_utils/k8s/resource.py import-2.6!skip
plugins/module_utils/k8s/resource.py import-2.7!skip
plugins/module_utils/k8s/resource.py import-3.5!skip
plugins/module_utils/k8s/core.py import-2.6!skip
plugins/module_utils/k8s/core.py import-2.7!skip
plugins/module_utils/k8s/core.py import-3.5!skip
plugins/module_utils/k8s/waiter.py import-2.6!skip
plugins/module_utils/k8s/waiter.py import-2.7!skip
plugins/module_utils/k8s/waiter.py import-3.5!skip
plugins/module_utils/k8s/client.py import-2.6!skip
plugins/module_utils/k8s/client.py import-2.7!skip
plugins/module_utils/k8s/client.py import-3.5!skip
plugins/module_utils/k8s/runner.py import-2.6!skip
plugins/module_utils/k8s/runner.py import-2.7!skip
plugins/module_utils/k8s/runner.py import-3.5!skip
plugins/module_utils/k8s/service.py import-2.6!skip
plugins/module_utils/k8s/service.py import-2.7!skip
plugins/module_utils/k8s/service.py import-3.5!skip
plugins/module_utils/k8s/exceptions.py import-2.6!skip
plugins/module_utils/k8s/exceptions.py import-2.7!skip
plugins/module_utils/k8s/exceptions.py import-3.5!skip
plugins/doc_fragments/k8s_name_options.py compile-2.6!skip
plugins/doc_fragments/k8s_name_options.py compile-2.7!skip
plugins/doc_fragments/k8s_name_options.py compile-3.5!skip
plugins/doc_fragments/k8s_auth_options.py compile-2.6!skip
plugins/doc_fragments/k8s_auth_options.py compile-2.7!skip
plugins/doc_fragments/k8s_auth_options.py compile-3.5!skip
plugins/doc_fragments/helm_common_options.py compile-2.6!skip
plugins/doc_fragments/helm_common_options.py compile-2.7!skip
plugins/doc_fragments/helm_common_options.py compile-3.5!skip
plugins/doc_fragments/k8s_state_options.py compile-2.6!skip
plugins/doc_fragments/k8s_state_options.py compile-2.7!skip
plugins/doc_fragments/k8s_state_options.py compile-3.5!skip
plugins/doc_fragments/k8s_wait_options.py compile-2.6!skip
plugins/doc_fragments/k8s_wait_options.py compile-2.7!skip
plugins/doc_fragments/k8s_wait_options.py compile-3.5!skip
plugins/doc_fragments/k8s_scale_options.py compile-2.6!skip
plugins/doc_fragments/k8s_scale_options.py compile-2.7!skip
plugins/doc_fragments/k8s_scale_options.py compile-3.5!skip
plugins/doc_fragments/k8s_delete_options.py compile-2.6!skip
plugins/doc_fragments/k8s_delete_options.py compile-2.7!skip
plugins/doc_fragments/k8s_delete_options.py compile-3.5!skip
plugins/doc_fragments/__init__.py compile-2.6!skip
plugins/doc_fragments/__init__.py compile-2.7!skip
plugins/doc_fragments/__init__.py compile-3.5!skip
plugins/doc_fragments/k8s_resource_options.py compile-2.6!skip
plugins/doc_fragments/k8s_resource_options.py compile-2.7!skip
plugins/doc_fragments/k8s_resource_options.py compile-3.5!skip
plugins/module_utils/helm.py compile-2.6!skip
plugins/module_utils/helm.py compile-2.7!skip
plugins/module_utils/helm.py compile-3.5!skip
plugins/module_utils/apply.py compile-2.6!skip
plugins/module_utils/apply.py compile-2.7!skip
plugins/module_utils/apply.py compile-3.5!skip
plugins/module_utils/hashes.py compile-2.6!skip
plugins/module_utils/hashes.py compile-2.7!skip
plugins/module_utils/hashes.py compile-3.5!skip
plugins/module_utils/helm_args_common.py compile-2.6!skip
plugins/module_utils/helm_args_common.py compile-2.7!skip
plugins/module_utils/helm_args_common.py compile-3.5!skip
plugins/module_utils/version.py compile-2.6!skip
plugins/module_utils/version.py compile-2.7!skip
plugins/module_utils/version.py compile-3.5!skip
plugins/module_utils/_version.py compile-2.6!skip
plugins/module_utils/_version.py compile-2.7!skip
plugins/module_utils/_version.py compile-3.5!skip
plugins/module_utils/copy.py compile-2.6!skip
plugins/module_utils/copy.py compile-2.7!skip
plugins/module_utils/copy.py compile-3.5!skip
plugins/module_utils/args_common.py compile-2.6!skip
plugins/module_utils/args_common.py compile-2.7!skip
plugins/module_utils/args_common.py compile-3.5!skip
plugins/module_utils/__init__.py compile-2.6!skip
plugins/module_utils/__init__.py compile-2.7!skip
plugins/module_utils/__init__.py compile-3.5!skip
plugins/module_utils/selector.py compile-2.6!skip
plugins/module_utils/selector.py compile-2.7!skip
plugins/module_utils/selector.py compile-3.5!skip
plugins/module_utils/k8sdynamicclient.py compile-2.6!skip
plugins/module_utils/k8sdynamicclient.py compile-2.7!skip
plugins/module_utils/k8sdynamicclient.py compile-3.5!skip
plugins/module_utils/common.py compile-2.6!skip
plugins/module_utils/common.py compile-2.7!skip
plugins/module_utils/common.py compile-3.5!skip
plugins/module_utils/ansiblemodule.py compile-2.6!skip
plugins/module_utils/ansiblemodule.py compile-2.7!skip
plugins/module_utils/ansiblemodule.py compile-3.5!skip
plugins/module_utils/exceptions.py compile-2.6!skip
plugins/module_utils/exceptions.py compile-2.7!skip
plugins/module_utils/exceptions.py compile-3.5!skip
plugins/module_utils/client/resource.py compile-2.6!skip
plugins/module_utils/client/resource.py compile-2.7!skip
plugins/module_utils/client/resource.py compile-3.5!skip
plugins/module_utils/client/discovery.py compile-2.6!skip
plugins/module_utils/client/discovery.py compile-2.7!skip
plugins/module_utils/client/discovery.py compile-3.5!skip
plugins/module_utils/k8s/resource.py compile-2.6!skip
plugins/module_utils/k8s/resource.py compile-2.7!skip
plugins/module_utils/k8s/resource.py compile-3.5!skip
plugins/module_utils/k8s/core.py compile-2.6!skip
plugins/module_utils/k8s/core.py compile-2.7!skip
plugins/module_utils/k8s/core.py compile-3.5!skip
plugins/module_utils/k8s/waiter.py compile-2.6!skip
plugins/module_utils/k8s/waiter.py compile-2.7!skip
plugins/module_utils/k8s/waiter.py compile-3.5!skip
plugins/module_utils/k8s/client.py compile-2.6!skip
plugins/module_utils/k8s/client.py compile-2.7!skip
plugins/module_utils/k8s/client.py compile-3.5!skip
plugins/module_utils/k8s/runner.py compile-2.6!skip
plugins/module_utils/k8s/runner.py compile-2.7!skip
plugins/module_utils/k8s/runner.py compile-3.5!skip
plugins/module_utils/k8s/service.py compile-2.6!skip
plugins/module_utils/k8s/service.py compile-2.7!skip
plugins/module_utils/k8s/service.py compile-3.5!skip
plugins/module_utils/k8s/exceptions.py compile-2.6!skip
plugins/module_utils/k8s/exceptions.py compile-2.7!skip
plugins/module_utils/k8s/exceptions.py compile-3.5!skip
plugins/connection/kubectl.py compile-2.6!skip
plugins/connection/kubectl.py compile-2.7!skip
plugins/connection/kubectl.py compile-3.5!skip
plugins/inventory/k8s.py compile-2.6!skip
plugins/inventory/k8s.py compile-2.7!skip
plugins/inventory/k8s.py compile-3.5!skip
plugins/lookup/k8s.py compile-2.6!skip
plugins/lookup/k8s.py compile-2.7!skip
plugins/lookup/k8s.py compile-3.5!skip
plugins/lookup/kustomize.py compile-2.6!skip
plugins/lookup/kustomize.py compile-2.7!skip
plugins/lookup/kustomize.py compile-3.5!skip
plugins/modules/k8s_scale.py compile-2.6!skip
plugins/modules/k8s_scale.py compile-2.7!skip
plugins/modules/k8s_scale.py compile-3.5!skip
plugins/modules/helm_template.py compile-2.6!skip
plugins/modules/helm_template.py compile-2.7!skip
plugins/modules/helm_template.py compile-3.5!skip
plugins/modules/k8s_exec.py compile-2.6!skip
plugins/modules/k8s_exec.py compile-2.7!skip
plugins/modules/k8s_exec.py compile-3.5!skip
plugins/modules/helm.py compile-2.6!skip
plugins/modules/helm.py compile-2.7!skip
plugins/modules/helm.py compile-3.5!skip
plugins/modules/helm_plugin_info.py compile-2.6!skip
plugins/modules/helm_plugin_info.py compile-2.7!skip
plugins/modules/helm_plugin_info.py compile-3.5!skip
plugins/modules/helm_info.py compile-2.6!skip
plugins/modules/helm_info.py compile-2.7!skip
plugins/modules/helm_info.py compile-3.5!skip
plugins/modules/helm_repository.py compile-2.6!skip
plugins/modules/helm_repository.py compile-2.7!skip
plugins/modules/helm_repository.py compile-3.5!skip
plugins/modules/k8s_rollback.py compile-2.6!skip
plugins/modules/k8s_rollback.py compile-2.7!skip
plugins/modules/k8s_rollback.py compile-3.5!skip
plugins/modules/k8s_log.py compile-2.6!skip
plugins/modules/k8s_log.py compile-2.7!skip
plugins/modules/k8s_log.py compile-3.5!skip
plugins/modules/k8s_drain.py compile-2.6!skip
plugins/modules/k8s_drain.py compile-2.7!skip
plugins/modules/k8s_drain.py compile-3.5!skip
plugins/modules/helm_plugin.py compile-2.6!skip
plugins/modules/helm_plugin.py compile-2.7!skip
plugins/modules/helm_plugin.py compile-3.5!skip
plugins/modules/k8s_taint.py compile-2.6!skip
plugins/modules/k8s_taint.py compile-2.7!skip
plugins/modules/k8s_taint.py compile-3.5!skip
plugins/modules/k8s.py compile-2.6!skip
plugins/modules/k8s.py compile-2.7!skip
plugins/modules/k8s.py compile-3.5!skip
plugins/modules/k8s_service.py compile-2.6!skip
plugins/modules/k8s_service.py compile-2.7!skip
plugins/modules/k8s_service.py compile-3.5!skip
plugins/modules/k8s_cluster_info.py compile-2.6!skip
plugins/modules/k8s_cluster_info.py compile-2.7!skip
plugins/modules/k8s_cluster_info.py compile-3.5!skip
plugins/modules/k8s_info.py compile-2.6!skip
plugins/modules/k8s_info.py compile-2.7!skip
plugins/modules/k8s_info.py compile-3.5!skip
plugins/modules/k8s_cp.py compile-2.6!skip
plugins/modules/k8s_cp.py compile-2.7!skip
plugins/modules/k8s_cp.py compile-3.5!skip
plugins/modules/__init__.py compile-2.6!skip
plugins/modules/__init__.py compile-2.7!skip
plugins/modules/__init__.py compile-3.5!skip
plugins/modules/k8s_json_patch.py compile-2.6!skip
plugins/modules/k8s_json_patch.py compile-2.7!skip
plugins/modules/k8s_json_patch.py compile-3.5!skip
plugins/action/k8s_info.py compile-2.6!skip
plugins/action/k8s_info.py compile-2.7!skip
plugins/action/k8s_info.py compile-3.5!skip
plugins/filter/k8s.py compile-2.6!skip
plugins/filter/k8s.py compile-2.7!skip
plugins/filter/k8s.py compile-3.5!skip
tests/unit/conftest.py compile-2.6!skip
tests/unit/conftest.py compile-2.7!skip
tests/unit/conftest.py compile-3.5!skip
tests/unit/utils/ansible_module_mock.py compile-2.6!skip
tests/unit/utils/ansible_module_mock.py compile-2.7!skip
tests/unit/utils/ansible_module_mock.py compile-3.5!skip
tests/unit/module_utils/test_helm.py compile-2.6!skip
tests/unit/module_utils/test_helm.py compile-2.7!skip
tests/unit/module_utils/test_helm.py compile-3.5!skip
tests/unit/module_utils/test_marshal.py compile-2.6!skip
tests/unit/module_utils/test_marshal.py compile-2.7!skip
tests/unit/module_utils/test_marshal.py compile-3.5!skip
tests/unit/module_utils/test_discoverer.py compile-2.6!skip
tests/unit/module_utils/test_discoverer.py compile-2.7!skip
tests/unit/module_utils/test_discoverer.py compile-3.5!skip
tests/unit/module_utils/test_hashes.py compile-2.6!skip
tests/unit/module_utils/test_hashes.py compile-2.7!skip
tests/unit/module_utils/test_hashes.py compile-3.5!skip
tests/unit/module_utils/test_resource.py compile-2.6!skip
tests/unit/module_utils/test_resource.py compile-2.7!skip
tests/unit/module_utils/test_resource.py compile-3.5!skip
tests/unit/module_utils/test_service.py compile-2.6!skip
tests/unit/module_utils/test_service.py compile-2.7!skip
tests/unit/module_utils/test_service.py compile-3.5!skip
tests/unit/module_utils/test_waiter.py compile-2.6!skip
tests/unit/module_utils/test_waiter.py compile-2.7!skip
tests/unit/module_utils/test_waiter.py compile-3.5!skip
tests/unit/module_utils/test_common.py compile-2.6!skip
tests/unit/module_utils/test_common.py compile-2.7!skip
tests/unit/module_utils/test_common.py compile-3.5!skip
tests/unit/module_utils/test_selector.py compile-2.6!skip
tests/unit/module_utils/test_selector.py compile-2.7!skip
tests/unit/module_utils/test_selector.py compile-3.5!skip
tests/unit/module_utils/test_apply.py compile-2.6!skip
tests/unit/module_utils/test_apply.py compile-2.7!skip
tests/unit/module_utils/test_apply.py compile-3.5!skip
tests/unit/module_utils/test_runner.py compile-2.6!skip
tests/unit/module_utils/test_runner.py compile-2.7!skip
tests/unit/module_utils/test_runner.py compile-3.5!skip
tests/unit/module_utils/test_client.py compile-2.6!skip
tests/unit/module_utils/test_client.py compile-2.7!skip
tests/unit/module_utils/test_client.py compile-3.5!skip
tests/unit/module_utils/test_core.py compile-2.6!skip
tests/unit/module_utils/test_core.py compile-2.7!skip
tests/unit/module_utils/test_core.py compile-3.5!skip
tests/unit/modules/test_helm_template_module.py compile-2.6!skip
tests/unit/modules/test_helm_template_module.py compile-2.7!skip
tests/unit/modules/test_helm_template_module.py compile-3.5!skip
tests/unit/modules/test_helm_template.py compile-2.6!skip
tests/unit/modules/test_helm_template.py compile-2.7!skip
tests/unit/modules/test_helm_template.py compile-3.5!skip
tests/unit/modules/test_module_helm.py compile-2.6!skip
tests/unit/modules/test_module_helm.py compile-2.7!skip
tests/unit/modules/test_module_helm.py compile-3.5!skip
tests/unit/action/test_remove_omit.py compile-2.6!skip
tests/unit/action/test_remove_omit.py compile-2.7!skip
tests/unit/action/test_remove_omit.py compile-3.5!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.6!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-2.7!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py compile-3.5!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.6!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-2.7!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py compile-3.5!skip
tests/integration/targets/helm/library/helm_test_version.py compile-2.6!skip
tests/integration/targets/helm/library/helm_test_version.py compile-2.7!skip
tests/integration/targets/helm/library/helm_test_version.py compile-3.5!skip
plugins/modules/k8s_scale.py pylint!skip
plugins/modules/helm_template.py pylint!skip
plugins/modules/k8s_exec.py pylint!skip
plugins/modules/helm.py pylint!skip
plugins/modules/helm_plugin_info.py pylint!skip
plugins/modules/helm_info.py pylint!skip
plugins/modules/helm_repository.py pylint!skip
plugins/modules/k8s_rollback.py pylint!skip
plugins/modules/k8s_log.py pylint!skip
plugins/modules/k8s_drain.py pylint!skip
plugins/modules/helm_plugin.py pylint!skip
plugins/modules/k8s_taint.py pylint!skip
plugins/modules/k8s.py pylint!skip
plugins/modules/k8s_service.py pylint!skip
plugins/modules/k8s_cluster_info.py pylint!skip
plugins/modules/k8s_info.py pylint!skip
plugins/modules/k8s_cp.py pylint!skip
plugins/modules/__init__.py pylint!skip
plugins/modules/k8s_json_patch.py pylint!skip
plugins/module_utils/helm.py pylint!skip
plugins/module_utils/apply.py pylint!skip
plugins/module_utils/hashes.py pylint!skip
plugins/module_utils/helm_args_common.py pylint!skip
plugins/module_utils/version.py pylint!skip
plugins/module_utils/_version.py pylint!skip
plugins/module_utils/copy.py pylint!skip
plugins/module_utils/args_common.py pylint!skip
plugins/module_utils/__init__.py pylint!skip
plugins/module_utils/selector.py pylint!skip
plugins/module_utils/k8sdynamicclient.py pylint!skip
plugins/module_utils/common.py pylint!skip
plugins/module_utils/ansiblemodule.py pylint!skip
plugins/module_utils/exceptions.py pylint!skip
plugins/module_utils/client/resource.py pylint!skip
plugins/module_utils/client/discovery.py pylint!skip
plugins/module_utils/k8s/resource.py pylint!skip
plugins/module_utils/k8s/core.py pylint!skip
plugins/module_utils/k8s/waiter.py pylint!skip
plugins/module_utils/k8s/client.py pylint!skip
plugins/module_utils/k8s/runner.py pylint!skip
plugins/module_utils/k8s/service.py pylint!skip
plugins/module_utils/k8s/exceptions.py pylint!skip
tests/integration/targets/k8s_copy/library/kubectl_file_compare.py pylint!skip
tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py pylint!skip
tests/integration/targets/helm/library/helm_test_version.py pylint!skip
tests/unit/conftest.py pylint!skip
tests/unit/utils/ansible_module_mock.py pylint!skip
tests/unit/module_utils/test_helm.py pylint!skip
tests/unit/module_utils/test_marshal.py pylint!skip
tests/unit/module_utils/test_discoverer.py pylint!skip
tests/unit/module_utils/test_hashes.py pylint!skip
tests/unit/module_utils/test_resource.py pylint!skip
tests/unit/module_utils/test_service.py pylint!skip
tests/unit/module_utils/test_waiter.py pylint!skip
tests/unit/module_utils/test_common.py pylint!skip
tests/unit/module_utils/test_selector.py pylint!skip
tests/unit/module_utils/test_apply.py pylint!skip
tests/unit/module_utils/test_runner.py pylint!skip
tests/unit/module_utils/test_client.py pylint!skip
tests/unit/module_utils/test_core.py pylint!skip
tests/unit/modules/test_helm_template_module.py pylint!skip
tests/unit/modules/test_helm_template.py pylint!skip
tests/unit/modules/test_module_helm.py pylint!skip
tests/unit/action/test_remove_omit.py pylint!skip
plugins/modules/k8s.py validate-modules!skip
plugins/modules/k8s_cp.py validate-modules!skip
plugins/modules/k8s_drain.py validate-modules!skip
plugins/modules/k8s_exec.py validate-modules!skip
plugins/modules/k8s_info.py validate-modules!skip
plugins/modules/k8s_json_patch.py validate-modules!skip
plugins/modules/k8s_log.py validate-modules!skip
plugins/modules/k8s_rollback.py validate-modules!skip
plugins/modules/k8s_scale.py validate-modules!skip
plugins/modules/k8s_service.py validate-modules!skip
plugins/modules/k8s_taint.py validate-modules!skip

View File

@@ -1,215 +0,0 @@
#!/usr/bin/env python3
import itertools
from pathlib import Path
# Mapping of Ansible versions to supported Python versions
ANSIBLE_VERSIONS = {
"2.9": ["3.6", "3.7", "3.8"],
"2.10": ["3.6", "3.7", "3.8", "3.9"],
"2.11": ["3.6", "3.7", "3.8", "3.9"],
"2.12": ["3.6", "3.7", "3.8", "3.9", "3.10"],
"2.13": ["3.6", "3.7", "3.8", "3.9", "3.10"],
"2.14": ["3.6", "3.7", "3.8", "3.9", "3.10"],
"2.15": ["3.6", "3.7", "3.8", "3.9", "3.10", "3.11"],
}
IMPORT_SKIPS = [
"plugins/module_utils/client/discovery.py",
"plugins/module_utils/client/resource.py",
"plugins/module_utils/k8sdynamicclient.py",
]
# Adds validate-modules:parameter-type-not-in-doc
PARAM_TYPE_SKIPS = [
"plugins/modules/k8s.py",
"plugins/modules/k8s_scale.py",
"plugins/modules/k8s_service.py",
]
# Adds validate-modules:return-syntax-error
RETURN_SYNTAX_SKIPS = [
"plugins/modules/k8s.py",
"plugins/modules/k8s_scale.py",
"plugins/modules/k8s_service.py",
"plugins/modules/k8s_taint.py",
]
YAML_LINT_SKIPS = [
"tests/unit/module_utils/fixtures/definitions.yml",
"tests/unit/module_utils/fixtures/deployments.yml",
"tests/unit/module_utils/fixtures/pods.yml",
"tests/integration/targets/helm/files/appversionless-chart-v2/templates/configmap.yaml",
"tests/integration/targets/helm/files/appversionless-chart/templates/configmap.yaml",
"tests/integration/targets/helm/files/test-chart-v2/templates/configmap.yaml",
"tests/integration/targets/helm/files/test-chart/templates/configmap.yaml",
"tests/integration/targets/helm_diff/files/test-chart/templates/configmap.yaml",
"tests/integration/targets/k8s_scale/files/deployment.yaml",
"tests/integration/targets/k8s_delete/files/deployments.yaml",
]
# Add shebang!skip
SHEBANG_SKIPS = [
"tests/sanity/refresh_ignore_files",
]
# Add validate-modules:import-error
VALIDATE_IMPORT_SKIPS = [
"plugins/modules/k8s.py",
"plugins/modules/k8s_cp.py",
"plugins/modules/k8s_drain.py",
"plugins/modules/k8s_exec.py",
"plugins/modules/k8s_info.py",
"plugins/modules/k8s_json_patch.py",
"plugins/modules/k8s_log.py",
"plugins/modules/k8s_rollback.py",
"plugins/modules/k8s_scale.py",
"plugins/modules/k8s_service.py",
"plugins/modules/k8s_taint.py",
]
def import_skips(*versions):
for f in IMPORT_SKIPS:
for v in versions:
yield f"{f} import-{v}!skip"
def param_type_skips(ansible_version):
if ansible_version not in ("2.9", "2.10"):
for f in PARAM_TYPE_SKIPS:
yield f"{f} validate-modules:parameter-type-not-in-doc"
def return_syntax_skips(ansible_version):
if ansible_version not in ("2.9", "2.10"):
for f in RETURN_SYNTAX_SKIPS:
yield f"{f} validate-modules:return-syntax-error"
else:
yield
def yaml_lint_skips():
for f in YAML_LINT_SKIPS:
yield f"{f} yamllint!skip"
def shebang_skips():
for f in SHEBANG_SKIPS:
yield f"{f} shebang!skip"
def import_boilerplate(path, ansible_version):
if ansible_version in ("2.9", "2.10", "2.11"):
for f in (p for p in path.glob("**/*.py") if not p.is_symlink()):
yield f"{f} future-import-boilerplate!skip"
else:
yield
def metaclass_boilerplate(path, ansible_version):
if ansible_version in ("2.9", "2.10", "2.11"):
for f in (p for p in path.glob("**/*.py") if not p.is_symlink()):
yield f"{f} metaclass-boilerplate!skip"
else:
yield
def unsupported_compile_skips(path, ansible_version):
"""This adds rules for compile skips for all unsupported versions of python.
These aren't needed for Ansible version 2.12+ as that can be managed on a
global level in tests/config.yml.
"""
if ansible_version in ("2.9", "2.10", "2.11"):
for f in (p for p in path.glob("**/*.py") if not p.is_symlink()):
yield (
f"{f} compile-2.6!skip\n"
f"{f} compile-2.7!skip\n"
f"{f} compile-3.5!skip"
)
def unsupported_import_skips(path, ansible_version):
"""This adds rules for import skips for all unsupported versions of python.
These aren't needed for Ansible version 2.12+ as that can be managed on a
global level in tests/config.yml.
"""
if ansible_version in ("2.9", "2.10", "2.11"):
if ansible_version in ("2.9", "2.10") and path.name == "plugins":
pathglob = itertools.chain(
path.joinpath("modules").glob("**/*.py"),
path.joinpath("module_utils").glob("**/*.py")
)
else:
pathglob = path.glob("**/*.py")
for f in (p for p in pathglob if not p.is_symlink()):
yield (
f"{f} import-2.6!skip\n"
f"{f} import-2.7!skip\n"
f"{f} import-3.5!skip"
)
def unsupported_pylint_skips(path, ansible_version):
"""This adds rules to skip pylint checks.
This is only a problem on Ansible version 2.9 and 2.10 with python 3.5,
but there's no way to restrict this to a specific version of python.
"""
if ansible_version in ("2.9", "2.10"):
pathglob = itertools.chain(
path.joinpath("plugins/modules").glob("**/*.py"),
path.joinpath("plugins/module_utils").glob("**/*.py"),
path.joinpath("tests").glob("**/*.py"),
)
for f in (p for p in pathglob if not p.is_symlink()):
yield f"{f} pylint!skip"
def unsupported_validate_modules_skips(ansible_version):
"""Disable validate-modules test.
Unfortunately, this is overly broad. Applying a validate-modules:import-error
skip fixes ansible 2.9 and python <3.6, but causes validation of the ignores
file itself to fail in python 3.6+. The only solution here is to simply
skip validate-modules altogether.
"""
if ansible_version in ("2.9", "2.10"):
for f in VALIDATE_IMPORT_SKIPS:
yield f"{f} validate-modules!skip"
def main():
target_dir = Path('.')
sanity_dir = target_dir / "tests" / "sanity"
plugins = target_dir / "plugins"
units = target_dir / "tests" / "unit"
integration = target_dir / "tests" / "integration"
for ansible, python in ANSIBLE_VERSIONS.items():
with open(sanity_dir / f"ignore-{ansible}.txt", "w") as fp:
ignores = itertools.chain(
import_skips(*python),
param_type_skips(ansible),
yaml_lint_skips(),
shebang_skips(),
return_syntax_skips(ansible),
import_boilerplate(plugins, ansible),
import_boilerplate(units, ansible),
metaclass_boilerplate(plugins, ansible),
metaclass_boilerplate(units, ansible),
unsupported_import_skips(plugins, ansible),
unsupported_compile_skips(plugins, ansible),
unsupported_compile_skips(units, ansible),
unsupported_compile_skips(integration, ansible),
unsupported_pylint_skips(target_dir, ansible),
unsupported_validate_modules_skips(ansible),
)
for f in filter(None, ignores):
fp.write(f + "\n")
if __name__ == "__main__":
main()

View File

@@ -200,6 +200,10 @@ def test_module_get_values(_ansible_helm_module, no_values, get_all):
'version.BuildInfo{Version:"v3.10.3", GitCommit:7870ab3ed4135f136eec, GoVersion:"go1.18.9"}',
"3.10.3",
),
(
'version.BuildInfo{Version:"v3.15.0-rc.1", GitCommit:"d7afa3b6b432c09a02cd07342e908ba5bed34940", GitTreeState:"clean", GoVersion:"go1.22.4"}',
"3.15.0-rc.1",
),
('Client: &version.Version{SemVer:"v3.12.3", ', "3.12.3"),
('Client: &version.Version{SemVer:"v3.12.3"', None),
],