Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package ansible-core for openSUSE:Factory checked in at 2025-04-24 17:27:06 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/ansible-core (Old) and /work/SRC/openSUSE:Factory/.ansible-core.new.30101 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ansible-core" Thu Apr 24 17:27:06 2025 rev:42 rq:1272411 version:2.18.5 Changes: -------- --- /work/SRC/openSUSE:Factory/ansible-core/ansible-core.changes 2025-03-26 21:22:12.603493491 +0100 +++ /work/SRC/openSUSE:Factory/.ansible-core.new.30101/ansible-core.changes 2025-04-24 17:29:03.918277378 +0200 @@ -1,0 +2,18 @@ +Thu Apr 24 06:56:16 UTC 2025 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- update to 2.18.5: + * Bugfixes + - build - Pin wheel in pyproject.toml to ensure compatibility + with supported setuptools versions. + - dnf5 - Handle forwarded exceptions from dnf5-5.2.13 where a + generic RuntimeError was previously raised + - find - skip ENOENT error code while recursively enumerating + files. find module will now be tolerant to race conditions + that remove files or directories from the target it is + currently inspecting. (#84873). + - gather_facts action, will now add setup when 'smart' appears + with other modules in the FACTS_MODULES setting (#84750). + - uri - Form location correctly when the server returns a + relative redirect (#84540) + +------------------------------------------------------------------- Old: ---- ansible_core-2.18.4.tar.gz ansible_core-2.18.4.tar.gz.sha256 New: ---- ansible_core-2.18.5.tar.gz ansible_core-2.18.5.tar.gz.sha256 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ ansible-core.spec ++++++ --- /var/tmp/diff_new_pack.qscx1O/_old 2025-04-24 17:29:04.494301553 +0200 +++ /var/tmp/diff_new_pack.qscx1O/_new 2025-04-24 17:29:04.498301721 +0200 @@ -43,7 +43,7 @@ %endif Name: ansible-core -Version: 2.18.4 +Version: 2.18.5 Release: 0 Summary: Radically simple IT automation License: GPL-3.0-or-later ++++++ ansible_core-2.18.4.tar.gz -> ansible_core-2.18.5.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/PKG-INFO new/ansible_core-2.18.5/PKG-INFO --- old/ansible_core-2.18.4/PKG-INFO 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/PKG-INFO 2025-04-21 23:51:57.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.2 Name: ansible-core -Version: 2.18.4 +Version: 2.18.5 Summary: Radically simple IT automation Author: Ansible Project Project-URL: Homepage, https://ansible.com/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/ansible_core.egg-info/PKG-INFO new/ansible_core-2.18.5/ansible_core.egg-info/PKG-INFO --- old/ansible_core-2.18.4/ansible_core.egg-info/PKG-INFO 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/ansible_core.egg-info/PKG-INFO 2025-04-21 23:51:57.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.2 Name: ansible-core -Version: 2.18.4 +Version: 2.18.5 Summary: Radically simple IT automation Author: Ansible Project Project-URL: Homepage, https://ansible.com/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/ansible_core.egg-info/SOURCES.txt new/ansible_core-2.18.5/ansible_core.egg-info/SOURCES.txt --- old/ansible_core-2.18.4/ansible_core.egg-info/SOURCES.txt 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/ansible_core.egg-info/SOURCES.txt 2025-04-21 23:51:57.000000000 +0200 @@ -2002,6 +2002,7 @@ test/integration/targets/gathering_facts/one_two.json test/integration/targets/gathering_facts/prevent_clobbering.yml test/integration/targets/gathering_facts/runme.sh +test/integration/targets/gathering_facts/smart_added.yml test/integration/targets/gathering_facts/test_gathering_facts.yml test/integration/targets/gathering_facts/test_module_defaults.yml test/integration/targets/gathering_facts/test_prevent_injection.yml @@ -3457,6 +3458,7 @@ test/integration/targets/setup_paramiko/uninstall-RedHat-9-python-3.yml test/integration/targets/setup_paramiko/uninstall-apt-python-3.yml test/integration/targets/setup_paramiko/uninstall-dnf.yml +test/integration/targets/setup_paramiko/uninstall-dnf5.yml test/integration/targets/setup_paramiko/uninstall-fail.yml test/integration/targets/setup_paramiko/uninstall-yum.yml test/integration/targets/setup_paramiko/uninstall-zypper-python-3.yml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/changelogs/CHANGELOG-v2.18.rst new/ansible_core-2.18.5/changelogs/CHANGELOG-v2.18.rst --- old/ansible_core-2.18.4/changelogs/CHANGELOG-v2.18.rst 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/changelogs/CHANGELOG-v2.18.rst 2025-04-21 23:51:57.000000000 +0200 @@ -4,6 +4,24 @@ .. contents:: Topics +v2.18.5 +======= + +Release Summary +--------------- + +| Release Date: 2025-04-21 +| `Porting Guide <https://docs.ansible.com/ansible-core/2.18/porting_guides/porting_guide_core_2.18.html>`__ + +Bugfixes +-------- + +- build - Pin ``wheel`` in ``pyproject.toml`` to ensure compatibility with supported ``setuptools`` versions. +- dnf5 - Handle forwarded exceptions from dnf5-5.2.13 where a generic ``RuntimeError`` was previously raised +- find - skip ENOENT error code while recursively enumerating files. find module will now be tolerant to race conditions that remove files or directories from the target it is currently inspecting. (https://github.com/ansible/ansible/issues/84873). +- gather_facts action, will now add setup when 'smart' appears with other modules in the FACTS_MODULES setting (#84750). +- uri - Form location correctly when the server returns a relative redirect (https://github.com/ansible/ansible/issues/84540) + v2.18.4 ======= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/changelogs/changelog.yaml new/ansible_core-2.18.5/changelogs/changelog.yaml --- old/ansible_core-2.18.4/changelogs/changelog.yaml 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/changelogs/changelog.yaml 2025-04-21 23:51:57.000000000 +0200 @@ -780,3 +780,42 @@ - respawn-min-python.yml - win-wdac-audit.yml release_date: '2025-03-17' + 2.18.5: + changes: + release_summary: '| Release Date: 2025-04-21 + + | `Porting Guide <https://docs.ansible.com/ansible-core/2.18/porting_guides/porting_guide_core_2.18.html>`__ + + ' + codename: Fool in the Rain + fragments: + - 2.18.5_summary.yaml + release_date: '2025-04-21' + 2.18.5rc1: + changes: + bugfixes: + - build - Pin ``wheel`` in ``pyproject.toml`` to ensure compatibility with supported + ``setuptools`` versions. + - dnf5 - Handle forwarded exceptions from dnf5-5.2.13 where a generic ``RuntimeError`` + was previously raised + - find - skip ENOENT error code while recursively enumerating files. find module + will now be tolerant to race conditions that remove files or directories from + the target it is currently inspecting. (https://github.com/ansible/ansible/issues/84873). + - gather_facts action, will now add setup when 'smart' appears with other modules + in the FACTS_MODULES setting (#84750). + - uri - Form location correctly when the server returns a relative redirect + (https://github.com/ansible/ansible/issues/84540) + release_summary: '| Release Date: 2025-04-14 + + | `Porting Guide <https://docs.ansible.com/ansible-core/2.18/porting_guides/porting_guide_core_2.18.html>`__ + + ' + codename: Fool in the Rain + fragments: + - 2.18.5rc1_summary.yaml + - 84540-uri-relative-redirect.yml + - dnf5-exception-forwarding.yml + - find_enoent.yml + - gather_facts_smart_fix.yml + - pin-wheel.yml + release_date: '2025-04-14' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/lib/ansible/module_utils/ansible_release.py new/ansible_core-2.18.5/lib/ansible/module_utils/ansible_release.py --- old/ansible_core-2.18.4/lib/ansible/module_utils/ansible_release.py 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/lib/ansible/module_utils/ansible_release.py 2025-04-21 23:51:57.000000000 +0200 @@ -17,6 +17,6 @@ from __future__ import annotations -__version__ = '2.18.4' +__version__ = '2.18.5' __author__ = 'Ansible, Inc.' __codename__ = "Fool in the Rain" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/lib/ansible/modules/dnf5.py new/ansible_core-2.18.5/lib/ansible/modules/dnf5.py --- old/ansible_core-2.18.4/lib/ansible/modules/dnf5.py 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/lib/ansible/modules/dnf5.py 2025-04-21 23:51:57.000000000 +0200 @@ -354,6 +354,8 @@ from ansible.module_utils.yumdnf import YumDnf, yumdnf_argument_spec libdnf5 = None +# Through dnf5-5.2.12 all exceptions raised through swig became RuntimeError +LIBDNF5_ERROR = RuntimeError def is_installed(base, spec): @@ -411,7 +413,7 @@ try: spec_nevra = next(iter(libdnf5.rpm.Nevra.parse(spec))) - except (RuntimeError, StopIteration): + except (LIBDNF5_ERROR, StopIteration): return False spec_version = spec_nevra.get_version() @@ -503,12 +505,19 @@ os.environ["LANGUAGE"] = os.environ["LANG"] = locale global libdnf5 + global LIBDNF5_ERROR has_dnf = True try: import libdnf5 # type: ignore[import] except ImportError: has_dnf = False + try: + import libdnf5.exception # type: ignore[import-not-found] + LIBDNF5_ERROR = libdnf5.exception.Error + except (ImportError, AttributeError): + pass + if has_dnf: return @@ -553,7 +562,7 @@ try: base.load_config() - except RuntimeError as e: + except LIBDNF5_ERROR as e: self.module.fail_json( msg=str(e), conf_file=self.conf_file, @@ -716,7 +725,7 @@ for spec in self.names: try: goal.add_remove(spec, settings) - except RuntimeError as e: + except LIBDNF5_ERROR as e: self.module.fail_json(msg=str(e), failures=[], rc=1) if self.autoremove: for pkg in get_unneeded_pkgs(base): @@ -725,7 +734,7 @@ goal.set_allow_erasing(self.allowerasing) try: transaction = goal.resolve() - except RuntimeError as e: + except LIBDNF5_ERROR as e: self.module.fail_json(msg=str(e), failures=[], rc=1) if transaction.get_problems(): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/lib/ansible/modules/find.py new/ansible_core-2.18.5/lib/ansible/modules/find.py --- old/ansible_core-2.18.4/lib/ansible/modules/find.py 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/lib/ansible/modules/find.py 2025-04-21 23:51:57.000000000 +0200 @@ -513,7 +513,7 @@ skipped = {} def handle_walk_errors(e): - if e.errno in (errno.EPERM, errno.EACCES): + if e.errno in (errno.EPERM, errno.EACCES, errno.ENOENT): skipped[e.filename] = to_text(e) return raise e diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/lib/ansible/modules/import_role.py new/ansible_core-2.18.5/lib/ansible/modules/import_role.py --- old/ansible_core-2.18.4/lib/ansible/modules/import_role.py 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/lib/ansible/modules/import_role.py 2025-04-21 23:51:57.000000000 +0200 @@ -59,7 +59,7 @@ description: - This option dictates whether the role's C(vars) and C(defaults) are exposed to the play. - Variables are exposed to the play at playbook parsing time, and available to earlier roles and tasks as well unlike C(include_role). - - The default depends on the configuration option :ref:`default_private_role_vars`. + - The default depends on the configuration option R(DEFAULT_PRIVATE_ROLE_VARS, DEFAULT_PRIVATE_ROLE_VARS). type: bool default: yes version_added: '2.17' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/lib/ansible/modules/uri.py new/ansible_core-2.18.5/lib/ansible/modules/uri.py --- old/ansible_core-2.18.4/lib/ansible/modules/uri.py 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/lib/ansible/modules/uri.py 2025-04-21 23:51:57.000000000 +0200 @@ -448,7 +448,7 @@ from ansible.module_utils.basic import AnsibleModule, sanitize_keys from ansible.module_utils.six import binary_type, iteritems, string_types -from ansible.module_utils.six.moves.urllib.parse import urlencode, urlsplit +from ansible.module_utils.six.moves.urllib.parse import urlencode, urljoin from ansible.module_utils.common.text.converters import to_native, to_text from ansible.module_utils.compat.datetime import utcnow, utcfromtimestamp from ansible.module_utils.six.moves.collections_abc import Mapping, Sequence @@ -505,27 +505,6 @@ os.remove(tmpsrc) -def absolute_location(url, location): - """Attempts to create an absolute URL based on initial URL, and - next URL, specifically in the case of a ``Location`` header. - """ - - if '://' in location: - return location - - elif location.startswith('/'): - parts = urlsplit(url) - base = url.replace(parts[2], '') - return '%s%s' % (base, location) - - elif not location.startswith('/'): - base = os.path.dirname(url) - return '%s/%s' % (base, location) - - else: - return location - - def kv_list(data): ''' Convert data into a list of key-value tuples ''' if data is None: @@ -766,7 +745,7 @@ uresp[ukey] = value if 'location' in uresp: - uresp['location'] = absolute_location(url, uresp['location']) + uresp['location'] = urljoin(url, uresp['location']) # Default content_encoding to try if isinstance(content, binary_type): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/lib/ansible/modules/wait_for.py new/ansible_core-2.18.5/lib/ansible/modules/wait_for.py --- old/ansible_core-2.18.4/lib/ansible/modules/wait_for.py 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/lib/ansible/modules/wait_for.py 2025-04-21 23:51:57.000000000 +0200 @@ -187,17 +187,19 @@ host: '{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}' search_regex: OpenSSH delay: 10 - connection: local + timeout: 300 + delegate_to: localhost -# Same as above but you normally have ansible_connection set in inventory, which overrides 'connection' +# Same as above but using config lookup for the target, +# most plugins use 'remote_addr', but ssh uses 'host' - name: Wait 300 seconds for port 22 to become open and contain "OpenSSH" ansible.builtin.wait_for: port: 22 - host: '{{ (ansible_ssh_host|default(ansible_host))|default(inventory_hostname) }}' + host: "{{ lookup('config', 'host', plugin_name='ssh', plugin_type='connection') }}" search_regex: OpenSSH delay: 10 - vars: - ansible_connection: local + timeout: 300 + delegate_to: localhost ''' RETURN = r''' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/lib/ansible/plugins/action/gather_facts.py new/ansible_core-2.18.5/lib/ansible/plugins/action/gather_facts.py --- old/ansible_core-2.18.4/lib/ansible/plugins/action/gather_facts.py 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/lib/ansible/plugins/action/gather_facts.py 2025-04-21 23:51:57.000000000 +0200 @@ -95,7 +95,7 @@ self._display.warning("Detected 'setup' module and a network OS is set, the output when running it will reflect 'localhost'" " and not the target when a netwoking connection plugin is used.") - elif not set(modules).difference(set(C._ACTION_SETUP)): + elif not set(modules).intersection(set(C._ACTION_SETUP)): # no network OS and setup not in list, add setup by default since 'smart' modules.append('ansible.legacy.setup') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/lib/ansible/plugins/filter/human_to_bytes.yml new/ansible_core-2.18.5/lib/ansible/plugins/filter/human_to_bytes.yml --- old/ansible_core-2.18.4/lib/ansible/plugins/filter/human_to_bytes.yml 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/lib/ansible/plugins/filter/human_to_bytes.yml 2025-04-21 23:51:57.000000000 +0200 @@ -8,7 +8,7 @@ options: _input: description: human-readable description of a number of bytes. - type: int + type: string required: true default_unit: description: Unit to assume when input does not specify it. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/lib/ansible/release.py new/ansible_core-2.18.5/lib/ansible/release.py --- old/ansible_core-2.18.4/lib/ansible/release.py 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/lib/ansible/release.py 2025-04-21 23:51:57.000000000 +0200 @@ -17,6 +17,6 @@ from __future__ import annotations -__version__ = '2.18.4' +__version__ = '2.18.5' __author__ = 'Ansible, Inc.' __codename__ = "Fool in the Rain" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/pyproject.toml new/ansible_core-2.18.5/pyproject.toml --- old/ansible_core-2.18.4/pyproject.toml 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/pyproject.toml 2025-04-21 23:51:57.000000000 +0200 @@ -1,5 +1,5 @@ [build-system] -requires = ["setuptools >= 66.1.0, <= 76.0.0"] # lower bound to support controller Python versions, upper bound for latest version tested at release +requires = ["setuptools >= 66.1.0, <= 76.0.0", "wheel == 0.45.1"] # lower bound to support controller Python versions, upper bound for latest version tested at release build-backend = "setuptools.build_meta" [project] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/test/integration/targets/gathering_facts/runme.sh new/ansible_core-2.18.5/test/integration/targets/gathering_facts/runme.sh --- old/ansible_core-2.18.4/test/integration/targets/gathering_facts/runme.sh 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/test/integration/targets/gathering_facts/runme.sh 2025-04-21 23:51:57.000000000 +0200 @@ -45,4 +45,7 @@ # ensure we warn on setup + network OS ANSIBLE_FACTS_MODULES='smart, setup' ansible -m gather_facts localhost -e 'ansible_network_os="N/A"' "$@" 2>&1 | grep "Detected 'setup' module and a network OS is set" +# ensure run setup when smart+ and no network OS +ANSIBLE_FACTS_MODULES='smart, facts_one' ansible-playbook smart_added.yml -i inventory "$@" + rm "${OUTPUT_DIR}/canary.txt" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/test/integration/targets/gathering_facts/smart_added.yml new/ansible_core-2.18.5/test/integration/targets/gathering_facts/smart_added.yml --- old/ansible_core-2.18.4/test/integration/targets/gathering_facts/smart_added.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/ansible_core-2.18.5/test/integration/targets/gathering_facts/smart_added.yml 2025-04-21 23:51:57.000000000 +0200 @@ -0,0 +1,11 @@ +- hosts: facthost0 + tasks: + - name: ensure we ran custom module AND setup.py/smart + assert: + that: + - >- + 'factsone' in ansible_facts + - >- + ansible_facts['factsone'] == "from facts_one module" + - >- + 'os_family' in ansible_facts diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/test/integration/targets/setup_paramiko/uninstall-dnf5.yml new/ansible_core-2.18.5/test/integration/targets/setup_paramiko/uninstall-dnf5.yml --- old/ansible_core-2.18.4/test/integration/targets/setup_paramiko/uninstall-dnf5.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/ansible_core-2.18.5/test/integration/targets/setup_paramiko/uninstall-dnf5.yml 2025-04-21 23:51:57.000000000 +0200 @@ -0,0 +1,2 @@ +- name: Uninstall Paramiko using dnf history undo + command: dnf history undo last --assumeyes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/test/integration/targets/uri/tasks/redirect-none.yml new/ansible_core-2.18.5/test/integration/targets/uri/tasks/redirect-none.yml --- old/ansible_core-2.18.4/test/integration/targets/uri/tasks/redirect-none.yml 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/test/integration/targets/uri/tasks/redirect-none.yml 2025-04-21 23:51:57.000000000 +0200 @@ -293,4 +293,25 @@ - "'Status code was 308 and not [200]: HTTP Error 308: ' in http_308_post.msg" - http_308_post.redirected == false - http_308_post.status == 308 - - http_308_post.url == 'https://{{ httpbin_host }}/redirect-to?status_code=308&url=https://{{ httpbin_host }}/anything' + - http_308_post.url == 'https://' + httpbin_host + '/redirect-to?status_code=308&url=https://' + httpbin_host + '/anything' + +- name: Test HTTP return value for location using relative redirects + uri: + url: https://{{ httpbin_host }}/redirect-to?url={{ item }} + status_code: 302 + follow_redirects: none + register: http_302 + loop: + - "/anything?foo=bar" + - "status/302" + - "./status/302" + - "/status/302" + - "//{{ httpbin_host }}/status/302" + - "https:status/302" + +- assert: + that: + - item.location == ('https://' + httpbin_host + ((idx == 0) | ternary('/anything?foo=bar', '/status/302'))) + loop: "{{ http_302.results }}" + loop_control: + index_var: idx diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/ansible_core-2.18.4/test/integration/targets/uri/tasks/redirect-safe.yml new/ansible_core-2.18.5/test/integration/targets/uri/tasks/redirect-safe.yml --- old/ansible_core-2.18.4/test/integration/targets/uri/tasks/redirect-safe.yml 2025-03-25 19:10:19.000000000 +0100 +++ new/ansible_core-2.18.5/test/integration/targets/uri/tasks/redirect-safe.yml 2025-04-21 23:51:57.000000000 +0200 @@ -271,4 +271,28 @@ - "'Status code was 308 and not [200]: HTTP Error 308: ' in http_308_post.msg" - http_308_post.redirected == false - http_308_post.status == 308 - - http_308_post.url == 'https://{{ httpbin_host }}/redirect-to?status_code=308&url=https://{{ httpbin_host }}/anything' + - http_308_post.url == 'https://' + httpbin_host + '/redirect-to?status_code=308&url=https://' + httpbin_host + '/anything' + + +- name: Test HTTP using HEAD with relative path in redirection + uri: + url: https://{{ httpbin_host }}/redirect-to?status_code={{ item }}&url=/anything?foo=bar + follow_redirects: safe + return_content: yes + method: HEAD + register: http_head + loop: + - '301' + - '302' + - '303' + - '307' + - '308' + +- assert: + that: + - item.changed is false + - item.json is not defined + - item.redirected + - item.status == 200 + - item.url == 'https://' + httpbin_host + '/anything?foo=bar' + loop: "{{ http_head.results }}" ++++++ ansible_core-2.18.4.tar.gz.sha256 -> ansible_core-2.18.5.tar.gz.sha256 ++++++ --- /work/SRC/openSUSE:Factory/ansible-core/ansible_core-2.18.4.tar.gz.sha256 2025-03-26 21:22:15.223602251 +0100 +++ /work/SRC/openSUSE:Factory/.ansible-core.new.30101/ansible_core-2.18.5.tar.gz.sha256 2025-04-24 17:29:04.018281575 +0200 @@ -1 +1 @@ -e1f8f5c33546362b0ee933e0969a3ba364b486515a6fa1bc25ebb5d95f8ec5f4 ansible_core-2.18.4.tar.gz +319304d161770a8a891c07dec8a22c528548a948a7097eaf1a79939395105535 ansible_core-2.18.5.tar.gz