diff options
Diffstat (limited to 'ansible_collections/kubernetes')
227 files changed, 4402 insertions, 3048 deletions
diff --git a/ansible_collections/kubernetes/core/.ansible-lint b/ansible_collections/kubernetes/core/.ansible-lint index f139e6a02..021b91886 100644 --- a/ansible_collections/kubernetes/core/.ansible-lint +++ b/ansible_collections/kubernetes/core/.ansible-lint @@ -1,7 +1,6 @@ --- profile: production -skip_list: - - meta-runtime[unsupported-version] + exclude_paths: - tests/integration - tests/sanity diff --git a/ansible_collections/kubernetes/core/.github/stale.yml b/ansible_collections/kubernetes/core/.github/stale.yml index 4c7afd27e..230cf78a6 100644 --- a/ansible_collections/kubernetes/core/.github/stale.yml +++ b/ansible_collections/kubernetes/core/.github/stale.yml @@ -12,6 +12,7 @@ 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: diff --git a/ansible_collections/kubernetes/core/.github/workflows/linters.yaml b/ansible_collections/kubernetes/core/.github/workflows/linters.yaml index 589bfa786..33c819d59 100644 --- a/ansible_collections/kubernetes/core/.github/workflows/linters.yaml +++ b/ansible_collections/kubernetes/core/.github/workflows/linters.yaml @@ -10,7 +10,7 @@ on: - main - stable-* tags: - - "*" + - '*' jobs: linters: @@ -21,4 +21,4 @@ jobs: - uses: actions/checkout@v4 - name: Run ansible-lint - uses: ansible/ansible-lint@v6.21.0 + uses: ansible/ansible-lint@v24.2.3 diff --git a/ansible_collections/kubernetes/core/.github/workflows/unit-tests.yaml b/ansible_collections/kubernetes/core/.github/workflows/unit-tests.yaml index 3f4ed52cd..19c8519b2 100644 --- a/ansible_collections/kubernetes/core/.github/workflows/unit-tests.yaml +++ b/ansible_collections/kubernetes/core/.github/workflows/unit-tests.yaml @@ -1,4 +1,3 @@ ---- name: Unit tests concurrency: group: ${{ github.workflow }}-${{ github.ref }} diff --git a/ansible_collections/kubernetes/core/CHANGELOG.rst b/ansible_collections/kubernetes/core/CHANGELOG.rst index 1cad02814..f93c131fc 100644 --- a/ansible_collections/kubernetes/core/CHANGELOG.rst +++ b/ansible_collections/kubernetes/core/CHANGELOG.rst @@ -4,26 +4,79 @@ Kubernetes Collection Release Notes .. contents:: Topics -v2.4.2 +v3.1.0 ====== Release Summary --------------- -fix resource discovery when complex subresources present +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). -v2.4.1 +v3.0.0 ====== Release Summary --------------- -The kubernetes.core 2.4.1 release includes several trivial bug fixes related to code sanity. +This major release drops support for ansible-core versions lower than 2.14, Python versions lower than 3.9 and updates python kubernetes library to 24.2.0, helm/kind-action to 1.8.0, kubernetes >= 1.24, along with bug fixes and minor changes. + +Minor Changes +------------- + +- helm - add ``reuse_values`` and ``reset_values`` support to helm module (https://github.com/ansible-collections/kubernetes.core/issues/394). +- k8s - add new option ``delete_all`` to support deletion of all resources when state is set to ``absent``. (https://github.com/ansible-collections/kubernetes.core/issues/504) +- k8s, k8s_info - add a hidden_fields option to allow fields to be hidden in the results of k8s and k8s_info +- k8s_drain - add ability to filter the list of pods to be drained by a pod label selector (https://github.com/ansible-collections/kubernetes.core/issues/474). + +Breaking Changes / Porting Guide +-------------------------------- + +- Remove support for ansible-core < 2.14 +- Update python kubernetes library to 24.2.0, helm/kind-action to 1.8.0, kubernetes >= 1.24. + +Deprecated Features +------------------- + +- k8s - the ``k8s`` inventory plugin has been deprecated and will be removed in release 4.0.0 (https://github.com/ansible-collections/kubernetes.core/issues/31). + +Bugfixes +-------- + +- helm - Put the chart_ref into quotes when running ``helm show chart``, ``helm upgrade`` and ``helm dependency update`` commands (https://github.com/ansible-collections/kubernetes.core/issues/653). +- helm - delete temporary file created when deploying chart with option ``release_values`` set (https://github.com/ansible-collections/kubernetes.core/issues/530). +- helm - fix issue occurring when uninstalling chart with statues others than ``deployed`` (https://github.com/ansible-collections/kubernetes.core/issues/319). +- helm - fix post_renderer argument breaking the helm deploy_command (https://github.com/ansible-collections/kubernetes.core/pull/586). +- helm - use post_renderer when checking ``changed`` status for a helm release (https://github.com/ansible-collections/kubernetes.core/pull/588). +- k8s_scale - clean handling of ResourceTimeout exception (https://github.com/ansible-collections/kubernetes.core/issues/583). +- k8s_scale - fix issue when scaling StatefulSets with ``updateStrategy=OnDelete`` (https://github.com/ansible-collections/kubernetes.core/issues/579). v2.4.0 ====== @@ -116,7 +169,7 @@ v2.3.1 Bugfixes -------- -- Catch exception raised when the process is waiting for resources (https://github.com/ansible-collections/kubernetes.core/issues/407). +- Catch expectation raised when the process is waiting for resources (https://github.com/ansible-collections/kubernetes.core/issues/407). - Remove `omit` placeholder when defining resource using template parameter (https://github.com/ansible-collections/kubernetes.core/issues/431). - k8s - fix the issue when trying to delete resources using label_selectors options (https://github.com/ansible-collections/kubernetes.core/issues/433). - k8s_cp - fix issue when using parameter local_path with file on managed node. (https://github.com/ansible-collections/kubernetes.core/issues/421). diff --git a/ansible_collections/kubernetes/core/FILES.json b/ansible_collections/kubernetes/core/FILES.json index df7a884ae..194bc9a29 100644 --- a/ansible_collections/kubernetes/core/FILES.json +++ b/ansible_collections/kubernetes/core/FILES.json @@ -46,7 +46,7 @@ "name": ".github/workflows/linters.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "079c550400fd4af5ae0bb846395300fb193163bcc9269a572bafd3e4bc8b2e06", + "chksum_sha256": "3da81e6c1c8702776456e17451f8a72e63311767231f93ae7d785bf56b11f1e7", "format": 1 }, { @@ -60,7 +60,7 @@ "name": ".github/workflows/unit-tests.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75fa5cf2ecf4f35b5b297c33fd1bd4ac17fcfff8061c784dcb4999190b7c1467", + "chksum_sha256": "bc13d9a63f26298cf1d165db4b0850e207bc7ac59c46f30cc8eeb0a9b273abf5", "format": 1 }, { @@ -74,7 +74,7 @@ "name": ".github/stale.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa6e60574b9fcbe36ec409ac30cc81977a2d97f2ee40335144ca5303cca983d3", + "chksum_sha256": "923b49f6fb8b325ea890d05a42537b3f9c5aaf26b64a704c0fef4b696aa6a4bb", "format": 1 }, { @@ -88,14 +88,14 @@ "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3393f1a989678a4b8583a8dcc30ff7d2c15374ebf48b676539a18ccc6fa5ec00", + "chksum_sha256": "a9dceb8816711232f8abe7c4507257d879f61468e572b7010c3f8f1f9f9a8bf2", "format": 1 }, { "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d32a71362725ba6d9cc3d550e9b7f5f338c6692e7840c052c87263d069a1afc4", + "chksum_sha256": "2903835efadf1f03f8a05ba8428d1530259e322d039dcd3edbe707bcaea82e3d", "format": 1 }, { @@ -179,28 +179,28 @@ "name": "docs/kubernetes.core.helm_info_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89adae8f40c2da10c350d9cfc1b3844104f9c8d51da2fbf13b9301cad91b5a96", + "chksum_sha256": "0e38e2d6b68d639a9975cdc22f2276174c31293921f0b4b607e59b887410c805", "format": 1 }, { "name": "docs/kubernetes.core.helm_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8e5c2ca7aa70bca9641dd290814de18d2ade93939cdbae64a7b7484a5418565", + "chksum_sha256": "f72ef09fa5348f0277f6c5ed28d858814855ae75ae926d7b0aaca203727576a0", "format": 1 }, { "name": "docs/kubernetes.core.helm_plugin_info_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51ba9800d8f92207fb2580158d75a05c942882fe237dfdbceb1b16014e13ef5d", + "chksum_sha256": "037b18c3a69faced12b6da2d709bb187d425d158bd83096038069450d9587fe8", "format": 1 }, { "name": "docs/kubernetes.core.helm_plugin_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9ed32e51ca564332c6c070793ed4950b9c52394f62f37416658988d5d16efd0", + "chksum_sha256": "aa30739edee6b5d56b381675fad5664f907b6552629c898ee7cf63f06e813aa4", "format": 1 }, { @@ -214,126 +214,126 @@ "name": "docs/kubernetes.core.helm_repository_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c7b2efcf6832cf1b53e9fec808449ae5ea973306ae2a3eeeed4ea7405327e06", + "chksum_sha256": "a9c1e4bbdbfe5fb137c9e019ae87b62332b0d2190a9686398a317420bed66f7f", "format": 1 }, { "name": "docs/kubernetes.core.helm_template_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70f91cecfcc664c8ac35b58ce351fbf2a8f3051608580b180c830ca617b4f856", + "chksum_sha256": "2394fafdd2cf7b174cf373a400b4880009940b25b60a7fa57bbda34a5b7a9f48", "format": 1 }, { "name": "docs/kubernetes.core.k8s_cluster_info_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "061da0cf6ce62e3ba49491f11533d76e4dc8073ca8a9dbee2d3c981ad56f3d70", + "chksum_sha256": "2c71c7e8d1eddb627e24c25844c90ed7ec4c60d9fd28dfec1b261ec60bc0e172", "format": 1 }, { "name": "docs/kubernetes.core.k8s_cp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3cb1cc05abdeaa923c87b17cff8b7c6d2aab7273b67ef6879f594cfc5ec1489d", + "chksum_sha256": "f405574e406eb7bd6961cb99f7173c795a256c13bbe24fa27d57c78fa2e4a012", "format": 1 }, { "name": "docs/kubernetes.core.k8s_drain_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b8e412c8036aa76e0ae785941b8bf317ab71296d910da6750b3793271607533c", + "chksum_sha256": "b60655b9ffca9e7e95cc339be18c857a8bcdd778c84b03cc936dc9aea6de2a3b", "format": 1 }, { "name": "docs/kubernetes.core.k8s_exec_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b0c29c1755d04f7be9391da36a1803b6040f18fe7efdd72a14051ad758ed9e5", + "chksum_sha256": "962734517240c963fe8508901aa9aae5a0daf7353b2a92f1f7378da2f101071e", "format": 1 }, { "name": "docs/kubernetes.core.k8s_info_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d26adc890f69739b4744ad88a1757cbf68fca96cf9b1394a7614ffc6760732b8", + "chksum_sha256": "eedd93d93fea7fcacae736db7068b5002094d6dbd81714783a2e310e551330e4", "format": 1 }, { "name": "docs/kubernetes.core.k8s_inventory.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f0e7072fe1ebf5e12870ba93e0de9bb571f3538322d60ee6925ac025023b4ff4", + "chksum_sha256": "6d970818f092674dec18fdbbe88cce8c212ee6764a2d9682ccd16e82e6696023", "format": 1 }, { "name": "docs/kubernetes.core.k8s_json_patch_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b628ee67825e39bf7517eae54e7c322968719807cf349ed650674c99c334607a", + "chksum_sha256": "b0bf0b27d352e9949d63e6fb51b95571aa88b6e9c462f9e6c0cc220ce0bdb42d", "format": 1 }, { "name": "docs/kubernetes.core.k8s_log_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "407fd3cf0c037d5a5226c554f5d318e549b9e9fb862b9835d958612a0f515f27", + "chksum_sha256": "1047340361d2224a1db230a9aa2ec5301a0d8b1393477f026ec95c6863b90d79", "format": 1 }, { "name": "docs/kubernetes.core.k8s_lookup.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fac344797caf1dcdf99adeec0a0d850d1fd74fbf46f3a226b52931f1fa6bca0d", + "chksum_sha256": "32af712f441235a30dda8cb7ca68212173056c3e29a6040a0b2a354c393e7874", "format": 1 }, { "name": "docs/kubernetes.core.k8s_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "890765b7b747dc2762b0683c704fec4d18ddac7daccb68e28a75cf9f79a47893", + "chksum_sha256": "96a24617bda42364e46c8489ae6e5e602a6707498bc46f3316f3c7ccf11a741a", "format": 1 }, { "name": "docs/kubernetes.core.k8s_rollback_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9fd9867dcd6be0868d7fb419b9ce930f6ecbbbf66af9e4ec22ba3c3ce8151d5c", + "chksum_sha256": "32007424eb6aefa7bfaee457fa4f7d00938bc104582ee96fa4e8009772403ddb", "format": 1 }, { "name": "docs/kubernetes.core.k8s_scale_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89d2cb58fcea0081652fd6a72f2370900cd9cd54b4444cc6a1cced61d505127e", + "chksum_sha256": "7b97791e906be358e9b64d6237920a02401b39e6b6f3bd9ef426c8bd5bc731aa", "format": 1 }, { "name": "docs/kubernetes.core.k8s_service_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a766b619b69267f29cab51baf780de200fa7fa2377fcda92585657e1dc849d0f", + "chksum_sha256": "d90f729010c2b0dd322a58d64c180ececebbc78fde26c21602d6bdd9b2e02a2f", "format": 1 }, { "name": "docs/kubernetes.core.k8s_taint_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d64a4250bdca5ac386fa4539fa837c7d89a26e63d24fc01777d1f2125b70f160", + "chksum_sha256": "7b8e2d98d5d82128f748096527150aaaf74eaab226c6af9f8d4277265577adfc", "format": 1 }, { "name": "docs/kubernetes.core.kubectl_connection.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cb93572ffd283a453b53bd8d100ce0949a6a6cdce850c5deecd22cafa0eb4e8", + "chksum_sha256": "9286d253650a63d78908c1525a78cca5adacdbbddbd41fc713302d3683724a9a", "format": 1 }, { "name": "docs/kubernetes.core.kustomize_lookup.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6006ecdeaec488a59651653d7c48c0f4d156f49fc3a12409f75a187eafb57b7", + "chksum_sha256": "2d5d4c59492231f560b574716592e02395e332f9b3c922d09ce1870a22d91f89", "format": 1 }, { @@ -347,7 +347,7 @@ "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84ea6841db16c04017807462ccb97131474b0a11d75d7b70233f3ae712983121", + "chksum_sha256": "7ea3ff6f907ecc449cbc9f2a327838184e129685588d9b9f4636c6448b35a7c8", "format": 1 }, { @@ -368,112 +368,112 @@ "name": "plugins/action/helm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/helm_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/helm_plugin.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/helm_plugin_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/helm_repository.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/k8s.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/k8s_cluster_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/k8s_cp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/k8s_drain.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/k8s_exec.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { - "name": "plugins/action/k8s_log.py", + "name": "plugins/action/k8s_json_patch.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { - "name": "plugins/action/k8s_rollback.py", + "name": "plugins/action/k8s_log.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { - "name": "plugins/action/k8s_scale.py", + "name": "plugins/action/k8s_rollback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { - "name": "plugins/action/k8s_service.py", + "name": "plugins/action/k8s_scale.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { - "name": "plugins/action/ks8_json_patch.py", + "name": "plugins/action/k8s_service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { "name": "plugins/action/k8s_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c8c0b75ee4f8568f7eb0aa93fbf0b1daeb8eb1ffe9d92e8cfc76a4e5d47cc20", + "chksum_sha256": "bce106e52469f1425d3119d613db91e18b5c4767dd90e1e22b189e665ccd351a", "format": 1 }, { @@ -487,7 +487,7 @@ "name": "plugins/connection/kubectl.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5895e521f261d2172764464c56e886ce61652bb8f9d0b88b51afb909da5d159f", + "chksum_sha256": "08e05362470ad358e2f8336bf2d47bb91e841d4fb070e807b2e675b7a9ffeab2", "format": 1 }, { @@ -508,56 +508,56 @@ "name": "plugins/doc_fragments/helm_common_options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a66b232cb2fa3c8a28498bd30389ca8f4ffd7ae97b70bfe601788d46779f9cb3", + "chksum_sha256": "9011bc4019bae2731ccc0c24951b02843d3d5abe41c0c55e463bbe75b2b7a166", "format": 1 }, { "name": "plugins/doc_fragments/k8s_auth_options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8d189a6ab2d0937cd572d2510823ecbe1a9742d5bed23a6406eae926aa1f7f7d", + "chksum_sha256": "5d4b12c4a93bffc9dd043c4bf3ed2eb4ec2b0f45aca28efcaaad02658ce11fe6", "format": 1 }, { "name": "plugins/doc_fragments/k8s_delete_options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e47df1b0ac656ad1b756b0628aeef1bbd47baa2dfbff643fd151467d0d18c97", + "chksum_sha256": "cf77963591ffb56b479367b4de340bf2b3b2af4f6aa1eb807e3241129e44f016", "format": 1 }, { "name": "plugins/doc_fragments/k8s_name_options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "293ef90ac4a1ad52677f22c747dda0d9e740c1a8e8c1fc783d110c2bbb35dc76", + "chksum_sha256": "47bad02cd0e7eec3382811941252a3668517ec70409ecdacd9ce53f63f5fe8cb", "format": 1 }, { "name": "plugins/doc_fragments/k8s_resource_options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "30875d624f093085908955fb0ff53ab73602e5dffa66cbcba32de0a3e48785b3", + "chksum_sha256": "74ea7ea72060387c19772261f7451f20e41953fd9ba4ac7fe23ef49df37094f9", "format": 1 }, { "name": "plugins/doc_fragments/k8s_scale_options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81ae1fe5c034a916cba915be2a35406d56340ead6a3189963911ebc93796d322", + "chksum_sha256": "1b86cf18b42651786e99d125bcc1bb0f0c3c67c954d19b548768389b6ea4ac30", "format": 1 }, { "name": "plugins/doc_fragments/k8s_state_options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "569e138705ec9b5bf2ba429cc0e71e87e4459cd1289470fb71e7436cd949f1c3", + "chksum_sha256": "8c3dc917d1da488bb1807a5c6b4e2a2fc50d45324ebbf0052207a4b964ec8bc8", "format": 1 }, { "name": "plugins/doc_fragments/k8s_wait_options.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3c86e0272f62fbfc49c1c5eeeb4d7c61d9726bcec5e8965ae5c77edcab97296", + "chksum_sha256": "bc9a393a2fa34fba1b4237a0087f1d0a9b3e0e9512fb5ba8a1c59688e59bdced", "format": 1 }, { @@ -571,7 +571,7 @@ "name": "plugins/filter/k8s.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "62fc604b3650ef08387c5127ec9f107d3e0bbd5019a3dcee49fdc77558bb59d1", + "chksum_sha256": "1732300a6c48e6e6e678ea2b1dffb4a22779c6c7fe04f9fe64fd397df08af7c1", "format": 1 }, { @@ -592,7 +592,7 @@ "name": "plugins/inventory/k8s.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "69faaca6259bbc1850c5efa053b84de457efc8b32e1ee8ce13cb0b815c8e52c8", + "chksum_sha256": "27d1adb4227f2c07c9bd79d11909df1a7f577ad698340d5c9e956cf1b9e47293", "format": 1 }, { @@ -606,14 +606,14 @@ "name": "plugins/lookup/k8s.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b24cf87c1463e091f41879aa2117b532dc481b74f7e9999cd049cdb5a8ee1ac", + "chksum_sha256": "71dec0a63377e83cd66fe74cf88464ee1c78b498af6f369e8fb3e171a92d2ae7", "format": 1 }, { "name": "plugins/lookup/kustomize.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf1be05e740300ccb2d9a64f89024f8e645e9a3f33d921abd4c9e7e139645785", + "chksum_sha256": "b8b6ca236d007ce4ca03bf1e31ec5e5a10c360a8cdff5933006ab23b21948e8f", "format": 1 }, { @@ -634,7 +634,7 @@ "name": "plugins/module_utils/client/discovery.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f9af2ebc4962d187531400fb80e34168c9d35412b7045c8c27ab1330d59852cf", + "chksum_sha256": "d30f9c5a9c90972264289b0e5cee95effe9319595e23aeaa4e079afeb716338a", "format": 1 }, { @@ -655,14 +655,14 @@ "name": "plugins/module_utils/k8s/client.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f7428c830e53238c9682715651d3a125d172bea223970d851cc823291bb84c17", + "chksum_sha256": "0056d2093cab9094eaa5cbeccd9256317f61f5c50d5044b2baf30dc5ba94fd97", "format": 1 }, { "name": "plugins/module_utils/k8s/core.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "55a0a8cceda4e9ca604fe724af5d6cf82d9e382d138b110ac5d7ba9b073549d5", + "chksum_sha256": "a54455932f24cd7580024e2058e290414fcad3b597332d4b0627b8898b3b95c3", "format": 1 }, { @@ -676,28 +676,28 @@ "name": "plugins/module_utils/k8s/resource.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf5d3132b51a4b725c11cd9a69bc75274663059234b56a6231271bf8c23bcaef", + "chksum_sha256": "78f2e91fa52267f93d7f72191bdddcffaf92c9a9978c5c923f8f5912f3691fb6", "format": 1 }, { "name": "plugins/module_utils/k8s/runner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d1a9e22e30f2a1faf0d84687d5181517fda5844c97003e0d24e4b024d7412dd", + "chksum_sha256": "b2f5e05be622a194b431c8dc0ad28b3dc88e6c6d5a0143d77ed74438c4fc53f1", "format": 1 }, { "name": "plugins/module_utils/k8s/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f3c774651fac14bfd191bff16e5c374049dd434880d63ca9a7a1b4dbde7bd7b", + "chksum_sha256": "ecf3dbe6b2e55701a62ac8796d4b1fc5174673d89a0bc892c4472a61c2278c0e", "format": 1 }, { "name": "plugins/module_utils/k8s/waiter.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5c11459d7e02516b111cb64a5e31cf3afa1d9a9ffadfbc87ab477d5684d49d7", + "chksum_sha256": "00aaf46f557298aec65db2efefc1f749753136e37d4d58de1ec52d1ef0f960e6", "format": 1 }, { @@ -718,14 +718,14 @@ "name": "plugins/module_utils/ansiblemodule.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6a42da6322ac61fc8c0d86a9b60c4ad4255a2ba19d0c69a139c80ace2773e4f", + "chksum_sha256": "cde56b067dc7815d559ff8eb2335ad50ef43fc92fcc50812b44c61fb4b854ba6", "format": 1 }, { "name": "plugins/module_utils/apply.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d13b411d95075d9aca971d7c4badd496a981011903d08f93ae0cd62f73968d10", + "chksum_sha256": "769c127e1015586d75ccab76ab1e56dcd286de42073074c15c2b0472e0956e4c", "format": 1 }, { @@ -739,14 +739,14 @@ "name": "plugins/module_utils/common.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ba4d32d44ef9366cb5f181a91692f269aac5f4ccc4c971237ac720a1c47cbe3", + "chksum_sha256": "b90c5e00a256b1a968b03ae1fc119a11b11a50cffc4cfc19c8609a4c1d6ce9fd", "format": 1 }, { "name": "plugins/module_utils/copy.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e225cb19d811f0eb677f624db73f65ff5ead23e3701b7a266a9d5d03a3e99151", + "chksum_sha256": "aec7f7effed09d03fe2b8b4218e51d6b3c921a01c05e0c2d26a58e90e35f708a", "format": 1 }, { @@ -760,14 +760,14 @@ "name": "plugins/module_utils/hashes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8495aceb22009f8529c1f5a82f4c338d9a727d23d0a85f7386183609c9e34c5c", + "chksum_sha256": "a8ccce48ad134285d61384ea7598c1efdbd9ae4222e0566d154d86ecbfa3a02e", "format": 1 }, { "name": "plugins/module_utils/helm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "03c4cccb138537a8291f32025575c7ccc1a6b903b84a9f492851a1e2d07c2a07", + "chksum_sha256": "d38bca9cd97f41fad4d4d41d9f174b9e31c54924ead73b36b81ba273ec45f87f", "format": 1 }, { @@ -781,14 +781,14 @@ "name": "plugins/module_utils/k8sdynamicclient.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c58236ebcf4a9d39ccce1fb9f0084c716596fa269557553db1d421f9769c1088", + "chksum_sha256": "6b44b539981affc25ede49cc8a7f994fe19b5c60aaa1e400a480e735f7ed1be6", "format": 1 }, { "name": "plugins/module_utils/selector.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a912a35f5014bdf2a30625614b05acd2d71fabaea2b980bb4f6b110151e3e345", + "chksum_sha256": "d5e15a8ac4f916ee4b578450449a525dbda727b77178941a81c21e9e228e7987", "format": 1 }, { @@ -816,133 +816,133 @@ "name": "plugins/modules/helm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1213cd7c02f4e2f28f4126c74e3145dfbd4b04185fb74c3a3b930f49ffbaaac1", + "chksum_sha256": "24809d4f0d94f2acc0d9de7c3858804a6ecfe17d8c2b9a182431ce381ef1a84a", "format": 1 }, { "name": "plugins/modules/helm_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f2140cb6d7a692eed5feb96859e0099e23b497cd377a91c51579e5dc361d182", + "chksum_sha256": "86cad6e59f97bdcbebbf53eeb0ea9eaf7a031eef477ecd76bf109cb872c7fa1e", "format": 1 }, { "name": "plugins/modules/helm_plugin.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0425eaf1efe23f6d9eb6812300d0525eee18c769e80c6c74e193ee376c05901b", + "chksum_sha256": "c99d47fc5fcffafc060416fae69f740b6d18700f00843f0de2315eb32432c113", "format": 1 }, { "name": "plugins/modules/helm_plugin_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80794a520c59990974d93c32d813ecee8de50b2cb36ababde183ee5db62c8cfa", + "chksum_sha256": "42afe7b57c92837736d4df8f9e48fe3b71c2f529970acb65ad6b6fb5cf8e0148", "format": 1 }, { "name": "plugins/modules/helm_pull.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da8a930e40e61287c5da5a1e4c15c29907d8330d060b89ecdc3a238855553c03", + "chksum_sha256": "9273b4acaacb7b74943c1cd84b583a11aa605cc24bad1c7d78b2a219f5558303", "format": 1 }, { "name": "plugins/modules/helm_repository.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d348193a38287251a86a8efb47a52d26fdae877447dc9933a1ee14281e9d3ee", + "chksum_sha256": "d248b9c1339b7265266f9d9956eca41edbb47d54ba7459cc5862fc98061bcb89", "format": 1 }, { "name": "plugins/modules/helm_template.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fee5bdfcf7a99492b9b5dc4c86e62505b87d79c76450e09bbb323915aab5848f", + "chksum_sha256": "ad6faef74432361e5ff03669553cfa7d4ff87e07ec6a0bb69fb65e38cf7de3ac", "format": 1 }, { "name": "plugins/modules/k8s.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61802b08c5cebba766fb8a9f2d950aad7a8eff2489eb5958d6dd1d897884fc90", + "chksum_sha256": "8f1e954707d0f04d4f18796a146c9d9b38ab54f83b209b899292711c93fe18af", "format": 1 }, { "name": "plugins/modules/k8s_cluster_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a04f656c51d094f1acb7b347d39da19ab3c46b35de9f07f23b9910ae601665f7", + "chksum_sha256": "0616d8c6ac9c83a572a1afe2d7cc68f5870bfac77a618171f003b9eb25c5877c", "format": 1 }, { "name": "plugins/modules/k8s_cp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f5cd6f3791bfb5856900f4d3c24bb7dc4c2f895e89c619a0e1480b3634c75330", + "chksum_sha256": "8f19067c472d4761792fdbf93578c9224714bf241bf0eae4015892589ce3c237", "format": 1 }, { "name": "plugins/modules/k8s_drain.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8501728be21a5dea5f91fd97ea5cc1f840a85d8a545899f026d2bc5971b306db", + "chksum_sha256": "b08836133883d3d1fe219a8edc0eb97137046f29df8cef5c2ae246bb2b1ac8c0", "format": 1 }, { "name": "plugins/modules/k8s_exec.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e85e93a987900104d20a7c8ed736df1a720c072dd181d4a092fb5344e08257a", + "chksum_sha256": "81f3fa756696852814f241a06dc95c6dad16acf9fe3e43e08696876d8fb6c08d", "format": 1 }, { "name": "plugins/modules/k8s_info.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b7b67467c41866e95eac0c74f914ce0f5c073d4fbb1c2ca93cfc310d31384049", + "chksum_sha256": "573d7d612c588820f615e0fd3f188a646d74d17636f56c560caf8c3f801296d4", "format": 1 }, { "name": "plugins/modules/k8s_json_patch.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "44097a47c792a7899ff04788d0f958a1819194224a5588eb5a5db5f448722be7", + "chksum_sha256": "4475cdf40cec8277e690fab7627b9a40bb567e9f53ac728db49742fed18362b6", "format": 1 }, { "name": "plugins/modules/k8s_log.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d855aec3ee0be16af005b6371e2eb887f6eca8983af4d520d6a6733246540b53", + "chksum_sha256": "fc05e30eb060ff3bce8403eeb5f9748ab82242ef28a34dfe5ae20227e57fcbc5", "format": 1 }, { "name": "plugins/modules/k8s_rollback.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e9ff60598e33faa157b6c4c04e95002a162becd56286400cb9aaa7c5432f1cfe", + "chksum_sha256": "f8bf4bf26cc8634882fd70e704cef6033642a15a316a4859cc03544fd3c31013", "format": 1 }, { "name": "plugins/modules/k8s_scale.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4a04c19741cd4834c8a1926790fc0d94e7fbea8c3e15daa42ac47da4bd63049", + "chksum_sha256": "cf508fa2f02619293fa664cf55531d5dd1b15d8d35f2bfe382fdc9f756a826c3", "format": 1 }, { "name": "plugins/modules/k8s_service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "da88e5c089db282cf1413ff002a6e781c7f05a54689c992494b52b9054689a41", + "chksum_sha256": "079bdfa6f65254fc1547b985e4713d25e6c5ff9c28332b9358e7a4456ff57979", "format": 1 }, { "name": "plugins/modules/k8s_taint.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec21f39fd4efd743655d36a8091c24b7bfcd76af239cb5cb068415fad9552517", + "chksum_sha256": "85d951125ea30ae907d40e79ef22d6e6be5aa5613cfa561de361be7ad5bb30ec", "format": 1 }, { @@ -984,7 +984,7 @@ "name": "tests/integration/targets/helm/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4f8b1fa71279ad05526d564d79582b3be0ea406397bdde007f7f84cf557fc063", + "chksum_sha256": "3e0c593e7f65eb2019aa6a6f94163b8f0fc2f03d31825a4c5cf62e24f89da653", "format": 1 }, { @@ -1170,10 +1170,17 @@ "format": 1 }, { + "name": "tests/integration/targets/helm/library/helm_test_pending.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6d99fe79d8191d5e488830d12fec57dd24b0273c5fc1fe78e10ec058d86c4132", + "format": 1 + }, + { "name": "tests/integration/targets/helm/library/helm_test_version.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fb24cdcfd0d0e43450817fb51e96c4e78cc9ed74a4d65493a5c31e71398e2fee", + "chksum_sha256": "8d0a65aa2d47d2222ba3f40a29d8cabce93e7f7bbaef2e302fcb2907d91e326d", "format": 1 }, { @@ -1243,7 +1250,7 @@ "name": "tests/integration/targets/helm/tasks/run_test.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "951714c0c82ed7edc2c3217592668cd6d0e89dca1b04347d6bd5261ba5475412", + "chksum_sha256": "0e9631dc89e0aead697db7cbf7c968fac4b01501aa54f35bafbc067a18c952cc", "format": 1 }, { @@ -1261,10 +1268,24 @@ "format": 1 }, { + "name": "tests/integration/targets/helm/tasks/test_helm_reuse_values.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "048db343560977f14b89320b1e2acb80185e91637b69d2588bb44116ae409f33", + "format": 1 + }, + { "name": "tests/integration/targets/helm/tasks/test_helm_uninstall.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b7b2a8d5ec8bda414225cadc593308480165473842b3d6b7eacbbc77bd68d64", + "chksum_sha256": "035a1fdd23c55e2ddb2c6d75adec68efef3abe139410abfc6140965d08b04628", + "format": 1 + }, + { + "name": "tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6e00ad23adf106e55dd37273edd6797f92011f969d6ad7a826377604ddca0691", "format": 1 }, { @@ -1296,6 +1317,20 @@ "format": 1 }, { + "name": "tests/integration/targets/helm/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b5301d16a79e8fafbd41f45eed94ab9428023557601dbd9d965a6216a3d5ae17", + "format": 1 + }, + { + "name": "tests/integration/targets/helm/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/helm_diff", "ftype": "dir", "chksum_type": null, @@ -1324,6 +1359,41 @@ "format": 1 }, { + "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9925ce72f89a09a39d3d77aae5c40c89eeea7dcc1b6175cc9bbc86be72463539", + "format": 1 + }, + { + "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f0caead20030f65c7f90d5b3a061c310a2ec565290d929349b4707d6f26e28ac", + "format": 1 + }, + { + "name": "tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1b49985939a64d6dcef87ff60f5ee46112c9462f468a686d3ea9ddcd82b4042c", + "format": 1 + }, + { "name": "tests/integration/targets/helm_diff/files/test-chart", "ftype": "dir", "chksum_type": null, @@ -1376,7 +1446,14 @@ "name": "tests/integration/targets/helm_diff/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e369b170ddb55919f665ffb224c8cbef7df5713b8961a9b016524cc0f8b9b43f", + "chksum_sha256": "2f481b9008eef657e61f46b3604d8fa00480f1d988c7bc17e9bad6cc0c370fb9", + "format": 1 + }, + { + "name": "tests/integration/targets/helm_diff/tasks/reuse_values.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "101840c2bc4fcda18ad657055483c43b287a163c942d15a2b14e227875e97215", "format": 1 }, { @@ -1387,6 +1464,20 @@ "format": 1 }, { + "name": "tests/integration/targets/helm_diff/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5cc7722bb3690e2c2a3ef3259ee5ba795e5096a7fe07df8e65b58d176ff5f82a", + "format": 1 + }, + { + "name": "tests/integration/targets/helm_diff/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/helm_kubeconfig", "ftype": "dir", "chksum_type": null, @@ -1418,7 +1509,7 @@ "name": "tests/integration/targets/helm_kubeconfig/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "706a0802afe247b21d705adcf9438b038b0d27a20202880fd729aaa46ee4e419", + "chksum_sha256": "c62410da25d2dbb4bc0c82bd69412598750a7b3f12e1dfdf357e750cd7efb78e", "format": 1 }, { @@ -1471,6 +1562,20 @@ "format": 1 }, { + "name": "tests/integration/targets/helm_kubeconfig/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3b8efae56c9317b22dd7da982cae9024de2bfd3b2942e6b7ecd3a9ac5f382d10", + "format": 1 + }, + { + "name": "tests/integration/targets/helm_kubeconfig/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/helm_plugin", "ftype": "dir", "chksum_type": null, @@ -1548,6 +1653,20 @@ "format": 1 }, { + "name": "tests/integration/targets/helm_plugin/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44d41a91eb0dc703b1c388c388ef381ba8a9f43f8aaf6e5800ec4dd742049cff", + "format": 1 + }, + { + "name": "tests/integration/targets/helm_plugin/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/helm_pull", "ftype": "dir", "chksum_type": null, @@ -1576,6 +1695,20 @@ "format": 1 }, { + "name": "tests/integration/targets/helm_pull/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7d34b496a58b4f9ab9e878db3a005420a41990059c01c6d9557b9ce715493960", + "format": 1 + }, + { + "name": "tests/integration/targets/helm_pull/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/helm_repository", "ftype": "dir", "chksum_type": null, @@ -1632,6 +1765,20 @@ "format": 1 }, { + "name": "tests/integration/targets/helm_repository/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7e9a1c0bca295a21b11e94e545e91c0f7b06491a7dec984a7343a2d8048ed5b5", + "format": 1 + }, + { + "name": "tests/integration/targets/helm_repository/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/helm_set_values", "ftype": "dir", "chksum_type": null, @@ -1663,7 +1810,7 @@ "name": "tests/integration/targets/helm_set_values/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "706a0802afe247b21d705adcf9438b038b0d27a20202880fd729aaa46ee4e419", + "chksum_sha256": "c62410da25d2dbb4bc0c82bd69412598750a7b3f12e1dfdf357e750cd7efb78e", "format": 1 }, { @@ -1688,6 +1835,20 @@ "format": 1 }, { + "name": "tests/integration/targets/helm_set_values/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4d1bccf02290fec6f13aa79d5e20e2d525d760afbfa6e2dbdc0803a2957e1e36", + "format": 1 + }, + { + "name": "tests/integration/targets/helm_set_values/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/install_helm", "ftype": "dir", "chksum_type": null, @@ -1796,7 +1957,7 @@ "name": "tests/integration/targets/inventory_k8s/runme.sh", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5415aa52dcafe384fbd790cc1af78830c102d68eb355b5cbf757fa0c86a953e7", + "chksum_sha256": "eb45e4409fecf9bd8bd95c1d6f740dc8b0911face5db181ac51190f2f12bff4d", "format": 1 }, { @@ -1828,6 +1989,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_access_review/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "676de1495c95f4765a77a30ca28d639903ec4fcfdddbb1a2f8f05202951bf816", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_access_review/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_append_hash", "ftype": "dir", "chksum_type": null, @@ -1884,6 +2059,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_append_hash/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eabe5d163b726a4e0d09ef22d5f7ab345d99c42e63f63904c783b705ab9f77af", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_append_hash/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_apply", "ftype": "dir", "chksum_type": null, @@ -1947,6 +2136,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_apply/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c9e8505b682cfd25777f7db45392b56147d42fa547151112d22873f2f19c4ddc", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_apply/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_check_mode", "ftype": "dir", "chksum_type": null, @@ -2010,6 +2213,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_check_mode/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f8bb62dba8c6f0795d499169d495f30d8e13bc57f3b6a76c38201e1e0543e0d2", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_check_mode/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_cluster_info", "ftype": "dir", "chksum_type": null, @@ -2038,6 +2255,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_cluster_info/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "230c51ed36ca2856bbdb0e96139307712e98eef752d337d7b243d38162dc78e8", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_cluster_info/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_copy", "ftype": "dir", "chksum_type": null, @@ -2143,17 +2374,10 @@ "format": 1 }, { - "name": "tests/integration/targets/k8s_copy/library/k8s_create_file.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "93f30185ab7c1555eedf7d2a1644459e429098a5a6cd29b655f46e5e986b80d4", - "format": 1 - }, - { "name": "tests/integration/targets/k8s_copy/library/kubectl_file_compare.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b0ac3c26cf1fa994d208e31fddd30dc0df0efc4a8d759e6dc4be8065a743b7fc", + "chksum_sha256": "2e96dd9e8b2cee2bd4c575a1905377de5e68f1dfa849c1091139779f6c122a3b", "format": 1 }, { @@ -2223,7 +2447,7 @@ "name": "tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91ac7bdf37253df75fc425266714bacc2a99a3d69d126429851f816b152a26e2", + "chksum_sha256": "63e1e76b75b383def9da4da09248d7136c5b6e8ca2936ff4aa58265c5b7ca90e", "format": 1 }, { @@ -2255,6 +2479,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_copy/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1af734f87b0761897551399745d2e4a337a02a54cd08808d2ae62590564a1e3c", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_copy/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_crd", "ftype": "dir", "chksum_type": null, @@ -2332,6 +2570,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_crd/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7933d29b81246a08c584af68f59844114f07cb501d1f6103c826c03d1aeb7c82", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_crd/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_delete", "ftype": "dir", "chksum_type": null, @@ -2353,6 +2605,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_delete/files", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_delete/files/deployments.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ed446e5873aea240cdb494e19664ea560f9e8b37081a959f3e3f6ebb861ae2bd", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_delete/meta", "ftype": "dir", "chksum_type": null, @@ -2377,7 +2643,7 @@ "name": "tests/integration/targets/k8s_delete/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b24137238beb8cc3cbfb0a6bd54bf7edbc47c888d5386955e62f23d5269d593", + "chksum_sha256": "764c6509bb41fd1834de668bd095a92e1611976701a02bd67bae3a1897d5ea09", "format": 1 }, { @@ -2388,6 +2654,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_delete/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "57f8b9a17861725f061c50803742607ab38e5cc52d568f0770b8f1c801d04d56", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_delete/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_diff", "ftype": "dir", "chksum_type": null, @@ -2458,6 +2738,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_diff/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cd0cd1ea502aa343fcc37661a7e82dc7e4c1630684b1c9c86a62a8ecc2624d14", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_diff/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_drain", "ftype": "dir", "chksum_type": null, @@ -2503,7 +2797,7 @@ "name": "tests/integration/targets/k8s_drain/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "497fcfe822f26afc3b5f3841848ad69bd0e937c6d820833e956f64961d6e6d2f", + "chksum_sha256": "1e3f9c80f5dcb0bd0d519d7f1c44ff4c858fdc6db47267bd20a9c3f05985991d", "format": 1 }, { @@ -2514,6 +2808,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_drain/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0f3b1a904d40487a3aabca3d0cf382fae369bc3a1ec0114c053bc65b1356ea6f", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_drain/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_exec", "ftype": "dir", "chksum_type": null, @@ -2570,6 +2878,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_exec/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "67b65b83642110a67a88b4136141ad0d788c121382da039faf79ca3079686793", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_exec/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_full", "ftype": "dir", "chksum_type": null, @@ -2626,6 +2948,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_full/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "809ffad70bedeb3e91fc07fa8eb94744c054eb4866a1dda465fa93cd3d0e6906", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_full/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_gc", "ftype": "dir", "chksum_type": null, @@ -2682,6 +3018,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_gc/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "422848575978d033202ef6d05bbba54509a5af01cbc62bf694a55a9e606e3b58", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_gc/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_generate_name", "ftype": "dir", "chksum_type": null, @@ -2710,6 +3060,90 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_generate_name/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3bb24f0cb8e2361932b20de62da1a984bd9c01ce2d456a109925b6e6a97648de", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_generate_name/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b02007b67dc813a28f59017eee61cb5596b949c747fd39a68bc48632844828ef", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a5f181f2a4fac30b6ab1513fe8607539e30b4d95d68d7de29a56905844f28998", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3f6774bc7b9dce71ceb6d95d0a0f2aebb0b0f3dba3670d67251a8480fafc6bc8", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields/aliases", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6fa0cf6146c6cf230ad5a94dcd9b8a431ea32ff4949f95305c2fa5f42a322cf2", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4a7d83a4a0c2cfb420c3805ec9eb633c0cdefe90c9b1bdb048ca48ec96db97d8", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_hide_fields/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8d7fd83a50323c8866adf44163eaac5ead0a7bcfe31f26ddc13623beed087814", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_info", "ftype": "dir", "chksum_type": null, @@ -2776,7 +3210,7 @@ "name": "tests/integration/targets/k8s_info/tasks/wait.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "396d2ee6262c763600d91b36df4815a8d7c4981337ddf4fedf0f93c61eaf6c09", + "chksum_sha256": "f4252ee1051f1e41126ac7c4cfec78fa1ce2a7eb95c23b4c5bae9bece253af30", "format": 1 }, { @@ -2787,6 +3221,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_info/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ee26ce3444252ae7154fd71a14d174dd980e3ad7f61a196130eb997509ee8c71", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_info/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_json_patch", "ftype": "dir", "chksum_type": null, @@ -2843,6 +3291,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_json_patch/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2718a2f0fdcb21e56340d5dd44a0bb4a9dc040b9097a54fd0ea9756e470cc14a", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_json_patch/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_label_selectors", "ftype": "dir", "chksum_type": null, @@ -2899,6 +3361,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_label_selectors/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d7ef4e3d1a1cece989d1c170ce05f5715aa89eb651c6c03c9a87d691c5ecbccb", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_label_selectors/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_lists", "ftype": "dir", "chksum_type": null, @@ -2955,6 +3431,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_lists/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3491ff3cb985496928a67190ba7de11e5d4d2b53265df6fbcef0ab273cf331c4", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_lists/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_log", "ftype": "dir", "chksum_type": null, @@ -3011,6 +3501,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_log/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "00a6111ce9c52bb1be8f007717f2a7e6272aae2ed97642d8ba774e180a58f32a", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_log/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_manifest_url", "ftype": "dir", "chksum_type": null, @@ -3067,6 +3571,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_manifest_url/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "69d57a0135a4e51dff30b9ad6e27738498c14c8e69f07dd135801218880e25b6", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_manifest_url/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_merge_type", "ftype": "dir", "chksum_type": null, @@ -3123,6 +3641,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_merge_type/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e2e091f7b393ab19999cd2d5f8632f3ac5d204e8717b2b7f358fe5877790c41e", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_merge_type/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_patched", "ftype": "dir", "chksum_type": null, @@ -3179,6 +3711,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_patched/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e66f3418971059e8c2a21a77ffaf9f024ffaf3b4deae8d61ff1b25e892fe7cd8", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_patched/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_rollback", "ftype": "dir", "chksum_type": null, @@ -3235,6 +3781,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_rollback/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b023097c4ff41c5c176f2c7b349be05fbbdc7c0dc92656a231b0d7147666c7b2", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_rollback/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_scale", "ftype": "dir", "chksum_type": null, @@ -3294,7 +3854,7 @@ "name": "tests/integration/targets/k8s_scale/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af632f359f1507bfc0a8e4eb1b2b36e1222a06ae21859d7c9dfc83da19a37118", + "chksum_sha256": "592b114db2bca211b1ee59a9a3cd4678a0192e668a3b1b9b3a7124d559cc3426", "format": 1 }, { @@ -3305,6 +3865,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_scale/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "00fe4658a47629714be2ec4336d8ec902e024e7452d2462ef924afb94be0f219", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_scale/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_taint", "ftype": "dir", "chksum_type": null, @@ -3361,6 +3935,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_taint/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "efde8a99b3fe17ef28c0e201265b92bd2cb2c6a8c2ec234c64abcdc6c97fad60", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_taint/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_template", "ftype": "dir", "chksum_type": null, @@ -3459,6 +4047,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_template/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f8a9a7e394fe029bdd322589d1faffe102a3c031f3fc305e0bec7355992f93cc", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_template/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_user_impersonation", "ftype": "dir", "chksum_type": null, @@ -3515,6 +4117,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_user_impersonation/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "529d8f8451fc84dc8306745e99e31a5b9b9191fe6905a2cf7bfd7282bcbcb610", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_user_impersonation/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_validate", "ftype": "dir", "chksum_type": null, @@ -3560,7 +4176,7 @@ "name": "tests/integration/targets/k8s_validate/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6cbec7acc2026e44531f73245f00878f03a52bd4cb0c774335c628a421cb9f28", + "chksum_sha256": "83626dee78e667bdcb9213bc274aa405a2e5961c93ab6d9f6c16711a23846c58", "format": 1 }, { @@ -3571,6 +4187,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_validate/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "04740e0290685e11d704ef68ad14f56d7c6442f8488cde143bb36e6d97fe6b12", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_validate/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/k8s_waiter", "ftype": "dir", "chksum_type": null, @@ -3627,6 +4257,20 @@ "format": 1 }, { + "name": "tests/integration/targets/k8s_waiter/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "32b9f63e66cd5a96c12ed60ef4504c1777b02fd49f9f59b8ea699009226ee6b6", + "format": 1 + }, + { + "name": "tests/integration/targets/k8s_waiter/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/lookup_k8s", "ftype": "dir", "chksum_type": null, @@ -3683,6 +4327,20 @@ "format": 1 }, { + "name": "tests/integration/targets/lookup_k8s/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "432e21b1239347693be98c582b735e6f720c7c5b5683c948450c2c5b695ed627", + "format": 1 + }, + { + "name": "tests/integration/targets/lookup_k8s/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/lookup_kustomize", "ftype": "dir", "chksum_type": null, @@ -3739,6 +4397,20 @@ "format": 1 }, { + "name": "tests/integration/targets/lookup_kustomize/playbook.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4cbbf3c72c7880f2dd213218de6482bae3fecc335e94ddd83bbc04bb0041931b", + "format": 1 + }, + { + "name": "tests/integration/targets/lookup_kustomize/runme.sh", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e864f3c232619b47a58ffcf4947b5d3cf6a5bc34e4673395257f8b23c6fd73f", + "format": 1 + }, + { "name": "tests/integration/targets/remove_namespace", "ftype": "dir", "chksum_type": null, @@ -3798,7 +4470,7 @@ "name": "tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "50fa9ab8aca36af544a370d3c2b5d3b557bd848d0d9ae1f0e751634ea75bbb6b", + "chksum_sha256": "c4b3d5a693438becc07ce98c3c2cc50a110f7d886c49bf444cb073c7d733abd9", "format": 1 }, { @@ -3879,66 +4551,38 @@ "format": 1 }, { - "name": "tests/sanity/ignore-2.10.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "df0567067fd935ff36eae1b6952a83b392be1c333519821a3af56437f4a55a2f", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.11.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "70624e6d15f87ec118ba71c135b060431f04aa3746123666e8cb951b9cb1bca1", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.12.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c108894b090a50da8f307726409f3055b481d5ee255f2932c1d52bae72d50058", - "format": 1 - }, - { - "name": "tests/sanity/ignore-2.13.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c108894b090a50da8f307726409f3055b481d5ee255f2932c1d52bae72d50058", - "format": 1 - }, - { "name": "tests/sanity/ignore-2.14.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42e419caf846ed0dcc02202e9a4b75591f31dabc45c730e182d4c5a3d915be82", + "chksum_sha256": "73f995367c7bb72172998e3a83988cd8eed0731251cb186622f430e841523bb1", "format": 1 }, { "name": "tests/sanity/ignore-2.15.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3d41bd605b43a4f205532a2b699580a36949428e269d7ab38f0e117a8f6714b", + "chksum_sha256": "3663bd06ef274990d5929638a9bd2fa06bd87f45502a5f5565e5a405caf2a476", "format": 1 }, { "name": "tests/sanity/ignore-2.16.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1dccc6da515a13558fab57a5c95645e064f7f2592db56bcb145d758e45991363", + "chksum_sha256": "ee479546af5f4e87382278080e90e71b255f74bf387f6f8824878485ec6935b4", "format": 1 }, { "name": "tests/sanity/ignore-2.17.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cabeaf26387322db20141d82f01d2718ea57b23b18fb71e493c837370a087e32", + "chksum_sha256": "7cb5f1e5af3b322b33f99c02859a6ae5aab7fbd10fa6bd12e34f35af4524f743", "format": 1 }, { - "name": "tests/sanity/ignore-2.9.txt", + "name": "tests/sanity/ignore-2.18.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f81ba55b45ea34f4fe65ecaba048fb917867bd7b87b020069ddb83f145179391", + "chksum_sha256": "7cb5f1e5af3b322b33f99c02859a6ae5aab7fbd10fa6bd12e34f35af4524f743", "format": 1 }, { @@ -3959,7 +4603,7 @@ "name": "tests/unit/action/test_remove_omit.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "30e4e2521f84b3bd3a408ebb75c3adeeb0e99382bd9f34afc461ae6778fa5683", + "chksum_sha256": "3f2d0b8fe129fbfe31f72c33d25ceedbe0e05502962d240f47537c9c5f2737dd", "format": 1 }, { @@ -4001,14 +4645,14 @@ "name": "tests/unit/module_utils/test_apply.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "28703ed0cab23068fbbd0d99ba1095ca2c2c484f28fa25c05716ed29671c2ac5", + "chksum_sha256": "0b8058ce637b4ab02bf946b846e697022427c10b92a4472bf46e5d0c08ba7350", "format": 1 }, { "name": "tests/unit/module_utils/test_client.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84829637b1d0d7210f75b3c33210dde9d1233230563b9fcf0557695787e9f700", + "chksum_sha256": "167c9612520a208b6e6a490befc3e2026b4b7c27855cc93da075afaa78efae85", "format": 1 }, { @@ -4022,14 +4666,14 @@ "name": "tests/unit/module_utils/test_core.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25d001234f6af4441e1fd3e75b9a691f0b016662000e898d7603879ec01eb57e", + "chksum_sha256": "aa2ef6a20267aaca6bc100411ede12038544603b7f5ba60b46d9d70412a51937", "format": 1 }, { "name": "tests/unit/module_utils/test_discoverer.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0517cb0710d18a3730e675e6206e21fc50ec98c6338eb25547838d4cf107dd87", + "chksum_sha256": "5467c15583ddd86b28049b8f3dbfacdb0563d51667bc975b402266aad3a90d64", "format": 1 }, { @@ -4043,7 +4687,7 @@ "name": "tests/unit/module_utils/test_helm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7b1d5eec28c07a73b0e71b67bf6211496adb11c9ff748f7bb47e7c5bc279ed4", + "chksum_sha256": "ee5cb16e95cae3202d2ff171c15c748722211855c2cc615d62f6990f1e975329", "format": 1 }, { @@ -4064,7 +4708,7 @@ "name": "tests/unit/module_utils/test_runner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf805b42bed1e709ce7d2b2bb2139d0b9014ba3a712168b0095f78f4143217e4", + "chksum_sha256": "c8fa05c5a69a92ae8283c5f0ea54548bb74a1e1c5c9916a11014c5cea5954706", "format": 1 }, { @@ -4078,14 +4722,14 @@ "name": "tests/unit/module_utils/test_service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22eb9a8b500a62548486b754dacccd40f92e612659705cda953c68e95178a802", + "chksum_sha256": "406fb385b62fe21d8f5436e501a79888e57cb0fa635887dd0af79d5f90a3def2", "format": 1 }, { "name": "tests/unit/module_utils/test_waiter.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a83e8cf7a00c1f6f6d9b08fcb01a9b0807f3d59081c4697da0bec1908a1a6eb1", + "chksum_sha256": "08f3d8bb12b136adf86d38f90d5944072139dd30f549dd5c9f725b1486030122", "format": 1 }, { @@ -4106,14 +4750,14 @@ "name": "tests/unit/modules/test_helm_template_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce4462f8dc0e6f61abd6ed59951d95ed57aac564da92b494d23d31c963ce5df6", + "chksum_sha256": "d3ed685e3c3cd3f6eac343edfdaed0358c336358f48a54978d46b5d4542ebe78", "format": 1 }, { "name": "tests/unit/modules/test_module_helm.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "65480cc9a747d2f5d7f14e9936f9c53ca4cd781b1e01c9d739304795d0c8d259", + "chksum_sha256": "6b210b6df40eb3a137728870443978512f73729ace3206aa1770f57dd707270f", "format": 1 }, { @@ -4134,7 +4778,7 @@ "name": "tests/unit/conftest.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e71c6426972ffd4826b7d5fb7f021333ca0760ea442b9e549b0916e837cd54c7", + "chksum_sha256": "8ebad32afd8333eb2f5a4ab6aafdc7cf6309fe9b69c7d4932aa327e0aeaa0d55", "format": 1 }, { @@ -4155,7 +4799,7 @@ "name": ".ansible-lint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7f042498988069158af67d1654477ba2897c44f7a54120aada6d2c3e5355628", + "chksum_sha256": "b90959aefc23655a9f56fe7b5247c8cf82c594f7f4e269cfbcd916ebc5a2367d", "format": 1 }, { @@ -4176,7 +4820,7 @@ "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d39ea37e36b9eef78ec1515b8f4270b36e4847f58d0bee7fdd7bfa08abb0181", + "chksum_sha256": "ab78cf4fb4f75175d5ddea647bf1e4a77c5ec5d0f204abb7ff7e06c08dca5c55", "format": 1 }, { @@ -4197,7 +4841,7 @@ "name": "Makefile", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc231a95d40d0f7a28d49ea378be431e9c0b046bdc70bc79fb34e2623aaf102c", + "chksum_sha256": "72fce95837f17ca1375a1f2130a5b695e500f1ac1cb87942d51dd1a3ed99343b", "format": 1 }, { @@ -4211,7 +4855,7 @@ "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a5e2a68aa595990f3ca1921ee2a6140f065e71d1bfcc145c56de532e452124f", + "chksum_sha256": "690f7280c8733a5b793e7491c6234caaffae167e6a45637c416658fdd84fa0ec", "format": 1 }, { @@ -4232,7 +4876,7 @@ "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f4d1053cac2a14673a9faf001292589693d10f6126b23255e34beb8223d1de91", + "chksum_sha256": "98d0caf1b4904aefece588e6282a226889644491e5cfca7670ec3c9f300cd31e", "format": 1 }, { @@ -4253,7 +4897,7 @@ "name": "tox.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63b3c9e7c1e29e051dde455446312eaededeee7006c4e5e23746049fa7de2255", + "chksum_sha256": "953a38288849462a19658d71097da3aa6a6aeb37471f7a6e081b141caf6dbfcd", "format": 1 } ], diff --git a/ansible_collections/kubernetes/core/MANIFEST.json b/ansible_collections/kubernetes/core/MANIFEST.json index a965e0179..e4e7f12e9 100644 --- a/ansible_collections/kubernetes/core/MANIFEST.json +++ b/ansible_collections/kubernetes/core/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "kubernetes", "name": "core", - "version": "2.4.2", + "version": "3.1.0", "authors": [ "chouseknecht (https://github.com/chouseknecht)", "geerlingguy (https://www.jeffgeerling.com/)", @@ -36,7 +36,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ddf0469e4a5072f0670d71f80bac5f570bff4361f4db80f2b517e8ef2b7a7eb1", + "chksum_sha256": "497a265e1b9a279b5abb4fcb6acc3ad94db0ee0519969df4bf816c4a90b7b8cb", "format": 1 }, "format": 1 diff --git a/ansible_collections/kubernetes/core/Makefile b/ansible_collections/kubernetes/core/Makefile index 77ca0d25f..b76f3af50 100644 --- a/ansible_collections/kubernetes/core/Makefile +++ b/ansible_collections/kubernetes/core/Makefile @@ -1,5 +1,5 @@ # Also needs to be updated in galaxy.yml -VERSION = 2.4.1 +VERSION = 3.0.0 TEST_ARGS ?= "" PYTHON_VERSION ?= `python -c 'import platform; print(".".join(platform.python_version_tuple()[0:2]))'` diff --git a/ansible_collections/kubernetes/core/README.md b/ansible_collections/kubernetes/core/README.md index 95b0d05d3..67993a06e 100644 --- a/ansible_collections/kubernetes/core/README.md +++ b/ansible_collections/kubernetes/core/README.md @@ -9,7 +9,7 @@ The collection includes a variety of Ansible content to help automate the manage <!--start requires_ansible--> ## Ansible version compatibility -This collection has been tested against following Ansible versions: **>=2.9.17**. +This collection has been tested against following Ansible versions: **>=2.14.0**. For collections that support Ansible 2.9, please ensure you update your `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`). @@ -20,13 +20,13 @@ PEP440 is the schema used to describe the versions of Ansible. ## Python Support -* Collection supports 3.6+ +* 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 -This collection supports Kubernetes versions >=1.19. +This collection supports Kubernetes versions >= 1.24. ## Included content @@ -93,7 +93,7 @@ You can also include it in a `requirements.yml` file and install it via `ansible --- collections: - name: kubernetes.core - version: 2.4.1 + version: 3.0.0 ``` ### Installing the Kubernetes Python Library diff --git a/ansible_collections/kubernetes/core/changelogs/changelog.yaml b/ansible_collections/kubernetes/core/changelogs/changelog.yaml index 13f227875..a6a689887 100644 --- a/ansible_collections/kubernetes/core/changelogs/changelog.yaml +++ b/ansible_collections/kubernetes/core/changelogs/changelog.yaml @@ -762,20 +762,95 @@ releases: name: helm_pull namespace: '' release_date: '2023-01-24' - 2.4.1: + 3.0.0: changes: - release_summary: The kubernetes.core 2.4.1 release includes several trivial - bug fixes related to sanity. + breaking_changes: + - Remove support for ansible-core < 2.14 + - Update python kubernetes library to 24.2.0, helm/kind-action to 1.8.0, kubernetes + >= 1.24. + bugfixes: + - helm - Put the chart_ref into quotes when running ``helm show chart``, ``helm + upgrade`` and ``helm dependency update`` commands (https://github.com/ansible-collections/kubernetes.core/issues/653). + - helm - delete temporary file created when deploying chart with option ``release_values`` + set (https://github.com/ansible-collections/kubernetes.core/issues/530). + - helm - fix issue occurring when uninstalling chart with statues others than + ``deployed`` (https://github.com/ansible-collections/kubernetes.core/issues/319). + - helm - fix post_renderer argument breaking the helm deploy_command (https://github.com/ansible-collections/kubernetes.core/pull/586). + - helm - use post_renderer when checking ``changed`` status for a helm release + (https://github.com/ansible-collections/kubernetes.core/pull/588). + - k8s_scale - clean handling of ResourceTimeout exception (https://github.com/ansible-collections/kubernetes.core/issues/583). + - k8s_scale - fix issue when scaling StatefulSets with ``updateStrategy=OnDelete`` + (https://github.com/ansible-collections/kubernetes.core/issues/579). + deprecated_features: + - k8s - the ``k8s`` inventory plugin has been deprecated and will be removed + in release 4.0.0 (https://github.com/ansible-collections/kubernetes.core/issues/31). + minor_changes: + - helm - add ``reuse_values`` and ``reset_values`` support to helm module (https://github.com/ansible-collections/kubernetes.core/issues/394). + - k8s - add new option ``delete_all`` to support deletion of all resources when + state is set to ``absent``. (https://github.com/ansible-collections/kubernetes.core/issues/504) + - k8s, k8s_info - add a hidden_fields option to allow fields to be hidden in + the results of k8s and k8s_info + - k8s_drain - add ability to filter the list of pods to be drained by a pod + label selector (https://github.com/ansible-collections/kubernetes.core/issues/474). + release_summary: This major release drops support for ansible-core versions + lower than 2.14, Python versions lower than 3.9 and updates python kubernetes + library to 24.2.0, helm/kind-action to 1.8.0, kubernetes >= 1.24, along with + bug fixes and minor changes. fragments: - - fix_sanity_errors.yml - release_date: '2024-02-06' - 2.4.2: + - 20230206-deprecate-k8s-inventory.yml + - 20231110-helm-quote-ref.yaml + - 517-k8s-make-name-optional.yaml + - 575-helm-add-support-for-reuse_values-and-reset_values.yml + - 579-k8s_scale-fix-issue-with-scaling-statefulsets.yml + - 583-k8s_scale-clean-handling-of-ResourceTimeout-exception.yaml + - 586-helm-fix-post-renderer-arg.yml + - 588-helm-use-post-renderer-for-helmdiff.yml + - 589-helm-uninstall-chart-releases-with-statuses-different-than-deployed.yaml + - 606-k8s_drain-add-pod_selectors-parameter.yaml + - 612-fix-helm-tests.yaml + - 629-add-hidden-fields-option.yaml + - gha-sanity-fixes.yaml + - helm-delete-temporary-file-created-when-using-option-release_values.yaml + - 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). - release_summary: fix resource discovery when complex subresources present + - 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: - - 2.4.2.yml + - 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' diff --git a/ansible_collections/kubernetes/core/changelogs/config.yaml b/ansible_collections/kubernetes/core/changelogs/config.yaml index 138225941..69554b846 100644 --- a/ansible_collections/kubernetes/core/changelogs/config.yaml +++ b/ansible_collections/kubernetes/core/changelogs/config.yaml @@ -10,21 +10,21 @@ notesdir: fragments prelude_section_name: release_summary prelude_section_title: Release Summary sections: - - - major_changes - - Major Changes - - - minor_changes - - Minor Changes - - - breaking_changes - - Breaking Changes / Porting Guide - - - deprecated_features - - Deprecated Features - - - removed_features - - Removed Features (previously deprecated) - - - security_fixes - - Security Fixes - - - bugfixes - - Bugfixes - - - known_issues - - Known Issues +- - major_changes + - Major Changes +- - minor_changes + - Minor Changes +- - breaking_changes + - Breaking Changes / Porting Guide +- - deprecated_features + - Deprecated Features +- - removed_features + - Removed Features (previously deprecated) +- - security_fixes + - Security Fixes +- - bugfixes + - Bugfixes +- - known_issues + - Known Issues title: Kubernetes Collection trivial_section_name: trivial diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_info_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_info_module.rst index f74546b25..4b5ef7c06 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_info_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_info_module.rst @@ -108,6 +108,27 @@ Parameters <tr> <td colspan="1"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>get_all_values</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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.4.0</div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li><div style="color: blue"><b>no</b> ←</div></li> + <li>yes</li> + </ul> + </td> + <td> + <div>Set to <code>True</code> if you want to get all (computed) values of the release.</div> + <div>When <code>False</code> (default), only user supplied values are returned.</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>host</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -127,7 +148,7 @@ Parameters <b>kubeconfig</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> - <span style="color: purple">path</span> + <span style="color: purple">raw</span> </div> </td> <td> @@ -135,6 +156,7 @@ Parameters <td> <div>Helm option to specify kubeconfig path to use.</div> <div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div> + <div>The configuration can be provided as dictionary. Added in version 2.4.0.</div> <div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div> </td> </tr> @@ -175,6 +197,32 @@ Parameters <tr> <td colspan="1"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>release_state</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <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.3.0</div> + </td> + <td> + <b>Default:</b><br/><div style="color: blue">[]</div> + </td> + <td> + <div>Show releases as per their states.</div> + <div>Default value is <code>deployed</code> and <code>failed</code>.</div> + <div>If set to <code>all</code>, show all releases without any filter applied.</div> + <div>If set to <code>deployed</code>, show deployed releases.</div> + <div>If set to <code>failed</code>, show failed releases.</div> + <div>If set to <code>pending</code>, show pending releases.</div> + <div>If set to <code>superseded</code>, show superseded releases.</div> + <div>If set to <code>uninstalled</code>, show uninstalled releases, if <code>helm uninstall --keep-history</code> was used.</div> + <div>If set to <code>uninstalling</code>, show releases that are currently being uninstalled.</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>validate_certs</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -204,11 +252,18 @@ Examples .. code-block:: yaml - - name: Deploy latest version of Grafana chart inside monitoring namespace + - name: Gather information of Grafana chart inside monitoring namespace kubernetes.core.helm_info: name: test release_namespace: monitoring + - name: Gather information about test-chart with pending state + kubernetes.core.helm_info: + name: test-chart + release_namespace: testenv + release_state: + - pending + Return Values @@ -274,6 +329,42 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late <td class="elbow-placeholder"> </td> <td colspan="1"> <div class="ansibleOptionAnchor" id="return-"></div> + <b>hooks</b> + <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> + <div style="font-size: small"> + <span style="color: purple">list</span> + / <span style="color: purple">elements=dictionary</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td>always</td> + <td> + <div>Hooks of the release</div> + <br/> + </td> + </tr> + <tr> + <td class="elbow-placeholder"> </td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="return-"></div> + <b>manifest</b> + <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> + <div style="font-size: small"> + <span style="color: purple">list</span> + / <span style="color: purple">elements=dictionary</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td>always</td> + <td> + <div>Manifest of the release</div> + <br/> + </td> + </tr> + <tr> + <td class="elbow-placeholder"> </td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="return-"></div> <b>name</b> <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> <div style="font-size: small"> @@ -306,6 +397,23 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late <td class="elbow-placeholder"> </td> <td colspan="1"> <div class="ansibleOptionAnchor" id="return-"></div> + <b>notes</b> + <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td>always</td> + <td> + <div>Notes of the release</div> + <br/> + </td> + </tr> + <tr> + <td class="elbow-placeholder"> </td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="return-"></div> <b>revision</b> <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> <div style="font-size: small"> diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_module.rst index 77b2c27bf..93da13595 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_module.rst @@ -36,12 +36,12 @@ Parameters <table border=0 cellpadding=0 class="documentation-table"> <tr> - <th colspan="1">Parameter</th> + <th colspan="2">Parameter</th> <th>Choices/<font color="blue">Defaults</font></th> <th width="100%">Comments</th> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>api_key</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -57,7 +57,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>atomic</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -76,7 +76,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>binary_path</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -91,7 +91,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>ca_cert</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -108,7 +108,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>chart_ref</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -127,7 +127,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>chart_repo_url</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -142,7 +142,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>chart_version</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -157,7 +157,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>context</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -174,7 +174,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>create_namespace</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -194,13 +194,14 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>dependency_update</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <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.4.0</div> </td> <td> <ul style="margin: 0; padding: 0"><b>Choices:</b> @@ -209,7 +210,7 @@ Parameters </ul> </td> <td> - <div>Run standelone <code>helm dependency update CHART</code> before the operation.</div> + <div>Run standalone <code>helm dependency update CHART</code> before the operation.</div> <div>Run inline <code>--dependency-update</code> with <code>helm install</code> command. This feature is not supported yet with the <code>helm upgrade</code> command.</div> <div>So we should consider to use <em>dependency_update</em> options with <em>replace</em> option enabled when specifying <em>chart_repo_url</em>.</div> <div>The <em>dependency_update</em> option require the add of <code>dependencies</code> block in <code>Chart.yaml/requirements.yaml</code> file.</div> @@ -218,7 +219,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>disable_hook</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -237,7 +238,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>force</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -256,7 +257,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>history_max</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -273,7 +274,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>host</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -289,12 +290,12 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>kubeconfig</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> - <span style="color: purple">path</span> + <span style="color: purple">raw</span> </div> </td> <td> @@ -302,11 +303,28 @@ Parameters <td> <div>Helm option to specify kubeconfig path to use.</div> <div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div> + <div>The configuration can be provided as dictionary. Added in version 2.4.0.</div> <div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div> </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>post_renderer</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td> + </td> + <td> + <div>Path to an executable to be used for post rendering.</div> + </td> + </tr> + <tr> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>purge</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -325,7 +343,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>release_name</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -342,7 +360,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>release_namespace</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -359,7 +377,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>release_state</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -379,7 +397,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>release_values</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -396,7 +414,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>replace</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -418,8 +436,109 @@ Parameters </td> </tr> <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>reset_values</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li><div style="color: blue"><b>yes</b> ←</div></li> + </ul> + </td> + <td> + <div>When upgrading package, reset the values to the ones built into the chart.</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>reuse_values</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>When upgrading package, specifies wether to reuse the last release's values and merge in any overrides from parameters <em>release_values</em>, <em>values_files</em> or <em>set_values</em>.</div> + <div>If <em>reset_values</em> is set to <code>True</code>, this is ignored.</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>set_values</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">list</span> + / <span style="color: purple">elements=dictionary</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td> + </td> + <td> + <div>Values to pass to chart configuration</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>value</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + / <span style="color: red">required</span> + </div> + </td> + <td> + </td> + <td> + <div>Value to pass to chart configuration (e.g phase=prod).</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> <td colspan="1"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>value_type</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> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li><div style="color: blue"><b>raw</b> ←</div></li> + <li>string</li> + <li>json</li> + <li>file</li> + </ul> + </td> + <td> + <div>Use <code>raw</code> set individual value.</div> + <div>Use <code>string</code> to force a string for an individual value.</div> + <div>Use <code>file</code> to set individual values from a file when the value itself is too long for the command line or is dynamically generated.</div> + <div>Use <code>json</code> to set json values (scalars/objects/arrays). This feature requires helm>=3.10.0.</div> + </td> + </tr> + + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>skip_crds</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -438,7 +557,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>timeout</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -456,7 +575,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>update_repo_cache</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -475,7 +594,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>validate_certs</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -496,7 +615,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>values_files</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -517,7 +636,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>wait</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -537,7 +656,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>wait_timeout</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -556,6 +675,12 @@ Parameters <br/> +Notes +----- + +.. note:: + - The default idempotency check can fail to report changes when ``release_state`` is set to ``present`` and ``chart_repo_url`` is defined. Install helm diff >= 3.4.1 for better results. + Examples @@ -612,6 +737,15 @@ Examples state: absent update_repo_cache: true + - name: Deploy Grafana chart using set values on target + kubernetes.core.helm: + name: test + chart_ref: stable/grafana + release_namespace: monitoring + set_values: + - value: phase=prod + value_type: string + # From git - name: Git clone stable repo on HEAD ansible.builtin.git: @@ -657,6 +791,17 @@ Examples logging: enabled: True + # Deploy latest version + - name: Deploy latest version of Grafana chart using reuse_values + kubernetes.core.helm: + name: test + chart_ref: stable/grafana + release_namespace: monitoring + reuse_values: true + values: + replicas: 2 + version: 3e8ec0b2dffa40fb97d5342e4af887de95faa8c61a62480dd7f8aa03dffcf533 + Return Values diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_info_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_info_module.rst index 86c563f91..ec0b7ce77 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_info_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_info_module.rst @@ -126,7 +126,7 @@ Parameters <b>kubeconfig</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> - <span style="color: purple">path</span> + <span style="color: purple">raw</span> </div> </td> <td> @@ -134,6 +134,7 @@ Parameters <td> <div>Helm option to specify kubeconfig path to use.</div> <div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div> + <div>The configuration can be provided as dictionary. Added in version 2.4.0.</div> <div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div> </td> </tr> diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_module.rst index ca1f1d03d..aae718992 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_plugin_module.rst @@ -126,7 +126,7 @@ Parameters <b>kubeconfig</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> - <span style="color: purple">path</span> + <span style="color: purple">raw</span> </div> </td> <td> @@ -134,6 +134,7 @@ Parameters <td> <div>Helm option to specify kubeconfig path to use.</div> <div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div> + <div>The configuration can be provided as dictionary. Added in version 2.4.0.</div> <div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div> </td> </tr> @@ -150,7 +151,7 @@ Parameters </td> <td> <div>Name of Helm plugin.</div> - <div>Required only if <code>state=absent</code>.</div> + <div>Required only if <code>state=absent</code> or <code>state=latest</code>.</div> </td> </tr> <tr> @@ -173,6 +174,23 @@ Parameters <tr> <td colspan="1"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>plugin_version</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>Plugin version to install. If this is not specified, the latest version is installed.</div> + <div>Ignored when <code>state=absent</code> or <code>state=latest</code>.</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>state</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -183,10 +201,12 @@ Parameters <ul style="margin: 0; padding: 0"><b>Choices:</b> <li>absent</li> <li><div style="color: blue"><b>present</b> ←</div></li> + <li>latest</li> </ul> </td> <td> <div>If <code>state=present</code> the Helm plugin will be installed.</div> + <div>If <code>state=latest</code> the Helm plugin will be updated. Added in version 2.3.0.</div> <div>If <code>state=absent</code> the Helm plugin will be removed.</div> </td> </tr> @@ -237,6 +257,17 @@ Examples plugin_name: env state: absent + - name: Install Helm plugin with a specific version + kubernetes.core.helm_plugin: + plugin_version: 2.0.1 + plugin_path: https://domain/path/to/plugin.tar.gz + state: present + + - name: Update Helm plugin + kubernetes.core.helm_plugin: + plugin_name: secrets + state: latest + Return Values diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_repository_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_repository_module.rst index aa39ede68..ee4169ee7 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_repository_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_repository_module.rst @@ -43,6 +43,22 @@ Parameters <tr> <td colspan="1"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>api_key</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>Token used to authenticate with the API. Can also be specified via <code>K8S_AUTH_API_KEY</code> environment variable.</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>binary_path</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -58,6 +74,117 @@ Parameters <tr> <td colspan="1"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>ca_cert</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">path</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>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 <code>K8S_AUTH_SSL_CA_CERT</code> environment variable.</div> + <div style="font-size: small; color: darkgreen"><br/>aliases: ssl_ca_cert</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>context</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td> + </td> + <td> + <div>Helm option to specify which kubeconfig context to use.</div> + <div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_CONTEXT</code> will be used instead.</div> + <div style="font-size: small; color: darkgreen"><br/>aliases: kube_context</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>force_update</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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.4.0</div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li><div style="color: blue"><b>no</b> ←</div></li> + <li>yes</li> + </ul> + </td> + <td> + <div>Whether or not to replace (overwrite) the repo if it already exists.</div> + <div style="font-size: small; color: darkgreen"><br/>aliases: force</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>host</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>Provide a URL for accessing the API. Can also be specified via <code>K8S_AUTH_HOST</code> environment variable.</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>kubeconfig</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">raw</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td> + </td> + <td> + <div>Helm option to specify kubeconfig path to use.</div> + <div>If the value is not specified in the task, the value of environment variable <code>K8S_AUTH_KUBECONFIG</code> will be used instead.</div> + <div>The configuration can be provided as dictionary.</div> + <div style="font-size: small; color: darkgreen"><br/>aliases: kubeconfig_path</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>pass_credentials</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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.3.0</div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li><div style="color: blue"><b>no</b> ←</div></li> + <li>yes</li> + </ul> + </td> + <td> + <div>Pass credentials to all domains.</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>repo_name</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -142,6 +269,27 @@ Parameters <div style="font-size: small; color: darkgreen"><br/>aliases: username</div> </td> </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>validate_certs</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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.3.0</div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li><div style="color: blue"><b>yes</b> ←</div></li> + </ul> + </td> + <td> + <div>Whether or not to verify the API server's SSL certificates. Can also be specified via <code>K8S_AUTH_VERIFY_SSL</code> environment variable.</div> + <div style="font-size: small; color: darkgreen"><br/>aliases: verify_ssl</div> + </td> + </tr> </table> <br/> diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_template_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_template_module.rst index 67e53716b..c89d27e21 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_template_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.helm_template_module.rst @@ -28,12 +28,12 @@ Parameters <table border=0 cellpadding=0 class="documentation-table"> <tr> - <th colspan="1">Parameter</th> + <th colspan="2">Parameter</th> <th>Choices/<font color="blue">Defaults</font></th> <th width="100%">Comments</th> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>binary_path</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -48,7 +48,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>chart_ref</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -67,7 +67,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>chart_repo_url</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -82,7 +82,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>chart_version</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -97,13 +97,14 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>dependency_update</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <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.4.0</div> </td> <td> <ul style="margin: 0; padding: 0"><b>Choices:</b> @@ -119,7 +120,27 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>disable_hook</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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.4.0</div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li><div style="color: blue"><b>no</b> ←</div></li> + <li>yes</li> + </ul> + </td> + <td> + <div>Prevent hooks from running during install.</div> + </td> + </tr> + <tr> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>include_crds</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -138,7 +159,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>output_dir</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -154,7 +175,40 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>release_name</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td> + </td> + <td> + <div>Release name to use in rendered templates.</div> + <div style="font-size: small; color: darkgreen"><br/>aliases: name</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>release_namespace</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td> + </td> + <td> + <div>namespace scope for this request.</div> + </td> + </tr> + <tr> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>release_values</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -171,8 +225,86 @@ Parameters </td> </tr> <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>set_values</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">list</span> + / <span style="color: purple">elements=dictionary</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td> + </td> + <td> + <div>Values to pass to chart configuration.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>value</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + / <span style="color: red">required</span> + </div> + </td> + <td> + </td> + <td> + <div>Value to pass to chart configuration (e.g phase=prod).</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> <td colspan="1"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>value_type</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> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li><div style="color: blue"><b>raw</b> ←</div></li> + <li>string</li> + <li>json</li> + <li>file</li> + </ul> + </td> + <td> + <div>Use <code>raw</code> set individual value.</div> + <div>Use <code>string</code> to force a string for an individual value.</div> + <div>Use <code>file</code> to set individual values from a file when the value itself is too long for the command line or is dynamically generated.</div> + <div>Use <code>json</code> to set json values (scalars/objects/arrays). This feature requires helm>=3.10.0.</div> + </td> + </tr> + + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>show_only</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <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.4.0</div> + </td> + <td> + <b>Default:</b><br/><div style="color: blue">[]</div> + </td> + <td> + <div>Only show manifests rendered from the given templates.</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>update_repo_cache</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -190,7 +322,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>values_files</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -235,6 +367,24 @@ Examples dest: myfile.yaml content: "{{ result.stdout }}" + - name: Render MutatingWebhooksConfiguration for revision tag "canary", rev "1-13-0" + kubernetes.core.helm_template: + chart_ref: istio/istiod + chart_version: "1.13.0" + release_namespace: "istio-system" + show_only: + - "templates/revision-tags.yaml" + release_values: + revision: "1-13-0" + revisionTags: + - "canary" + register: result + + - name: Write templates to file + copy: + dest: myfile.yaml + content: "{{ result.stdout }}" + Return Values diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cluster_info_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cluster_info_module.rst index 5e42983c5..a0b621d66 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cluster_info_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cluster_info_module.rst @@ -27,8 +27,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 @@ -203,12 +203,32 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cp_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cp_module.rst index c61e1c121..21badc81f 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cp_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_cp_module.rst @@ -25,8 +25,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 Parameters @@ -215,6 +215,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -274,6 +275,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -538,7 +558,7 @@ Examples state: from_pod # copy content into a file in the remote pod - - name: Copy /tmp/foo from a remote pod to /tmp/bar locally + - name: Copy content into a file in the remote pod kubernetes.core.k8s_cp: state: to_pod namespace: some-namespace diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_drain_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_drain_module.rst index fa6e5ffbd..70c2badad 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_drain_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_drain_module.rst @@ -29,8 +29,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 Parameters @@ -132,6 +132,7 @@ Parameters </div> </td> <td> + <b>Default:</b><br/><div style="color: blue">{}</div> </td> <td> <div>Specify options to delete pods.</div> @@ -147,6 +148,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.3.0</div> </td> <td> <ul style="margin: 0; padding: 0"><b>Choices:</b> @@ -155,7 +157,7 @@ Parameters </ul> </td> <td> - <div>Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained)</div> + <div>Continue even if there are pods using emptyDir (local data that will be deleted when the node is drained).</div> </td> </tr> <tr> @@ -334,6 +336,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -356,6 +359,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -395,6 +417,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>pod_selectors</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <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> + </td> + <td> + </td> + <td> + <div>Label selector to filter pods on the node.</div> + <div>This option has effect only when <code>state</code> is set to <em>drain</em>.</div> + <div style="font-size: small; color: darkgreen"><br/>aliases: label_selectors</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>proxy</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -561,7 +602,7 @@ Examples state: drain name: foo delete_options: - terminate_grace_period: 900 + terminate_grace_period: 900 - name: Mark node "foo" as schedulable. kubernetes.core.k8s_drain: @@ -573,6 +614,14 @@ Examples state: cordon name: foo + - name: Drain node "foo" using label selector to filter the list of pods to be drained. + kubernetes.core.k8s_drain: + state: drain + name: foo + pod_selectors: + - 'app!=csi-attacher' + - 'app!=csi-provisioner' + Return Values diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_exec_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_exec_module.rst index a928352ee..49be34212 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_exec_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_exec_module.rst @@ -25,8 +25,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 @@ -117,7 +117,7 @@ Parameters <td> </td> <td> - <div>The command to execute</div> + <div>The command to execute.</div> </td> </tr> <tr> @@ -134,6 +134,7 @@ Parameters <td> <div>The name of the container in the pod to connect to.</div> <div>Defaults to only container if there is only one container in the pod.</div> + <div>If not specified, will choose the first container from the given pod as kubectl cmdline does.</div> </td> </tr> <tr> @@ -214,6 +215,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -230,7 +232,26 @@ Parameters <td> </td> <td> - <div>The pod namespace name</div> + <div>The pod namespace name.</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> </td> </tr> <tr> @@ -285,7 +306,7 @@ Parameters <td> </td> <td> - <div>The pod name</div> + <div>The pod name.</div> </td> </tr> <tr> @@ -302,7 +323,7 @@ Parameters <td> <div>The URL of an HTTP proxy to use for the connection.</div> <div>Can also be specified via <em>K8S_AUTH_PROXY</em> environment variable.</div> - <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. HTTP_PROXY).</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (for example, HTTP_PROXY).</div> </td> </tr> <tr> @@ -449,6 +470,13 @@ Examples msg: "cmd failed" when: command_status.rc != 0 + - name: Specify a container name to execute the command on + kubernetes.core.k8s_exec: + namespace: myproject + pod: busybox-test + container: manager + command: echo "hello" + Return Values diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_info_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_info_module.rst index e4d248af9..af5f4656d 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_info_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_info_module.rst @@ -28,8 +28,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 @@ -153,6 +153,7 @@ Parameters </div> </td> <td> + <b>Default:</b><br/><div style="color: blue">[]</div> </td> <td> <div>List of field selectors to use to filter results</div> @@ -161,6 +162,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>hidden_fields</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <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> + </td> + <td> + </td> + <td> + <div>Hide fields matching any of the field definitions in the result</div> + <div>An example might be <code>hidden_fields=[metadata.managedFields]</code></div> + <div>Only field definitions that don't reference list items are supported (so V(spec.containers[0]) would not work)</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>host</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -240,6 +260,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -254,6 +275,7 @@ Parameters </div> </td> <td> + <b>Default:</b><br/><div style="color: blue">[]</div> </td> <td> <div>List of label selectors to use to filter results</div> @@ -298,6 +320,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_inventory.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_inventory.rst index 79769c1b4..7a8cfd62a 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_inventory.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_inventory.rst @@ -13,6 +13,15 @@ kubernetes.core.k8s :local: :depth: 1 +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. + +:Alternative: Use :ref:`kubernetes.core.k8s_info <kubernetes.core.k8s_info_module>` and :ref:`ansible.builtin.add_host <ansible.builtin.add_host_module>` instead. + + Synopsis -------- @@ -27,8 +36,8 @@ Requirements ------------ The below requirements are needed on the local Ansible controller node that executes this inventory. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 @@ -322,24 +331,24 @@ Examples # File must be named k8s.yaml or k8s.yml - # Authenticate with token, and return all pods and services for all namespaces - plugin: kubernetes.core.k8s - connections: - - host: https://192.168.64.4:8443 - api_key: xxxxxxxxxxxxxxxx - validate_certs: false + - name: Authenticate with token, and return all pods and services for all namespaces + plugin: kubernetes.core.k8s + connections: + - host: https://192.168.64.4:8443 + api_key: xxxxxxxxxxxxxxxx + validate_certs: false - # Use default config (~/.kube/config) file and active context, and return objects for a specific namespace - plugin: kubernetes.core.k8s - connections: - - namespaces: - - testing + - name: Use default config (~/.kube/config) file and active context, and return objects for a specific namespace + plugin: kubernetes.core.k8s + connections: + - namespaces: + - testing - # Use a custom config file, and a specific context. - plugin: kubernetes.core.k8s - connections: - - kubeconfig: /path/to/config - context: 'awx/192-168-64-4:8443/developer' + - name: Use a custom config file, and a specific context. + plugin: kubernetes.core.k8s + connections: + - kubeconfig: /path/to/config + context: 'awx/192-168-64-4:8443/developer' @@ -348,11 +357,15 @@ Status ------ +- This inventory will be removed in version 4.0.0. *[deprecated]* +- For more information see `DEPRECATED`_. + + Authors ~~~~~~~ -- Chris Houseknecht <@chouseknecht> -- Fabian von Feilitzsch <@fabianvf> +- Chris Houseknecht (@chouseknecht) +- Fabian von Feilitzsch (@fabianvf) .. hint:: diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_json_patch_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_json_patch_module.rst index 926c84104..3ab82a1b2 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_json_patch_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_json_patch_module.rst @@ -27,8 +27,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 - jsonpatch @@ -220,6 +220,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -259,6 +260,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -594,7 +614,7 @@ Examples path: /metadata/labels/app value: myapp - op: replace - patch: /spec/containers/0/image + path: /spec/containers/0/image value: nginx diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_log_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_log_module.rst index a639fb7d2..f2cbe671b 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_log_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_log_module.rst @@ -28,8 +28,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 @@ -47,6 +47,27 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>all_containers</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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.4.0</div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>If set to <code>true</code>, retrieve all containers' logs in the pod(s).</div> + <div>mutually exclusive with <code>container</code>.</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>api_key</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -141,7 +162,8 @@ Parameters <td> <div>Use to specify the container within a pod to grab the log from.</div> <div>If there is only one container, this will default to that container.</div> - <div>If there is more than one container, this option is required.</div> + <div>If there is more than one container, this option is required or set <em>all_containers</em> to <code>true</code>.</div> + <div>mutually exclusive with <code>all_containers</code>.</div> </td> </tr> <tr> @@ -240,6 +262,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -254,6 +277,7 @@ Parameters </div> </td> <td> + <b>Default:</b><br/><div style="color: blue">[]</div> </td> <td> <div>List of label selectors to use to filter results</div> @@ -298,6 +322,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -337,6 +380,26 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>previous</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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.4.0</div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li><div style="color: blue"><b>no</b> ←</div></li> + <li>yes</li> + </ul> + </td> + <td> + <div>If <code>true</code>, print the logs for the previous instance of the container in a pod if it exists.</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>proxy</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -438,6 +501,22 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>tail_lines</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">integer</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.4.0</div> + </td> + <td> + </td> + <td> + <div>A number of lines from the end of the logs to retrieve.</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>username</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -519,8 +598,16 @@ Examples kind: DeploymentConfig namespace: testing name: example + tail_lines: 100 register: log + # This will get the logs from all containers in Pod + - name: Get the logs from all containers in pod + kubernetes.core.k8s_log: + namespace: testing + name: some-pod + all_containers: true + Return Values diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_lookup.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_lookup.rst index 9e428c8be..347a8c055 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_lookup.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_lookup.rst @@ -26,8 +26,8 @@ Requirements ------------ The below requirements are needed on the local Ansible controller node that executes this lookup. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 @@ -438,106 +438,28 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late <table border=0 cellpadding=0 class="documentation-table"> <tr> - <th colspan="2">Key</th> + <th colspan="1">Key</th> <th>Returned</th> <th width="100%">Description</th> </tr> <tr> - <td colspan="2"> + <td colspan="1"> <div class="ansibleOptionAnchor" id="return-"></div> <b>_list</b> <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> <div style="font-size: small"> - <span style="color: purple">complex</span> + <span style="color: purple">list</span> + / <span style="color: purple">elements=dictionary</span> </div> </td> <td></td> <td> <div>One ore more object definitions returned from the API.</div> <br/> + <div style="font-size: smaller"><b>Sample:</b></div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">[{'kind': 'ConfigMap', 'apiVersion': 'v1', 'metadata': {'creationTimestamp': '2022-03-04T13:59:49Z', 'name': 'my-config-map', 'namespace': 'default', 'resourceVersion': '418', 'uid': '5714b011-d090-4eac-8272-a0ea82ec0abd'}, 'data': {'key1': 'val1'}}]</div> </td> </tr> - <tr> - <td class="elbow-placeholder"> </td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>api_version</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td>success</td> - <td> - <div>The versioned schema of this representation of an object.</div> - <br/> - </td> - </tr> - <tr> - <td class="elbow-placeholder"> </td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>kind</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td>success</td> - <td> - <div>Represents the REST resource this object represents.</div> - <br/> - </td> - </tr> - <tr> - <td class="elbow-placeholder"> </td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>metadata</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">complex</span> - </div> - </td> - <td>success</td> - <td> - <div>Standard object metadata. Includes name, namespace, annotations, labels, etc.</div> - <br/> - </td> - </tr> - <tr> - <td class="elbow-placeholder"> </td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>spec</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">complex</span> - </div> - </td> - <td>success</td> - <td> - <div>Specific attributes of the object. Will vary based on the <em>api_version</em> and <em>kind</em>.</div> - <br/> - </td> - </tr> - <tr> - <td class="elbow-placeholder"> </td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>status</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">complex</span> - </div> - </td> - <td>success</td> - <td> - <div>Current status details for the object.</div> - <br/> - </td> - </tr> - </table> <br/><br/> @@ -549,8 +471,8 @@ Status Authors ~~~~~~~ -- Chris Houseknecht <@chouseknecht> -- Fabian von Feilitzsch <@fabianvf> +- Chris Houseknecht (@chouseknecht) +- Fabian von Feilitzsch (@fabianvf) .. hint:: diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_module.rst index 9db23e054..d4f9d23c0 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_module.rst @@ -29,8 +29,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 - jsonpatch @@ -211,6 +211,30 @@ Parameters <tr> <td colspan="3"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>delete_all</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <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> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li><div style="color: blue"><b>no</b> ←</div></li> + <li>yes</li> + </ul> + </td> + <td> + <div>When this option is set to <em>true</em> and <em>state=absent</em>, module will delete all resources of the specified resource type in the requested namespace.</div> + <div>Ignored when <code>state</code> is not set to <em>absent</em> or when one of (src), <code>name</code> or <code>resource_definition</code> is provided.</div> + <div>Parameter <code>kind</code> is required to use this option.</div> + <div>This parameter can be used with <code>label_selectors</code> to restrict the resources to be deleted.</div> + <div style="font-size: small; color: darkgreen"><br/>aliases: all</div> + </td> + </tr> + <tr> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>delete_options</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -339,6 +363,45 @@ Parameters <tr> <td colspan="3"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>generate_name</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>Use to specify the basis of an object name and random characters will be added automatically on server to generate a unique name.</div> + <div>This option is ignored when <em>state</em> is not set to <code>present</code> or when <em>apply</em> is set to <code>yes</code>.</div> + <div>If <em>resource definition</em> is provided, the <em>metadata.generateName</em> value from the <em>resource_definition</em> will override this option.</div> + <div>If <em>resource definition</em> is provided, and contains <em>metadata.name</em>, this option is ignored.</div> + <div>mutually exclusive with <code>name</code>.</div> + </td> + </tr> + <tr> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>hidden_fields</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <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> + </td> + <td> + </td> + <td> + <div>Hide fields matching this option in the result</div> + <div>An example might be <code>hidden_fields=[metadata.managedFields]</code></div> + <div>Only field definitions that don't reference list items are supported (so V(spec.containers[0]) would not work)</div> + </td> + </tr> + <tr> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>host</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -417,6 +480,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -460,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>['strategic-merge', 'merge']</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> @@ -502,6 +566,25 @@ Parameters <tr> <td colspan="3"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -643,6 +726,63 @@ Parameters <tr> <td colspan="3"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>server_side_apply</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 2.3.0</div> + </td> + <td> + </td> + <td> + <div>When this option is set, apply runs in the server instead of the client.</div> + <div>Ignored if <code>apply</code> is not set or is set to False.</div> + <div>This option requires "kubernetes >= 19.15.0".</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>field_manager</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + / <span style="color: red">required</span> + </div> + </td> + <td> + </td> + <td> + <div>Name of the manager used to track field ownership.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>force_conflicts</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li><div style="color: blue"><b>no</b> ←</div></li> + <li>yes</li> + </ul> + </td> + <td> + <div>A conflict is a special status error that occurs when an Server Side Apply operation tries to change a field, which another user also claims to manage.</div> + <div>When set to True, server-side apply will force the changes against conflicts.</div> + </td> + </tr> + + <tr> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>src</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -654,7 +794,8 @@ Parameters <td> <div>Provide a path to a file containing a valid YAML definition of an object or objects to be created or updated. Mutually exclusive with <em>resource_definition</em>. NOTE: <em>kind</em>, <em>api_version</em>, <em>name</em>, and <em>namespace</em> will be overwritten by corresponding values found in the configuration read in from the <em>src</em> file.</div> <div>Reads from the local file system. To read from the Ansible controller's file system, including vaulted files, use the file lookup plugin or template lookup plugin, combined with the from_yaml filter, and pass the result to <em>resource_definition</em>. See Examples below.</div> - <div>Mutually exclusive with <em>template</em> in case of <span class='module'>k8s</span> module.</div> + <div>The URL to manifest files that can be used to create the resource. Added in version 2.4.0.</div> + <div>Mutually exclusive with <em>template</em> in case of <span class='module'>kubernetes.core.k8s</span> module.</div> </td> </tr> <tr> @@ -1016,6 +1157,14 @@ Examples state: present definition: "{{ lookup('file', '/testing/deployment.yml') | from_yaml }}" + - name: >- + (Alternative) Read definition file from the Ansible controller file system. + In this case, the definition file contains multiple YAML documents, separated by ---. + If the definition file has been encrypted with Ansible Vault it will automatically be decrypted. + kubernetes.core.k8s: + state: present + definition: "{{ lookup('file', '/testing/deployment.yml') | from_yaml_all }}" + - name: Read definition template file from the Ansible controller file system kubernetes.core.k8s: state: present @@ -1033,10 +1182,10 @@ Examples kubernetes.core.k8s: state: present template: - - path: '/testing/deployment_one.j2' - - path: '/testing/deployment_two.j2' - variable_start_string: '[[' - variable_end_string: ']]' + - path: '/testing/deployment_one.j2' + - path: '/testing/deployment_two.j2' + variable_start_string: '[[' + variable_end_string: ']]' - name: fail on validation errors kubernetes.core.k8s: @@ -1093,6 +1242,41 @@ Examples labels: support: patch + # Create object using generateName + - name: create resource using name generated by the server + kubernetes.core.k8s: + state: present + generate_name: pod- + definition: + apiVersion: v1 + kind: Pod + spec: + containers: + - name: py + image: python:3.7-alpine + imagePullPolicy: IfNotPresent + + # Server side apply + - name: Create configmap using server side apply + kubernetes.core.k8s: + namespace: testing + definition: + apiVersion: v1 + kind: ConfigMap + metadata: + name: my-configmap + apply: yes + server_side_apply: + field_manager: ansible + + # Delete all Deployment from specified namespace + - name: Delete all Deployment from specified namespace + kubernetes.core.k8s: + api_version: apps/v1 + namespace: testing + kind: Deployment + delete_all: true + Return Values diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_rollback_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_rollback_module.rst index 99ff84b97..f5f29aa50 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_rollback_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_rollback_module.rst @@ -27,8 +27,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 @@ -152,6 +152,7 @@ Parameters </div> </td> <td> + <b>Default:</b><br/><div style="color: blue">[]</div> </td> <td> <div>List of field selectors to use to filter results.</div> @@ -238,6 +239,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -252,6 +254,7 @@ Parameters </div> </td> <td> + <b>Default:</b><br/><div style="color: blue">[]</div> </td> <td> <div>List of label selectors to use to filter results.</div> @@ -296,6 +299,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_scale_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_scale_module.rst index c1f56a089..101eee816 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_scale_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_scale_module.rst @@ -25,8 +25,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 - PyYAML >= 3.11 @@ -255,6 +255,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -270,6 +271,7 @@ Parameters <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.0.0</div> </td> <td> + <b>Default:</b><br/><div style="color: blue">[]</div> </td> <td> <div>List of label selectors to use to filter results.</div> @@ -314,6 +316,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -497,7 +518,8 @@ Parameters <td> <div>Provide a path to a file containing a valid YAML definition of an object or objects to be created or updated. Mutually exclusive with <em>resource_definition</em>. NOTE: <em>kind</em>, <em>api_version</em>, <em>name</em>, and <em>namespace</em> will be overwritten by corresponding values found in the configuration read in from the <em>src</em> file.</div> <div>Reads from the local file system. To read from the Ansible controller's file system, including vaulted files, use the file lookup plugin or template lookup plugin, combined with the from_yaml filter, and pass the result to <em>resource_definition</em>. See Examples below.</div> - <div>Mutually exclusive with <em>template</em> in case of <span class='module'>k8s</span> module.</div> + <div>The URL to manifest files that can be used to create the resource. Added in version 2.4.0.</div> + <div>Mutually exclusive with <em>template</em> in case of <span class='module'>kubernetes.core.k8s</span> module.</div> </td> </tr> <tr> diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_service_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_service_module.rst index 2941b9171..57ebe6d12 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_service_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_service_module.rst @@ -24,8 +24,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 Parameters @@ -220,6 +220,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> @@ -283,6 +284,25 @@ Parameters <tr> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>no_proxy</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + <div style="font-style: italic; font-size: small; color: darkgreen">added in 2.3.0</div> + </td> + <td> + </td> + <td> + <div>The comma separated list of hosts/domains/IP/CIDR that shouldn't go through proxy. Can also be specified via K8S_AUTH_NO_PROXY environment variable.</div> + <div>Please note that this module does not pick up typical proxy settings from the environment (e.g. NO_PROXY).</div> + <div>This feature requires kubernetes>=19.15.0. When kubernetes library is less than 19.15.0, it fails even no_proxy set in correct.</div> + <div>example value is "localhost,.local,.example.com,127.0.0.1,127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16"</div> + </td> + </tr> + <tr> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>password</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -468,7 +488,8 @@ Parameters <td> <div>Provide a path to a file containing a valid YAML definition of an object or objects to be created or updated. Mutually exclusive with <em>resource_definition</em>. NOTE: <em>kind</em>, <em>api_version</em>, <em>name</em>, and <em>namespace</em> will be overwritten by corresponding values found in the configuration read in from the <em>src</em> file.</div> <div>Reads from the local file system. To read from the Ansible controller's file system, including vaulted files, use the file lookup plugin or template lookup plugin, combined with the from_yaml filter, and pass the result to <em>resource_definition</em>. See Examples below.</div> - <div>Mutually exclusive with <em>template</em> in case of <span class='module'>k8s</span> module.</div> + <div>The URL to manifest files that can be used to create the resource. Added in version 2.4.0.</div> + <div>Mutually exclusive with <em>template</em> in case of <span class='module'>kubernetes.core.k8s</span> module.</div> </td> </tr> <tr> diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_taint_module.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_taint_module.rst index 4c342a207..b3a089740 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_taint_module.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.k8s_taint_module.rst @@ -26,8 +26,8 @@ Requirements ------------ The below requirements are needed on the host that executes this module. -- python >= 3.6 -- kubernetes >= 12.0.0 +- python >= 3.9 +- kubernetes >= 24.2.0 Parameters @@ -182,6 +182,7 @@ Parameters </td> <td> <div>Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default configuration file from <em>~/.kube/config</em>. Can also be specified via K8S_AUTH_KUBECONFIG environment variable.</div> + <div>Multiple Kubernetes config file can be provided using separator ';' for Windows platform or ':' for others platforms.</div> <div>The kubernetes configuration can be provided as dictionary. This feature requires a python kubernetes client version >= 17.17.0. Added in version 2.2.0.</div> </td> </tr> diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.kubectl_connection.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.kubectl_connection.rst index 595ee4059..48db35992 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.kubectl_connection.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.kubectl_connection.rst @@ -208,6 +208,28 @@ Parameters </td> <td> <div>Path to a kubectl config file. Defaults to <em>~/.kube/config</em></div> + <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> @@ -354,7 +376,7 @@ Status Authors ~~~~~~~ -- xuxinkun +- xuxinkun (@xuxinkun) .. hint:: diff --git a/ansible_collections/kubernetes/core/docs/kubernetes.core.kustomize_lookup.rst b/ansible_collections/kubernetes/core/docs/kubernetes.core.kustomize_lookup.rst index 38d328ed7..423e8aaff 100644 --- a/ansible_collections/kubernetes/core/docs/kubernetes.core.kustomize_lookup.rst +++ b/ansible_collections/kubernetes/core/docs/kubernetes.core.kustomize_lookup.rst @@ -80,6 +80,24 @@ Parameters <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> <b>opt_dirs</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -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 @@ -133,106 +155,27 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late <table border=0 cellpadding=0 class="documentation-table"> <tr> - <th colspan="2">Key</th> + <th colspan="1">Key</th> <th>Returned</th> <th width="100%">Description</th> </tr> <tr> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>_list</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">complex</span> - </div> - </td> - <td></td> - <td> - <div>One ore more object definitions returned from the tool execution.</div> - <br/> - </td> - </tr> - <tr> - <td class="elbow-placeholder"> </td> <td colspan="1"> <div class="ansibleOptionAnchor" id="return-"></div> - <b>api_version</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td>success</td> - <td> - <div>The versioned schema of this representation of an object.</div> - <br/> - </td> - </tr> - <tr> - <td class="elbow-placeholder"> </td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>kind</b> + <b>_list</b> <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> <div style="font-size: small"> <span style="color: purple">string</span> </div> </td> - <td>success</td> - <td> - <div>Represents the REST resource this object represents.</div> - <br/> - </td> - </tr> - <tr> - <td class="elbow-placeholder"> </td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>metadata</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">complex</span> - </div> - </td> - <td>success</td> - <td> - <div>Standard object metadata. Includes name, namespace, annotations, labels, etc.</div> - <br/> - </td> - </tr> - <tr> - <td class="elbow-placeholder"> </td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>spec</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">complex</span> - </div> - </td> - <td>success</td> - <td> - <div>Specific attributes of the object. Will vary based on the <em>api_version</em> and <em>kind</em>.</div> - <br/> - </td> - </tr> - <tr> - <td class="elbow-placeholder"> </td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>status</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">complex</span> - </div> - </td> - <td>success</td> + <td></td> <td> - <div>Current status details for the object.</div> + <div>YAML string for the object definitions returned from the tool execution.</div> <br/> + <div style="font-size: smaller"><b>Sample:</b></div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">{'kind': 'ConfigMap', 'apiVersion': 'v1', 'metadata': {'name': 'my-config-map', 'namespace': 'default'}, 'data': {'key1': 'val1'}}</div> </td> </tr> - </table> <br/><br/> @@ -244,7 +187,7 @@ Status Authors ~~~~~~~ -- Aubin Bikouo <@abikouo> +- Aubin Bikouo (@abikouo) .. hint:: diff --git a/ansible_collections/kubernetes/core/meta/runtime.yml b/ansible_collections/kubernetes/core/meta/runtime.yml index b9a963766..99134a2c3 100644 --- a/ansible_collections/kubernetes/core/meta/runtime.yml +++ b/ansible_collections/kubernetes/core/meta/runtime.yml @@ -1,5 +1,5 @@ --- -requires_ansible: ">=2.9.17" +requires_ansible: '>=2.14.0' action_groups: helm: @@ -20,6 +20,12 @@ plugin_routing: inventory: openshift: redirect: community.okd.openshift + k8s: + deprecation: + removal_version: 4.0.0 + warning_text: >- + The k8s inventory plugin has been deprecated and + will be removed in release 4.0.0. modules: k8s_auth: redirect: community.okd.k8s_auth @@ -29,18 +35,18 @@ plugin_routing: warning_text: Use kubernetes.core.k8s_info instead. k8s_raw: tombstone: - removal_version: "0.1.0" + removal_version: 0.1.0 warning_text: The k8s_raw module was slated for deprecation in Ansible 2.10 and has been removed. Use kubernetes.core.k8s instead. openshift_raw: tombstone: - removal_version: "0.1.0" + removal_version: 0.1.0 warning_text: The openshift_raw module was slated for deprecation in Ansible 2.10 and has been removed. Use kubernetes.core.k8s instead. openshift_scale: tombstone: - removal_version: "0.1.0" + removal_version: 0.1.0 warning_text: The openshift_scale module was slated for deprecation in Ansible 2.10 and has been removed. Use kubernetes.core.k8s_scale instead. lookup: openshift: tombstone: - removal_version: "0.1.0" + removal_version: 0.1.0 warning_text: The openshift lookup plugin was slated for deprecation in Ansible 2.10 and has been removed. Use kubernetes.core.k8s instead. diff --git a/ansible_collections/kubernetes/core/plugins/action/helm.py b/ansible_collections/kubernetes/core/plugins/action/helm.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/helm.py +++ b/ansible_collections/kubernetes/core/plugins/action/helm.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/helm_info.py b/ansible_collections/kubernetes/core/plugins/action/helm_info.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/helm_info.py +++ b/ansible_collections/kubernetes/core/plugins/action/helm_info.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/helm_plugin.py b/ansible_collections/kubernetes/core/plugins/action/helm_plugin.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/helm_plugin.py +++ b/ansible_collections/kubernetes/core/plugins/action/helm_plugin.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/helm_plugin_info.py b/ansible_collections/kubernetes/core/plugins/action/helm_plugin_info.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/helm_plugin_info.py +++ b/ansible_collections/kubernetes/core/plugins/action/helm_plugin_info.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/helm_repository.py b/ansible_collections/kubernetes/core/plugins/action/helm_repository.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/helm_repository.py +++ b/ansible_collections/kubernetes/core/plugins/action/helm_repository.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s.py b/ansible_collections/kubernetes/core/plugins/action/k8s.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_cluster_info.py b/ansible_collections/kubernetes/core/plugins/action/k8s_cluster_info.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s_cluster_info.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_cluster_info.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_cp.py b/ansible_collections/kubernetes/core/plugins/action/k8s_cp.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s_cp.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_cp.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_drain.py b/ansible_collections/kubernetes/core/plugins/action/k8s_drain.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s_drain.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_drain.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_exec.py b/ansible_collections/kubernetes/core/plugins/action/k8s_exec.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s_exec.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_exec.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_info.py b/ansible_collections/kubernetes/core/plugins/action/k8s_info.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s_info.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_info.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/ks8_json_patch.py b/ansible_collections/kubernetes/core/plugins/action/k8s_json_patch.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/ks8_json_patch.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_json_patch.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_log.py b/ansible_collections/kubernetes/core/plugins/action/k8s_log.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s_log.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_log.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py b/ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_rollback.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_scale.py b/ansible_collections/kubernetes/core/plugins/action/k8s_scale.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s_scale.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_scale.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/action/k8s_service.py b/ansible_collections/kubernetes/core/plugins/action/k8s_service.py index 181daca4e..650e0beaf 100644 --- a/ansible_collections/kubernetes/core/plugins/action/k8s_service.py +++ b/ansible_collections/kubernetes/core/plugins/action/k8s_service.py @@ -8,21 +8,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import copy -import traceback import os -from contextlib import contextmanager import platform +import traceback +from contextlib import contextmanager from ansible.config.manager import ensure_type from ansible.errors import ( - AnsibleError, - AnsibleFileNotFound, AnsibleAction, AnsibleActionFail, + AnsibleError, + AnsibleFileNotFound, ) +from ansible.module_utils._text import to_bytes, to_native, to_text from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.six import string_types, iteritems -from ansible.module_utils._text import to_text, to_bytes, to_native +from ansible.module_utils.six import iteritems, string_types from ansible.plugins.action import ActionBase @@ -55,7 +55,6 @@ ENV_KUBECONFIG_PATH_SEPARATOR = ";" if platform.system() == "Windows" else ":" class ActionModule(ActionBase): - TRANSFERS_FILES = True DEFAULT_NEWLINE_SEQUENCE = "\n" diff --git a/ansible_collections/kubernetes/core/plugins/connection/kubectl.py b/ansible_collections/kubernetes/core/plugins/connection/kubectl.py index d0c3baa8b..2a5e1b988 100644 --- a/ansible_collections/kubernetes/core/plugins/connection/kubectl.py +++ b/ansible_collections/kubernetes/core/plugins/connection/kubectl.py @@ -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,18 +181,18 @@ DOCUMENTATION = r""" aliases: [ kubectl_verify_ssl ] """ +import json import os import os.path import shutil import subprocess import tempfile -import json -from ansible.parsing.yaml.loader import AnsibleLoader from ansible.errors import AnsibleError, AnsibleFileNotFound -from ansible.module_utils.six.moves import shlex_quote from ansible.module_utils._text import to_bytes -from ansible.plugins.connection import ConnectionBase, BUFSIZE +from ansible.module_utils.six.moves import shlex_quote +from ansible.parsing.yaml.loader import AnsibleLoader +from ansible.plugins.connection import BUFSIZE, ConnectionBase from ansible.utils.display import Display display = Display() @@ -301,6 +310,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 +351,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 +401,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 +442,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( diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py index dde91db12..cc5d28bdd 100644 --- a/ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py +++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/helm_common_options.py @@ -12,7 +12,6 @@ __metaclass__ = type class ModuleDocFragment(object): - DOCUMENTATION = r""" options: binary_path: @@ -37,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) @@ -50,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 """ diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_auth_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_auth_options.py index 516ef64fd..c2ef9a065 100644 --- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_auth_options.py +++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_auth_options.py @@ -11,7 +11,6 @@ __metaclass__ = type class ModuleDocFragment(object): - DOCUMENTATION = r""" options: host: diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_delete_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_delete_options.py index a8f20cf9c..305e933d1 100644 --- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_delete_options.py +++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_delete_options.py @@ -11,12 +11,11 @@ __metaclass__ = type class ModuleDocFragment(object): - DOCUMENTATION = r""" 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). diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_name_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_name_options.py index e14658b03..07f7c2935 100644 --- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_name_options.py +++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_name_options.py @@ -11,7 +11,6 @@ __metaclass__ = type class ModuleDocFragment(object): - DOCUMENTATION = r""" options: api_version: diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_resource_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_resource_options.py index 6920efa45..0aa275af9 100644 --- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_resource_options.py +++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_resource_options.py @@ -11,7 +11,6 @@ __metaclass__ = type class ModuleDocFragment(object): - DOCUMENTATION = r""" options: resource_definition: diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_scale_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_scale_options.py index ca0605fdf..87fa17d31 100644 --- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_scale_options.py +++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_scale_options.py @@ -11,7 +11,6 @@ __metaclass__ = type class ModuleDocFragment(object): - DOCUMENTATION = r""" options: replicas: diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_state_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_state_options.py index 033318667..e01a9aaff 100644 --- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_state_options.py +++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_state_options.py @@ -11,7 +11,6 @@ __metaclass__ = type class ModuleDocFragment(object): - DOCUMENTATION = r""" options: state: diff --git a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_wait_options.py b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_wait_options.py index e498e3ac6..acf8f8aea 100644 --- a/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_wait_options.py +++ b/ansible_collections/kubernetes/core/plugins/doc_fragments/k8s_wait_options.py @@ -11,7 +11,6 @@ __metaclass__ = type class ModuleDocFragment(object): - DOCUMENTATION = r""" options: wait: diff --git a/ansible_collections/kubernetes/core/plugins/filter/k8s.py b/ansible_collections/kubernetes/core/plugins/filter/k8s.py index a8ec560b3..f5e0170e5 100644 --- a/ansible_collections/kubernetes/core/plugins/filter/k8s.py +++ b/ansible_collections/kubernetes/core/plugins/filter/k8s.py @@ -1,50 +1,12 @@ # Copyright (c) 2017 Ansible Project # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -# SPDX-License-Identifier: GPL-3.0-or-later + from __future__ import absolute_import, division, print_function __metaclass__ = type -DOCUMENTATION = r""" - -name: k8s_config_resource_name -short_description: Generate resource name for the given resource of type ConfigMap, Secret -description: - - Generate resource name for the given resource of type ConfigMap, Secret. - - Resource must have a C(metadata.name) key to generate a resource name -options: - _input: - description: - - A valid YAML definition for a ConfigMap or a Secret. - type: dict - required: true -author: - - ansible cloud team - -""" - -EXAMPLES = r""" -# Dump generated name for a configmap into a variable -- set_fact: - generated_name: '{{ definition | kubernetes.core.k8s_config_resource_name }}' - vars: - definition: - apiVersion: v1 - kind: ConfigMap - metadata: - name: myconfigmap - namespace: mynamespace -""" - -RETURN = r""" - _value: - description: Generated resource name. - type: str -""" - - from ansible.errors import AnsibleFilterError from ansible_collections.kubernetes.core.plugins.module_utils.hashes import ( generate_hash, diff --git a/ansible_collections/kubernetes/core/plugins/inventory/k8s.py b/ansible_collections/kubernetes/core/plugins/inventory/k8s.py index 462856bb6..1a6c5bfce 100644 --- a/ansible_collections/kubernetes/core/plugins/inventory/k8s.py +++ b/ansible_collections/kubernetes/core/plugins/inventory/k8s.py @@ -19,6 +19,13 @@ DOCUMENTATION = """ - Uses the kubectl connection plugin to access the Kubernetes cluster. - Uses k8s.(yml|yaml) YAML configuration file to set parameter values. + deprecated: + removed_in: 4.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. + alternative: "Use M(kubernetes.core.k8s_info) and M(ansible.builtin.add_host) instead." + options: plugin: description: token that ensures this is a source file for the 'k8s' plugin. @@ -27,7 +34,7 @@ DOCUMENTATION = """ connections: description: - Optional list of cluster connection settings. If no connections are provided, the default - '~/.kube/config' and active context will be used, and objects will be returned for all namespaces + I(~/.kube/config) and active context will be used, and objects will be returned for all namespaces the active user is authorized to access. suboptions: name: @@ -38,7 +45,7 @@ DOCUMENTATION = """ description: - Path to an existing Kubernetes config file. If not provided, and no other connection options are provided, the Kubernetes client will attempt to load the default - configuration file from '~/.kube/config'. Can also be specified via K8S_AUTH_KUBECONFIG + configuration file from I(~/.kube/config). Can also be specified via K8S_AUTH_KUBECONFIG environment variable. context: description: @@ -86,12 +93,12 @@ DOCUMENTATION = """ to access. requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" """ -EXAMPLES = """ +EXAMPLES = r""" # File must be named k8s.yaml or k8s.yml - name: Authenticate with token, and return all pods and services for all namespaces @@ -117,6 +124,7 @@ EXAMPLES = """ import json from ansible.errors import AnsibleError +from ansible.plugins.inventory import BaseInventoryPlugin, Cacheable, Constructable from ansible_collections.kubernetes.core.plugins.module_utils.common import ( HAS_K8S_MODULE_HELPER, k8s_import_exception, @@ -124,7 +132,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.common import ( from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import ( get_api_client, ) -from ansible.plugins.inventory import BaseInventoryPlugin, Constructable, Cacheable try: from kubernetes.dynamic.exceptions import DynamicApiError @@ -155,6 +162,12 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): def parse(self, inventory, loader, path, cache=True): 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", + collection_name="kubernetes.core", + ) cache_key = self._get_cache_prefix(path) config_data = self._read_config_data(path) self.setup(config_data, cache, cache_key) @@ -180,7 +193,6 @@ class InventoryModule(BaseInventoryPlugin, Constructable, Cacheable): self.fetch_objects(connections) def fetch_objects(self, connections): - if connections: if not isinstance(connections, list): raise K8sInventoryException("Expecting connections to be a list.") diff --git a/ansible_collections/kubernetes/core/plugins/lookup/k8s.py b/ansible_collections/kubernetes/core/plugins/lookup/k8s.py index bd69a9923..a8d2c79c8 100644 --- a/ansible_collections/kubernetes/core/plugins/lookup/k8s.py +++ b/ansible_collections/kubernetes/core/plugins/lookup/k8s.py @@ -114,8 +114,8 @@ DOCUMENTATION = """ aliases: [ verify_ssl ] requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" """ @@ -179,7 +179,6 @@ import os from ansible.errors import AnsibleError from ansible.module_utils.common._collections_compat import KeysView from ansible.module_utils.common.validation import check_type_bool - from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import ( get_api_client, ) @@ -214,7 +213,6 @@ except ImportError as e: class KubernetesLookup(object): def __init__(self): - if not HAS_K8S_MODULE_HELPER: raise Exception( "Requires the Kubernetes Python client. Try `pip install kubernetes`. Detail: {0}".format( diff --git a/ansible_collections/kubernetes/core/plugins/lookup/kustomize.py b/ansible_collections/kubernetes/core/plugins/lookup/kustomize.py index ef7e50f06..88a039e67 100644 --- a/ansible_collections/kubernetes/core/plugins/lookup/kustomize.py +++ b/ansible_collections/kubernetes/core/plugins/lookup/kustomize.py @@ -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 = """ @@ -64,12 +72,11 @@ RETURN = """ key1: val1 """ +import subprocess + from ansible.errors import AnsibleLookupError -from ansible.plugins.lookup import LookupBase from ansible.module_utils.common.process import get_bin_path - - -import subprocess +from ansible.plugins.lookup import LookupBase def get_binary_from_path(name, opt_dirs=None): @@ -92,7 +99,14 @@ def run_command(command): 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: @@ -123,6 +137,9 @@ class LookupModule(LookupBase): ) ) + if enable_helm: + command += ["--enable-helm"] + (out, err) = run_command(command) if err: raise AnsibleLookupError( diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/ansiblemodule.py b/ansible_collections/kubernetes/core/plugins/module_utils/ansiblemodule.py index 8b17866dc..d3eba8df7 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/ansiblemodule.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/ansiblemodule.py @@ -14,9 +14,9 @@ except TypeError: if enable_turbo_mode: try: - from ansible_collections.cloud.common.plugins.module_utils.turbo.module import ( + from ansible_collections.cloud.common.plugins.module_utils.turbo.module import ( # noqa: F401 AnsibleTurboModule as AnsibleModule, - ) # noqa: F401 + ) AnsibleModule.collection_name = "kubernetes.core" except ImportError: diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/apply.py b/ansible_collections/kubernetes/core/plugins/module_utils/apply.py index dea185ef3..18b153a3b 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/apply.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/apply.py @@ -17,8 +17,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from collections import OrderedDict import json +from collections import OrderedDict from ansible.module_utils.common.dict_transformations import dict_merge from ansible_collections.kubernetes.core.plugins.module_utils.exceptions import ( @@ -31,7 +31,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.version import ( LooseVersion, ) - try: from kubernetes.dynamic.exceptions import NotFoundError except ImportError: diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py b/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py index f0d94e19f..44cdb1f69 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/client/discovery.py @@ -13,15 +13,18 @@ # limitations under the License. +import hashlib import json import os -from collections import defaultdict -import hashlib import tempfile +from collections import defaultdict from functools import partial import kubernetes.dynamic import kubernetes.dynamic.discovery +from ansible_collections.kubernetes.core.plugins.module_utils.client.resource import ( + ResourceList, +) from kubernetes import __version__ from kubernetes.dynamic.exceptions import ( ResourceNotFoundError, @@ -29,10 +32,6 @@ from kubernetes.dynamic.exceptions import ( ServiceUnavailableError, ) -from ansible_collections.kubernetes.core.plugins.module_utils.client.resource import ( - ResourceList, -) - class Discoverer(kubernetes.dynamic.discovery.Discoverer): def __init__(self, client, cache_file): diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/common.py b/ansible_collections/kubernetes/core/plugins/module_utils/common.py index a46c813fe..f92c8fade 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/common.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/common.py @@ -20,17 +20,20 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import base64 -import time +import hashlib import os -import traceback import sys -import hashlib +import time +import traceback from datetime import datetime from tempfile import NamedTemporaryFile -from ansible_collections.kubernetes.core.plugins.module_utils.version import ( - LooseVersion, -) +from ansible.module_utils._text import to_bytes, to_native, to_text +from ansible.module_utils.basic import missing_required_lib +from ansible.module_utils.common.dict_transformations import dict_merge +from ansible.module_utils.parsing.convert_bool import boolean +from ansible.module_utils.six import iteritems, string_types +from ansible.module_utils.urls import Request from ansible_collections.kubernetes.core.plugins.module_utils.args_common import ( AUTH_ARG_MAP, AUTH_ARG_SPEC, @@ -42,27 +45,23 @@ from ansible_collections.kubernetes.core.plugins.module_utils.hashes import ( from ansible_collections.kubernetes.core.plugins.module_utils.selector import ( LabelSelectorFilter, ) - -from ansible.module_utils.basic import missing_required_lib -from ansible.module_utils.six import iteritems, string_types -from ansible.module_utils._text import to_native, to_bytes, to_text -from ansible.module_utils.common.dict_transformations import dict_merge -from ansible.module_utils.parsing.convert_bool import boolean -from ansible.module_utils.urls import Request +from ansible_collections.kubernetes.core.plugins.module_utils.version import ( + LooseVersion, +) K8S_IMP_ERR = None try: import kubernetes from kubernetes.dynamic.exceptions import ( - NotFoundError, - ResourceNotFoundError, - ResourceNotUniqueError, - DynamicApiError, + BadRequestError, ConflictError, + DynamicApiError, ForbiddenError, - MethodNotAllowedError, - BadRequestError, KubernetesValidateMissing, + MethodNotAllowedError, + NotFoundError, + ResourceNotFoundError, + ResourceNotUniqueError, ) HAS_K8S_MODULE_HELPER = True @@ -797,8 +796,8 @@ class K8sAnsibleMixin(object): self.resource_definitions = [implicit_definition] def check_library_version(self): - if LooseVersion(self.kubernetes_version) < LooseVersion("12.0.0"): - self.fail_json(msg="kubernetes >= 12.0.0 is required") + if LooseVersion(self.kubernetes_version) < LooseVersion("24.2.0"): + self.fail_json(msg="kubernetes >= 24.2.0 is required") def flatten_list_kind(self, list_resource, definitions): flattened = [] @@ -819,7 +818,7 @@ class K8sAnsibleMixin(object): try: self.client = get_api_client(self.module) # Hopefully the kubernetes client will provide its own exception class one day - except (urllib3.exceptions.RequestError) as e: + except urllib3.exceptions.RequestError as e: self.fail_json(msg="Couldn't connect to Kubernetes: %s" % str(e)) flattened_definitions = [] @@ -837,7 +836,7 @@ class K8sAnsibleMixin(object): resource = self.find_resource(kind, api_version, fail=True) flattened_definitions.append((resource, definition)) - for (resource, definition) in flattened_definitions: + for resource, definition in flattened_definitions: kind = definition.get("kind", self.kind) api_version = definition.get("apiVersion", self.api_version) definition = self.set_defaults(resource, definition) @@ -1436,7 +1435,7 @@ class K8sAnsibleMixin(object): if merge_type == "json": self.module.deprecate( msg="json as a merge_type value is deprecated. Please use the k8s_json_patch module instead.", - version="3.0.0", + version="4.0.0", collection_name="kubernetes.core", ) try: diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/copy.py b/ansible_collections/kubernetes/core/plugins/module_utils/copy.py index c7e1b4e21..c70eed1a4 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/copy.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/copy.py @@ -18,25 +18,26 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import os -from tempfile import TemporaryFile, NamedTemporaryFile -from select import select -from abc import ABCMeta, abstractmethod import tarfile +from abc import ABCMeta, abstractmethod +from select import select +from tempfile import NamedTemporaryFile, TemporaryFile + +from ansible.module_utils._text import to_native # from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import AnsibleModule from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( CoreException, ) -from ansible.module_utils._text import to_native try: from kubernetes.client.api import core_v1_api from kubernetes.stream import stream from kubernetes.stream.ws_client import ( - STDOUT_CHANNEL, - STDERR_CHANNEL, - ERROR_CHANNEL, ABNF, + ERROR_CHANNEL, + STDERR_CHANNEL, + STDOUT_CHANNEL, ) except ImportError: pass diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/hashes.py b/ansible_collections/kubernetes/core/plugins/module_utils/hashes.py index 3d44a7d90..5e0e70559 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/hashes.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/hashes.py @@ -19,8 +19,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import json import hashlib +import json try: import string @@ -37,7 +37,7 @@ except ImportError: def sorted_dict(unsorted_dict): result = OrderedDict() - for (k, v) in sorted(unsorted_dict.items()): + for k, v in sorted(unsorted_dict.items()): if isinstance(v, dict): v = sorted_dict(v) result[k] = v diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/helm.py b/ansible_collections/kubernetes/core/plugins/module_utils/helm.py index a7a2fa7c0..faa12c03a 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/helm.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/helm.py @@ -7,19 +7,18 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +import copy +import json import os +import re import tempfile import traceback -import re -import json -import copy -from ansible.module_utils.basic import missing_required_lib +from ansible.module_utils.basic import AnsibleModule, missing_required_lib from ansible.module_utils.six import string_types from ansible_collections.kubernetes.core.plugins.module_utils.version import ( LooseVersion, ) -from ansible.module_utils.basic import AnsibleModule try: import yaml @@ -84,7 +83,6 @@ class AnsibleHelmModule(object): """ def __init__(self, **kwargs): - self._module = None if "module" in kwargs: self._module = kwargs.get("module") @@ -117,7 +115,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,7 +182,6 @@ 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) @@ -216,7 +213,6 @@ class AnsibleHelmModule(object): return yaml.safe_load(out) def parse_yaml_content(self, content): - if not HAS_YAML: self.fail_json(msg=missing_required_lib("yaml"), exception=HAS_YAML) @@ -228,7 +224,6 @@ class AnsibleHelmModule(object): ) def get_manifest(self, release_name): - command = [ self.get_helm_binary(), "get", @@ -241,7 +236,6 @@ class AnsibleHelmModule(object): return self.parse_yaml_content(out) def get_notes(self, release_name): - command = [ self.get_helm_binary(), "get", diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py index 2589e5607..a0d8dcfa6 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/client.py @@ -1,12 +1,11 @@ # Copyright: (c) 2021, Red Hat | Ansible # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -import os import hashlib +import os from typing import Any, Dict, List, Optional from ansible.module_utils.six import iteritems, string_types - from ansible_collections.kubernetes.core.plugins.module_utils.args_common import ( AUTH_ARG_MAP, AUTH_ARG_SPEC, diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/core.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/core.py index 131e80e29..7d8c31671 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/core.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/core.py @@ -1,15 +1,12 @@ import traceback - from typing import Optional +from ansible.module_utils.basic import AnsibleModule, missing_required_lib +from ansible.module_utils.common.text.converters import to_text from ansible_collections.kubernetes.core.plugins.module_utils.version import ( LooseVersion, ) -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.basic import missing_required_lib -from ansible.module_utils.common.text.converters import to_text - class AnsibleK8SModule: """A base module class for K8S modules. @@ -38,7 +35,7 @@ class AnsibleK8SModule: if self.settings["check_k8s"]: self.requires("kubernetes") - self.has_at_least("kubernetes", "12.0.0", warn=True) + self.has_at_least("kubernetes", "24.2.0", warn=True) if self.settings["check_pyyaml"]: self.requires("pyyaml") diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/resource.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/resource.py index 4c9d3e1d1..314f7a38a 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/resource.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/resource.py @@ -2,7 +2,7 @@ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) import os -from typing import cast, Dict, Iterable, List, Optional, Union +from typing import Dict, Iterable, List, Optional, Union, cast from ansible.module_utils.six import string_types from ansible.module_utils.urls import Request diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/runner.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/runner.py index 438b32116..61ad1fb6a 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/runner.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/runner.py @@ -4,12 +4,12 @@ from typing import Dict from ansible.module_utils._text import to_native - from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import ( get_api_client, ) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( CoreException, + ResourceTimeout, ) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import ( create_definitions, @@ -17,9 +17,7 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource impor from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import ( K8sService, diff_objects, -) -from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( - ResourceTimeout, + hide_fields, ) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import exists from ansible_collections.kubernetes.core.plugins.module_utils.selector import ( @@ -46,16 +44,51 @@ def validate(client, module, resource): return [_prepend_resource_info(resource, msg) for msg in warnings + errors] +def get_definitions(svc, params): + try: + definitions = create_definitions(params) + except Exception as e: + msg = "Failed to load resource definition: {0}".format(e) + raise CoreException(msg) from e + + delete_all = params.get("delete_all") + src = params.get("src") + resource_definition = params.get("resource_definition") + name = params.get("name") + state = params.get("state") + + if ( + delete_all + and state == "absent" + and name is None + and resource_definition is None + and src is None + ): + # Delete all resources in the namespace for the specified resource type + if params.get("kind") is None: + raise CoreException( + "'kind' option is required to specify the resource type." + ) + + resource = svc.find_resource( + params.get("kind"), params.get("api_version"), fail=True + ) + definitions = svc.retrieve_all( + resource, + params.get("namespace"), + params.get("label_selectors"), + ) + + return definitions + + def run_module(module) -> None: results = [] changed = False client = get_api_client(module) svc = K8sService(client, module) - try: - definitions = create_definitions(module.params) - except Exception as e: - msg = "Failed to load resource definition: {0}".format(e) - raise CoreException(msg) from e + + definitions = get_definitions(svc, module.params) for definition in definitions: result = {"changed": False, "result": {}} @@ -102,6 +135,7 @@ def perform_action(svc, definition: Dict, params: Dict) -> Dict: state = params.get("state", None) kind = definition.get("kind") api_version = definition.get("apiVersion") + hidden_fields = params.get("hidden_fields") result = {"changed": False, "result": {}} instance = {} @@ -177,7 +211,7 @@ def perform_action(svc, definition: Dict, params: Dict) -> Dict: existing = existing.to_dict() else: existing = {} - match, diffs = diff_objects(existing, instance) + match, diffs = diff_objects(existing, instance, hidden_fields) if match and diffs: result.setdefault("warnings", []).append( "No meaningful diff was generated, but the API may not be idempotent " @@ -187,7 +221,7 @@ def perform_action(svc, definition: Dict, params: Dict) -> Dict: if svc.module._diff: result["diff"] = diffs - result["result"] = instance + result["result"] = hide_fields(instance, hidden_fields) if not success: raise ResourceTimeout( '"{0}" "{1}": Timed out waiting on resource'.format( diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py index 6a32f9a84..a1d3f7bfe 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/service.py @@ -1,38 +1,33 @@ # Copyright: (c) 2021, Red Hat | Ansible # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +import copy from typing import Any, Dict, List, Optional, Tuple +from ansible.module_utils.common.dict_transformations import dict_merge from ansible_collections.kubernetes.core.plugins.module_utils.hashes import ( generate_hash, ) - +from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import requires +from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( + CoreException, +) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import ( Waiter, exists, - resource_absent, get_waiter, + resource_absent, ) -from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( - requires, -) - -from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( - CoreException, -) - -from ansible.module_utils.common.dict_transformations import dict_merge - try: from kubernetes.dynamic.exceptions import ( - NotFoundError, - ResourceNotFoundError, - ResourceNotUniqueError, + BadRequestError, ConflictError, ForbiddenError, MethodNotAllowedError, - BadRequestError, + NotFoundError, + ResourceNotFoundError, + ResourceNotUniqueError, ) except ImportError: # Handled in module setup @@ -151,7 +146,7 @@ class K8sService: if merge_type == "json": self.module.deprecate( msg="json as a merge_type value is deprecated. Please use the k8s_json_patch module instead.", - version="3.0.0", + version="4.0.0", collection_name="kubernetes.core", ) try: @@ -211,6 +206,30 @@ class K8sService: return existing + def retrieve_all( + self, resource: Resource, namespace: str, label_selectors: List[str] = None + ) -> List[Dict]: + definitions: List[ResourceInstance] = [] + + try: + params = dict(namespace=namespace) + if label_selectors: + params["label_selector"] = ",".join(label_selectors) + resource_list = self.client.get(resource, **params) + for item in resource_list.items: + existing = self.client.get( + resource, name=item.metadata.name, namespace=namespace + ) + definitions.append(existing.to_dict()) + except (NotFoundError, MethodNotAllowedError): + pass + except Exception as e: + reason = e.body if hasattr(e, "body") else e + msg = "Failed to retrieve requested object: {0}".format(reason) + raise CoreException(msg) from e + + return definitions + def find( self, kind: str, @@ -224,6 +243,7 @@ class K8sService: wait_timeout: Optional[int] = 120, state: Optional[str] = "present", condition: Optional[Dict] = None, + hidden_fields: Optional[List] = None, ) -> Dict: resource = self.find_resource(kind, api_version) api_found = bool(resource) @@ -286,7 +306,9 @@ class K8sService: instances = resources.get("items") or [resources] if not wait: - result["resources"] = instances + result["resources"] = [ + hide_fields(instance, hidden_fields) for instance in instances + ] return result # Now wait for the specified state of any resource instances we have found. @@ -305,7 +327,7 @@ class K8sService: "Failed to gather information about %s(s) even" " after waiting for %s seconds" % (res.get("kind"), duration) ) - result["resources"].append(res) + result["resources"].append(hide_fields(res, hidden_fields)) return result def create(self, resource: Resource, definition: Dict) -> Dict: @@ -471,7 +493,9 @@ class K8sService: return k8s_obj -def diff_objects(existing: Dict, new: Dict) -> Tuple[bool, Dict]: +def diff_objects( + existing: Dict, new: Dict, hidden_fields: Optional[list] = None +) -> Tuple[bool, Dict]: result = {} diff = recursive_diff(existing, new) if not diff: @@ -493,4 +517,29 @@ def diff_objects(existing: Dict, new: Dict) -> Tuple[bool, Dict]: if not set(result["before"]["metadata"].keys()).issubset(ignored_keys): return False, result + result["before"] = hide_fields(result["before"], hidden_fields) + result["after"] = hide_fields(result["after"], hidden_fields) + return True, result + + +def hide_fields(definition: dict, hidden_fields: Optional[list]) -> dict: + if not hidden_fields: + return definition + result = copy.deepcopy(definition) + for hidden_field in hidden_fields: + result = hide_field(result, hidden_field) + return result + + +# hide_field is not hugely sophisticated and designed to cope +# with e.g. status or metadata.managedFields rather than e.g. +# spec.template.spec.containers[0].env[3].value +def hide_field(definition: dict, hidden_field: str) -> dict: + split = hidden_field.split(".", 1) + if split[0] in definition: + if len(split) == 2: + definition[split[0]] = hide_field(definition[split[0]], split[1]) + else: + del definition[split[0]] + return definition diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/waiter.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/waiter.py index 653e17084..5328d6318 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/k8s/waiter.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8s/waiter.py @@ -3,7 +3,6 @@ from functools import partial from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple, Union from ansible.module_utils.parsing.convert_bool import boolean - from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( CoreException, ) @@ -61,6 +60,13 @@ def daemonset_ready(daemonset: ResourceInstance) -> bool: def statefulset_ready(statefulset: ResourceInstance) -> bool: + if statefulset.spec.updateStrategy.type == "OnDelete": + return bool( + statefulset.status + and statefulset.status.observedGeneration + == (statefulset.metadata.generation or 0) + and statefulset.status.replicas == statefulset.spec.replicas + ) # These may be None updated_replicas = statefulset.status.updatedReplicas or 0 ready_replicas = statefulset.status.readyReplicas or 0 diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/k8sdynamicclient.py b/ansible_collections/kubernetes/core/plugins/module_utils/k8sdynamicclient.py index b1beca4cd..7a6e8e66a 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/k8sdynamicclient.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/k8sdynamicclient.py @@ -18,12 +18,11 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from kubernetes.dynamic import DynamicClient - from ansible_collections.kubernetes.core.plugins.module_utils.apply import k8s_apply from ansible_collections.kubernetes.core.plugins.module_utils.exceptions import ( ApplyException, ) +from kubernetes.dynamic import DynamicClient class K8SDynamicClient(DynamicClient): diff --git a/ansible_collections/kubernetes/core/plugins/module_utils/selector.py b/ansible_collections/kubernetes/core/plugins/module_utils/selector.py index 2a85d0bfd..08178602a 100644 --- a/ansible_collections/kubernetes/core/plugins/module_utils/selector.py +++ b/ansible_collections/kubernetes/core/plugins/module_utils/selector.py @@ -16,7 +16,6 @@ import re class Selector(object): - equality_based_operators = ("==", "!=", "=") def __init__(self, data): diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm.py b/ansible_collections/kubernetes/core/plugins/modules/helm.py index 9b2ed3866..079285d7b 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/helm.py +++ b/ansible_collections/kubernetes/core/plugins/modules/helm.py @@ -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,22 @@ 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), + I(values_files) or I(set_values). + - If I(reset_values) is set to C(True), this is ignored. + type: bool + required: false + version_added: 2.5.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 #Helm options disable_hook: @@ -166,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. @@ -177,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. @@ -190,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 """ @@ -310,6 +325,17 @@ EXAMPLES = r""" enabled: True logging: enabled: True + +# Deploy latest version +- name: Deploy latest version of Grafana chart using reuse_values + kubernetes.core.helm: + name: test + chart_ref: stable/grafana + release_namespace: monitoring + reuse_values: true + values: + replicas: 2 + version: 3e8ec0b2dffa40fb97d5342e4af887de95faa8c61a62480dd7f8aa03dffcf533 """ RETURN = r""" @@ -367,10 +393,11 @@ command: sample: helm upgrade ... """ +import copy import re import tempfile import traceback -import copy + from ansible_collections.kubernetes.core.plugins.module_utils.version import ( LooseVersion, ) @@ -406,14 +433,20 @@ def get_release(state, release_name): return None -def get_release_status(module, release_name): +def get_release_status(module, release_name, all_status=False): """ - Get Release state from deployed release + Get Release state from all release status (deployed, failed, pending-install, etc) """ - list_command = ( - module.get_helm_binary() + " list --output=yaml --filter " + release_name - ) + list_command = [ + module.get_helm_binary(), + "list", + "--output=yaml", + "--filter", + release_name, + ] + if all_status: + list_command.append("--all") rc, out, err = module.run_helm_command(list_command) @@ -439,7 +472,7 @@ def run_dep_update(module, chart_ref): """ Run dependency update """ - dep_update = module.get_helm_binary() + " dependency update " + chart_ref + dep_update = module.get_helm_binary() + f" dependency update '{chart_ref}'" rc, out, err = module.run_helm_command(dep_update) @@ -447,7 +480,7 @@ def fetch_chart_info(module, command, chart_ref): """ Get chart info """ - inspect_command = command + " show chart " + chart_ref + inspect_command = command + f" show chart '{chart_ref}'" rc, out, err = module.run_helm_command(inspect_command) @@ -455,6 +488,7 @@ def fetch_chart_info(module, command, chart_ref): def deploy( + module, command, release_name, release_values, @@ -473,6 +507,8 @@ def deploy( timeout=None, dependency_update=None, set_value_args=None, + reuse_values=None, + reset_values=True, ): """ Install/upgrade/rollback release chart @@ -484,9 +520,11 @@ def deploy( deploy_command += " --dependency-update" else: deploy_command = command + " upgrade -i" # install/upgrade + if reset_values: + deploy_command += " --reset-values" - # Always reset values to keep release_values equal to values released - deploy_command += " --reset-values" + if reuse_values is not None: + deploy_command += " --reuse-values=" + str(reuse_values) if wait: deploy_command += " --wait" @@ -520,9 +558,10 @@ def deploy( with open(path, "w") as yaml_file: yaml.dump(release_values, yaml_file, default_flow_style=False) deploy_command += " -f=" + path + module.add_cleanup_file(path) if post_renderer: - deploy_command = " --post-renderer=" + post_renderer + deploy_command += " --post-renderer=" + post_renderer if skip_crds: deploy_command += " --skip-crds" @@ -533,7 +572,7 @@ def deploy( if set_value_args: deploy_command += " " + set_value_args - deploy_command += " " + release_name + " " + chart_name + deploy_command += " " + release_name + f" '{chart_name}'" return deploy_command @@ -599,6 +638,10 @@ def helmdiff_check( chart_version=None, 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. @@ -612,7 +655,13 @@ 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") @@ -621,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()) @@ -682,6 +733,8 @@ def argument_spec(): skip_crds=dict(type="bool", default=False), history_max=dict(type="int"), set_values=dict(type="list", elements="dict"), + reuse_values=dict(type="bool"), + reset_values=dict(type="bool", default=True), ) ) return arg_spec @@ -732,34 +785,38 @@ def main(): history_max = module.params.get("history_max") timeout = module.params.get("timeout") set_values = module.params.get("set_values") + reuse_values = module.params.get("reuse_values") + reset_values = module.params.get("reset_values") if update_repo_cache: run_repo_update(module) # Get real/deployed release status - release_status = get_release_status(module, release_name) + all_status = release_state == "absent" + release_status = get_release_status(module, release_name, all_status=all_status) helm_cmd = module.get_helm_binary() opt_result = {} if release_state == "absent" and release_status is not None: - if replace: - module.fail_json(msg="replace is not applicable when state is absent") - - if wait: - helm_version = module.get_helm_version() - if LooseVersion(helm_version) < LooseVersion("3.7.0"): - opt_result["warnings"] = [] - opt_result["warnings"].append( - "helm uninstall support option --wait for helm release >= 3.7.0" - ) - wait = False + # skip release statuses 'uninstalled' and 'uninstalling' + if not release_status["status"].startswith("uninstall"): + if replace: + module.fail_json(msg="replace is not applicable when state is absent") + + if wait: + helm_version = module.get_helm_version() + if LooseVersion(helm_version) < LooseVersion("3.7.0"): + opt_result["warnings"] = [] + opt_result["warnings"].append( + "helm uninstall support option --wait for helm release >= 3.7.0" + ) + wait = False - helm_cmd = delete( - helm_cmd, release_name, purge, disable_hook, wait, wait_timeout - ) - changed = True + helm_cmd = delete( + helm_cmd, release_name, purge, disable_hook, wait, wait_timeout + ) + changed = True elif release_state == "present": - if chart_version is not None: helm_cmd += " --version=" + chart_version @@ -799,12 +856,13 @@ 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, release_name, release_values, @@ -823,11 +881,12 @@ def main(): history_max=history_max, timeout=timeout, set_value_args=set_value_args, + reuse_values=reuse_values, + reset_values=reset_values, ) changed = True else: - helm_diff_version = get_plugin_version("diff") if helm_diff_version and ( not chart_repo_url @@ -845,6 +904,10 @@ def main(): chart_version, 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} @@ -858,11 +921,8 @@ 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, release_name, release_values, @@ -881,6 +941,8 @@ def main(): timeout=timeout, dependency_update=dependency_update, set_value_args=set_value_args, + reuse_values=reuse_values, + reset_values=reset_values, ) changed = True @@ -914,7 +976,7 @@ def main(): changed=changed, stdout=out, stderr=err, - status=get_release_status(module, release_name), + status=get_release_status(module, release_name, all_status=True), command=helm_cmd, **opt_result, ) diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_info.py b/ansible_collections/kubernetes/core/plugins/modules/helm_info.py index 5a7a56166..2e3fe6e9c 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/helm_info.py +++ b/ansible_collections/kubernetes/core/plugins/modules/helm_info.py @@ -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,22 +123,22 @@ 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 traceback import copy +import traceback try: import yaml diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_plugin.py b/ansible_collections/kubernetes/core/plugins/modules/helm_plugin.py index 795dbf29e..69323e890 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/helm_plugin.py +++ b/ansible_collections/kubernetes/core/plugins/modules/helm_plugin.py @@ -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 """ @@ -109,6 +109,7 @@ rc: """ import copy + from ansible_collections.kubernetes.core.plugins.module_utils.helm import ( AnsibleHelmModule, parse_helm_plugin_list, diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_plugin_info.py b/ansible_collections/kubernetes/core/plugins/modules/helm_plugin_info.py index 3b9fcd189..2d92e995a 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/helm_plugin_info.py +++ b/ansible_collections/kubernetes/core/plugins/modules/helm_plugin_info.py @@ -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: @@ -71,9 +71,10 @@ rc: """ import copy + from ansible_collections.kubernetes.core.plugins.module_utils.helm import ( - parse_helm_plugin_list, AnsibleHelmModule, + parse_helm_plugin_list, ) from ansible_collections.kubernetes.core.plugins.module_utils.helm_args_common import ( HELM_AUTH_ARG_SPEC, @@ -82,7 +83,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.helm_args_common i def main(): - argument_spec = copy.deepcopy(HELM_AUTH_ARG_SPEC) argument_spec.update( dict( diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_pull.py b/ansible_collections/kubernetes/core/plugins/modules/helm_pull.py index 03edb97e6..1eeb188d9 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/helm_pull.py +++ b/ansible_collections/kubernetes/core/plugins/modules/helm_pull.py @@ -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: diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_repository.py b/ansible_collections/kubernetes/core/plugins/modules/helm_repository.py index 34213addc..2165e0888 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/helm_repository.py +++ b/ansible_collections/kubernetes/core/plugins/modules/helm_repository.py @@ -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""" @@ -166,8 +166,8 @@ msg: sample: 'Repository already have a repository named bitnami' """ -import traceback import copy +import traceback try: import yaml diff --git a/ansible_collections/kubernetes/core/plugins/modules/helm_template.py b/ansible_collections/kubernetes/core/plugins/modules/helm_template.py index 2a1872573..b748b1554 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/helm_template.py +++ b/ansible_collections/kubernetes/core/plugins/modules/helm_template.py @@ -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""" diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s.py b/ansible_collections/kubernetes/core/plugins/modules/k8s.py index a14dfc77b..f90d465d3 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s.py @@ -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 @@ -172,10 +172,31 @@ options: - When set to True, server-side apply will force the changes against conflicts. type: bool default: False + delete_all: + description: + - When this option is set to I(true) and I(state=absent), + module will delete all resources of the specified resource type in the requested namespace. + - Ignored when C(state) is not set to I(absent) or when one of (src), + C(name) or C(resource_definition) is provided. + - Parameter C(kind) is required to use this option. + - 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 + aliases: + - all + hidden_fields: + description: + - Hide fields matching this option in the result + - An example might be C(hidden_fields=[metadata.managedFields]) + - 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 requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" - "jsonpatch" """ @@ -343,6 +364,14 @@ EXAMPLES = r""" apply: yes server_side_apply: field_manager: ansible + +# Delete all Deployment from specified namespace +- name: Delete all Deployment from specified namespace + kubernetes.core.k8s: + api_version: apps/v1 + namespace: testing + kind: Deployment + delete_all: true """ RETURN = r""" @@ -394,10 +423,10 @@ from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule impo ) from ansible_collections.kubernetes.core.plugins.module_utils.args_common import ( AUTH_ARG_SPEC, - WAIT_ARG_SPEC, + DELETE_OPTS_ARG_SPEC, NAME_ARG_SPEC, RESOURCE_ARG_SPEC, - DELETE_OPTS_ARG_SPEC, + WAIT_ARG_SPEC, ) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( AnsibleK8SModule, @@ -450,6 +479,8 @@ def argspec(): argument_spec["server_side_apply"] = dict( type="dict", default=None, options=server_apply_spec() ) + argument_spec["delete_all"] = dict(type="bool", default=False, aliases=["all"]) + argument_spec["hidden_fields"] = dict(type="list", elements="str") return argument_spec diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_cluster_info.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_cluster_info.py index 9cd2ac17b..227d5ba25 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_cluster_info.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_cluster_info.py @@ -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 @@ -34,8 +34,8 @@ extends_documentation_fragment: - kubernetes.core.k8s_auth_options requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" """ @@ -154,15 +154,15 @@ except ImportError: from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import ( AnsibleModule, ) +from ansible_collections.kubernetes.core.plugins.module_utils.args_common import ( + AUTH_ARG_SPEC, +) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( AnsibleK8SModule, ) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( CoreException, ) -from ansible_collections.kubernetes.core.plugins.module_utils.args_common import ( - AUTH_ARG_SPEC, -) def execute_module(module, client): diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_cp.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_cp.py index e8f1dea72..16f0f8cbc 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_cp.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_cp.py @@ -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) @@ -26,8 +26,8 @@ extends_documentation_fragment: - kubernetes.core.k8s_auth_options requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" options: namespace: @@ -139,9 +139,18 @@ result: import copy +from ansible.module_utils._text import to_native from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import ( AnsibleModule, ) +from ansible_collections.kubernetes.core.plugins.module_utils.args_common import ( + AUTH_ARG_SPEC, +) +from ansible_collections.kubernetes.core.plugins.module_utils.copy import ( + K8SCopyFromPod, + K8SCopyToPod, + check_pod, +) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import ( get_api_client, ) @@ -155,16 +164,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import K8sService, ) -from ansible_collections.kubernetes.core.plugins.module_utils.args_common import ( - AUTH_ARG_SPEC, -) -from ansible_collections.kubernetes.core.plugins.module_utils.copy import ( - K8SCopyFromPod, - K8SCopyToPod, - check_pod, -) -from ansible.module_utils._text import to_native - def argspec(): argument_spec = copy.deepcopy(AUTH_ARG_SPEC) diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_drain.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_drain.py index fef2ced78..87cb26824 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_drain.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_drain.py @@ -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) @@ -41,12 +41,21 @@ options: - The name of the node. required: true type: str + pod_selectors: + description: + - Label selector to filter pods on the node. + - This option has effect only when C(state) is set to I(drain). + type: list + elements: str + version_added: 2.5.0 + aliases: + - label_selectors delete_options: type: dict + default: {} description: - Specify options to delete pods. - This option has effect only when C(state) is set to I(drain). - default: {} suboptions: terminate_grace_period: description: @@ -88,8 +97,8 @@ options: type: int requirements: - - python >= 3.6 - - kubernetes >= 12.0.0 + - python >= 3.9 + - kubernetes >= 24.2.0 """ EXAMPLES = r""" @@ -115,6 +124,14 @@ EXAMPLES = r""" kubernetes.core.k8s_drain: state: cordon name: foo + +- name: Drain node "foo" using label selector to filter the list of pods to be drained. + kubernetes.core.k8s_drain: + state: drain + name: foo + pod_selectors: + - 'app!=csi-attacher' + - 'app!=csi-provisioner' """ RETURN = r""" @@ -128,8 +145,9 @@ result: import copy import time import traceback - from datetime import datetime + +from ansible.module_utils._text import to_native from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import ( AnsibleModule, ) @@ -146,12 +164,10 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions imp CoreException, ) -from ansible.module_utils._text import to_native - try: from kubernetes.client.api import core_v1_api - from kubernetes.client.models import V1DeleteOptions, V1ObjectMeta from kubernetes.client.exceptions import ApiException + from kubernetes.client.models import V1DeleteOptions, V1ObjectMeta except ImportError: # ImportError are managed by the common module already. pass @@ -328,6 +344,17 @@ class K8sDrainAnsible(object): ) ) + def list_pods(self): + params = { + "field_selector": "spec.nodeName={name}".format( + name=self._module.params.get("name") + ) + } + pod_selectors = self._module.params.get("pod_selectors") + if pod_selectors: + params["label_selector"] = ",".join(pod_selectors) + return self._api_instance.list_pod_for_all_namespaces(**params) + def delete_or_evict_pods(self, node_unschedulable): # Mark node as unschedulable result = [] @@ -350,12 +377,7 @@ class K8sDrainAnsible(object): self.patch_node(unschedulable=False) try: - field_selector = "spec.nodeName={name}".format( - name=self._module.params.get("name") - ) - pod_list = self._api_instance.list_pod_for_all_namespaces( - field_selector=field_selector - ) + pod_list = self.list_pods() # Filter pods force = self._drain_options.get("force", False) ignore_daemonset = self._drain_options.get("ignore_daemonsets", False) @@ -406,7 +428,6 @@ class K8sDrainAnsible(object): return dict(result=" ".join(result)) def patch_node(self, unschedulable): - body = {"spec": {"unschedulable": unschedulable}} try: self._api_instance.patch_node( @@ -418,7 +439,6 @@ class K8sDrainAnsible(object): ) def execute_module(self): - state = self._module.params.get("state") name = self._module.params.get("name") try: @@ -486,6 +506,11 @@ def argspec(): wait_sleep=dict(type="int", default=5), ), ), + pod_selectors=dict( + type="list", + elements="str", + aliases=["label_selectors"], + ), ) ) return argument_spec diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_exec.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_exec.py index c54c23c06..9e0670fdb 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_exec.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_exec.py @@ -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)" @@ -26,8 +26,8 @@ extends_documentation_fragment: - kubernetes.core.k8s_auth_options requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" notes: @@ -131,27 +131,27 @@ except ImportError: # ImportError are managed by the common module already. pass +from ansible.module_utils._text import to_native from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import ( AnsibleModule, ) -from ansible.module_utils._text import to_native from ansible_collections.kubernetes.core.plugins.module_utils.common import ( AUTH_ARG_SPEC, ) -from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( - AnsibleK8SModule, -) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import ( get_api_client, ) +from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( + AnsibleK8SModule, +) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( CoreException, ) try: from kubernetes.client.apis import core_v1_api - from kubernetes.stream import stream from kubernetes.client.exceptions import ApiException + from kubernetes.stream import stream except ImportError: # ImportError are managed by the common module already. pass diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py index fdd5093ac..db85d6250 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_info.py @@ -44,6 +44,14 @@ options: type: list elements: str default: [] + hidden_fields: + description: + - Hide fields matching any of the field definitions in the result + - An example might be C(hidden_fields=[metadata.managedFields]) + - 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 extends_documentation_fragment: - kubernetes.core.k8s_auth_options @@ -51,8 +59,8 @@ extends_documentation_fragment: - kubernetes.core.k8s_wait_options requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" """ @@ -157,12 +165,12 @@ from ansible_collections.kubernetes.core.plugins.module_utils.args_common import AUTH_ARG_SPEC, WAIT_ARG_SPEC, ) -from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( - AnsibleK8SModule, -) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import ( get_api_client, ) +from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( + AnsibleK8SModule, +) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( CoreException, ) @@ -183,6 +191,7 @@ def execute_module(module, svc): wait_sleep=module.params["wait_sleep"], wait_timeout=module.params["wait_timeout"], condition=module.params["wait_condition"], + hidden_fields=module.params["hidden_fields"], ) module.exit_json(changed=False, **facts) @@ -198,6 +207,7 @@ def argspec(): namespace=dict(), label_selectors=dict(type="list", elements="str", default=[]), field_selectors=dict(type="list", elements="str", default=[]), + hidden_fields=dict(type="list", elements="str"), ) ) return args diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_json_patch.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_json_patch.py index 5ea8dbc95..92b652ca2 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_json_patch.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_json_patch.py @@ -62,8 +62,8 @@ extends_documentation_fragment: - kubernetes.core.k8s_wait_options requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" - "jsonpatch" """ @@ -127,8 +127,8 @@ error: import copy import traceback -from ansible.module_utils.basic import missing_required_lib from ansible.module_utils._text import to_native +from ansible.module_utils.basic import missing_required_lib from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import ( AnsibleModule, ) @@ -152,7 +152,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import get_waiter, ) - try: from kubernetes.dynamic.exceptions import DynamicApiError except ImportError: diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_log.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_log.py index 48537e4ac..c8cadbe2d 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_log.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_log.py @@ -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,30 +61,30 @@ 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.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" """ diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_rollback.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_rollback.py index 8dd686294..4fbf61049 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_rollback.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_rollback.py @@ -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: @@ -34,8 +34,8 @@ extends_documentation_fragment: - kubernetes.core.k8s_auth_options - kubernetes.core.k8s_name_options requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" """ diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_scale.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_scale.py index c3e5f8425..6e7d8c44a 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_scale.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_scale.py @@ -6,7 +6,6 @@ from __future__ import absolute_import, division, print_function - __metaclass__ = type @@ -46,8 +45,8 @@ options: version_added: 2.0.0 requirements: - - "python >= 3.6" - - "kubernetes >= 12.0.0" + - "python >= 3.9" + - "kubernetes >= 24.2.0" - "PyYAML >= 3.11" """ @@ -151,14 +150,13 @@ except ImportError: pass from ansible.module_utils._text import to_native - from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import ( AnsibleModule, ) from ansible_collections.kubernetes.core.plugins.module_utils.args_common import ( AUTH_ARG_SPEC, - RESOURCE_ARG_SPEC, NAME_ARG_SPEC, + RESOURCE_ARG_SPEC, ) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import ( get_api_client, @@ -170,15 +168,15 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions imp CoreException, ResourceTimeout, ) +from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import ( + create_definitions, +) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import ( diff_objects, ) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import ( get_waiter, ) -from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import ( - create_definitions, -) SCALE_ARG_SPEC = { "replicas": {"type": "int", "required": True}, @@ -391,7 +389,7 @@ def scale( namespace=namespace, ) if not success: - raise ResourceTimeout("Resource scaling timed out", **result) + raise ResourceTimeout("Resource scaling timed out", result) match, diffs = diff_objects(existing.to_dict(), result["result"]) result["changed"] = not match diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_service.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_service.py index 1eed29bd3..b3cb74444 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_service.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_service.py @@ -83,8 +83,8 @@ options: type: bool requirements: - - python >= 3.6 - - kubernetes >= 12.0.0 + - python >= 3.9 + - kubernetes >= 24.2.0 """ EXAMPLES = r""" @@ -143,7 +143,6 @@ result: """ import copy - from collections import defaultdict from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import ( @@ -154,25 +153,24 @@ from ansible_collections.kubernetes.core.plugins.module_utils.args_common import COMMON_ARG_SPEC, RESOURCE_ARG_SPEC, ) -from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( - AnsibleK8SModule, -) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import ( get_api_client, ) +from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( + AnsibleK8SModule, +) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.exceptions import ( CoreException, ) -from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import ( - K8sService, -) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.resource import ( create_definitions, ) from ansible_collections.kubernetes.core.plugins.module_utils.k8s.runner import ( perform_action, ) - +from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import ( + K8sService, +) SERVICE_ARG_SPEC = { "apply": {"type": "bool", "default": False}, diff --git a/ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py b/ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py index bfa80db5e..a7c0ae27d 100644 --- a/ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py +++ b/ansible_collections/kubernetes/core/plugins/modules/k8s_taint.py @@ -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. @@ -60,8 +60,8 @@ options: default: false type: bool requirements: - - python >= 3.6 - - kubernetes >= 12.0.0 + - python >= 3.9 + - kubernetes >= 24.2.0 """ EXAMPLES = r""" @@ -127,7 +127,6 @@ result: import copy from ansible.module_utils._text import to_native - from ansible_collections.kubernetes.core.plugins.module_utils.ansiblemodule import ( AnsibleModule, ) diff --git a/ansible_collections/kubernetes/core/requirements.txt b/ansible_collections/kubernetes/core/requirements.txt index cea805958..320e4eb7f 100644 --- a/ansible_collections/kubernetes/core/requirements.txt +++ b/ansible_collections/kubernetes/core/requirements.txt @@ -1,3 +1,3 @@ -kubernetes>=12.0.0 +kubernetes>=24.2.0 requests-oauthlib jsonpatch diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml index ae860ce85..39841cce6 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/defaults/main.yml @@ -24,3 +24,5 @@ test_namespace: - "helm-local-path-003" - "helm-from-repository" - "helm-from-url" + - "helm-reuse-values" + - "helm-chart-with-space-into-name" diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_pending.py b/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_pending.py new file mode 100644 index 000000000..cc8bde7f9 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_pending.py @@ -0,0 +1,130 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright: (c) 2023, Ansible Project +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +from __future__ import absolute_import, division, print_function + +__metaclass__ = type + + +DOCUMENTATION = r""" +--- +module: helm_test_pending +short_description: created pending-install release +author: + - Aubin Bikouo (@abikouo) +requirements: + - "helm (https://github.com/helm/helm/releases)" +description: + - This module is used to create a pending install release for integration testing + - The scope of this module is the integration testing of the kubernetes.core collection only. +options: + binary_path: + description: + - The path of a helm binary to use. + required: true + type: path + chart_ref: + description: + - chart reference on chart repository (e.g. my-repo/my-chart-ref) + required: true + type: str + chart_release: + description: + - Release name to manage. + required: true + type: str + chart_release_namespace: + description: + - Kubernetes namespace where the chart should be installed. + required: true + type: str +""" + +EXAMPLES = r""" +""" + +RETURN = r""" +""" + +import json +import subprocess +import time + +from ansible.module_utils.basic import AnsibleModule + + +class HelmReleaseNotFoundError(Exception): + def __init__(self, message): + super().__init__(message) + + +def create_pending_install_release(helm_binary, chart_ref, chart_release, namespace): + # create pending-install release + command = [ + helm_binary, + "install", + chart_release, + chart_ref, + "--namespace", + namespace, + "--wait", + ] + proc = subprocess.Popen(command) + time.sleep(2) + proc.kill() + # ensure release status is pending-install + command = [ + helm_binary, + "list", + "--all", + "--output=json", + "--namespace", + namespace, + "--filter", + chart_release, + ] + cmd = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + out, err = cmd.communicate() + + data = json.loads(out) + if not data: + error = "Release %s not found." % chart_release + raise HelmReleaseNotFoundError(message=error) + return data[0]["status"] == "pending-install", data[0]["status"] + + +def main(): + module = AnsibleModule( + argument_spec=dict( + binary_path=dict(type="path", required=True), + chart_ref=dict(type="str", required=True), + chart_release=dict(type="str", required=True), + chart_release_namespace=dict(type="str", required=True), + ), + ) + + params = dict( + helm_binary=module.params.get("binary_path"), + chart_release=module.params.get("chart_release"), + chart_ref=module.params.get("chart_ref"), + namespace=module.params.get("chart_release_namespace"), + ) + + try: + result, status = create_pending_install_release(**params) + if not result: + module.fail_json( + msg="unable to create pending-install release, current status is %s" + % status + ) + module.exit_json(changed=True, msg="Release created with status '%s'" % status) + except HelmReleaseNotFoundError as err: + module.fail_json( + msg="Error while trying to create pending-install release due to '%s'" % err + ) + + +if __name__ == "__main__": + main() diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py b/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py index dfd9a0860..1ac12e0f6 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/library/helm_test_version.py @@ -52,12 +52,12 @@ result: """ import re + +from ansible.module_utils.basic import AnsibleModule from ansible_collections.kubernetes.core.plugins.module_utils.version import ( LooseVersion, ) -from ansible.module_utils.basic import AnsibleModule - def main(): module = AnsibleModule( diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/playbook.yaml new file mode 100644 index 000000000..92e2e48b1 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/playbook.yaml @@ -0,0 +1,7 @@ +--- +- connection: local + gather_facts: true + hosts: localhost + + roles: + - helm diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml index 545b25c8e..76d55b22c 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/run_test.yml @@ -25,12 +25,18 @@ - from_repository - from_url +- name: test helm upgrade with reuse_values + include_tasks: test_helm_reuse_values.yml + - name: test helm dependency update include_tasks: test_up_dep.yml - name: Test helm uninstall include_tasks: test_helm_uninstall.yml +- name: Test helm install with chart name containing space + include_tasks: test_helm_with_space_into_chart_name.yml + # https://github.com/ansible-collections/community.kubernetes/issues/296 - name: Test Skip CRDS feature in helm chart install include_tasks: test_crds.yml diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_reuse_values.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_reuse_values.yml new file mode 100644 index 000000000..9384fd4f4 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_reuse_values.yml @@ -0,0 +1,75 @@ +--- +- name: Test helm reuse_values + vars: + helm_namespace: "{{ test_namespace[9] }}" + chart_release_values: + replica: + replicaCount: 3 + master: + count: 1 + kind: Deployment + chart_reuse_values: + replica: + replicaCount: 1 + master: + count: 3 + block: + - name: Initial chart installation + helm: + binary_path: "{{ helm_binary }}" + chart_ref: redis + chart_repo_url: https://charts.bitnami.com/bitnami + release_name: test-redis + release_namespace: "{{ helm_namespace }}" + create_namespace: true + release_values: "{{ chart_release_values }}" + register: install + + - name: Get value set as string + helm_info: + binary_path: "{{ helm_binary }}" + release_name: test-redis + release_namespace: "{{ helm_namespace }}" + register: release_value + + - name: Validate that chart values are as expected + assert: + that: + - install is changed + - '"--reuse-values=True" not in install.command' + - release_value["status"]["values"] == chart_release_values + + - name: Upgrade chart using reuse_values=true + helm: + binary_path: "{{ helm_binary }}" + chart_ref: redis + chart_repo_url: https://charts.bitnami.com/bitnami + release_name: test-redis + release_namespace: "{{ helm_namespace }}" + reuse_values: true + reset_values: false + release_values: "{{ chart_reuse_values }}" + register: upgrade + + - name: Get value set as string + helm_info: + binary_path: "{{ helm_binary }}" + release_name: test-redis + release_namespace: "{{ helm_namespace }}" + register: release_value + + - name: Validate that chart values are as expected + assert: + that: + - upgrade is changed + - '"--reuse-values=True" in upgrade.command' + - '"--reset-values" not in upgrade.command' + - release_value["status"]["values"] == chart_release_values | combine(chart_reuse_values, recursive=true) + + always: + - name: Remove helm namespace + k8s: + api_version: v1 + kind: Namespace + name: "{{ helm_namespace }}" + state: absent diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml index e82891e4d..23e36fb0e 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_uninstall.yml @@ -7,6 +7,7 @@ - vars: chart_source: "https://github.com/kubernetes/kube-state-metrics/releases/download/kube-state-metrics-helm-chart-2.13.3/kube-state-metrics-2.13.3.tgz" chart_name: "test-wait-uninstall" + chart_name_pending: "test-uninstall-pending-release" helm_namespace: "{{ test_namespace[1] }}" block: @@ -64,6 +65,36 @@ wait: yes register: uninstall + # Test uninstall chart release with 'pending-install' status + - name: Create chart release with 'pending-install' status + helm_test_pending: + binary_path: "{{ helm_binary }}" + chart_ref: "{{ chart_source }}" + chart_release: "{{ chart_name_pending }}" + chart_release_namespace: "{{ helm_namespace }}" + + - name: Uninstall chart release with 'pending-install' status + helm: + binary_path: "{{ helm_binary }}" + release_name: "{{ chart_name_pending }}" + namespace: "{{ helm_namespace }}" + release_state: absent + register: _uninstall + + - name: Get Helm release details + helm_info: + binary_path: "{{ helm_binary }}" + release_namespace: "{{ helm_namespace }}" + release_state: pending + release_name: "{{ chart_name_pending }}" + register: _info + + - name: assert release does not exist anymore + assert: + that: + - _uninstall is changed + - _info.status is undefined + always: - name: Delete temp directory file: diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml new file mode 100644 index 000000000..fcf867665 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm/tasks/test_helm_with_space_into_chart_name.yml @@ -0,0 +1,58 @@ +--- +- name: Create test directory + ansible.builtin.tempfile: + state: directory + suffix: .helm + register: test_dir + +- name: Test helm using directory with space + vars: + helm_dir: "{{ test_dir.path }}/Deploy Chart" + helm_namespace: "{{ test_namespace[10] }}" + chart_release_name: "deploy-chart-with-space-into-name" + helm_local_src: "test-chart" + block: + - name: Copy helm file into destination + ansible.builtin.copy: + src: "{{ helm_local_src }}" + dest: "{{ helm_dir }}" + + - name: Install chart from local source with Space into name + helm: + binary_path: "{{ helm_binary }}" + name: "{{ chart_release_name }}" + chart_ref: "{{ helm_dir }}/{{ helm_local_src | basename }}" + namespace: "{{ helm_namespace }}" + create_namespace: true + register: install_chart + + - name: Assert that chart is installed + assert: + that: + - install_chart is changed + - install_chart.status.status | lower == 'deployed' + + - name: Check helm_info content + helm_info: + binary_path: "{{ helm_binary }}" + name: "{{ chart_release_name }}" + namespace: "{{ helm_namespace }}" + register: chart_info + + - name: Assert that Chart is installed (using helm_info) + assert: + that: + - chart_info.status.status | lower == 'deployed' + + always: + - name: Delete temporary directory + ansible.builtin.file: + state: absent + name: "{{ test_dir.path }}" + + - name: Remove helm namespace + k8s: + api_version: v1 + kind: Namespace + name: "{{ helm_namespace }}" + state: absent diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml new file mode 100644 index 000000000..c3681dba0 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/Chart.yaml @@ -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" diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml new file mode 100644 index 000000000..4bbad8d69 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/templates/configmap.yaml @@ -0,0 +1,7 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: cmap +data: + ansible_version: {{ .Values.ansible_version }} + phase: {{ .Values.phase }} diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml new file mode 100644 index 000000000..f2cd9d72b --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/files/test-chart-reuse-values/values.yaml @@ -0,0 +1,2 @@ +ansible_version: milestone +phase: uat diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/playbook.yaml new file mode 100644 index 000000000..cb953721a --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/playbook.yaml @@ -0,0 +1,7 @@ +--- +- connection: local + gather_facts: true + hosts: localhost + + roles: + - helm_diff diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml index d54d0ba72..c37d947f5 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/main.yml @@ -143,6 +143,8 @@ chart_ref: "{{ test_chart_ref }}" values: foo: gaz + values_files: + - "{{ test_chart_ref }}/values.yml" register: install - assert: @@ -157,6 +159,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: @@ -256,4 +298,7 @@ kind: Namespace name: "{{ helm_namespace }}" state: absent + wait: true ignore_errors: yes + +- include_tasks: reuse_values.yml diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/reuse_values.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/reuse_values.yml new file mode 100644 index 000000000..f2d80a8f4 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_diff/tasks/reuse_values.yml @@ -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 diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml index 2e3ba2fa3..10d989e78 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/meta/main.yml @@ -1,3 +1,4 @@ --- dependencies: - remove_namespace + - install_helm diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/playbook.yaml new file mode 100644 index 000000000..8c6c252a7 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/playbook.yaml @@ -0,0 +1,7 @@ +--- +- connection: local + gather_facts: true + hosts: localhost + + roles: + - helm_kubeconfig diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_kubeconfig/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/playbook.yaml new file mode 100644 index 000000000..2b50d19c6 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/playbook.yaml @@ -0,0 +1,7 @@ +--- +- connection: local + gather_facts: true + hosts: localhost + + roles: + - helm_plugin diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_plugin/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/playbook.yaml new file mode 100644 index 000000000..43c5e6d43 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/playbook.yaml @@ -0,0 +1,7 @@ +--- +- connection: local + gather_facts: true + hosts: localhost + + roles: + - helm_pull diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_pull/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/playbook.yaml new file mode 100644 index 000000000..f2a56a7bb --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/playbook.yaml @@ -0,0 +1,7 @@ +--- +- connection: local + gather_facts: true + hosts: localhost + + roles: + - helm_repository diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_repository/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml index 2e3ba2fa3..10d989e78 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/meta/main.yml @@ -1,3 +1,4 @@ --- dependencies: - remove_namespace + - install_helm diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/playbook.yaml new file mode 100644 index 000000000..5d3109d24 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/playbook.yaml @@ -0,0 +1,7 @@ +--- +- connection: local + gather_facts: true + hosts: localhost + + roles: + - helm_set_values diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/helm_set_values/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/runme.sh index 4548f4bb9..0691d8d5d 100755 --- a/ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/runme.sh +++ b/ansible_collections/kubernetes/core/tests/integration/targets/inventory_k8s/runme.sh @@ -8,6 +8,7 @@ USER_CREDENTIALS_DIR=$(pwd) ansible-playbook playbooks/delete_resources.yml -e "user_credentials_dir=${USER_CREDENTIALS_DIR}" "$@" { +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks export ANSIBLE_INVENTORY_ENABLED=kubernetes.core.k8s,yaml export ANSIBLE_PYTHON_INTERPRETER=auto_silent diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/playbook.yaml new file mode 100644 index 000000000..a97d2ee20 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_access_review diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_access_review/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/playbook.yaml new file mode 100644 index 000000000..1ef60c4aa --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_append_hash diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_append_hash/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/playbook.yaml new file mode 100644 index 000000000..a1ec85526 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_apply diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_apply/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/playbook.yaml new file mode 100644 index 000000000..ee9f14f57 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_check_mode diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_check_mode/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/playbook.yaml new file mode 100644 index 000000000..3f26f1dd1 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_cluster_info diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_cluster_info/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/k8s_create_file.py b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/k8s_create_file.py deleted file mode 100644 index 6898c36a5..000000000 --- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/k8s_create_file.py +++ /dev/null @@ -1,93 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# Copyright: (c) 2021, Aubin Bikouo <@abikouo> -# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) - -from __future__ import absolute_import, division, print_function - -__metaclass__ = type - - -DOCUMENTATION = r""" - -module: k8s_create_file - -short_description: Create large file with a defined size. - -author: - - Aubin Bikouo (@abikouo) - -description: - - This module is used to validate k8s_cp module. - -options: - path: - description: - - The destination path for the file to create. - type: path - required: yes - size: - description: - - The size of the output file in MB. - type: int - default: 400 - binary: - description: - - If this flag is set to yes, the generated file content binary data. - type: bool - default: False -""" - -EXAMPLES = r""" -- name: create 150MB file - k8s_diff: - path: large_file.txt - size: 150 -""" - - -RETURN = r""" -""" - -import os - -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils._text import to_native - - -def execute_module(module): - try: - size = module.params.get("size") * 1024 * 1024 - path = module.params.get("path") - write_mode = "w" - if module.params.get("binary"): - content = os.urandom(size) - write_mode = "wb" - else: - content = "" - count = 0 - while len(content) < size: - content += "This file has been generated using ansible: {0}\n".format( - count - ) - count += 1 - - with open(path, write_mode) as f: - f.write(content) - module.exit_json(changed=True, size=len(content)) - except Exception as e: - module.fail_json(msg="failed to create file due to: {0}".format(to_native(e))) - - -def main(): - argument_spec = {} - argument_spec["size"] = {"type": "int", "default": 400} - argument_spec["path"] = {"type": "path", "required": True} - argument_spec["binary"] = {"type": "bool", "default": False} - module = AnsibleModule(argument_spec=argument_spec) - - execute_module(module) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py index bcf097839..e84bbffd8 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/library/kubectl_file_compare.py @@ -89,10 +89,10 @@ EXAMPLES = r""" RETURN = r""" """ -import os import filecmp - +import os from tempfile import NamedTemporaryFile, TemporaryDirectory + from ansible.module_utils.basic import AnsibleModule @@ -157,7 +157,6 @@ def compare_directories(dir1, dir2): def execute_module(module): - args = module.params.get("args") local_path = module.params.get("local_path") namespace = module.params.get("namespace") diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/playbook.yaml new file mode 100644 index 000000000..a0fec9444 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_copy diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml index 6758202eb..27d4050ac 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_copy/tasks/test_copy_large_file.yml @@ -10,16 +10,13 @@ path: "{{ test_directory }}" state: directory - - name: create large text file - k8s_create_file: - path: "{{ test_directory }}/large_text_file.txt" - size: 150 + - name: Create a large text file + ansible.builtin.shell: + cmd: base64 /dev/random | head -c 150M > {{ test_directory }}/large_text_file.txt - - name: create large binary file - k8s_create_file: - path: "{{ test_directory }}/large_bin_file.bin" - size: 200 - binary: true + - name: Create a large binary file + ansible.builtin.command: + cmd: dd if=/dev/random of={{ test_directory }}/large_bin_file.bin bs=1M count=200 # Copy large text file from/to local filesystem to Pod - name: copy large file into remote Pod diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/playbook.yaml new file mode 100644 index 000000000..303acd539 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_crd diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_crd/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/files/deployments.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/files/deployments.yaml new file mode 100644 index 000000000..594d4522a --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/files/deployments.yaml @@ -0,0 +1,70 @@ +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: nginx-d + labels: + context: ansible +spec: + replicas: 1 + selector: + matchLabels: + context: ansible + template: + metadata: + labels: + context: ansible + spec: + containers: + - name: nginx + image: nginx + ports: + - containerPort: 80 +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: openjdk-d + labels: + context: ansible +spec: + replicas: 2 + selector: + matchLabels: + context: ansible + template: + metadata: + labels: + context: ansible + spec: + containers: + - name: openjdk + image: openjdk:17 + command: + - /bin/sh + - -c + - while true;do date;sleep 5; done +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: alpine-d + labels: + context: ansible +spec: + replicas: 3 + selector: + matchLabels: + context: ansible + template: + metadata: + labels: + context: ansible + spec: + containers: + - name: alpine + image: alpine + command: + - /bin/sh + - -c + - while true;do date;sleep 5; done diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/playbook.yaml new file mode 100644 index 000000000..ab89107b0 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_delete diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml index 88edf59bd..d7b144cb4 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_delete/tasks/main.yml @@ -121,6 +121,77 @@ that: - _result.resources | length == 0 + # test deletion using delete_all=true + - name: Create deployments + k8s: + namespace: "{{ test_namespace }}" + src: files/deployments.yaml + wait: true + register: result + + - name: Trying to delete deployments without name and label_selectors and select_all=false + k8s: + kind: Deployment + api_version: apps/v1 + namespace: "{{ test_namespace }}" + state: absent + register: _delete + + - name: Ensure Deployment were not deleted + assert: + that: + - _delete is not changed + + - name: Validate that Deployment still exist + k8s_info: + kind: Deployment + api_version: apps/v1 + namespace: "{{ test_namespace }}" + label_selectors: + - context=ansible + register: _deployment + failed_when: _deployment.resources | length == 0 + + - name: Trying to delete using delete_all=true but missing kind option + k8s: + api_version: apps/v1 + namespace: "{{ test_namespace }}" + delete_all: true + state: absent + register: _delete + ignore_errors: true + + - name: assert task failed with proper message + assert: + that: + - _delete is failed + - _delete.msg == "'kind' option is required to specify the resource type." + + - name: Trying to delete deployments without name and label_selectors and delete_all=true + k8s: + kind: Deployment + api_version: apps/v1 + namespace: "{{ test_namespace }}" + delete_all: true + wait: true + state: absent + register: _delete + + - name: Ensure Deployment were deleted + assert: + that: + - _delete is changed + + - name: Validate that Deployment do not exist anymore + k8s_info: + kind: Deployment + api_version: apps/v1 + namespace: "{{ test_namespace }}" + label_selectors: + - context=ansible + register: _deployment + failed_when: _deployment.resources | length > 0 + always: - name: Remove namespace k8s: diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/playbook.yaml new file mode 100644 index 000000000..bd6fe9645 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_diff diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_diff/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/playbook.yaml new file mode 100644 index 000000000..f31993483 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_drain diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml index f16f8affc..5891011f9 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_drain/tasks/main.yml @@ -281,6 +281,7 @@ that: - dset_result.resources | list | length > 0 + # test: drain using disable_eviction=true - name: Uncordon node k8s_drain: state: uncordon @@ -347,6 +348,90 @@ register: _result failed_when: _result.resources + # test: drain using pod_selectors + - name: Uncordon node + k8s_drain: + state: uncordon + name: '{{ node_to_drain }}' + + - name: create a Pod for test + k8s: + namespace: '{{ test_namespace }}' + wait: true + wait_timeout: "{{ k8s_wait_timeout | default(omit) }}" + definition: + apiVersion: v1 + kind: Pod + metadata: + name: 'ansible-drain-pod' + labels: + app: ansible-drain + spec: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchFields: + - key: metadata.name + operator: In + values: + - '{{ node_to_drain }}' + containers: + - name: ansible-container + image: busybox + command: + - '/bin/sh' + - '-c' + - 'while true; do echo $(date); sleep 10; done' + + - name: Drain node using pod_selectors 'app!=ansible-drain' + k8s_drain: + state: drain + name: '{{ node_to_drain }}' + pod_selectors: + - app!=ansible-drain + delete_options: + terminate_grace_period: 0 + delete_emptydir_data: true + force: true + ignore_daemonsets: true + register: drain_pod_selector + + - name: assert that node has been drained + assert: + that: + - drain_pod_selector is changed + - '"node {{ node_to_drain }} marked unschedulable." in drain_pod_selector.result' + + - name: assert that pod created before is still running + k8s_info: + namespace: '{{ test_namespace }}' + kind: Pod + label_selectors: + - app=ansible-drain + field_selectors: + - status.phase=Running + register: pods + failed_when: pods.resources == [] + + - name: Drain node using pod_selectors 'app=ansible-drain' + k8s_drain: + state: drain + name: '{{ node_to_drain }}' + pod_selectors: + - app=ansible-drain + delete_options: + terminate_grace_period: 0 + force: true + register: drain_pod_selector_equal + + - name: assert that node was not drained + assert: + that: + - drain_pod_selector_equal is changed + - '"node {{ node_to_drain }} already marked unschedulable." in drain_pod_selector_equal.result' + - '"Deleting Pods not managed by ReplicationController, ReplicaSet, Job, DaemonSet or StatefulSet: {{ test_namespace }}/ansible-drain-pod." in drain_pod_selector_equal.warnings' + - name: Uncordon node k8s_drain: state: uncordon diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/playbook.yaml new file mode 100644 index 000000000..f2c6a67cd --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_exec diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_exec/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/playbook.yaml new file mode 100644 index 000000000..f0f4f3745 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_full diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_full/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/playbook.yaml new file mode 100644 index 000000000..d1c5b4ff9 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_gc diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_gc/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/playbook.yaml new file mode 100644 index 000000000..fa5db406b --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_generate_name diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_generate_name/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/aliases b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/aliases new file mode 100644 index 000000000..64f66d0a5 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/aliases @@ -0,0 +1,3 @@ +time=59 +k8s +k8s_info diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/defaults/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/defaults/main.yml new file mode 100644 index 000000000..1858b94ea --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/defaults/main.yml @@ -0,0 +1,12 @@ +--- +test_namespace: "hide-fields" +hide_fields_namespace: "hide-fields" +hide_fields_base_configmap: + apiVersion: v1 + kind: ConfigMap + metadata: + name: hide-fields-cm + namespace: hide-fields + data: + hello: world + another: value diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/meta/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/meta/main.yml new file mode 100644 index 000000000..08362c780 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: +- setup_namespace diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/playbook.yaml new file mode 100644 index 000000000..349b62951 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_hide_fields diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/runme.sh new file mode 100755 index 000000000..29fda1c9a --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@" diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/tasks/main.yml new file mode 100644 index 000000000..4b361fb96 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_hide_fields/tasks/main.yml @@ -0,0 +1,108 @@ +- block: + - name: Creation with hidden fields should work + k8s: + definition: "{{ hide_fields_base_configmap}}" + hidden_fields: + - metadata.managedFields + register: hf1 + + - name: Ensure hidden fields are not present + assert: + that: + - "'managedFields' not in hf1.result['metadata']" + + - name: Running without hidden fields should work + k8s: + definition: "{{ hide_fields_base_configmap}}" + + - name: Running with missing hidden fields should have no effect + k8s: + definition: "{{ hide_fields_base_configmap}}" + hidden_fields: + - does.not.exist + register: hf2 + + - name: Ensure no change with missing hidden fields + assert: + that: + - not hf2.changed + + - name: Hide status and managed fields + k8s: + definition: "{{ hide_fields_base_configmap}}" + hidden_fields: + - status + - metadata.managedFields + register: hf3 + diff: true + + - name: Ensure hidden fields are not present + assert: + that: + - "'status' not in hf3.result" + - "'managedFields' not in hf3.result['metadata']" + + - name: k8s_info works with hidden fields + k8s_info: + name: "{{ hide_fields_base_configmap.metadata.name }}" + namespace: "{{ hide_fields_base_configmap.metadata.namespace }}" + kind: ConfigMap + hidden_fields: + - metadata.managedFields + register: hf4 + + - name: Ensure hidden fields are not present + assert: + that: + - hf4.resources | length == 1 + - "'managedFields' not in hf4.resources[0]['metadata']" + + + - name: Hiding a changed field should still result in a change + k8s: + definition: "{{ hide_fields_base_configmap | combine({'data':{'hello':'different'}}) }}" + hidden_fields: + - data + - metadata.managedFields + register: hf5 + diff: true + + - name: Ensure that hidden changed field changed + assert: + that: + - hf5.changed + + - name: Apply works with hidden fields + k8s: + definition: "{{ hide_fields_base_configmap | combine({'data':{'anew':'value'}}) }}" + hidden_fields: + - data + apply: true + register: hf6 + diff: true + + - name: Ensure that hidden changed field changed + assert: + that: + - hf6.changed + + - name: Hidden field should not show up in deletion + k8s: + definition: "{{ hide_fields_base_configmap}}" + hidden_fields: + - status + state: absent + register: hf7 + + - name: Ensure hidden fields are not present + assert: + that: + - "'status' not in hf7.result" + + always: + - name: Remove namespace + k8s: + kind: Namespace + name: "{{ hide_fields_namespace }}" + state: absent + ignore_errors: true diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/playbook.yaml new file mode 100644 index 000000000..0070d8910 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_info diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml index 2608f8208..03fc72695 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_info/tasks/wait.yml @@ -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: diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/playbook.yaml new file mode 100644 index 000000000..7206db569 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_json_patch diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_json_patch/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/playbook.yaml new file mode 100644 index 000000000..bff2875ba --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_label_selectors diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_label_selectors/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/playbook.yaml new file mode 100644 index 000000000..0b7156d5b --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_lists diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_lists/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/playbook.yaml new file mode 100644 index 000000000..1855427a4 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_log diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_log/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/playbook.yaml new file mode 100644 index 000000000..9196cafad --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_manifest_url diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_manifest_url/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/playbook.yaml new file mode 100644 index 000000000..5aec041fc --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_merge_type diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_merge_type/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/playbook.yaml new file mode 100644 index 000000000..e3b890d1f --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_patched diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_patched/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/playbook.yaml new file mode 100644 index 000000000..f91f78ea7 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_rollback diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_rollback/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/playbook.yaml new file mode 100644 index 000000000..2c48db5ab --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_scale diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml index eb2107d30..f5c79df55 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_scale/tasks/main.yml @@ -389,6 +389,71 @@ that: - output.result.status.replicas == 0 + - name: Create a StatefulSet with updateStrategy=OnDelete + kubernetes.core.k8s: + wait: yes + wait_timeout: "{{ k8s_wait_timeout | default(omit) }}" + definition: + apiVersion: apps/v1 + kind: StatefulSet + metadata: + namespace: "{{ scale_namespace }}" + name: scale-set-ondelete + spec: + replicas: 2 + updateStrategy: + type: OnDelete + selector: + matchLabels: + app: foo + template: + metadata: + labels: + app: foo + spec: + terminationGracePeriodSeconds: 10 + containers: + - image: busybox + name: busybox + command: + - sleep + - "600" + register: output + + - assert: + that: + - output.result.status.replicas == 2 + + - name: Wait for StatefulSet to scale down to 0 + kubernetes.core.k8s_scale: + kind: StatefulSet + api_version: apps/v1 + name: scale-set-ondelete + namespace: "{{ scale_namespace }}" + replicas: 0 + wait: yes + wait_timeout: "{{ k8s_wait_timeout | default(omit) }}" + register: output + + - assert: + that: + - output.result.status.replicas == 0 + + - name: Wait for StatefulSet to scale up to 2 + kubernetes.core.k8s_scale: + kind: StatefulSet + api_version: apps/v1 + name: scale-set-ondelete + namespace: "{{ scale_namespace }}" + replicas: 2 + wait: yes + wait_timeout: "{{ k8s_wait_timeout | default(omit) }}" + register: output + + - assert: + that: + - output.result.status.replicas == 2 + always: - name: Remove namespace k8s: diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/playbook.yaml new file mode 100644 index 000000000..805c34760 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_taint diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_taint/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/playbook.yaml new file mode 100644 index 000000000..1a4e61122 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_template diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_template/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/playbook.yaml new file mode 100644 index 000000000..e09f40e90 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_user_impersonation diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_user_impersonation/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/playbook.yaml new file mode 100644 index 000000000..510c8e6cd --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_validate diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml index 900e6f70b..b7b99c18a 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_validate/tasks/main.yml @@ -52,6 +52,7 @@ name: - kubernetes - kubernetes-validate + - setuptools virtualenv: "{{ virtualenv }}" virtualenv_command: "{{ virtualenv_command }}" virtualenv_site_packages: false diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/playbook.yaml new file mode 100644 index 000000000..4e5171ee3 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - k8s_waiter diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/k8s_waiter/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/playbook.yaml new file mode 100644 index 000000000..47a0c7ff6 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - lookup_k8s diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_k8s/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/playbook.yaml b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/playbook.yaml new file mode 100644 index 000000000..1a5ed844a --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/playbook.yaml @@ -0,0 +1,6 @@ +--- +- connection: local + gather_facts: false + hosts: localhost + roles: + - lookup_kustomize diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/runme.sh b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/runme.sh new file mode 100755 index 000000000..02ef14603 --- /dev/null +++ b/ansible_collections/kubernetes/core/tests/integration/targets/lookup_kustomize/runme.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -eux +export ANSIBLE_CALLBACKS_ENABLED=profile_tasks +export ANSIBLE_ROLES_PATH=../ +ansible-playbook playbook.yaml "$@"
\ No newline at end of file diff --git a/ansible_collections/kubernetes/core/tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py b/ansible_collections/kubernetes/core/tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py index 9c9e87966..1e0d45ec3 100644 --- a/ansible_collections/kubernetes/core/tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py +++ b/ansible_collections/kubernetes/core/tests/integration/targets/setup_kubeconfig/library/test_inventory_read_credentials.py @@ -78,7 +78,6 @@ from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import class K8SInventoryTestModule(AnsibleModule): def __init__(self): - argument_spec = dict( kube_config=dict(required=True, type="path"), dest_dir=dict(required=True, type="path"), @@ -88,7 +87,6 @@ class K8SInventoryTestModule(AnsibleModule): self.execute_module() def execute_module(self): - dest_dir = os.path.abspath(self.params.get("dest_dir")) kubeconfig_path = self.params.get("kube_config") if not os.path.isdir(dest_dir): diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.10.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.10.txt deleted file mode 100644 index b617363d1..000000000 --- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.10.txt +++ /dev/null @@ -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 diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.11.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.11.txt deleted file mode 100644 index 80122d803..000000000 --- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.11.txt +++ /dev/null @@ -1,592 +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 diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.13.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.13.txt deleted file mode 100644 index 6cfa02f6b..000000000 --- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.13.txt +++ /dev/null @@ -1,32 +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/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/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 diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt index f62989e02..637747685 100644 --- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt +++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.14.txt @@ -32,3 +32,5 @@ 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 diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt index 86c079160..8f2d9f899 100644 --- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt +++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.15.txt @@ -22,6 +22,7 @@ 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 @@ -33,3 +34,4 @@ 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 diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt index cb6e74504..e41e02e31 100644 --- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt +++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.16.txt @@ -25,6 +25,7 @@ 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 @@ -36,3 +37,4 @@ 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 diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt index 11c8b21e1..c154baaf2 100644 --- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt +++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.17.txt @@ -16,6 +16,7 @@ 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 @@ -27,3 +28,4 @@ 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 diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.12.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.18.txt index 6cfa02f6b..c154baaf2 100644 --- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.12.txt +++ b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.18.txt @@ -1,23 +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/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.11!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/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.11!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 @@ -25,8 +24,8 @@ 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 diff --git a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.9.txt b/ansible_collections/kubernetes/core/tests/sanity/ignore-2.9.txt deleted file mode 100644 index 7828a0c08..000000000 --- a/ansible_collections/kubernetes/core/tests/sanity/ignore-2.9.txt +++ /dev/null @@ -1,613 +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/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 diff --git a/ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py b/ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py index 3432c19f9..e8206a440 100644 --- a/ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py +++ b/ansible_collections/kubernetes/core/tests/unit/action/test_remove_omit.py @@ -7,6 +7,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from datetime import datetime + from ansible_collections.kubernetes.core.plugins.action.k8s_info import RemoveOmit diff --git a/ansible_collections/kubernetes/core/tests/unit/conftest.py b/ansible_collections/kubernetes/core/tests/unit/conftest.py index 20615adb0..63eca8b57 100644 --- a/ansible_collections/kubernetes/core/tests/unit/conftest.py +++ b/ansible_collections/kubernetes/core/tests/unit/conftest.py @@ -6,12 +6,11 @@ import json import sys from io import BytesIO -import pytest - import ansible.module_utils.basic -from ansible.module_utils.six import string_types +import pytest from ansible.module_utils._text import to_bytes from ansible.module_utils.common._collections_compat import MutableMapping +from ansible.module_utils.six import string_types @pytest.fixture diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_apply.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_apply.py index 07986007b..3dd116108 100644 --- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_apply.py +++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_apply.py @@ -18,8 +18,8 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from ansible_collections.kubernetes.core.plugins.module_utils.apply import ( - merge, apply_patch, + merge, ) tests = [ diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_client.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_client.py index bba03589e..d3fec2299 100644 --- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_client.py +++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_client.py @@ -1,14 +1,14 @@ -import os import base64 +import os import tempfile -import yaml -import mock -from mock import MagicMock +import mock +import yaml from ansible_collections.kubernetes.core.plugins.module_utils.k8s.client import ( _create_auth_spec, _create_configuration, ) +from mock import MagicMock TEST_HOST = "test-host" TEST_SSL_HOST = "https://test-host" diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_core.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_core.py index 189f1f950..a49ea12cc 100644 --- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_core.py +++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_core.py @@ -6,12 +6,11 @@ import json import kubernetes import pytest - from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( AnsibleK8SModule, ) -MINIMAL_K8S_VERSION = "12.0.0" +MINIMAL_K8S_VERSION = "24.2.0" UNSUPPORTED_K8S_VERSION = "11.0.0" @@ -50,9 +49,9 @@ def test_warn_on_k8s_version(monkeypatch, stdin, capfd): dependencies = [ - ["18.20.0", "12.0.1", False], - ["18.20.0", "18.20.0", True], - ["12.0.1", "18.20.0", True], + ["28.20.0", "24.2.1", False], + ["28.20.0", "28.20.0", True], + ["24.2.1", "28.20.0", True], ] @@ -68,7 +67,7 @@ def test_has_at_least(monkeypatch, stdin, desired, actual, result, capfd): dependencies = [ - ["kubernetes", "18.20.0", "(kubernetes>=18.20.0)"], + ["kubernetes", "28.20.0", "(kubernetes>=28.20.0)"], ["foobar", "1.0.0", "(foobar>=1.0.0)"], ["foobar", None, "(foobar)"], ] @@ -80,7 +79,7 @@ dependencies = [ def test_requires_fails_with_message( monkeypatch, stdin, dependency, version, msg, capfd ): - monkeypatch.setattr(kubernetes, "__version__", "12.0.0") + monkeypatch.setattr(kubernetes, "__version__", "24.2.0") module = AnsibleK8SModule(argument_spec={}) with pytest.raises(SystemExit): module.requires(dependency, version) diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_discoverer.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_discoverer.py index b23a7a9aa..618b0cb08 100644 --- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_discoverer.py +++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_discoverer.py @@ -14,19 +14,17 @@ import pytest - -from kubernetes.client import ApiClient -from kubernetes.dynamic import Resource - -from ansible_collections.kubernetes.core.plugins.module_utils.k8sdynamicclient import ( - K8SDynamicClient, -) from ansible_collections.kubernetes.core.plugins.module_utils.client.discovery import ( LazyDiscoverer, ) from ansible_collections.kubernetes.core.plugins.module_utils.client.resource import ( ResourceList, ) +from ansible_collections.kubernetes.core.plugins.module_utils.k8sdynamicclient import ( + K8SDynamicClient, +) +from kubernetes.client import ApiClient +from kubernetes.dynamic import Resource @pytest.fixture(scope="module") diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_helm.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_helm.py index de2c1569d..5db0a017c 100644 --- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_helm.py +++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_helm.py @@ -7,22 +7,21 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import os.path -import yaml +import random +import string import tempfile -import pytest - +from unittest.mock import MagicMock +import pytest +import yaml from ansible_collections.kubernetes.core.plugins.module_utils.helm import ( AnsibleHelmModule, write_temp_kubeconfig, ) -from unittest.mock import MagicMock -import random -import string @pytest.fixture() -def ansible_helm_module(): +def _ansible_helm_module(): module = MagicMock() module.params = { "api_key": None, @@ -114,7 +113,6 @@ def test_write_temp_kubeconfig_with_kubeconfig(): def test_module_get_helm_binary_from_params(): - helm_binary_path = MagicMock() helm_sys_binary_path = MagicMock() @@ -129,7 +127,6 @@ def test_module_get_helm_binary_from_params(): def test_module_get_helm_binary_from_system(): - helm_sys_binary_path = MagicMock() module = MagicMock() module.params = {} @@ -139,31 +136,29 @@ def test_module_get_helm_binary_from_system(): assert helm_module.get_helm_binary() == helm_sys_binary_path -def test_module_get_helm_plugin_list(ansible_helm_module): - - ansible_helm_module.run_helm_command = MagicMock() - ansible_helm_module.run_helm_command.return_value = (0, "output", "error") +def test_module_get_helm_plugin_list(_ansible_helm_module): + _ansible_helm_module.run_helm_command = MagicMock() + _ansible_helm_module.run_helm_command.return_value = (0, "output", "error") - rc, out, err, command = ansible_helm_module.get_helm_plugin_list() + rc, out, err, command = _ansible_helm_module.get_helm_plugin_list() assert (rc, out, err) == (0, "output", "error") assert command == "some/path/to/helm/executable plugin list" - ansible_helm_module.get_helm_binary.assert_called_once() - ansible_helm_module.run_helm_command.assert_called_once_with( + _ansible_helm_module.get_helm_binary.assert_called_once() + _ansible_helm_module.run_helm_command.assert_called_once_with( "some/path/to/helm/executable plugin list" ) -def test_module_get_helm_plugin_list_failure(ansible_helm_module): - - ansible_helm_module.run_helm_command = MagicMock() - ansible_helm_module.run_helm_command.return_value = (-1, "output", "error") +def test_module_get_helm_plugin_list_failure(_ansible_helm_module): + _ansible_helm_module.run_helm_command = MagicMock() + _ansible_helm_module.run_helm_command.return_value = (-1, "output", "error") with pytest.raises(SystemExit): - ansible_helm_module.get_helm_plugin_list() + _ansible_helm_module.get_helm_plugin_list() - ansible_helm_module.fail_json.assert_called_once_with( + _ansible_helm_module.fail_json.assert_called_once_with( msg="Failed to get Helm plugin info", command="some/path/to/helm/executable plugin list", stdout="output", @@ -174,8 +169,7 @@ def test_module_get_helm_plugin_list_failure(ansible_helm_module): @pytest.mark.parametrize("no_values", [True, False]) @pytest.mark.parametrize("get_all", [True, False]) -def test_module_get_values(ansible_helm_module, no_values, get_all): - +def test_module_get_values(_ansible_helm_module, no_values, get_all): expected = {"test": "units"} output = "---\ntest: units\n" @@ -183,19 +177,19 @@ def test_module_get_values(ansible_helm_module, no_values, get_all): expected = {} output = "null" - ansible_helm_module.run_helm_command = MagicMock() - ansible_helm_module.run_helm_command.return_value = (0, output, "error") + _ansible_helm_module.run_helm_command = MagicMock() + _ansible_helm_module.run_helm_command.return_value = (0, output, "error") release_name = "".join( random.choice(string.ascii_letters + string.digits) for x in range(10) ) - result = ansible_helm_module.get_values(release_name, get_all=get_all) + result = _ansible_helm_module.get_values(release_name, get_all=get_all) - ansible_helm_module.get_helm_binary.assert_called_once() + _ansible_helm_module.get_helm_binary.assert_called_once() command = f"some/path/to/helm/executable get values --output=yaml {release_name}" if get_all: command += " -a" - ansible_helm_module.run_helm_command.assert_called_once_with(command) + _ansible_helm_module.run_helm_command.assert_called_once_with(command) assert result == expected @@ -210,21 +204,19 @@ def test_module_get_values(ansible_helm_module, no_values, get_all): ('Client: &version.Version{SemVer:"v3.12.3"', None), ], ) -def test_module_get_helm_version(ansible_helm_module, output, expected): - - ansible_helm_module.run_command = MagicMock() - ansible_helm_module.run_command.return_value = (0, output, "error") +def test_module_get_helm_version(_ansible_helm_module, output, expected): + _ansible_helm_module.run_command = MagicMock() + _ansible_helm_module.run_command.return_value = (0, output, "error") - result = ansible_helm_module.get_helm_version() + result = _ansible_helm_module.get_helm_version() - ansible_helm_module.get_helm_binary.assert_called_once() + _ansible_helm_module.get_helm_binary.assert_called_once() command = "some/path/to/helm/executable version" - ansible_helm_module.run_command.assert_called_once_with(command) + _ansible_helm_module.run_command.assert_called_once_with(command) assert result == expected -def test_module_run_helm_command(ansible_helm_module): - +def test_module_run_helm_command(_ansible_helm_module): error = "".join( random.choice(string.ascii_letters + string.digits) for x in range(10) ) @@ -232,27 +224,26 @@ def test_module_run_helm_command(ansible_helm_module): random.choice(string.ascii_letters + string.digits) for x in range(10) ) - ansible_helm_module.run_command.return_value = (0, output, error) + _ansible_helm_module.run_command.return_value = (0, output, error) - ansible_helm_module._prepare_helm_environment = MagicMock() + _ansible_helm_module._prepare_helm_environment = MagicMock() env_update = {x: random.choice(string.ascii_letters) for x in range(10)} - ansible_helm_module._prepare_helm_environment.return_value = env_update + _ansible_helm_module._prepare_helm_environment.return_value = env_update command = "".join( random.choice(string.ascii_letters + string.digits) for x in range(10) ) - rc, out, err = ansible_helm_module.run_helm_command(command) + rc, out, err = _ansible_helm_module.run_helm_command(command) assert (rc, out, err) == (0, output, error) - ansible_helm_module.run_command.assert_called_once_with( + _ansible_helm_module.run_command.assert_called_once_with( command, environ_update=env_update ) @pytest.mark.parametrize("fails_on_error", [True, False]) -def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error): - +def test_module_run_helm_command_failure(_ansible_helm_module, fails_on_error): error = "".join( random.choice(string.ascii_letters + string.digits) for x in range(10) ) @@ -260,9 +251,9 @@ def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error): random.choice(string.ascii_letters + string.digits) for x in range(10) ) return_code = random.randint(1, 10) - ansible_helm_module.run_command.return_value = (return_code, output, error) + _ansible_helm_module.run_command.return_value = (return_code, output, error) - ansible_helm_module._prepare_environment = MagicMock() + _ansible_helm_module._prepare_environment = MagicMock() command = "".join( random.choice(string.ascii_letters + string.digits) for x in range(10) @@ -270,10 +261,10 @@ def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error): if fails_on_error: with pytest.raises(SystemExit): - rc, out, err = ansible_helm_module.run_helm_command( + rc, out, err = _ansible_helm_module.run_helm_command( command, fails_on_error=fails_on_error ) - ansible_helm_module.fail_json.assert_called_with( + _ansible_helm_module.fail_json.assert_called_with( msg="Failure when executing Helm command. Exited {0}.\nstdout: {1}\nstderr: {2}".format( return_code, output, error ), @@ -282,7 +273,7 @@ def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error): command=command, ) else: - rc, out, err = ansible_helm_module.run_helm_command( + rc, out, err = _ansible_helm_module.run_helm_command( command, fails_on_error=fails_on_error ) assert (rc, out, err) == (return_code, output, error) @@ -311,7 +302,6 @@ def test_module_run_helm_command_failure(ansible_helm_module, fails_on_error): ], ) def test_module_prepare_helm_environment(params, env_update, kubeconfig): - module = MagicMock() module.params = params @@ -355,7 +345,6 @@ def test_module_prepare_helm_environment(params, env_update, kubeconfig): def test_module_prepare_helm_environment_with_validate_certs( helm_version, is_env_var_set ): - module = MagicMock() module.params = {"validate_certs": False} @@ -387,7 +376,6 @@ def test_module_prepare_helm_environment_with_validate_certs( ], ) def test_module_prepare_helm_environment_with_ca_cert(helm_version, is_env_var_set): - ca_cert = "".join( random.choice(string.ascii_letters + string.digits) for i in range(50) ) @@ -441,7 +429,6 @@ def test_module_prepare_helm_environment_with_ca_cert(helm_version, is_env_var_s ], ) def test_module_get_helm_set_values_args(set_values, expected): - module = MagicMock() module.params = {} module.fail_json.side_effect = SystemExit(1) diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_runner.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_runner.py index 45c6f29aa..a0555c411 100644 --- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_runner.py +++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_runner.py @@ -1,12 +1,11 @@ -import pytest from copy import deepcopy from unittest.mock import Mock -from kubernetes.dynamic.resource import ResourceInstance - +import pytest from ansible_collections.kubernetes.core.plugins.module_utils.k8s.runner import ( perform_action, ) +from kubernetes.dynamic.resource import ResourceInstance definition = { "apiVersion": "v1", diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_service.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_service.py index a1822de61..980336176 100644 --- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_service.py +++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_service.py @@ -1,14 +1,12 @@ from unittest.mock import Mock import pytest -from kubernetes.dynamic.resource import ResourceInstance, Resource - from ansible_collections.kubernetes.core.plugins.module_utils.k8s.service import ( K8sService, diff_objects, ) - from kubernetes.dynamic.exceptions import NotFoundError +from kubernetes.dynamic.resource import Resource, ResourceInstance pod_definition = { "apiVersion": "v1", diff --git a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_waiter.py b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_waiter.py index b5ce10a51..e63019ec7 100644 --- a/ansible_collections/kubernetes/core/tests/unit/module_utils/test_waiter.py +++ b/ansible_collections/kubernetes/core/tests/unit/module_utils/test_waiter.py @@ -5,20 +5,19 @@ from unittest.mock import Mock import pytest import yaml -from kubernetes.dynamic.resource import ResourceInstance -from kubernetes.dynamic.exceptions import NotFoundError - from ansible_collections.kubernetes.core.plugins.module_utils.k8s.waiter import ( + DummyWaiter, + Waiter, clock, custom_condition, deployment_ready, - DummyWaiter, exists, get_waiter, pod_ready, resource_absent, - Waiter, ) +from kubernetes.dynamic.exceptions import NotFoundError +from kubernetes.dynamic.resource import ResourceInstance def resources(filepath): diff --git a/ansible_collections/kubernetes/core/tests/unit/modules/test_helm_template_module.py b/ansible_collections/kubernetes/core/tests/unit/modules/test_helm_template_module.py index 9fd98e4c8..0ff6ad016 100644 --- a/ansible_collections/kubernetes/core/tests/unit/modules/test_helm_template_module.py +++ b/ansible_collections/kubernetes/core/tests/unit/modules/test_helm_template_module.py @@ -7,14 +7,13 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import unittest - from unittest.mock import patch from ansible.module_utils import basic from ansible_collections.kubernetes.core.plugins.modules import helm_template from ansible_collections.kubernetes.core.tests.unit.utils.ansible_module_mock import ( - AnsibleFailJson, AnsibleExitJson, + AnsibleFailJson, exit_json, fail_json, get_bin_path, diff --git a/ansible_collections/kubernetes/core/tests/unit/modules/test_module_helm.py b/ansible_collections/kubernetes/core/tests/unit/modules/test_module_helm.py index ca61cf3ef..199bd828f 100644 --- a/ansible_collections/kubernetes/core/tests/unit/modules/test_module_helm.py +++ b/ansible_collections/kubernetes/core/tests/unit/modules/test_module_helm.py @@ -7,14 +7,13 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import unittest - -from unittest.mock import MagicMock, patch, call +from unittest.mock import MagicMock, call, patch from ansible.module_utils import basic from ansible_collections.kubernetes.core.plugins.modules import helm from ansible_collections.kubernetes.core.tests.unit.utils.ansible_module_mock import ( - AnsibleFailJson, AnsibleExitJson, + AnsibleFailJson, exit_json, fail_json, get_bin_path, @@ -87,12 +86,12 @@ class TestDependencyUpdateWithoutChartRepoUrlOption(unittest.TestCase): helm.main() helm.run_dep_update.assert_not_called() mock_run_command.assert_called_once_with( - "/usr/bin/helm upgrade -i --reset-values test /tmp/path", + "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'", environ_update={"HELM_NAMESPACE": "test"}, ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm upgrade -i --reset-values test /tmp/path" + == "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'" ) def test_dependency_update_option_false(self): @@ -117,12 +116,12 @@ class TestDependencyUpdateWithoutChartRepoUrlOption(unittest.TestCase): helm.main() helm.run_dep_update.assert_not_called() mock_run_command.assert_called_once_with( - "/usr/bin/helm upgrade -i --reset-values test /tmp/path", + "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'", environ_update={"HELM_NAMESPACE": "test"}, ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm upgrade -i --reset-values test /tmp/path" + == "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'" ) def test_dependency_update_option_true(self): @@ -146,14 +145,14 @@ class TestDependencyUpdateWithoutChartRepoUrlOption(unittest.TestCase): mock_run_command.assert_has_calls( [ call( - "/usr/bin/helm upgrade -i --reset-values test /tmp/path", + "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'", environ_update={"HELM_NAMESPACE": "test"}, ) ] ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm upgrade -i --reset-values test /tmp/path" + == "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'" ) def test_dependency_update_option_true_without_dependencies_block(self): @@ -180,14 +179,14 @@ class TestDependencyUpdateWithoutChartRepoUrlOption(unittest.TestCase): mock_run_command.assert_has_calls( [ call( - "/usr/bin/helm upgrade -i --reset-values test /tmp/path", + "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'", environ_update={"HELM_NAMESPACE": "test"}, ) ] ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm upgrade -i --reset-values test /tmp/path" + == "/usr/bin/helm upgrade -i --reset-values test '/tmp/path'" ) @@ -250,12 +249,12 @@ class TestDependencyUpdateWithChartRepoUrlOption(unittest.TestCase): with self.assertRaises(AnsibleExitJson) as result: helm.main() mock_run_command.assert_called_once_with( - "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test chart1", + "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'", environ_update={"HELM_NAMESPACE": "test"}, ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test chart1" + == "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'" ) def test_dependency_update_option_False(self): @@ -279,12 +278,12 @@ class TestDependencyUpdateWithChartRepoUrlOption(unittest.TestCase): with self.assertRaises(AnsibleExitJson) as result: helm.main() mock_run_command.assert_called_once_with( - "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test chart1", + "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'", environ_update={"HELM_NAMESPACE": "test"}, ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test chart1" + == "/usr/bin/helm --repo=http://repo.example/charts upgrade -i --reset-values test 'chart1'" ) def test_dependency_update_option_True_and_replace_option_disabled(self): @@ -337,12 +336,12 @@ class TestDependencyUpdateWithChartRepoUrlOption(unittest.TestCase): with self.assertRaises(AnsibleExitJson) as result: helm.main() mock_run_command.assert_called_once_with( - "/usr/bin/helm --repo=http://repo.example/charts install --dependency-update --replace test chart1", + "/usr/bin/helm --repo=http://repo.example/charts install --dependency-update --replace test 'chart1'", environ_update={"HELM_NAMESPACE": "test"}, ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm --repo=http://repo.example/charts install --dependency-update --replace test chart1" + == "/usr/bin/helm --repo=http://repo.example/charts install --dependency-update --replace test 'chart1'" ) @@ -404,12 +403,12 @@ class TestDependencyUpdateWithChartRefIsUrl(unittest.TestCase): with self.assertRaises(AnsibleExitJson) as result: helm.main() mock_run_command.assert_called_once_with( - "/usr/bin/helm upgrade -i --reset-values test http://repo.example/charts/application.tgz", + "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'", environ_update={"HELM_NAMESPACE": "test"}, ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm upgrade -i --reset-values test http://repo.example/charts/application.tgz" + == "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'" ) def test_dependency_update_option_False(self): @@ -432,12 +431,12 @@ class TestDependencyUpdateWithChartRefIsUrl(unittest.TestCase): with self.assertRaises(AnsibleExitJson) as result: helm.main() mock_run_command.assert_called_once_with( - "/usr/bin/helm upgrade -i --reset-values test http://repo.example/charts/application.tgz", + "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'", environ_update={"HELM_NAMESPACE": "test"}, ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm upgrade -i --reset-values test http://repo.example/charts/application.tgz" + == "/usr/bin/helm upgrade -i --reset-values test 'http://repo.example/charts/application.tgz'" ) def test_dependency_update_option_True_and_replace_option_disabled(self): @@ -488,10 +487,10 @@ class TestDependencyUpdateWithChartRefIsUrl(unittest.TestCase): with self.assertRaises(AnsibleExitJson) as result: helm.main() mock_run_command.assert_called_once_with( - "/usr/bin/helm install --dependency-update --replace test http://repo.example/charts/application.tgz", + "/usr/bin/helm install --dependency-update --replace test 'http://repo.example/charts/application.tgz'", environ_update={"HELM_NAMESPACE": "test"}, ) assert ( result.exception.args[0]["command"] - == "/usr/bin/helm install --dependency-update --replace test http://repo.example/charts/application.tgz" + == "/usr/bin/helm install --dependency-update --replace test 'http://repo.example/charts/application.tgz'" ) diff --git a/ansible_collections/kubernetes/core/tox.ini b/ansible_collections/kubernetes/core/tox.ini index 491046ec3..e2d15b071 100644 --- a/ansible_collections/kubernetes/core/tox.ini +++ b/ansible_collections/kubernetes/core/tox.ini @@ -2,6 +2,9 @@ minversion = 1.4.2 skipsdist = True +[common] +format_dirs = {toxinidir}/plugins {toxinidir}/tests + [testenv:integration] install_command = pip install {opts} {packages} @@ -19,20 +22,41 @@ commands= deps = git+https://github.com/ansible-network/collection_prep commands = collection_prep_add_docs -p . -[testenv:black] +[testenv:black_check] deps = black >= 22.0, < 23.0 commands = black -v --check --diff {toxinidir}/plugins {toxinidir}/tests +[testenv:black] +depends = + flynt, isort +deps = + black >=23.0, <24.0 +commands = + black -v {[common]format_dirs} + +[testenv:isort] +deps = + isort +commands = + isort --profile black {[common]format_dirs} + +[testenv:flynt] +deps = + flynt +commands = + flynt {[common]format_dirs} + [testenv:linters] deps = - yamllint - flake8 {[testenv:black]deps} - + {[testenv:isort]deps} + flake8 + yamllint commands = - black -v --check --diff {toxinidir}/plugins {toxinidir}/tests + black -v --check {toxinidir}/plugins {toxinidir}/tests + isort --profile black --check-only --diff {toxinidir}/plugins {toxinidir}/tests + flake8 {posargs} {toxinidir}/plugins {toxinidir}/tests yamllint -s {toxinidir} - flake8 {toxinidir} |