Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ansible-core-2.17 for
openSUSE:Factory checked in at 2025-02-25 16:58:28
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ansible-core-2.17 (Old)
and /work/SRC/openSUSE:Factory/.ansible-core-2.17.new.1873 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ansible-core-2.17"
Tue Feb 25 16:58:28 2025 rev:4 rq:1248286 version:2.17.9
Changes:
--------
--- /work/SRC/openSUSE:Factory/ansible-core-2.17/ansible-core-2.17.changes
2025-01-29 16:18:49.172473467 +0100
+++
/work/SRC/openSUSE:Factory/.ansible-core-2.17.new.1873/ansible-core-2.17.changes
2025-02-25 16:58:39.570714591 +0100
@@ -1,0 +2,14 @@
+Tue Feb 25 06:43:25 UTC 2025 - Johannes Kastl
<[email protected]>
+
+- update to 2.17.9:
+ * Minor Changes
+ - ansible-test - Automatically retry HTTP GET/PUT/DELETE
+ requests on exceptions.
+ - ansible-test - Use Python's urllib instead of curl for HTTP
+ requests.
+ * Bugfixes
+ - include_vars - fixed erroneous warning if an unreserved
+ variable name contains a single character that matches a
+ reserved variable. (#84623)
+
+-------------------------------------------------------------------
Old:
----
ansible_core-2.17.8.tar.gz
ansible_core-2.17.8.tar.gz.sha256
New:
----
ansible_core-2.17.9.tar.gz
ansible_core-2.17.9.tar.gz.sha256
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ansible-core-2.17.spec ++++++
--- /var/tmp/diff_new_pack.0c0yeB/_old 2025-02-25 16:58:42.218825548 +0100
+++ /var/tmp/diff_new_pack.0c0yeB/_new 2025-02-25 16:58:42.218825548 +0100
@@ -43,7 +43,7 @@
%endif
Name: ansible-core-2.17
-Version: 2.17.8
+Version: 2.17.9
Release: 0
Summary: Radically simple IT automation
License: GPL-3.0-or-later
++++++ ansible_core-2.17.8.tar.gz -> ansible_core-2.17.9.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.17.8/PKG-INFO
new/ansible_core-2.17.9/PKG-INFO
--- old/ansible_core-2.17.8/PKG-INFO 2025-01-27 20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/PKG-INFO 2025-02-24 20:31:50.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.2
Name: ansible-core
-Version: 2.17.8
+Version: 2.17.9
Summary: Radically simple IT automation
Home-page: https://ansible.com/
Author: Ansible, Inc.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.17.8/changelogs/CHANGELOG-v2.17.rst
new/ansible_core-2.17.9/changelogs/CHANGELOG-v2.17.rst
--- old/ansible_core-2.17.8/changelogs/CHANGELOG-v2.17.rst 2025-01-27
20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/changelogs/CHANGELOG-v2.17.rst 2025-02-24
20:31:50.000000000 +0100
@@ -4,6 +4,26 @@
.. contents:: Topics
+v2.17.9
+=======
+
+Release Summary
+---------------
+
+| Release Date: 2025-02-24
+| `Porting Guide
<https://docs.ansible.com/ansible-core/2.17/porting_guides/porting_guide_core_2.17.html>`__
+
+Minor Changes
+-------------
+
+- ansible-test - Automatically retry HTTP GET/PUT/DELETE requests on
exceptions.
+- ansible-test - Use Python's ``urllib`` instead of ``curl`` for HTTP requests.
+
+Bugfixes
+--------
+
+- include_vars - fixed erroneous warning if an unreserved variable name
contains a single character that matches a reserved variable.
(https://github.com/ansible/ansible/issues/84623)
+
v2.17.8
=======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.17.8/changelogs/changelog.yaml
new/ansible_core-2.17.9/changelogs/changelog.yaml
--- old/ansible_core-2.17.8/changelogs/changelog.yaml 2025-01-27
20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/changelogs/changelog.yaml 2025-02-24
20:31:50.000000000 +0100
@@ -1076,3 +1076,33 @@
- reserved_module_chekc.yml
- vault_cli_fix.yml
release_date: '2025-01-20'
+ 2.17.9:
+ changes:
+ release_summary: '| Release Date: 2025-02-24
+
+ | `Porting Guide
<https://docs.ansible.com/ansible-core/2.17/porting_guides/porting_guide_core_2.17.html>`__
+
+ '
+ codename: Gallows Pole
+ fragments:
+ - 2.17.9_summary.yaml
+ release_date: '2025-02-24'
+ 2.17.9rc1:
+ changes:
+ bugfixes:
+ - include_vars - fixed erroneous warning if an unreserved variable name
contains
+ a single character that matches a reserved variable.
(https://github.com/ansible/ansible/issues/84623)
+ minor_changes:
+ - ansible-test - Automatically retry HTTP GET/PUT/DELETE requests on
exceptions.
+ - ansible-test - Use Python's ``urllib`` instead of ``curl`` for HTTP
requests.
+ release_summary: '| Release Date: 2025-02-17
+
+ | `Porting Guide
<https://docs.ansible.com/ansible-core/2.17/porting_guides/porting_guide_core_2.17.html>`__
+
+ '
+ codename: Gallows Pole
+ fragments:
+ - 2.17.9rc1_summary.yaml
+ - ansible-test-curl.yml
+ - fix-include_vars-reserved-warning.yml
+ release_date: '2025-02-17'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.17.8/lib/ansible/module_utils/ansible_release.py
new/ansible_core-2.17.9/lib/ansible/module_utils/ansible_release.py
--- old/ansible_core-2.17.8/lib/ansible/module_utils/ansible_release.py
2025-01-27 20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/lib/ansible/module_utils/ansible_release.py
2025-02-24 20:31:50.000000000 +0100
@@ -17,6 +17,6 @@
from __future__ import annotations
-__version__ = '2.17.8'
+__version__ = '2.17.9'
__author__ = 'Ansible, Inc.'
__codename__ = "Gallows Pole"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.17.8/lib/ansible/release.py
new/ansible_core-2.17.9/lib/ansible/release.py
--- old/ansible_core-2.17.8/lib/ansible/release.py 2025-01-27
20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/lib/ansible/release.py 2025-02-24
20:31:50.000000000 +0100
@@ -17,6 +17,6 @@
from __future__ import annotations
-__version__ = '2.17.8'
+__version__ = '2.17.9'
__author__ = 'Ansible, Inc.'
__codename__ = "Gallows Pole"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.17.8/lib/ansible/vars/manager.py
new/ansible_core-2.17.9/lib/ansible/vars/manager.py
--- old/ansible_core-2.17.8/lib/ansible/vars/manager.py 2025-01-27
20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/lib/ansible/vars/manager.py 2025-02-24
20:31:50.000000000 +0100
@@ -742,7 +742,7 @@
Sets a value in the vars_cache for a host.
"""
- warn_if_reserved(varname)
+ warn_if_reserved([varname])
if host not in self._vars_cache:
self._vars_cache[host] = dict()
if varname in self._vars_cache[host] and
isinstance(self._vars_cache[host][varname], MutableMapping) and
isinstance(value, MutableMapping):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.17.8/lib/ansible_core.egg-info/PKG-INFO
new/ansible_core-2.17.9/lib/ansible_core.egg-info/PKG-INFO
--- old/ansible_core-2.17.8/lib/ansible_core.egg-info/PKG-INFO 2025-01-27
20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/lib/ansible_core.egg-info/PKG-INFO 2025-02-24
20:31:50.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.2
Name: ansible-core
-Version: 2.17.8
+Version: 2.17.9
Summary: Radically simple IT automation
Home-page: https://ansible.com/
Author: Ansible, Inc.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.17.8/lib/ansible_core.egg-info/SOURCES.txt
new/ansible_core-2.17.9/lib/ansible_core.egg-info/SOURCES.txt
--- old/ansible_core-2.17.8/lib/ansible_core.egg-info/SOURCES.txt
2025-01-27 20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/lib/ansible_core.egg-info/SOURCES.txt
2025-02-24 20:31:50.000000000 +0100
@@ -3856,11 +3856,13 @@
test/integration/targets/var_precedence/vars/test_var_precedence.yml
test/integration/targets/var_reserved/aliases
test/integration/targets/var_reserved/tasks/block_vars.yml
+test/integration/targets/var_reserved/tasks/include_vars.yml
test/integration/targets/var_reserved/tasks/main.yml
test/integration/targets/var_reserved/tasks/play_vars.yml
test/integration/targets/var_reserved/tasks/set_fact.yml
test/integration/targets/var_reserved/tasks/task_vars.yml
test/integration/targets/var_reserved/tasks/task_vars_used.yml
+test/integration/targets/var_reserved/vars/set_host_variable.yml
test/integration/targets/var_templating/aliases
test/integration/targets/var_templating/ansible_debug_template.j2
test/integration/targets/var_templating/runme.sh
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.17.8/packaging/release.py
new/ansible_core-2.17.9/packaging/release.py
--- old/ansible_core-2.17.8/packaging/release.py 2025-01-27
20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/packaging/release.py 2025-02-24
20:31:50.000000000 +0100
@@ -369,6 +369,7 @@
ANSIBLE_BIN_DIR = CHECKOUT_DIR / "bin"
ANSIBLE_RELEASE_FILE = ANSIBLE_DIR / "release.py"
ANSIBLE_REQUIREMENTS_FILE = CHECKOUT_DIR / "requirements.txt"
+ANSIBLE_CHANGELOG_REQUIREMENTS_FILE = CHECKOUT_DIR /
"test/lib/ansible_test/_data/requirements/sanity.changelog.txt"
ANSIBLE_PYPROJECT_TOML_FILE = CHECKOUT_DIR / "pyproject.toml"
DIST_DIR = CHECKOUT_DIR / "dist"
@@ -660,23 +661,8 @@
@functools.cache
-def ensure_venv() -> dict[str, t.Any]:
+def ensure_venv(requirements_content: str) -> dict[str, t.Any]:
"""Ensure the release venv is ready and return the env vars needed to use
it."""
-
- # TODO: consider freezing the ansible and release requirements along with
their dependencies
-
- ansible_requirements = ANSIBLE_REQUIREMENTS_FILE.read_text()
-
- release_requirements = """
-build
-twine
-"""
-
- requirements_file = CHECKOUT_DIR /
"test/sanity/code-smell/package-data.requirements.txt"
- requirements_content = requirements_file.read_text()
- requirements_content += ansible_requirements
- requirements_content += release_requirements
-
requirements_hash =
hashlib.sha256(requirements_content.encode()).hexdigest()[:8]
python_version = ".".join(map(str, sys.version_info[:2]))
@@ -1298,7 +1284,12 @@
@command
def generate_changelog() -> None:
"""Generate the changelog and validate the results."""
- env = ensure_venv()
+ changelog_requirements = (
+ ANSIBLE_CHANGELOG_REQUIREMENTS_FILE.read_text() +
+ ANSIBLE_REQUIREMENTS_FILE.read_text() # TODO: consider pinning the
ansible requirements and dependencies
+ )
+
+ env = ensure_venv(changelog_requirements)
env.update(
PATH=os.pathsep.join((str(ANSIBLE_BIN_DIR), env["PATH"])),
PYTHONPATH=ANSIBLE_LIB_DIR,
@@ -1352,7 +1343,12 @@
def build(allow_dirty: bool = False) -> None:
"""Build the sdist and wheel."""
version = get_ansible_version(mode=VersionMode.ALLOW_DEV_POST)
- env = ensure_venv()
+
+ # TODO: consider pinning the build requirement and its dependencies
+ build_requirements = """
+build
+"""
+ env = ensure_venv(build_requirements)
dirty = git("status", "--porcelain", "--untracked-files=all",
capture_output=True).stdout.strip().splitlines()
@@ -1449,7 +1445,12 @@
version = get_ansible_version()
sdist_file = get_sdist_path(version)
wheel_file = get_wheel_path(version)
- env = ensure_venv()
+
+ # TODO: consider pinning the twine requirement and its dependencies
+ publish_requirements = """
+twine
+"""
+ env = ensure_venv(publish_requirements)
if prompt:
try:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.17.8/test/integration/targets/handlers/runme.sh
new/ansible_core-2.17.9/test/integration/targets/handlers/runme.sh
--- old/ansible_core-2.17.8/test/integration/targets/handlers/runme.sh
2025-01-27 20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/test/integration/targets/handlers/runme.sh
2025-02-24 20:31:50.000000000 +0100
@@ -135,9 +135,7 @@
[ "$(grep out.txt -ce 'META: noop')" = "1" ]
# https://github.com/ansible/ansible/issues/46447
-set +e
-test "$(ansible-playbook 46447.yml -i inventory.handlers -vv "$@" 2>&1 | grep
-c 'SHOULD NOT GET HERE')"
-set -e
+test "$(ansible-playbook 46447.yml -i inventory.handlers "$@" 2>&1 | grep -c
'SHOULD NOT GET HERE')" = "0"
# https://github.com/ansible/ansible/issues/52561
ansible-playbook 52561.yml -i inventory.handlers "$@" 2>&1 | tee out.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.17.8/test/integration/targets/var_reserved/tasks/include_vars.yml
new/ansible_core-2.17.9/test/integration/targets/var_reserved/tasks/include_vars.yml
---
old/ansible_core-2.17.8/test/integration/targets/var_reserved/tasks/include_vars.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.17.9/test/integration/targets/var_reserved/tasks/include_vars.yml
2025-02-24 20:31:50.000000000 +0100
@@ -0,0 +1,5 @@
+- hosts: localhost
+ gather_facts: no
+ tasks:
+ - include_vars:
+ file: ../vars/set_host_variable.yml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.17.8/test/integration/targets/var_reserved/tasks/main.yml
new/ansible_core-2.17.9/test/integration/targets/var_reserved/tasks/main.yml
---
old/ansible_core-2.17.8/test/integration/targets/var_reserved/tasks/main.yml
2025-01-27 20:45:28.000000000 +0100
+++
new/ansible_core-2.17.9/test/integration/targets/var_reserved/tasks/main.yml
2025-02-24 20:31:50.000000000 +0100
@@ -2,22 +2,32 @@
vars:
canary: Found variable using reserved name
block:
- - shell: ansible-playbook '{{[ role_path, "tasks", item ~ ".yml"] |
path_join }}'
+ - shell: ansible-playbook '{{[ role_path, "tasks", item.file ~ ".yml"] |
path_join }}'
environment:
ANSIBLE_LOCALHOST_WARNING: 0
+ ANSIBLE_FORCE_COLOR: 0
failed_when: false
loop:
- - play_vars
- - block_vars
- - task_vars
- - task_vars_used
- - set_fact
+ - file: play_vars
+ name: lipsum
+ - file: block_vars
+ name: query
+ - file: task_vars
+ name: query
+ - file: task_vars_used
+ name: q
+ - file: set_fact
+ name: lookup
+ - file: include_vars
+ name: query
register: play_out
- name: check they all complain about bad defined var
assert:
that:
- - canary in item['stderr']
+ - item.stderr == warning_message
loop: '{{play_out.results}}'
loop_control:
- label: '{{item.item}}'
+ label: '{{item.item.file}}'
+ vars:
+ warning_message: "[WARNING]: {{ canary }}: {{ item.item.name }}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.17.8/test/integration/targets/var_reserved/vars/set_host_variable.yml
new/ansible_core-2.17.9/test/integration/targets/var_reserved/vars/set_host_variable.yml
---
old/ansible_core-2.17.8/test/integration/targets/var_reserved/vars/set_host_variable.yml
1970-01-01 01:00:00.000000000 +0100
+++
new/ansible_core-2.17.9/test/integration/targets/var_reserved/vars/set_host_variable.yml
2025-02-24 20:31:50.000000000 +0100
@@ -0,0 +1 @@
+query: overwrite global Jinja2 function
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.17.8/test/lib/ansible_test/_internal/http.py
new/ansible_core-2.17.9/test/lib/ansible_test/_internal/http.py
--- old/ansible_core-2.17.8/test/lib/ansible_test/_internal/http.py
2025-01-27 20:45:28.000000000 +0100
+++ new/ansible_core-2.17.9/test/lib/ansible_test/_internal/http.py
2025-02-24 20:31:50.000000000 +0100
@@ -1,36 +1,29 @@
-"""
-Primitive replacement for requests to avoid extra dependency.
-Avoids use of urllib2 due to lack of SNI support.
-"""
+"""A simple HTTP client."""
from __future__ import annotations
+import http.client
import json
import time
import typing as t
+import urllib.error
+import urllib.request
from .util import (
ApplicationError,
- SubprocessError,
display,
)
from .util_common import (
CommonConfig,
- run_command,
)
class HttpClient:
- """Make HTTP requests via curl."""
+ """Make HTTP requests."""
- def __init__(self, args: CommonConfig, always: bool = False, insecure:
bool = False, proxy: t.Optional[str] = None) -> None:
+ def __init__(self, args: CommonConfig, always: bool = False) -> None:
self.args = args
self.always = always
- self.insecure = insecure
- self.proxy = proxy
-
- self.username = None
- self.password = None
def get(self, url: str) -> HttpResponse:
"""Perform an HTTP GET and return the response."""
@@ -46,74 +39,65 @@
def request(self, method: str, url: str, data: t.Optional[str] = None,
headers: t.Optional[dict[str, str]] = None) -> HttpResponse:
"""Perform an HTTP request and return the response."""
- cmd = ['curl', '-s', '-S', '-i', '-X', method]
-
- if self.insecure:
- cmd += ['--insecure']
-
if headers is None:
headers = {}
- headers['Expect'] = '' # don't send expect continue header
-
- if self.username:
- if self.password:
- display.sensitive.add(self.password)
- cmd += ['-u', '%s:%s' % (self.username, self.password)]
- else:
- cmd += ['-u', self.username]
+ data_bytes = data.encode() if data else None
- for header in headers.keys():
- cmd += ['-H', '%s: %s' % (header, headers[header])]
+ request = urllib.request.Request(method=method, url=url,
data=data_bytes, headers=headers)
+ response: http.client.HTTPResponse
- if data is not None:
- cmd += ['-d', data]
-
- if self.proxy:
- cmd += ['-x', self.proxy]
-
- cmd += [url]
+ display.info(f'HTTP {method} {url}', verbosity=2)
attempts = 0
max_attempts = 3
sleep_seconds = 3
- # curl error codes which are safe to retry (request never sent to
server)
- retry_on_status = (
- 6, # CURLE_COULDNT_RESOLVE_HOST
- )
-
- stdout = ''
+ status_code = 200
+ reason = 'OK'
+ body_bytes = b''
while True:
attempts += 1
- try:
- stdout = run_command(self.args, cmd, capture=True,
always=self.always, cmd_verbosity=2)[0]
+ start = time.monotonic()
+
+ if self.args.explain and not self.always:
break
- except SubprocessError as ex:
- if ex.status in retry_on_status and attempts < max_attempts:
- display.warning('%s' % ex)
- time.sleep(sleep_seconds)
- continue
-
- raise
-
- if self.args.explain and not self.always:
- return HttpResponse(method, url, 200, '')
-
- header, body = stdout.split('\r\n\r\n', 1)
-
- response_headers = header.split('\r\n')
- first_line = response_headers[0]
- http_response = first_line.split(' ')
- status_code = int(http_response[1])
+
+ try:
+ try:
+ with urllib.request.urlopen(request) as response:
+ status_code = response.status
+ reason = response.reason
+ body_bytes = response.read()
+ except urllib.error.HTTPError as ex:
+ status_code = ex.status
+ reason = ex.reason
+ body_bytes = ex.read()
+ except Exception as ex: # pylint: disable=broad-exception-caught
+ if attempts >= max_attempts:
+ raise
+
+ # all currently implemented methods are idempotent, so retries
are unconditionally supported
+ duration = time.monotonic() - start
+ display.warning(f'{type(ex).__module__}.{type(ex).__name__}:
{ex} [{duration:.2f} seconds]')
+ time.sleep(sleep_seconds)
+
+ continue
+
+ break
+
+ duration = time.monotonic() - start
+ display.info(f'HTTP {method} {url} -> HTTP {status_code} ({reason})
[{len(body_bytes)} bytes, {duration:.2f} seconds]', verbosity=3)
+
+ body = body_bytes.decode()
return HttpResponse(method, url, status_code, body)
class HttpResponse:
- """HTTP response from curl."""
+ """HTTP response."""
def __init__(self, method: str, url: str, status_code: int, response: str)
-> None:
self.method = method
++++++ ansible_core-2.17.8.tar.gz.sha256 -> ansible_core-2.17.9.tar.gz.sha256
++++++
---
/work/SRC/openSUSE:Factory/ansible-core-2.17/ansible_core-2.17.8.tar.gz.sha256
2025-01-29 16:18:49.400482922 +0100
+++
/work/SRC/openSUSE:Factory/.ansible-core-2.17.new.1873/ansible_core-2.17.9.tar.gz.sha256
2025-02-25 16:58:40.458751801 +0100
@@ -1 +1 @@
-39be8a7986a2c7d36069b0d97220bc2f6783c65fea7c6d7e0e2d00d1ac8af877
ansible_core-2.17.8.tar.gz
+c24cdc2bab19b910bbdb4a1074af5745e16c78c618f15829e7ddcf699f69a510
ansible_core-2.17.9.tar.gz