From 8fa5b201a48153539ee8309b5ca2840ca1f3ecb2 Mon Sep 17 00:00:00 2001 From: Bianca Henderson Date: Tue, 3 Jun 2025 12:56:33 -0400 Subject: [PATCH] Prep release `6.0.0` (#933) SUMMARY Prep kubernetes.core 6.0.0 Prerequisite: Release of community.okd/redhat.openshift 4.0.2 needs to happen first ISSUE TYPE Feature Pull Request COMPONENT NAME Multiple Reviewed-by: Bikouo Aubin --- CHANGELOG.rst | 16 +++- Makefile | 2 +- README.md | 2 +- changelogs/changelog.yaml | 8 ++ .../20250121-breaking-changes-6.0.0.yml | 4 - docs/kubernetes.core.helm_module.rst | 23 ++++++ docs/kubernetes.core.helm_pull_module.rst | 3 +- ...kubernetes.core.helm_repository_module.rst | 21 +++++ docs/kubernetes.core.k8s_info_module.rst | 3 +- docs/kubernetes.core.k8s_module.rst | 3 +- galaxy.yml | 2 +- meta/runtime.yml | 3 +- tests/unit/module_utils/test_core.py | 76 ++++++++++++------- 13 files changed, 124 insertions(+), 42 deletions(-) delete mode 100644 changelogs/fragments/20250121-breaking-changes-6.0.0.yml diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 278f8262..c915a13a 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -4,6 +4,20 @@ Kubernetes Collection Release Notes .. contents:: Topics +v6.0.0 +====== + +Release Summary +--------------- + +This major release removes the deprecated ``k8s`` inventory plugin and also removes ``ansible-core<2.16`` support. + +Breaking Changes / Porting Guide +-------------------------------- + +- Remove deprecated ``k8s`` invetory plugin (https://github.com/ansible-collections/kubernetes.core/pull/867). +- Remove support for ``ansible-core<2.16`` (https://github.com/ansible-collections/kubernetes.core/pull/867). + v5.3.0 ====== @@ -124,7 +138,7 @@ Bugfixes - integrations test helm_kubeconfig - set helm version to v3.10.3 to avoid incompatability with new bitnami charts (https://github.com/ansible-collections/kubernetes.core/pull/670). v3.3.1 -======= +====== Release Summary --------------- diff --git a/Makefile b/Makefile index 80b41f31..31f827f7 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ # Also needs to be updated in galaxy.yml -VERSION = 6.0.0-dev0 +VERSION = 6.0.0 TEST_ARGS ?= "" PYTHON_VERSION ?= `python -c 'import platform; print(".".join(platform.python_version_tuple()[0:2]))'` diff --git a/README.md b/README.md index 15e1ea42..c6e21f38 100644 --- a/README.md +++ b/README.md @@ -101,7 +101,7 @@ You can also include it in a `requirements.yml` file and install it via `ansible --- collections: - name: kubernetes.core - version: 5.2.0 + version: 6.0.0 ``` ### Installing the Kubernetes Python Library diff --git a/changelogs/changelog.yaml b/changelogs/changelog.yaml index ff63f8b2..ea81ac8d 100644 --- a/changelogs/changelog.yaml +++ b/changelogs/changelog.yaml @@ -1044,3 +1044,11 @@ releases: - 898-k8s-dont-delete-in-check-mode.yaml - 919-update-ansible-lint-version.yaml release_date: '2025-05-16' + 6.0.0: + changes: + breaking_changes: + - Remove deprecated ``k8s`` invetory plugin (https://github.com/ansible-collections/kubernetes.core/pull/867). + - Remove support for ``ansible-core<2.16`` (https://github.com/ansible-collections/kubernetes.core/pull/867). + fragments: + - 20250121-breaking-changes-6.0.0.yml + release_date: '2025-05-19' diff --git a/changelogs/fragments/20250121-breaking-changes-6.0.0.yml b/changelogs/fragments/20250121-breaking-changes-6.0.0.yml deleted file mode 100644 index 811b02fc..00000000 --- a/changelogs/fragments/20250121-breaking-changes-6.0.0.yml +++ /dev/null @@ -1,4 +0,0 @@ ---- -breaking_changes: - - Remove support for ``ansible-core<2.16`` (https://github.com/ansible-collections/kubernetes.core/pull/867). - - Remove deprecated ``k8s`` invetory plugin (https://github.com/ansible-collections/kubernetes.core/pull/867). diff --git a/docs/kubernetes.core.helm_module.rst b/docs/kubernetes.core.helm_module.rst index 998b0b57..e7df00d3 100644 --- a/docs/kubernetes.core.helm_module.rst +++ b/docs/kubernetes.core.helm_module.rst @@ -289,6 +289,29 @@ Parameters
Provide a URL for accessing the API. Can also be specified via K8S_AUTH_HOST environment variable.
+ + +
+ insecure_skip_tls_verify + +
+ boolean +
+
added in 5.3.0
+ + + + + +
Skip tls certificate checks for the chart download.
+
Do not confuse with the validate_certs option.
+
This option is only available for helm >= 3.16.0.
+

aliases: skip_tls_certs_check
+ +
diff --git a/docs/kubernetes.core.helm_pull_module.rst b/docs/kubernetes.core.helm_pull_module.rst index 1c1af065..ac3cc5c5 100644 --- a/docs/kubernetes.core.helm_pull_module.rst +++ b/docs/kubernetes.core.helm_pull_module.rst @@ -279,7 +279,8 @@ Parameters
Whether or not to check tls certificate for the chart download.
-
Requires helm >= 3.3.0.
+
Requires helm >= 3.3.0. Alias insecure_skip_tls_verify added in 5.3.0.
+

aliases: insecure_skip_tls_verify
diff --git a/docs/kubernetes.core.helm_repository_module.rst b/docs/kubernetes.core.helm_repository_module.rst index ee4169ee..d2a8ecf1 100644 --- a/docs/kubernetes.core.helm_repository_module.rst +++ b/docs/kubernetes.core.helm_repository_module.rst @@ -143,6 +143,27 @@ Parameters
Provide a URL for accessing the API. Can also be specified via K8S_AUTH_HOST environment variable.
+ + +
+ insecure_skip_tls_verify + +
+ boolean +
+
added in 5.3.0
+ + + + + +
Skip tls certificate checks for the repository url.
+

aliases: skip_tls_certs_check
+ +
diff --git a/docs/kubernetes.core.k8s_info_module.rst b/docs/kubernetes.core.k8s_info_module.rst index 15121a2c..cbd56feb 100644 --- a/docs/kubernetes.core.k8s_info_module.rst +++ b/docs/kubernetes.core.k8s_info_module.rst @@ -174,8 +174,7 @@ Parameters
Hide fields matching any of the field definitions in the result
-
An example might be hidden_fields=[metadata.managedFields]
-
Only field definitions that don't reference list items are supported (so V(spec.containers[0]) would not work)
+
An example might be hidden_fields=[metadata.managedFields] or V(hidden_fields=[spec.containers[0].env[3].value]) or V(hidden_fields=[metadata.annotations[kubectl.kubernetes.io/last-applied-configuration]])
diff --git a/docs/kubernetes.core.k8s_module.rst b/docs/kubernetes.core.k8s_module.rst index cac063e6..de083a9c 100644 --- a/docs/kubernetes.core.k8s_module.rst +++ b/docs/kubernetes.core.k8s_module.rst @@ -395,8 +395,7 @@ Parameters
Hide fields matching this option in the result
-
An example might be hidden_fields=[metadata.managedFields]
-
Only field definitions that don't reference list items are supported (so V(spec.containers[0]) would not work)
+
An example might be hidden_fields=[metadata.managedFields] or V(hidden_fields=[spec.containers[0].env[3].value]) or V(hidden_fields=[metadata.annotations[kubectl.kubernetes.io/last-applied-configuration]])
diff --git a/galaxy.yml b/galaxy.yml index 6f7c2d12..79689671 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -25,7 +25,7 @@ tags: - openshift - okd - cluster -version: 6.0.0-dev0 +version: 6.0.0 build_ignore: - .DS_Store - "*.tar.gz" diff --git a/meta/runtime.yml b/meta/runtime.yml index bde8842f..4547408a 100644 --- a/meta/runtime.yml +++ b/meta/runtime.yml @@ -22,8 +22,7 @@ plugin_routing: redirect: community.okd.openshift k8s: tombstone: - # To be replaced with 6.0.0 in release 6.0.0 commit - removal_version: 6.0.0-dev0 + removal_version: 6.0.0 warning_text: >- The k8s inventory plugin was slated for deprecation in 3.3.0 and has been removed in release 6.0.0. Use kubernetes.core.k8s_info and ansible.builtin.add_host instead. modules: diff --git a/tests/unit/module_utils/test_core.py b/tests/unit/module_utils/test_core.py index 05e9b689..65ea1a2c 100644 --- a/tests/unit/module_utils/test_core.py +++ b/tests/unit/module_utils/test_core.py @@ -2,50 +2,57 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import json +import re import kubernetes import pytest from ansible_collections.kubernetes.core.plugins.module_utils.k8s.core import ( AnsibleK8SModule, ) +from mock import MagicMock, patch MINIMAL_K8S_VERSION = "24.2.0" UNSUPPORTED_K8S_VERSION = "11.0.0" -@pytest.mark.parametrize("stdin", [{}], indirect=["stdin"]) -def test_no_warn(monkeypatch, stdin, capfd): +class FakeAnsibleModule: + def __init__(self, **kwargs): + pass + + def exit_json(self): + raise SystemExit(0) + + +@patch.object(AnsibleK8SModule, "warn") +def test_no_warn(m_ansible_k8s_module_warn, monkeypatch, capfd): monkeypatch.setattr(kubernetes, "__version__", MINIMAL_K8S_VERSION) - module = AnsibleK8SModule(argument_spec={}) + m_ansible_k8s_module_warn.side_effect = print + module = AnsibleK8SModule(argument_spec={}, module_class=FakeAnsibleModule) with pytest.raises(SystemExit): module.exit_json() out, err = capfd.readouterr() - - return_value = json.loads(out) - - assert return_value.get("exception") is None - assert return_value.get("warnings") is None - assert return_value.get("failed") is None + m_ansible_k8s_module_warn.assert_not_called() -@pytest.mark.parametrize("stdin", [{}], indirect=["stdin"]) -def test_warn_on_k8s_version(monkeypatch, stdin, capfd): +@patch.object(AnsibleK8SModule, "warn") +def test_warn_on_k8s_version(m_ansible_k8s_module_warn, monkeypatch, capfd): monkeypatch.setattr(kubernetes, "__version__", UNSUPPORTED_K8S_VERSION) - module = AnsibleK8SModule(argument_spec={}) + m_ansible_k8s_module_warn.side_effect = print + module = AnsibleK8SModule(argument_spec={}, module_class=FakeAnsibleModule) with pytest.raises(SystemExit): module.exit_json() + + m_ansible_k8s_module_warn.assert_called_once() out, err = capfd.readouterr() - - return_value = json.loads(out) - - assert return_value.get("warnings") is not None - warnings = return_value["warnings"] - assert len(warnings) == 1 - assert "kubernetes" in str(warnings[0]) - assert MINIMAL_K8S_VERSION in str(warnings[0]) + assert ( + re.search( + r"kubernetes<([0-9]+\.[0-9]+\.[0-9]+) is not supported or tested. Some features may not work.", + out, + ) + is not None + ) dependencies = [ @@ -58,9 +65,17 @@ dependencies = [ @pytest.mark.parametrize( "stdin,desired,actual,result", [({}, *d) for d in dependencies], indirect=["stdin"] ) -def test_has_at_least(monkeypatch, stdin, desired, actual, result, capfd): +@patch.object(AnsibleK8SModule, "warn") +def test_has_at_least( + m_ansible_k8s_module_warn, monkeypatch, stdin, desired, actual, result, capfd +): monkeypatch.setattr(kubernetes, "__version__", actual) + def fake_warn(x): + print(x) + raise SystemExit(1) + + m_ansible_k8s_module_warn.side_effect = fake_warn module = AnsibleK8SModule(argument_spec={}) assert module.has_at_least("kubernetes", desired) is result @@ -80,11 +95,18 @@ def test_requires_fails_with_message( monkeypatch, stdin, dependency, version, msg, capfd ): monkeypatch.setattr(kubernetes, "__version__", "24.2.0") - module = AnsibleK8SModule(argument_spec={}) + module = AnsibleK8SModule(argument_spec={}, module_class=FakeAnsibleModule) + + def fake_fail_json(**kwargs): + print(f"Printing message => {kwargs}") + print(kwargs.get("msg")) + raise SystemExit(1) + + module.fail_json = MagicMock() + module.fail_json.side_effect = fake_fail_json + with pytest.raises(SystemExit): module.requires(dependency, version) + module.fail_json.assert_called_once() out, err = capfd.readouterr() - return_value = json.loads(out) - - assert return_value.get("failed") - assert msg in return_value.get("msg") + assert msg in out