Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ansible-core-2.18 for
openSUSE:Factory checked in at 2026-03-11 20:56:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ansible-core-2.18 (Old)
and /work/SRC/openSUSE:Factory/.ansible-core-2.18.new.8177 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ansible-core-2.18"
Wed Mar 11 20:56:58 2026 rev:5 rq:1338275 version:2.18.14
Changes:
--------
--- /work/SRC/openSUSE:Factory/ansible-core-2.18/ansible-core-2.18.changes
2025-12-11 18:44:12.316692848 +0100
+++
/work/SRC/openSUSE:Factory/.ansible-core-2.18.new.8177/ansible-core-2.18.changes
2026-03-11 20:58:47.730523068 +0100
@@ -1,0 +2,31 @@
+Fri Feb 27 07:35:22 UTC 2026 - Johannes Kastl
<[email protected]>
+
+- update to 2.18.14:
+
https://github.com/ansible/ansible/blob/v2.18.14/changelogs/CHANGELOG-v2.18.rst
+ * Minor Changes
+ - ansible-test - Update URL used to download FreeBSD wheels for
+ managed remotes.
+ - ansible-test - Use the new API endpoint for the Ansible Core CI
+ service.
+
+-------------------------------------------------------------------
+Fri Jan 30 08:23:10 UTC 2026 - Johannes Kastl
<[email protected]>
+
+- update to 2.18.13:
+
https://github.com/ansible/ansible/blob/v2.18.13/changelogs/CHANGELOG-v2.18.rst
+ * Minor Changes
+ - ansible-test - Replace RHEL 10.0 remote with 10.1.
+ - ansible-test - Replace RHEL 9.4 remote with 9.7.
+ - conditionals - Conditional expressions (such as when in
+ playbook tasks or that in the assert action) with results
+ other than True or False will issue a deprecation warning.
+ Such expressions mask subtle errors and will fail by default
+ in Ansible Core >= 2.19. They should be corrected to always
+ ensure a strictly boolean (True or False) result. The
+ stricter Ansible Core >= 2.19 failure behavior can be enabled
+ by configuring ALLOW_BROKEN_CONDITIONALS to False.
+ * Bugfixes
+ - Fix Windows LIB env var corruption
+ (ansible-collections/ansible.windows#297).
+
+-------------------------------------------------------------------
Old:
----
ansible_core-2.18.12.tar.gz
ansible_core-2.18.12.tar.gz.sha256
New:
----
ansible_core-2.18.14.tar.gz
ansible_core-2.18.14.tar.gz.sha256
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ansible-core-2.18.spec ++++++
--- /var/tmp/diff_new_pack.04ImmP/_old 2026-03-11 20:58:48.346548437 +0100
+++ /var/tmp/diff_new_pack.04ImmP/_new 2026-03-11 20:58:48.346548437 +0100
@@ -1,7 +1,7 @@
#
# spec file for package ansible-core-2.18
#
-# Copyright (c) 2025 SUSE LLC and contributors
+# Copyright (c) 2026 SUSE LLC and contributors
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -43,7 +43,7 @@
%endif
Name: ansible-core-2.18
-Version: 2.18.12
+Version: 2.18.14
Release: 0
Summary: Radically simple IT automation
License: GPL-3.0-or-later
++++++ ansible_core-2.18.12.tar.gz -> ansible_core-2.18.14.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.12/PKG-INFO
new/ansible_core-2.18.14/PKG-INFO
--- old/ansible_core-2.18.12/PKG-INFO 2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/PKG-INFO 2026-02-23 23:49:04.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: ansible-core
-Version: 2.18.12
+Version: 2.18.14
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.12/ansible_core.egg-info/PKG-INFO
new/ansible_core-2.18.14/ansible_core.egg-info/PKG-INFO
--- old/ansible_core-2.18.12/ansible_core.egg-info/PKG-INFO 2025-12-09
17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/ansible_core.egg-info/PKG-INFO 2026-02-23
23:49:04.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: ansible-core
-Version: 2.18.12
+Version: 2.18.14
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.12/ansible_core.egg-info/SOURCES.txt
new/ansible_core-2.18.14/ansible_core.egg-info/SOURCES.txt
--- old/ansible_core-2.18.12/ansible_core.egg-info/SOURCES.txt 2025-12-09
17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/ansible_core.egg-info/SOURCES.txt 2026-02-23
23:49:04.000000000 +0100
@@ -1293,6 +1293,8 @@
test/integration/targets/apt/vars/Ubuntu-22.yml
test/integration/targets/apt/vars/Ubuntu-24.yml
test/integration/targets/apt/vars/default.yml
+test/integration/targets/apt/vars/arch/amd64.yml
+test/integration/targets/apt/vars/arch/arm64.yml
test/integration/targets/apt_key/aliases
test/integration/targets/apt_key/meta/main.yml
test/integration/targets/apt_key/tasks/apt_key.yml
@@ -1699,8 +1701,12 @@
test/integration/targets/common_network/tasks/main.yml
test/integration/targets/common_network/test_plugins/is_mac.py
test/integration/targets/conditionals/aliases
+test/integration/targets/conditionals/broken_conditional_with_approx_location.yml
+test/integration/targets/conditionals/broken_conditional_with_location.yml
+test/integration/targets/conditionals/broken_conditional_without_location.yml
test/integration/targets/conditionals/play.yml
test/integration/targets/conditionals/runme.sh
+test/integration/targets/conditionals/validate_broken_conditionals.yml
test/integration/targets/conditionals/vars/main.yml
test/integration/targets/config/aliases
test/integration/targets/config/inline_comment_ansible.cfg
@@ -4351,6 +4357,8 @@
test/sanity/code-smell/mypy.py
test/sanity/code-smell/mypy.requirements.in
test/sanity/code-smell/mypy.requirements.txt
+test/sanity/code-smell/no-s3.json
+test/sanity/code-smell/no-s3.py
test/sanity/code-smell/no-unwanted-characters.json
test/sanity/code-smell/no-unwanted-characters.py
test/sanity/code-smell/no-unwanted-files.json
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.12/changelogs/CHANGELOG-v2.18.rst
new/ansible_core-2.18.14/changelogs/CHANGELOG-v2.18.rst
--- old/ansible_core-2.18.12/changelogs/CHANGELOG-v2.18.rst 2025-12-09
17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/changelogs/CHANGELOG-v2.18.rst 2026-02-23
23:49:04.000000000 +0100
@@ -4,6 +4,42 @@
.. contents:: Topics
+v2.18.14
+========
+
+Release Summary
+---------------
+
+| Release Date: 2026-02-23
+| `Porting Guide
<https://docs.ansible.com/ansible-core/2.18/porting_guides/porting_guide_core_2.18.html>`__
+
+Minor Changes
+-------------
+
+- ansible-test - Update URL used to download FreeBSD wheels for managed
remotes.
+- ansible-test - Use the new API endpoint for the Ansible Core CI service.
+
+v2.18.13
+========
+
+Release Summary
+---------------
+
+| Release Date: 2026-01-29
+| `Porting Guide
<https://docs.ansible.com/ansible-core/2.18/porting_guides/porting_guide_core_2.18.html>`__
+
+Minor Changes
+-------------
+
+- ansible-test - Replace RHEL 10.0 remote with 10.1.
+- ansible-test - Replace RHEL 9.4 remote with 9.7.
+- conditionals - Conditional expressions (such as ``when`` in playbook tasks
or ``that`` in the ``assert`` action) with results other than True or False
will issue a deprecation warning. Such expressions mask subtle errors and will
fail by default in Ansible Core >= 2.19. They should be corrected to always
ensure a strictly boolean (True or False) result. The stricter Ansible Core >=
2.19 failure behavior can be enabled by configuring
``ALLOW_BROKEN_CONDITIONALS`` to False.
+
+Bugfixes
+--------
+
+- Fix Windows LIB env var corruption
(https://github.com/ansible-collections/ansible.windows/issues/297).
+
v2.18.12
========
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.12/changelogs/changelog.yaml
new/ansible_core-2.18.14/changelogs/changelog.yaml
--- old/ansible_core-2.18.12/changelogs/changelog.yaml 2025-12-09
17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/changelogs/changelog.yaml 2026-02-23
23:49:04.000000000 +0100
@@ -709,6 +709,70 @@
- 85193-runtime-metadata.yml
- varloaderror.yml
release_date: '2025-12-02'
+ 2.18.13:
+ changes:
+ release_summary: '| Release Date: 2026-01-29
+
+ | `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.13_summary.yaml
+ release_date: '2026-01-29'
+ 2.18.13rc1:
+ changes:
+ bugfixes:
+ - Fix Windows LIB env var corruption
(https://github.com/ansible-collections/ansible.windows/issues/297).
+ minor_changes:
+ - ansible-test - Replace RHEL 10.0 remote with 10.1.
+ - ansible-test - Replace RHEL 9.4 remote with 9.7.
+ - conditionals - Conditional expressions (such as ``when`` in playbook
tasks
+ or ``that`` in the ``assert`` action) with results other than True or
False
+ will issue a deprecation warning. Such expressions mask subtle errors
and
+ will fail by default in Ansible Core >= 2.19. They should be corrected
to
+ always ensure a strictly boolean (True or False) result. The stricter
Ansible
+ Core >= 2.19 failure behavior can be enabled by configuring
``ALLOW_BROKEN_CONDITIONALS``
+ to False.
+ release_summary: '| Release Date: 2026-01-23
+
+ | `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.13rc1_summary.yaml
+ - ansible-test-rhel-10.1.yml
+ - broken_conditional_backport.yml
+ - fix-windows-lib-env-corruption.yml
+ release_date: '2026-01-22'
+ 2.18.14:
+ changes:
+ release_summary: '| Release Date: 2026-02-23
+
+ | `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.14_summary.yaml
+ release_date: '2026-02-23'
+ 2.18.14rc1:
+ changes:
+ minor_changes:
+ - ansible-test - Update URL used to download FreeBSD wheels for managed
remotes.
+ - ansible-test - Use the new API endpoint for the Ansible Core CI
service.
+ release_summary: '| Release Date: 2026-02-17
+
+ | `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.14rc1_summary.yaml
+ - ansible-test-api-endpoint.yml
+ - ansible-test-spare-tire.yml
+ release_date: '2026-02-17'
2.18.1rc1:
changes:
bugfixes:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.12/lib/ansible/config/base.yml
new/ansible_core-2.18.14/lib/ansible/config/base.yml
--- old/ansible_core-2.18.12/lib/ansible/config/base.yml 2025-12-09
17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/lib/ansible/config/base.yml 2026-02-23
23:49:04.000000000 +0100
@@ -9,6 +9,32 @@
- For internal use only.
type: path
version_added: "2.18"
+_DISABLE_BACKPORTED_INSPECTIONS:
+ name: Disable inspections backported from future Ansible Core releases
+ default: false
+ description:
+ - When true, bypasses backported content inspections from future Ansible
Core releases.
+ - Unsupported, for internal use only.
+ env: [ { name: _ANSIBLE_DISABLE_BACKPORTED_INSPECTIONS } ]
+ ini:
+ - { key: _disable_backported_inspections, section: defaults }
+ type: boolean
+ version_added: '2.16'
+ALLOW_BROKEN_CONDITIONALS:
+ name: Allow broken conditionals
+ default: true
+ description:
+ - When true (default), this option allows conditionals with non-boolean
results to be used.
+ - A deprecation warning will be emitted in these cases.
+ - When false, non-boolean conditionals result in an error.
+ - Such results often indicate unintentional use of templates where they
are not supported, resulting in a conditional that is always true.
+ - When this option is enabled, conditional expressions which are a literal
``None`` or empty string will evaluate as true for backwards compatibility.
+ - This configuration was backported from Ansible Core 2.19 to enable
detection and correction of problematic conditional expressions that default to
an error in Ansible Core 2.19+.
+ env: [{name: ANSIBLE_ALLOW_BROKEN_CONDITIONALS}]
+ ini:
+ - {key: allow_broken_conditionals, section: defaults}
+ type: boolean
+ version_added: '2.16'
ANSIBLE_HOME:
name: The Ansible home path
description:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/lib/ansible/executor/task_executor.py
new/ansible_core-2.18.14/lib/ansible/executor/task_executor.py
--- old/ansible_core-2.18.12/lib/ansible/executor/task_executor.py
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/lib/ansible/executor/task_executor.py
2026-02-23 23:49:04.000000000 +0100
@@ -3,6 +3,7 @@
# GNU General Public License v3.0+ (see COPYING or
https://www.gnu.org/licenses/gpl-3.0.txt)
from __future__ import annotations
+import contextlib
import os
import time
import json
@@ -410,6 +411,8 @@
cond.when = self._task.loop_control.get_validated_value(
'break_when',
self._task.loop_control.fattributes.get('break_when'),
self._task.loop_control.break_when, templar
)
+ with contextlib.suppress(AttributeError):
+ cond._ds = self._task._ds # propagate task context for
errors
if cond.evaluate_conditional(templar, task_vars):
# delete loop vars before exiting loop
del task_vars[loop_var]
@@ -722,12 +725,16 @@
if self._task.changed_when is not None and
self._task.changed_when:
cond = Conditional(loader=self._loader)
cond.when = self._task.changed_when
+ with contextlib.suppress(AttributeError):
+ cond._ds = self._task._ds # propagate task context
for errors
result['changed'] = cond.evaluate_conditional(templar,
vars_copy)
def _evaluate_failed_when_result(result):
if self._task.failed_when:
cond = Conditional(loader=self._loader)
cond.when = self._task.failed_when
+ with contextlib.suppress(AttributeError):
+ cond._ds = self._task._ds # propagate task context
for errors
failed_when_result = cond.evaluate_conditional(templar,
vars_copy)
result['failed_when_result'] = result['failed'] =
failed_when_result
else:
@@ -792,6 +799,8 @@
if retries > 1:
cond = Conditional(loader=self._loader)
cond.when = self._task.until or [not result['failed']]
+ with contextlib.suppress(AttributeError):
+ cond._ds = self._task._ds
if cond.evaluate_conditional(templar, vars_copy):
break
else:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/lib/ansible/module_utils/ansible_release.py
new/ansible_core-2.18.14/lib/ansible/module_utils/ansible_release.py
--- old/ansible_core-2.18.12/lib/ansible/module_utils/ansible_release.py
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/lib/ansible/module_utils/ansible_release.py
2026-02-23 23:49:04.000000000 +0100
@@ -17,6 +17,6 @@
from __future__ import annotations
-__version__ = '2.18.12'
+__version__ = '2.18.14'
__author__ = 'Ansible, Inc.'
__codename__ = "Fool in the Rain"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/lib/ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1
new/ansible_core-2.18.14/lib/ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1
---
old/ansible_core-2.18.12/lib/ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1
2025-12-09 17:45:08.000000000 +0100
+++
new/ansible_core-2.18.14/lib/ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1
2026-02-23 23:49:04.000000000 +0100
@@ -372,7 +372,7 @@
$originalEnv = @{}
try {
'LIB' | ForEach-Object -Process {
- $value = Get-Item -LiteralPath "Env:\$_" -ErrorAction
SilentlyContinue
+ $value = (Get-Item -LiteralPath "Env:\$_" -ErrorAction
SilentlyContinue).Value
if ($value) {
$originalEnv[$_] = $value
Remove-Item -LiteralPath "Env:\$_"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/lib/ansible/playbook/conditional.py
new/ansible_core-2.18.14/lib/ansible/playbook/conditional.py
--- old/ansible_core-2.18.12/lib/ansible/playbook/conditional.py
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/lib/ansible/playbook/conditional.py
2026-02-23 23:49:04.000000000 +0100
@@ -17,8 +17,10 @@
from __future__ import annotations
+import contextlib
import typing as t
+from ansible import constants as C
from ansible.errors import AnsibleError, AnsibleUndefinedVariable,
AnsibleTemplateError
from ansible.module_utils.common.text.converters import to_native
from ansible.playbook.attribute import FieldAttribute
@@ -72,9 +74,12 @@
try:
res = self._check_conditional(conditional, templar,
all_vars)
except AnsibleError as e:
+ # propagate error `obj` if present, use conditional if
position-tagged, fall back to task DS
+ obj = e.obj or conditional if hasattr(conditional,
'ansible_pos') else getattr(self, '_ds', None)
+
raise AnsibleError(
"The conditional check '%s' failed. The error was: %s"
% (to_native(conditional), to_native(e)),
- obj=getattr(self, '_ds', None)
+ obj=obj,
)
display.debug("Evaluated conditional (%s): %s" % (conditional,
res))
@@ -86,6 +91,7 @@
def _check_conditional(self, conditional: str, templar: Templar, all_vars:
dict[str, t.Any]) -> bool:
original = conditional
templar.available_variables = all_vars
+
try:
if templar.is_template(conditional):
display.warning(
@@ -99,15 +105,59 @@
elif conditional == "":
return False
+ # these should be module-global, but can't be for esoteric config
chicken/egg scenarios
+ _allow_broken_conditionals =
C.config.get_config_value('ALLOW_BROKEN_CONDITIONALS')
+ _disable_backported_inspections =
C.config.get_config_value('_DISABLE_BACKPORTED_INSPECTIONS')
+
# If the result of the first-pass template render (to resolve
inline templates) is marked unsafe,
# explicitly fail since the next templating operation would never
evaluate
if hasattr(conditional, '__UNSAFE__'):
raise AnsibleTemplateError('Conditional is marked as unsafe,
and cannot be evaluated.')
- # NOTE The spaces around True and False are intentional to
short-circuit literal_eval for
- # jinja2_native=False and avoid its expensive calls.
- return templar.template(
- "{%% if %s %%} True {%% else %%} False {%% endif %%}" %
conditional,
- ).strip() == "True"
+ if _disable_backported_inspections:
+ # internal escape hatch to restore original conditional
wrapper behavior
+ # NOTE The spaces around True and False are intentional to
short-circuit literal_eval for
+ # jinja2_native=False and avoid its expensive calls.
+ return templar.template(
+ "{%% if %s %%} True {%% else %%} False {%% endif %%}" %
conditional,
+ ).strip() == "True"
+
+ result, result_type_name = templar.template(f'{{% set __cres =
{conditional} %}}{{{{ [true if __cres else false, __cres.__class__.__name__]
}}}}')
+
+ if result_type_name != 'bool':
+ if _allow_broken_conditionals:
+ display.deprecated(
+ msg=f"Conditional result at
{self._get_conditional_source_context(conditional)} was of type
{result_type_name!r}. "
+ f"Conditional results should only be True or
False. The result was interpreted as {result}.",
+ version="2.19",
+ )
+ else:
+ raise AnsibleTemplateError(
+ message=f"Conditional result was of type
{result_type_name!r}. "
+ "Conditional results must be True or False
when `ALLOW_BROKEN_CONDITIONALS` is disabled, "
+ "which is the default in Ansible Core >=
2.19.",
+ obj=original,
+ )
+
+ return result
except AnsibleUndefinedVariable as e:
raise AnsibleUndefinedVariable("error while evaluating conditional
(%s): %s" % (original, e))
+
+ def _get_conditional_source_context(self, conditional: str) -> str:
+ """Utility method to approximate 2.19+ source context for warnings."""
+ src: str | None = None
+ location_label: str | None = None
+
+ # most string expressions should have been tagged by the YAML parser
+ with contextlib.suppress(AttributeError, ValueError):
+ src, line, col = conditional.ansible_pos
+ location_label = "location"
+
+ if not location_label:
+ # report approximate location from the conditional's task DS, if
available
+ with contextlib.suppress(AttributeError, ValueError):
+ src, line, col = self._ds.ansible_pos
+ location_label = "approximate location"
+
+ # display the conditional expression inline only if we have no other
source context
+ return f'{location_label} {src} {line}:{col}' if location_label else
f'unknown location (conditional: {conditional!r})'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.12/lib/ansible/release.py
new/ansible_core-2.18.14/lib/ansible/release.py
--- old/ansible_core-2.18.12/lib/ansible/release.py 2025-12-09
17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/lib/ansible/release.py 2026-02-23
23:49:04.000000000 +0100
@@ -17,6 +17,6 @@
from __future__ import annotations
-__version__ = '2.18.12'
+__version__ = '2.18.14'
__author__ = 'Ansible, Inc.'
__codename__ = "Fool in the Rain"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.12/pyproject.toml
new/ansible_core-2.18.14/pyproject.toml
--- old/ansible_core-2.18.12/pyproject.toml 2025-12-09 17:45:08.000000000
+0100
+++ new/ansible_core-2.18.14/pyproject.toml 2026-02-23 23:49:04.000000000
+0100
@@ -1,5 +1,5 @@
[build-system]
-requires = ["setuptools >= 66.1.0, <= 80.9.0", "wheel == 0.45.1"] # lower
bound to support controller Python versions, upper bound for latest version
tested at release
+requires = ["setuptools >= 66.1.0, <= 82.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.12/test/integration/targets/apt/defaults/main.yml
new/ansible_core-2.18.14/test/integration/targets/apt/defaults/main.yml
--- old/ansible_core-2.18.12/test/integration/targets/apt/defaults/main.yml
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/test/integration/targets/apt/defaults/main.yml
2026-02-23 23:49:04.000000000 +0100
@@ -1,2 +1 @@
-apt_foreign_arch: i386
-hello_old_version: 2.6-1
+hello_old_version: 2.10-2ubuntu2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/apt/tasks/apt-multiarch.yml
new/ansible_core-2.18.14/test/integration/targets/apt/tasks/apt-multiarch.yml
---
old/ansible_core-2.18.12/test/integration/targets/apt/tasks/apt-multiarch.yml
2025-12-09 17:45:08.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/apt/tasks/apt-multiarch.yml
2026-02-23 23:49:04.000000000 +0100
@@ -1,3 +1,19 @@
+- name: get the default arch
+ command: dpkg --print-architecture
+ register: default_arch
+
+- name: select a foreign arch for {{ default_arch.stdout }}
+ # When adding a new arch, pick a foreign arch hosted on the same repository
mirror as the default arch. For example:
+ # - archive.ubuntu.com hosts both amd64 and i386
+ # - ports.ubuntu.com hosts both arm64 and armhf
+ include_vars: "{{ item }}"
+ with_first_found:
+ - "arch/{{ default_arch.stdout }}.yml"
+
+- name: show the arch selected for multi-arch testing
+ debug:
+ msg: Using {{ apt_foreign_arch }} as the foreign arch for {{
default_arch.stdout }}
+
# verify that apt is handling multi-arch systems properly
- name: load version specific vars
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/apt/tasks/apt.yml
new/ansible_core-2.18.14/test/integration/targets/apt/tasks/apt.yml
--- old/ansible_core-2.18.12/test/integration/targets/apt/tasks/apt.yml
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/test/integration/targets/apt/tasks/apt.yml
2026-02-23 23:49:04.000000000 +0100
@@ -1,13 +1,3 @@
-- name: use Debian mirror
- set_fact:
- distro_mirror: http://ftp.debian.org/debian
- when: ansible_distribution == 'Debian'
-
-- name: use Ubuntu mirror
- set_fact:
- 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`.
@@ -275,7 +265,7 @@
apt: pkg=hello state=absent purge=yes
- name: install deb file from URL
- apt: deb="{{ distro_mirror }}/pool/main/h/hello/hello_{{
hello_version.stdout }}_{{ hello_architecture.stdout }}.deb"
+ apt:
"deb=https://ci-files.testing.ansible.com/test/integration/targets/apt/hello_{{
hello_old_version }}_{{ hello_architecture.stdout }}.deb"
register: apt_url
- name: verify installation of hello
@@ -456,7 +446,7 @@
# https://github.com/ansible/ansible/issues/65325
- name: Download and install old version of hello (to test
allow_change_held_packages option)
- apt:
"deb=https://ci-files.testing.ansible.com/test/integration/targets/dpkg_selections/hello_{{
hello_old_version }}_amd64.deb"
+ apt:
"deb=https://ci-files.testing.ansible.com/test/integration/targets/apt/hello_{{
hello_old_version }}_{{ hello_architecture.stdout }}.deb"
notify:
- remove package hello
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/apt/tasks/main.yml
new/ansible_core-2.18.14/test/integration/targets/apt/tasks/main.yml
--- old/ansible_core-2.18.12/test/integration/targets/apt/tasks/main.yml
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/test/integration/targets/apt/tasks/main.yml
2026-02-23 23:49:04.000000000 +0100
@@ -15,14 +15,16 @@
# You should have received a copy of the GNU General Public License
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
+- name: skip test on unsupported platforms
+ meta: end_play
+ when: ansible_distribution not in ('Ubuntu', 'Debian')
+
- block:
- import_tasks: 'apt.yml'
- import_tasks: 'url-with-deps.yml'
- import_tasks: 'apt-multiarch.yml'
- when:
- - ansible_userspace_architecture != apt_foreign_arch
- import_tasks: 'apt-builddep.yml'
@@ -36,9 +38,6 @@
name: "{{ repodir }}"
state: absent
- when:
- - ansible_distribution in ('Ubuntu', 'Debian')
-
always:
- name: Check if the target is managed by ansible-test
stat:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/apt/vars/arch/amd64.yml
new/ansible_core-2.18.14/test/integration/targets/apt/vars/arch/amd64.yml
--- old/ansible_core-2.18.12/test/integration/targets/apt/vars/arch/amd64.yml
1970-01-01 01:00:00.000000000 +0100
+++ new/ansible_core-2.18.14/test/integration/targets/apt/vars/arch/amd64.yml
2026-02-23 23:49:04.000000000 +0100
@@ -0,0 +1 @@
+apt_foreign_arch: i386
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/apt/vars/arch/arm64.yml
new/ansible_core-2.18.14/test/integration/targets/apt/vars/arch/arm64.yml
--- old/ansible_core-2.18.12/test/integration/targets/apt/vars/arch/arm64.yml
1970-01-01 01:00:00.000000000 +0100
+++ new/ansible_core-2.18.14/test/integration/targets/apt/vars/arch/arm64.yml
2026-02-23 23:49:04.000000000 +0100
@@ -0,0 +1 @@
+apt_foreign_arch: armhf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/conditionals/broken_conditional_with_approx_location.yml
new/ansible_core-2.18.14/test/integration/targets/conditionals/broken_conditional_with_approx_location.yml
---
old/ansible_core-2.18.12/test/integration/targets/conditionals/broken_conditional_with_approx_location.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/conditionals/broken_conditional_with_approx_location.yml
2026-02-23 23:49:04.000000000 +0100
@@ -0,0 +1,6 @@
+- hosts: localhost
+ gather_facts: no
+ tasks:
+ - name: conditional expression with non-boolean input (inherits task
location)
+ debug:
+ when: 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/conditionals/broken_conditional_with_location.yml
new/ansible_core-2.18.14/test/integration/targets/conditionals/broken_conditional_with_location.yml
---
old/ansible_core-2.18.12/test/integration/targets/conditionals/broken_conditional_with_location.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/conditionals/broken_conditional_with_location.yml
2026-02-23 23:49:04.000000000 +0100
@@ -0,0 +1,6 @@
+- hosts: localhost
+ gather_facts: no
+ tasks:
+ - name: conditional expression with non-boolean result (has location)
+ debug:
+ when: 1 + 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/conditionals/broken_conditional_without_location.yml
new/ansible_core-2.18.14/test/integration/targets/conditionals/broken_conditional_without_location.yml
---
old/ansible_core-2.18.12/test/integration/targets/conditionals/broken_conditional_without_location.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/conditionals/broken_conditional_without_location.yml
2026-02-23 23:49:04.000000000 +0100
@@ -0,0 +1,6 @@
+- hosts: localhost
+ gather_facts: no
+ tasks:
+ - name: non-task conditional expression with non-boolean input (no
location)
+ assert:
+ that: 1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/conditionals/play.yml
new/ansible_core-2.18.14/test/integration/targets/conditionals/play.yml
--- old/ansible_core-2.18.12/test/integration/targets/conditionals/play.yml
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/test/integration/targets/conditionals/play.yml
2026-02-23 23:49:04.000000000 +0100
@@ -652,19 +652,20 @@
- top is skipped
- sub is skipped
- - name: test that 'comparison expression' item works with_items
- assert:
- that:
- - item
- with_items:
- - 1 == 1
-
- - name: test that 'comparison expression' item works in loop
- assert:
- that:
- - item
- loop:
- - 1 == 1
+# these tests have never actually worked; they were only asserting a truthy
string, not executing an indirected expression
+# - name: test that 'comparison expression' item works with_items
+# assert:
+# that:
+# - item
+# with_items:
+# - 1 == 1
+#
+# - name: test that 'comparison expression' item works in loop
+# assert:
+# that:
+# - item
+# loop:
+# - 1 == 1
- set_fact:
sentinel_file: '{{ lookup("env",
"OUTPUT_DIR")}}/LOOKUP_SIDE_EFFECT.txt'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/conditionals/runme.sh
new/ansible_core-2.18.14/test/integration/targets/conditionals/runme.sh
--- old/ansible_core-2.18.12/test/integration/targets/conditionals/runme.sh
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/test/integration/targets/conditionals/runme.sh
2026-02-23 23:49:04.000000000 +0100
@@ -3,3 +3,5 @@
set -eux
ansible-playbook -i ../../inventory play.yml "$@"
+
+ansible-playbook validate_broken_conditionals.yml "$@"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/conditionals/validate_broken_conditionals.yml
new/ansible_core-2.18.14/test/integration/targets/conditionals/validate_broken_conditionals.yml
---
old/ansible_core-2.18.12/test/integration/targets/conditionals/validate_broken_conditionals.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/conditionals/validate_broken_conditionals.yml
2026-02-23 23:49:04.000000000 +0100
@@ -0,0 +1,54 @@
+- hosts: localhost
+ gather_facts: no
+ environment:
+ ANSIBLE_NOCOLOR: 1
+ ANSIBLE_FORCE_COLOR: 0
+ ANSIBLE_DEPRECATION_WARNINGS: 1
+ tasks:
+ - name: broken conditional warning with exact location and bypass
+ command: ansible-playbook broken_conditional_with_location.yml
+ environment:
+ - '{{ item.extra_env }}'
+ loop:
+ - scenario: default
+ extra_env: {}
+ - scenario: explicit
+ extra_env:
+ ANSIBLE_ALLOW_BROKEN_CONDITIONALS: 1
+ - scenario: bypass
+ extra_env:
+ _ANSIBLE_DISABLE_BACKPORTED_INSPECTIONS: 1
+ register: result
+
+ - assert:
+ that:
+ - result.results[0].stderr | replace('\n', '') is search("result at
location.+was of type 'int'")
+ - result.results[1].stderr | replace('\n', '') is search("result at
location.+was of type 'int'")
+ - result.results[2].stderr | replace('\n', '') is not search("result
at location.+was of type 'int'")
+
+ - name: validate broken conditional default warning with approximate
location
+ command: ansible-playbook broken_conditional_with_approx_location.yml
+ register: result
+
+ - assert:
+ that:
+ - result.stderr | replace('\n', '') is search("result at approximate
location.+was of type 'int'")
+
+ - name: validate broken conditional without location
+ command: ansible-playbook broken_conditional_without_location.yml
+ register: result
+
+ - assert:
+ that:
+ - result.stderr | replace('\n', '') is search("result at unknown
location.+was of type 'int'")
+
+ - name: validate broken conditional error
+ command: ansible-playbook broken_conditional_with_location.yml
+ environment:
+ ANSIBLE_ALLOW_BROKEN_CONDITIONALS: 0
+ register: result
+ failed_when: result.rc == 0
+
+ - assert:
+ that:
+ - result.stdout | replace('\n', '') is search("conditional
check.+failed.+was of type 'int'")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/dpkg_selections/defaults/main.yaml
new/ansible_core-2.18.14/test/integration/targets/dpkg_selections/defaults/main.yaml
---
old/ansible_core-2.18.12/test/integration/targets/dpkg_selections/defaults/main.yaml
2025-12-09 17:45:08.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/dpkg_selections/defaults/main.yaml
2026-02-23 23:49:04.000000000 +0100
@@ -1 +1 @@
-hello_old_version: 2.6-1
+hello_old_version: 2.10-2ubuntu2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/dpkg_selections/tasks/dpkg_selections.yaml
new/ansible_core-2.18.14/test/integration/targets/dpkg_selections/tasks/dpkg_selections.yaml
---
old/ansible_core-2.18.12/test/integration/targets/dpkg_selections/tasks/dpkg_selections.yaml
2025-12-09 17:45:08.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/dpkg_selections/tasks/dpkg_selections.yaml
2026-02-23 23:49:04.000000000 +0100
@@ -1,5 +1,9 @@
+- name: get the default arch
+ command: dpkg --print-architecture
+ register: default_arch
+
- name: download and install old version of hello
- apt:
"deb=https://ci-files.testing.ansible.com/test/integration/targets/dpkg_selections/hello_{{
hello_old_version }}_amd64.deb"
+ apt:
"deb=https://ci-files.testing.ansible.com/test/integration/targets/dpkg_selections/hello_{{
hello_old_version }}_{{ default_arch.stdout }}.deb"
- name: freeze version for hello
dpkg_selections:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/dpkg_selections/tasks/main.yaml
new/ansible_core-2.18.14/test/integration/targets/dpkg_selections/tasks/main.yaml
---
old/ansible_core-2.18.12/test/integration/targets/dpkg_selections/tasks/main.yaml
2025-12-09 17:45:08.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/dpkg_selections/tasks/main.yaml
2026-02-23 23:49:04.000000000 +0100
@@ -1,3 +1,6 @@
---
+ - name: skip test on unsupported platforms
+ meta: end_play
+ when: ansible_distribution not in ('Ubuntu', 'Debian')
+
- include_tasks: file='dpkg_selections.yaml'
- when: ansible_distribution in ('Ubuntu', 'Debian')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/module_utils_Ansible.ModuleUtils.AddType/library/add_type_test.ps1
new/ansible_core-2.18.14/test/integration/targets/module_utils_Ansible.ModuleUtils.AddType/library/add_type_test.ps1
---
old/ansible_core-2.18.12/test/integration/targets/module_utils_Ansible.ModuleUtils.AddType/library/add_type_test.ps1
2025-12-09 17:45:08.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/module_utils_Ansible.ModuleUtils.AddType/library/add_type_test.ps1
2026-02-23 23:49:04.000000000 +0100
@@ -322,6 +322,7 @@
$env:LIB = "C:\fake\folder\path"
try {
Add-CSharpType -Reference $lib_set
+ Assert-Equal -actual $env:LIB -expected "C:\fake\folder\path"
}
finally {
Remove-Item -LiteralPath env:\LIB
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/rpm_key/tasks/main.yaml
new/ansible_core-2.18.14/test/integration/targets/rpm_key/tasks/main.yaml
--- old/ansible_core-2.18.12/test/integration/targets/rpm_key/tasks/main.yaml
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/test/integration/targets/rpm_key/tasks/main.yaml
2026-02-23 23:49:04.000000000 +0100
@@ -1,3 +1,7 @@
+ - name: Skip RHEL 10.1 until rpm_key has been updated
+ meta: end_play
+ when: ansible_distribution == "RedHat" and ansible_distribution_version ==
"10.1"
+
- when: ansible_os_family == "RedHat"
block:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/integration/targets/setup_deb_repo/tasks/main.yml
new/ansible_core-2.18.14/test/integration/targets/setup_deb_repo/tasks/main.yml
---
old/ansible_core-2.18.12/test/integration/targets/setup_deb_repo/tasks/main.yml
2025-12-09 17:45:08.000000000 +0100
+++
new/ansible_core-2.18.14/test/integration/targets/setup_deb_repo/tasks/main.yml
2026-02-23 23:49:04.000000000 +0100
@@ -66,8 +66,8 @@
lineinfile:
path: /etc/apt/sources.list
backrefs: True
- regexp: ^#\s*deb-src http://archive\.ubuntu\.com/ubuntu/ (\w*){{ item }}
universe$
- line: deb-src http://archive.ubuntu.com/ubuntu \1{{ item }} universe
+ regexp: ^#\s*deb-src (http://.*\.ubuntu\.com/ubuntu.*/) (\w*){{ item }}
universe$
+ line: deb-src \1 \2{{ item }} universe
state: present
with_items:
- ''
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/lib/ansible_test/_data/completion/remote.txt
new/ansible_core-2.18.14/test/lib/ansible_test/_data/completion/remote.txt
--- old/ansible_core-2.18.12/test/lib/ansible_test/_data/completion/remote.txt
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/test/lib/ansible_test/_data/completion/remote.txt
2026-02-23 23:49:04.000000000 +0100
@@ -7,8 +7,8 @@
freebsd python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
macos/14.3 python=3.11 python_dir=/usr/local/bin become=sudo
provider=parallels arch=x86_64
macos python_dir=/usr/local/bin become=sudo provider=parallels arch=x86_64
-rhel/9.4 python=3.9,3.12 become=sudo provider=aws arch=x86_64
-rhel/10.0 python=3.12 become=sudo provider=aws arch=x86_64
+rhel/9.7 python=3.9,3.12 become=sudo provider=aws arch=x86_64
+rhel/10.1 python=3.12 become=sudo provider=aws arch=x86_64
rhel become=sudo provider=aws arch=x86_64
ubuntu/22.04 python=3.10 become=sudo provider=aws arch=x86_64
ubuntu/24.04 python=3.12 become=sudo provider=aws arch=x86_64
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/lib/ansible_test/_internal/core_ci.py
new/ansible_core-2.18.14/test/lib/ansible_test/_internal/core_ci.py
--- old/ansible_core-2.18.12/test/lib/ansible_test/_internal/core_ci.py
2025-12-09 17:45:08.000000000 +0100
+++ new/ansible_core-2.18.14/test/lib/ansible_test/_internal/core_ci.py
2026-02-23 23:49:04.000000000 +0100
@@ -136,7 +136,7 @@
class AnsibleCoreCI:
"""Client for Ansible Core CI services."""
- DEFAULT_ENDPOINT = 'https://ansible-core-ci.testing.ansible.com'
+ DEFAULT_ENDPOINT = 'https://api.ci.core.ansible.com'
def __init__(
self,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/lib/ansible_test/_util/target/setup/bootstrap.sh
new/ansible_core-2.18.14/test/lib/ansible_test/_util/target/setup/bootstrap.sh
---
old/ansible_core-2.18.12/test/lib/ansible_test/_util/target/setup/bootstrap.sh
2025-12-09 17:45:08.000000000 +0100
+++
new/ansible_core-2.18.14/test/lib/ansible_test/_util/target/setup/bootstrap.sh
2026-02-23 23:49:04.000000000 +0100
@@ -232,7 +232,7 @@
# make additional wheels available for packages which lack them for this
platform
echo "# generated by ansible-test
[global]
-extra-index-url = https://spare-tire.testing.ansible.com/simple/
+extra-index-url = https://spare-tire.core.ansible.com/simple/
prefer-binary = yes
" > /etc/pip.conf
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.18.12/test/sanity/code-smell/no-s3.json
new/ansible_core-2.18.14/test/sanity/code-smell/no-s3.json
--- old/ansible_core-2.18.12/test/sanity/code-smell/no-s3.json 1970-01-01
01:00:00.000000000 +0100
+++ new/ansible_core-2.18.14/test/sanity/code-smell/no-s3.json 2026-02-23
23:49:04.000000000 +0100
@@ -0,0 +1,4 @@
+{
+ "text": true,
+ "output": "path-line-column-message"
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.18.12/test/sanity/code-smell/no-s3.py
new/ansible_core-2.18.14/test/sanity/code-smell/no-s3.py
--- old/ansible_core-2.18.12/test/sanity/code-smell/no-s3.py 1970-01-01
01:00:00.000000000 +0100
+++ new/ansible_core-2.18.14/test/sanity/code-smell/no-s3.py 2026-02-23
23:49:04.000000000 +0100
@@ -0,0 +1,27 @@
+"""
+Disallow direct linking to S3 buckets.
+S3 buckets should be accessed through a CloudFront distribution.
+"""
+
+from __future__ import annotations
+
+import re
+import sys
+
+
+def main():
+ """Main entry point."""
+ for path in sys.argv[1:] or sys.stdin.read().splitlines():
+ with open(path, 'rb') as path_fd:
+ for line, b_text in enumerate(path_fd.readlines()):
+ try:
+ text = b_text.decode()
+ except UnicodeDecodeError:
+ continue
+
+ if match := re.search(r'(http.*?s3\..*?amazonaws\.com)', text):
+ print(f'{path}:{line + 1}:{match.start(1) + 1}: use a
CloudFront distribution instead of an S3 bucket: {match.group(1)}')
+
+
+if __name__ == '__main__':
+ main()
++++++ ansible_core-2.18.12.tar.gz.sha256 -> ansible_core-2.18.14.tar.gz.sha256
++++++
---
/work/SRC/openSUSE:Factory/ansible-core-2.18/ansible_core-2.18.12.tar.gz.sha256
2025-12-11 18:44:12.392696041 +0100
+++
/work/SRC/openSUSE:Factory/.ansible-core-2.18.new.8177/ansible_core-2.18.14.tar.gz.sha256
2026-03-11 20:58:47.790525539 +0100
@@ -1 +1 @@
-40e03f74bee7f0eb65e76827017373c4e56dc57ba0618e98c435d875e8e349fc
ansible_core-2.18.12.tar.gz
+da9ff29f673e2cf2632ddd266883977b6602559c65cbd0cfc4d48e70306e85d5
ansible_core-2.18.14.tar.gz