diff --git a/.gitignore b/.gitignore index 7a90162..9594499 100644 --- a/.gitignore +++ b/.gitignore @@ -69,5 +69,21 @@ /ansible-documentation-2.16.11.tar.gz /ansible-core-2.16.12.tar.gz /ansible-documentation-2.16.12.tar.gz -/ansible-core-2.16.14.tar.gz -/ansible-documentation-2.16.14.tar.gz +/ansible-core-2.18.0.tar.gz +/ansible-documentation-2.18.0.tar.gz +/ansible-core-2.18.1.tar.gz +/ansible-documentation-2.18.1.tar.gz +/ansible-core-2.18.3.tar.gz +/ansible-documentation-2.18.3.tar.gz +/ansible-core-2.18.4.tar.gz +/ansible-documentation-2.18.4.tar.gz +/ansible-core-2.18.6.tar.gz +/ansible-documentation-2.18.6.tar.gz +/ansible-core-2.18.7.tar.gz +/ansible-documentation-2.18.7.tar.gz +/ansible-core-2.18.9.tar.gz +/ansible-documentation-2.18.9.tar.gz +/ansible-core-2.18.11.tar.gz +/ansible-documentation-2.18.11.tar.gz +/ansible-core-2.20.1.tar.gz +/ansible-documentation-2.20.1.tar.gz diff --git a/.packit.yaml b/.packit.yaml new file mode 100644 index 0000000..118fa81 --- /dev/null +++ b/.packit.yaml @@ -0,0 +1,30 @@ +# See the documentation for more information: +# https://packit.dev/docs/configuration/ + +upstream_project_url: https://github.com/ansible/ansible +upstream_tag_template: v{version} +issue_repository: https://pagure.io/ansible-packit-issues +create_sync_note: false +# TODO: Remove pending https://fedoraproject.org/wiki/Changes/Ansible13 +upstream_tag_include: "v2.18" +jobs: + - job: pull_from_upstream + trigger: release + dist_git_branches: + # Fast forward merge rawhide while it is held at v2.18. + rawhide: + fast_forward_merge_into: + - fedora-43 + - fedora-42 + - job: koji_build + trigger: commit + dist_git_branches: + - fedora-all + sidetag_group: "ansible" + dependents: + - ansible + # The update for the sidetag group is created in the ansible package. + # - job: bodhi_update + # trigger: commit + # dist_git_branches: + # - rawhide diff --git a/0001-apt-handle-options-while-installing-python3-apt-8291.patch b/0001-apt-handle-options-while-installing-python3-apt-8291.patch deleted file mode 100644 index 2ea4fcd..0000000 --- a/0001-apt-handle-options-while-installing-python3-apt-8291.patch +++ /dev/null @@ -1,107 +0,0 @@ -From 47da1bead9ad6d5fbf8e1f9f18d5ea9294342696 Mon Sep 17 00:00:00 2001 -From: Abhijeet Kasurde -Date: Tue, 26 Mar 2024 08:16:27 -0700 -Subject: [PATCH 1/2] apt: handle options while installing python3-apt (#82913) - -* apt: handle options while installing python3-apt - -* While installing python3-apt library, honor parameter - such as install_recommends and dpkg_options - -Fixes: #40608 - -Signed-off-by: Abhijeet Kasurde - -* Review changes - -Signed-off-by: Abhijeet Kasurde - ---------- - -Signed-off-by: Abhijeet Kasurde -(cherry picked from commit 8fec1575e63b259311de1fa3505769eeb4696665) ---- - changelogs/fragments/apt_install.yml | 3 +++ - lib/ansible/modules/apt.py | 30 ++++++++++++++++++---------- - 2 files changed, 22 insertions(+), 11 deletions(-) - create mode 100644 changelogs/fragments/apt_install.yml - -diff --git a/changelogs/fragments/apt_install.yml b/changelogs/fragments/apt_install.yml -new file mode 100644 -index 0000000000..84dfaed78a ---- /dev/null -+++ b/changelogs/fragments/apt_install.yml -@@ -0,0 +1,3 @@ -+--- -+bugfixes: -+ - apt - honor install_recommends and dpkg_options while installing python3-apt library (https://github.com/ansible/ansible/issues/40608). -diff --git a/lib/ansible/modules/apt.py b/lib/ansible/modules/apt.py -index 336eadde54..8eca4decb2 100644 ---- a/lib/ansible/modules/apt.py -+++ b/lib/ansible/modules/apt.py -@@ -1246,6 +1246,15 @@ def main(): - ) - module.run_command_environ_update = APT_ENV_VARS - -+ global APTITUDE_CMD -+ APTITUDE_CMD = module.get_bin_path("aptitude", False) -+ global APT_GET_CMD -+ APT_GET_CMD = module.get_bin_path("apt-get") -+ -+ p = module.params -+ install_recommends = p['install_recommends'] -+ dpkg_options = expand_dpkg_options(p['dpkg_options']) -+ - if not HAS_PYTHON_APT: - # This interpreter can't see the apt Python library- we'll do the following to try and fix that: - # 1) look in common locations for system-owned interpreters that can see it; if we find one, respawn under it -@@ -1284,10 +1293,18 @@ def main(): - module.warn("Auto-installing missing dependency without updating cache: %s" % apt_pkg_name) - else: - module.warn("Updating cache and auto-installing missing dependency: %s" % apt_pkg_name) -- module.run_command(['apt-get', 'update'], check_rc=True) -+ module.run_command([APT_GET_CMD, 'update'], check_rc=True) - - # try to install the apt Python binding -- module.run_command(['apt-get', 'install', '--no-install-recommends', apt_pkg_name, '-y', '-q'], check_rc=True) -+ apt_pkg_cmd = [APT_GET_CMD, 'install', apt_pkg_name, '-y', '-q', dpkg_options] -+ -+ if install_recommends is False: -+ apt_pkg_cmd.extend(["-o", "APT::Install-Recommends=no"]) -+ elif install_recommends is True: -+ apt_pkg_cmd.extend(["-o", "APT::Install-Recommends=yes"]) -+ # install_recommends is None uses the OS default -+ -+ module.run_command(apt_pkg_cmd, check_rc=True) - - # try again to find the bindings in common places - interpreter = probe_interpreters_for_module(interpreters, 'apt') -@@ -1301,13 +1318,6 @@ def main(): - # we've done all we can do; just tell the user it's busted and get out - module.fail_json(msg="{0} must be installed and visible from {1}.".format(apt_pkg_name, sys.executable)) - -- global APTITUDE_CMD -- APTITUDE_CMD = module.get_bin_path("aptitude", False) -- global APT_GET_CMD -- APT_GET_CMD = module.get_bin_path("apt-get") -- -- p = module.params -- - if p['clean'] is True: - aptclean_stdout, aptclean_stderr, aptclean_diff = aptclean(module) - # If there is nothing else to do exit. This will set state as -@@ -1331,11 +1341,9 @@ def main(): - - updated_cache = False - updated_cache_time = 0 -- install_recommends = p['install_recommends'] - allow_unauthenticated = p['allow_unauthenticated'] - allow_downgrade = p['allow_downgrade'] - allow_change_held_packages = p['allow_change_held_packages'] -- dpkg_options = expand_dpkg_options(p['dpkg_options']) - autoremove = p['autoremove'] - fail_on_autoremove = p['fail_on_autoremove'] - autoclean = p['autoclean'] --- -2.47.0 - diff --git a/0002-dnf5-apt-add-auto_install_module_deps-option-84292.patch b/0002-dnf5-apt-add-auto_install_module_deps-option-84292.patch deleted file mode 100644 index a9f29b2..0000000 --- a/0002-dnf5-apt-add-auto_install_module_deps-option-84292.patch +++ /dev/null @@ -1,324 +0,0 @@ -From ad10b351811dfe4d98a4f7c50f219495c7d17285 Mon Sep 17 00:00:00 2001 -From: Martin Krizek -Date: Thu, 21 Nov 2024 17:06:18 +0100 -Subject: [PATCH 2/2] dnf5,apt: add auto_install_module_deps option (#84292) - -* dnf5,apt: add auto_install_module_deps option - -Fixes #84206 - -(cherry picked from commit 2a53b851fee8ebaa07c1341122dd905354659237) ---- - ...4206-dnf5-apt-auto-install-module-deps.yml | 2 + - lib/ansible/modules/apt.py | 84 +++++++++++-------- - lib/ansible/modules/dnf5.py | 52 +++++++++--- - test/integration/targets/apt/tasks/apt.yml | 28 +++++-- - test/integration/targets/dnf5/playbook.yml | 17 +++- - 5 files changed, 128 insertions(+), 55 deletions(-) - create mode 100644 changelogs/fragments/84206-dnf5-apt-auto-install-module-deps.yml - -diff --git a/changelogs/fragments/84206-dnf5-apt-auto-install-module-deps.yml b/changelogs/fragments/84206-dnf5-apt-auto-install-module-deps.yml -new file mode 100644 -index 0000000000..14d595449c ---- /dev/null -+++ b/changelogs/fragments/84206-dnf5-apt-auto-install-module-deps.yml -@@ -0,0 +1,2 @@ -+minor_changes: -+ - dnf5, apt - add ``auto_install_module_deps`` option (https://github.com/ansible/ansible/issues/84206) -diff --git a/lib/ansible/modules/apt.py b/lib/ansible/modules/apt.py -index 8eca4decb2..eab58b82ee 100644 ---- a/lib/ansible/modules/apt.py -+++ b/lib/ansible/modules/apt.py -@@ -18,6 +18,12 @@ description: - - Manages I(apt) packages (such as for Debian/Ubuntu). - version_added: "0.0.2" - options: -+ auto_install_module_deps: -+ description: -+ - Automatically install dependencies required to run this module. -+ type: bool -+ default: yes -+ version_added: 2.19 - name: - description: - - A list of package names, like V(foo), or package specifier with version, like V(foo=1.0) or V(foo>=1.0). -@@ -214,6 +220,9 @@ notes: - - When used with a C(loop:) each package will be processed individually, it is much more efficient to pass the list directly to the O(name) option. - - When O(default_release) is used, an implicit priority of 990 is used. This is the same behavior as C(apt-get -t). - - When an exact version is specified, an implicit priority of 1001 is used. -+ - If the interpreter can't import C(python3-apt) the module will check for it in system-owned interpreters as well. -+ If the dependency can't be found, depending on the value of O(auto_install_module_deps) the module will attempt to install it. -+ If the dependency is found or installed, the module will be respawned under the correct interpreter. - ''' - - EXAMPLES = ''' -@@ -1224,6 +1233,7 @@ def main(): - allow_downgrade=dict(type='bool', default=False, aliases=['allow-downgrade', 'allow_downgrades', 'allow-downgrades']), - allow_change_held_packages=dict(type='bool', default=False), - lock_timeout=dict(type='int', default=60), -+ auto_install_module_deps=dict(type='bool', default=True), - ), - mutually_exclusive=[['deb', 'package', 'upgrade']], - required_one_of=[['autoremove', 'deb', 'package', 'update_cache', 'upgrade']], -@@ -1284,39 +1294,47 @@ def main(): - - # don't make changes if we're in check_mode - if module.check_mode: -- module.fail_json(msg="%s must be installed to use check mode. " -- "If run normally this module can auto-install it." % apt_pkg_name) -- -- # We skip cache update in auto install the dependency if the -- # user explicitly declared it with update_cache=no. -- if module.params.get('update_cache') is False: -- module.warn("Auto-installing missing dependency without updating cache: %s" % apt_pkg_name) -- else: -- module.warn("Updating cache and auto-installing missing dependency: %s" % apt_pkg_name) -- module.run_command([APT_GET_CMD, 'update'], check_rc=True) -- -- # try to install the apt Python binding -- apt_pkg_cmd = [APT_GET_CMD, 'install', apt_pkg_name, '-y', '-q', dpkg_options] -- -- if install_recommends is False: -- apt_pkg_cmd.extend(["-o", "APT::Install-Recommends=no"]) -- elif install_recommends is True: -- apt_pkg_cmd.extend(["-o", "APT::Install-Recommends=yes"]) -- # install_recommends is None uses the OS default -- -- module.run_command(apt_pkg_cmd, check_rc=True) -- -- # try again to find the bindings in common places -- interpreter = probe_interpreters_for_module(interpreters, 'apt') -- -- if interpreter: -- # found the Python bindings; respawn this module under the interpreter where we found them -- # NB: respawn is somewhat wasteful if it's this interpreter, but simplifies the code -- respawn_module(interpreter) -- # this is the end of the line for this process, it will exit here once the respawned module has completed -- else: -- # we've done all we can do; just tell the user it's busted and get out -- module.fail_json(msg="{0} must be installed and visible from {1}.".format(apt_pkg_name, sys.executable)) -+ module.fail_json( -+ msg=f"{apt_pkg_name} must be installed to use check mode. " -+ "If run normally this module can auto-install it, " -+ "see the auto_install_module_deps option.", -+ ) -+ elif p['auto_install_module_deps']: -+ # We skip cache update in auto install the dependency if the -+ # user explicitly declared it with update_cache=no. -+ if module.params.get('update_cache') is False: -+ module.warn("Auto-installing missing dependency without updating cache: %s" % apt_pkg_name) -+ else: -+ module.warn("Updating cache and auto-installing missing dependency: %s" % apt_pkg_name) -+ module.run_command([APT_GET_CMD, 'update'], check_rc=True) -+ -+ # try to install the apt Python binding -+ apt_pkg_cmd = [APT_GET_CMD, 'install', apt_pkg_name, '-y', '-q', dpkg_options] -+ -+ if install_recommends is False: -+ apt_pkg_cmd.extend(["-o", "APT::Install-Recommends=no"]) -+ elif install_recommends is True: -+ apt_pkg_cmd.extend(["-o", "APT::Install-Recommends=yes"]) -+ # install_recommends is None uses the OS default -+ -+ module.run_command(apt_pkg_cmd, check_rc=True) -+ -+ # try again to find the bindings in common places -+ interpreter = probe_interpreters_for_module(interpreters, 'apt') -+ -+ if interpreter: -+ # found the Python bindings; respawn this module under the interpreter where we found them -+ # NB: respawn is somewhat wasteful if it's this interpreter, but simplifies the code -+ respawn_module(interpreter) -+ # this is the end of the line for this process, it will exit here once the respawned module has completed -+ -+ # we've done all we can do; just tell the user it's busted and get out -+ py_version = sys.version.replace("\n", "") -+ module.fail_json( -+ msg=f"Could not import the {apt_pkg_name} module using {sys.executable} ({py_version}). " -+ f"Ensure {apt_pkg_name} package is installed (either manually or via the auto_install_module_deps option) " -+ f"or that you have specified the correct ansible_python_interpreter. (attempted {interpreters}).", -+ ) - - if p['clean'] is True: - aptclean_stdout, aptclean_stderr, aptclean_diff = aptclean(module) -diff --git a/lib/ansible/modules/dnf5.py b/lib/ansible/modules/dnf5.py -index 160676a828..335786328f 100644 ---- a/lib/ansible/modules/dnf5.py -+++ b/lib/ansible/modules/dnf5.py -@@ -15,6 +15,12 @@ description: - provides are implemented in M(ansible.builtin.dnf5), please consult specific options for more information." - short_description: Manages packages with the I(dnf5) package manager - options: -+ auto_install_module_deps: -+ description: -+ - Automatically install dependencies required to run this module. -+ type: bool -+ default: yes -+ version_added: 2.19 - name: - description: - - "A package name or package specifier with version, like C(name-1.0). -@@ -238,6 +244,10 @@ attributes: - requirements: - - "python3" - - "python3-libdnf5" -+notes: -+ - If the interpreter can't import C(python3-libdnf5) the module will check for it in system-owned interpreters as well. -+ If the dependency can't be found, depending on the value of O(auto_install_module_deps) the module will attempt to install it. -+ If the dependency is found or installed, the module will be respawned under the correct interpreter. - version_added: 2.15 - """ - -@@ -432,6 +442,8 @@ def get_unneeded_pkgs(base): - class Dnf5Module(YumDnf): - def __init__(self, module): - super(Dnf5Module, self).__init__(module) -+ self.auto_install_module_deps = self.module.params["auto_install_module_deps"] -+ - self._ensure_dnf() - - # FIXME https://github.com/rpm-software-management/dnf5/issues/402 -@@ -465,21 +477,30 @@ class Dnf5Module(YumDnf): - ] - - if not has_respawned(): -- # probe well-known system Python locations for accessible bindings, favoring py3 -- interpreter = probe_interpreters_for_module(system_interpreters, "libdnf5") -- -- if interpreter: -- # respawn under the interpreter where the bindings should be found -- respawn_module(interpreter) -- # end of the line for this module, the process will exit here once the respawned module completes -+ for attempt in (1, 2): -+ # probe well-known system Python locations for accessible bindings -+ interpreter = probe_interpreters_for_module(system_interpreters, "libdnf5") -+ if interpreter: -+ # respawn under the interpreter where the bindings should be found -+ respawn_module(interpreter) -+ # end of the line for this module, the process will exit here once the respawned module completes -+ if attempt == 1: -+ if self.module.check_mode: -+ self.module.fail_json( -+ msg="python3-libdnf5 must be installed to use check mode. " -+ "If run normally this module can auto-install it, " -+ "see the auto_install_module_deps option.", -+ ) -+ elif self.auto_install_module_deps: -+ self.module.run_command(["dnf", "install", "-y", "python3-libdnf5"], check_rc=True) -+ else: -+ break - -- # done all we can do, something is just broken (auto-install isn't useful anymore with respawn, so it was removed) -+ py_version = sys.version.replace("\n", "") - self.module.fail_json( -- msg="Could not import the libdnf5 python module using {0} ({1}). " -- "Please install python3-libdnf5 package or ensure you have specified the " -- "correct ansible_python_interpreter. (attempted {2})".format( -- sys.executable, sys.version.replace("\n", ""), system_interpreters -- ), -+ msg=f"Could not import the libdnf5 python module using {sys.executable} ({py_version}). " -+ "Ensure python3-libdnf5 package is installed (either manually or via the auto_install_module_deps option) " -+ f"or that you have specified the correct ansible_python_interpreter. (attempted {system_interpreters}).", - failures=[], - ) - -@@ -735,6 +756,11 @@ def main(): - # backported to yum because yum is now in "maintenance mode" upstream - yumdnf_argument_spec["argument_spec"]["allowerasing"] = dict(default=False, type="bool") - yumdnf_argument_spec["argument_spec"]["nobest"] = dict(default=False, type="bool") -+ yumdnf_argument_spec["argument_spec"].update( -+ dict( -+ auto_install_module_deps=dict(type="bool", default=True), -+ ) -+ ) - Dnf5Module(AnsibleModule(**yumdnf_argument_spec)).run() - - -diff --git a/test/integration/targets/apt/tasks/apt.yml b/test/integration/targets/apt/tasks/apt.yml -index a0bc19929f..c3e198eec1 100644 ---- a/test/integration/targets/apt/tasks/apt.yml -+++ b/test/integration/targets/apt/tasks/apt.yml -@@ -8,17 +8,17 @@ - distro_mirror: http://archive.ubuntu.com/ubuntu - when: ansible_distribution == 'Ubuntu' - --# UNINSTALL 'python-apt' --# The `apt` module has the smarts to auto-install `python-apt(3)`. To test, we --# will first uninstall `python-apt`. --- name: uninstall python-apt with apt -+# UNINSTALL 'python3-apt' -+# The `apt` module has the smarts to auto-install `python3-apt`. To test, we -+# will first uninstall `python3-apt`. -+- name: uninstall python3-apt with apt - apt: -- pkg: [python-apt, python3-apt] -+ pkg: python3-apt - state: absent - purge: yes - register: apt_result - --# In check mode, auto-install of `python-apt` must fail -+# In check mode, auto-install of `python3-apt` must fail - - name: test fail uninstall hello without required apt deps in check mode - apt: - pkg: hello -@@ -32,13 +32,25 @@ - assert: - that: - - apt_result is failed -- - '"If run normally this module can auto-install it." in apt_result.msg' -+ - '"If run normally this module can auto-install it" in apt_result.msg' - - - name: check with dpkg -- shell: dpkg -s python-apt python3-apt -+ shell: dpkg -s python3-apt - register: dpkg_result - ignore_errors: true - -+- name: Test the auto_install_module_deps option -+ apt: -+ pkg: hello -+ auto_install_module_deps: false -+ register: r -+ ignore_errors: true -+ -+- assert: -+ that: -+ - r is failed -+ - r.msg is contains("Could not import the python3-apt module") -+ - # UNINSTALL 'hello' - # With 'python-apt' uninstalled, the first call to 'apt' should install - # python-apt without updating the cache. -diff --git a/test/integration/targets/dnf5/playbook.yml b/test/integration/targets/dnf5/playbook.yml -index 1c1f122ef6..4c2fe6d482 100644 ---- a/test/integration/targets/dnf5/playbook.yml -+++ b/test/integration/targets/dnf5/playbook.yml -@@ -1,8 +1,23 @@ - - hosts: localhost - tasks: - - block: -- - command: dnf install -y python3-libdnf5 -+ - name: Ensure module deps are not installed -+ command: dnf remove -y python3-libdnf5 - -+ - name: Test the auto_install_module_deps option -+ dnf5: -+ name: sos -+ auto_install_module_deps: false -+ register: r -+ ignore_errors: true -+ -+ - assert: -+ that: -+ - r is failed -+ - r.msg is contains("Could not import the libdnf5 python module") -+ -+ # Now the first dnf5 task in the dnf role should auto install python3-libdnf5 as -+ # auto_install_module_deps is true by default. - - include_role: - name: dnf - vars: --- -2.47.0 - diff --git a/ansible-core.spec b/ansible-core.spec index f3985fd..4df897f 100644 --- a/ansible-core.spec +++ b/ansible-core.spec @@ -12,95 +12,62 @@ # disable the python -s shbang flag as we want to be able to find non system modules %undefine _py3_shebang_s -Name: ansible-core -Summary: A radically simple IT automation system -Version: 2.16.14 +Name: ansible-core +Version: 2.20.1 %global uversion %{version_no_tilde %{quote:%nil}} -Release: 1%{?dist} +Release: 2%{?dist} +Summary: A radically simple IT automation system + # The main license is GPLv3+. Many of the files in lib/ansible/module_utils # are BSD licensed. There are various files scattered throughout the codebase # containing code under different licenses. -License: GPL-3.0-or-later AND BSD-2-Clause AND PSF-2.0 AND MIT AND Apache-2.0 +# The ssh-agent helper code is BSD-3-Clause. +License: GPL-3.0-or-later AND BSD-2-Clause AND BSD-3-Clause AND PSF-2.0 AND MIT AND Apache-2.0 +URL: https://ansible.com -Source0: https://github.com/ansible/ansible/archive/v%{uversion}/%{name}-%{uversion}.tar.gz -Source1: https://github.com/ansible/ansible-documentation/archive/v%{uversion}/ansible-documentation-%{uversion}.tar.gz +Source0: https://github.com/ansible/ansible/archive/v%{uversion}/%{name}-%{uversion}.tar.gz +Source1: https://github.com/ansible/ansible-documentation/archive/v%{uversion}/ansible-documentation-%{uversion}.tar.gz -# ansible-core 2.16 does not support Python 3.13 and upstream does not plan to do so until 2.18 -# This downstream-only patch makes it possible to build 2.16 with Python 3.13 -Patch: python3.13.patch - -# apt: handle options while installing python3-apt (#82913) -# https://github.com/ansible/ansible/pull/82913 -# This patch is a pre-req for the following patch -Patch: 0001-apt-handle-options-while-installing-python3-apt-8291.patch -# dnf5,apt: add auto_install_module_deps option (#84292) -# https://github.com/ansible/ansible/pull/84292.patch -# https://bugzilla.redhat.com/2322751 -Patch: 0002-dnf5-apt-add-auto_install_module_deps-option-84292.patch - -Url: https://ansible.com -BuildArch: noarch +BuildArch: noarch # Virtual provides for bundled libraries # Search for `_BUNDLED_METADATA` to find them -# lib/ansible/module_utils/urls.py -# SPDX-License-Identifier: BSD-2-Clause AND PSF-2.0 -Provides: bundled(python3dist(backports-ssl-match-hostname)) = 3.7.0.1 - # lib/ansible/module_utils/distro/* # SPDX-License-Identifier: Apache-2.0 -Provides: bundled(python3dist(distro)) = 1.6.0 +Provides: bundled(python3dist(distro)) = 1.9.0 # lib/ansible/module_utils/six/* # SPDX-License-Identifier: MIT -Provides: bundled(python3dist(six)) = 1.16.0 +Provides: bundled(python3dist(six)) = 1.17.0 -# lib/ansible/module_utils/compat/selectors.py -# SPDX-License-Identifier: GPL-3.0-or-later -Provides: bundled(python3dist(selectors2)) = 1.1.1 +# lib/ansible/_internal/_wrapt.py +# SPDX-License-Identifier: BSD-2-Clause +Provides: bundled(python3dist(wrapt)) = 1.17.2 -# lib/ansible/module_utils/compat/ipaddress.py -# SPDX-License-Identifier: PSF-2.0 -Provides: bundled(python3dist(ipaddress)) = 1.0.22 - -Conflicts: ansible <= 2.9.99 -# -# obsoletes/provides for ansible-base -# -Provides: ansible-base = %{version}-%{release} -Obsoletes: ansible-base < 2.10.6-1 - -BuildRequires: make -BuildRequires: python%{python3_pkgversion}-devel +BuildRequires: make +BuildRequires: python%{python3_pkgversion}-devel # This is only used in %%prep to relax the required setuptools version, # which is not necessary in RHEL 10+. # Not using it in RHEL avoids unwanted dependencies. %if %{undefined rhel} -BuildRequires: tomcli >= 0.3.0 +BuildRequires: tomcli >= 0.3.0 %endif # Needed to build manpages from source. -BuildRequires: python%{python3_pkgversion}-docutils +BuildRequires: python%{python3_pkgversion}-docutils %if %{with tests} -BuildRequires: git-core -BuildRequires: glibc-all-langpacks -BuildRequires: python%{python3_pkgversion}-systemd - -%if v"0%{?python3_version}" >= v"3.13" -# Use crypt_r on Python 3.13+ -# https://github.com/ansible/ansible/issues/82758 -# Upstream has removed the dependency on crypt from ansible 2.17+ -BuildRequires: python%{python3_pkgversion}-crypt-r -%endif +BuildRequires: git-core +BuildRequires: glibc-all-langpacks +BuildRequires: python%{python3_pkgversion}-systemd %endif %if %{with argcomplete} -Requires: python%{python3_pkgversion}-argcomplete +Requires: python%{python3_pkgversion}-argcomplete %endif %if 0%{?fedora} >= 39 -BuildRequires: python3-libdnf5 -Recommends: python3-libdnf5 +BuildRequires: python3-libdnf5 +Recommends: python3-libdnf5 %endif @@ -116,9 +83,9 @@ are transferred to managed machines automatically.} This is the base part of ansible (the engine). %package doc -Summary: Documentation for Ansible Core -Provides: ansible-base-doc = %{version}-%{release} -Obsoletes: ansible-base-doc < 2.10.6-1 +Summary: Documentation for Ansible Core +Provides: ansible-base-doc = %{version}-%{release} +Obsoletes: ansible-base-doc < 2.10.6-1 %description doc %_description @@ -267,8 +234,8 @@ install -Dpm 0644 licenses/* -t %{buildroot}%{_pkglicensedir} %files -f %{pyproject_files} %license COPYING -%license %{_pkglicensedir}/{Apache-License,MIT-license,PSF-license,simplified_bsd}.txt -%doc README.md changelogs/CHANGELOG-v2.1?.rst +%license %{_pkglicensedir}/{Apache-License,MIT-license,PSF-license,simplified_bsd,BSD-3-Clause}.txt +%doc README.md changelogs/CHANGELOG-v2.2?.rst %dir %{_sysconfdir}/ansible/ %config(noreplace) %{_sysconfdir}/ansible/* %{_bindir}/ansible* @@ -287,10 +254,60 @@ install -Dpm 0644 licenses/* -t %{buildroot}%{_pkglicensedir} %changelog -* Wed Dec 18 2024 Maxwell G - 2.16.14-1 -- Update to 2.16.14. +* Fri Jan 16 2026 Fedora Release Engineering - 2.20.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild + +* Tue Dec 09 2025 Maxwell G - 2.20.1-1 +- Update to 2.20.1. Fixes rhbz#2382388. +- Update bundled() Provides +- Remove upstreamed patches +- Remove old Provides and Obsoletes for ansible-base and Ansible <= 2.9 + +* Mon Nov 17 2025 Packit - 2.18.11-1 +- Update to version 2.18.11 + +* Sat Sep 27 2025 Maxwell G - 2.18.9-1 +- Update to 2.18.9. + +* Fri Sep 19 2025 Python Maint - 2.18.7-4 +- Rebuilt for Python 3.14.0rc3 bytecode + +* Fri Aug 15 2025 Python Maint - 2.18.7-3 +- Rebuilt for Python 3.14.0rc2 bytecode + +* Wed Jul 23 2025 Fedora Release Engineering - 2.18.7-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Wed Jul 16 2025 Maxwell G - 2.18.7-1 +- Update to 2.18.7. Fixes rhbz#2380244. + +* Sat Jun 07 2025 Maxwell G - 2.18.6-2 +- Add initial support for Python 3.14 (rhbz#2366307) + +* Sat Jun 07 2025 Maxwell G - 2.18.6-1 +- Update to 2.18.6. Fixes rhbz#2354908. + +* Tue Jun 03 2025 Python Maint - 2.18.4-2 +- Rebuilt for Python 3.14 + +* Tue Mar 25 2025 Packit - 2.18.4-1 +- Update to version 2.18.4 +- Resolves: rhbz#2354908 + +* Mon Mar 17 2025 Packit - 2.18.3-1 +- Update to version 2.18.3 +- Resolves: rhbz#2342365 + +* Thu Jan 16 2025 Fedora Release Engineering - 2.18.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Dec 04 2024 Maxwell G - 2.18.1-1 +- Update to 2.18.1. Fixes rhbz#2330005. - dnf5 - backport support for automatically installing python3-libdnf5 (rhbz#2322751). +* Tue Nov 26 2024 Maxwell G - 2.18.0-1 +- Update to 2.18.0. Fixes rhbz#2282011. + * Fri Oct 11 2024 Maxwell G - 2.16.12-1 - Update to 2.16.12. diff --git a/python3.13.patch b/python3.13.patch deleted file mode 100644 index 80fc84c..0000000 --- a/python3.13.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 54fc9d327d272c3d1d02a9c44d609a027b67105c Mon Sep 17 00:00:00 2001 -From: Karolina Surma -Date: Thu, 23 May 2024 12:38:22 +0200 -Subject: [PATCH] Make it possible to build with Python 3.13 - ---- - test/lib/ansible_test/_data/requirements/ansible-test.txt | 2 +- - test/lib/ansible_test/_internal/coverage_util.py | 2 +- - test/lib/ansible_test/_util/target/common/constants.py | 1 + - 3 files changed, 3 insertions(+), 2 deletions(-) - -diff --git a/test/lib/ansible_test/_data/requirements/ansible-test.txt b/test/lib/ansible_test/_data/requirements/ansible-test.txt -index 17662f0..2b725a9 100644 ---- a/test/lib/ansible_test/_data/requirements/ansible-test.txt -+++ b/test/lib/ansible_test/_data/requirements/ansible-test.txt -@@ -1,5 +1,5 @@ - # The test-constraints sanity test verifies this file, but changes must be made manually to keep it in up-to-date. - virtualenv == 16.7.12 ; python_version < '3' --coverage == 7.3.2 ; python_version >= '3.8' and python_version <= '3.12' -+coverage == 7.3.2 ; python_version >= '3.8' and python_version <= '3.13' - coverage == 6.5.0 ; python_version >= '3.7' and python_version <= '3.7' - coverage == 4.5.4 ; python_version >= '2.6' and python_version <= '3.6' -diff --git a/test/lib/ansible_test/_internal/coverage_util.py b/test/lib/ansible_test/_internal/coverage_util.py -index 3017623..f437110 100644 ---- a/test/lib/ansible_test/_internal/coverage_util.py -+++ b/test/lib/ansible_test/_internal/coverage_util.py -@@ -69,7 +69,7 @@ class CoverageVersion: - - COVERAGE_VERSIONS = ( - # IMPORTANT: Keep this in sync with the ansible-test.txt requirements file. -- CoverageVersion('7.3.2', 7, (3, 8), (3, 12)), -+ CoverageVersion('7.3.2', 7, (3, 8), (3, 13)), - CoverageVersion('6.5.0', 7, (3, 7), (3, 7)), - CoverageVersion('4.5.4', 0, (2, 6), (3, 6)), - ) -diff --git a/test/lib/ansible_test/_util/target/common/constants.py b/test/lib/ansible_test/_util/target/common/constants.py -index 36a5a2c..db81f6b 100644 ---- a/test/lib/ansible_test/_util/target/common/constants.py -+++ b/test/lib/ansible_test/_util/target/common/constants.py -@@ -17,4 +17,5 @@ CONTROLLER_PYTHON_VERSIONS = ( - '3.10', - '3.11', - '3.12', -+ '3.13', - ) --- -2.45.0 - diff --git a/sources b/sources index 7098617..47c7d63 100644 --- a/sources +++ b/sources @@ -1,2 +1,2 @@ -SHA512 (ansible-core-2.16.14.tar.gz) = 6a375db9481be199b0bd1fd41ffc7631bd69cab1ebdacdb0a41f42cdba60ee4916a3eb4238fd865b5b75f4f32ba42a9ee073d56d6986ce3aecf27bb75f02898c -SHA512 (ansible-documentation-2.16.14.tar.gz) = 6241289f243c582701133d3a3add14456e6bccca796fcaae6f5124df8e13027f59563ef745a81581e73b42a12c4af38f1745760759bb4abd7fc6e489c3d9277f +SHA512 (ansible-core-2.20.1.tar.gz) = fa0a4836e3548cd4e432e87b241beb6fb556765699c25b1f3b1c47111a1c44d5ba3244aeb8793408e72ab63564d6e848148becbfb550bd965e466752d7f78229 +SHA512 (ansible-documentation-2.20.1.tar.gz) = 0dc20cb62280c715e4b06788a5eb2c757c388d0da646a38fc3ab56e38d236ddb0fd7586a567d973e530ed3ed2310ff26542cdb0e1621e0049147dc747e20205b