Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ansible-core-2.19 for
openSUSE:Factory checked in at 2026-05-19 17:50:27
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ansible-core-2.19 (Old)
and /work/SRC/openSUSE:Factory/.ansible-core-2.19.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ansible-core-2.19"
Tue May 19 17:50:27 2026 rev:7 rq:1353957 version:2.19.10
Changes:
--------
--- /work/SRC/openSUSE:Factory/ansible-core-2.19/ansible-core-2.19.changes
2026-04-21 12:47:31.489154411 +0200
+++
/work/SRC/openSUSE:Factory/.ansible-core-2.19.new.1966/ansible-core-2.19.changes
2026-05-19 17:51:11.738684597 +0200
@@ -1,0 +2,19 @@
+Tue May 19 07:08:44 UTC 2026 - Johannes Kastl
<[email protected]>
+
+- update to 2.19.10:
+
https://github.com/ansible/ansible/blob/v2.19.10/changelogs/CHANGELOG-v2.19.rst
+ * Security Fixes
+ - psrp - Do not log raw stdout/stderr on verbosity 5 when task
+ has no_log: true set
+ - winrm - Do not log raw stdout/stderr on verbosity 5 when task
+ has no_log: true set
+ * Bugfixes
+ - ansible-test remote alias - Alias values for --controller and
+ --target are properly resolved for remote. Previously, remote
+ alias values (e.g. fedora/latest) resolved to the correct
+ name only for the legacy --remote arg, failing with an
+ unknown image error for the newer args.
+ - module_utils/basic.py - Fix AnsibleModule.run_command() to
+ handle None return from non-blocking pipe reads (#86920).
+
+-------------------------------------------------------------------
Old:
----
ansible_core-2.19.9.tar.gz
ansible_core-2.19.9.tar.gz.sha256
New:
----
ansible_core-2.19.10.tar.gz
ansible_core-2.19.10.tar.gz.sha256
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ansible-core-2.19.spec ++++++
--- /var/tmp/diff_new_pack.SvMnwm/_old 2026-05-19 17:51:12.774727405 +0200
+++ /var/tmp/diff_new_pack.SvMnwm/_new 2026-05-19 17:51:12.774727405 +0200
@@ -43,7 +43,7 @@
%endif
Name: ansible-core-2.19
-Version: 2.19.9
+Version: 2.19.10
Release: 0
Summary: Radically simple IT automation
License: GPL-3.0-or-later
++++++ ansible_core-2.19.9.tar.gz -> ansible_core-2.19.10.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.19.9/PKG-INFO
new/ansible_core-2.19.10/PKG-INFO
--- old/ansible_core-2.19.9/PKG-INFO 2026-04-21 02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/PKG-INFO 2026-05-18 21:15:09.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: ansible-core
-Version: 2.19.9
+Version: 2.19.10
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.19.9/ansible_core.egg-info/PKG-INFO
new/ansible_core-2.19.10/ansible_core.egg-info/PKG-INFO
--- old/ansible_core-2.19.9/ansible_core.egg-info/PKG-INFO 2026-04-21
02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/ansible_core.egg-info/PKG-INFO 2026-05-18
21:15:09.000000000 +0200
@@ -1,6 +1,6 @@
Metadata-Version: 2.4
Name: ansible-core
-Version: 2.19.9
+Version: 2.19.10
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.19.9/changelogs/CHANGELOG-v2.19.rst
new/ansible_core-2.19.10/changelogs/CHANGELOG-v2.19.rst
--- old/ansible_core-2.19.9/changelogs/CHANGELOG-v2.19.rst 2026-04-21
02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/changelogs/CHANGELOG-v2.19.rst 2026-05-18
21:15:09.000000000 +0200
@@ -4,6 +4,27 @@
.. contents:: Topics
+v2.19.10
+========
+
+Release Summary
+---------------
+
+| Release Date: 2026-05-18
+| `Porting Guide
<https://docs.ansible.com/ansible-core/2.19/porting_guides/porting_guide_core_2.19.html>`__
+
+Security Fixes
+--------------
+
+- psrp - Do not log raw stdout/stderr on verbosity 5 when task has ``no_log:
true`` set
+- winrm - Do not log raw stdout/stderr on verbosity 5 when task has ``no_log:
true`` set
+
+Bugfixes
+--------
+
+- ansible-test remote alias - Alias values for ``--controller`` and
``--target`` are properly resolved for ``remote``. Previously, remote alias
values (e.g. ``fedora/latest``) resolved to the correct name only for the
legacy ``--remote`` arg, failing with an unknown image error for the newer args.
+- module_utils/basic.py - Fix ``AnsibleModule.run_command()`` to handle
``None`` return from non-blocking pipe reads
(https://github.com/ansible/ansible/issues/86920).
+
v2.19.9
=======
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.19.9/changelogs/changelog.yaml
new/ansible_core-2.19.10/changelogs/changelog.yaml
--- old/ansible_core-2.19.9/changelogs/changelog.yaml 2026-04-21
02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/changelogs/changelog.yaml 2026-05-18
21:15:09.000000000 +0200
@@ -1209,6 +1209,43 @@
fragments:
- 2.19.1_summary.yaml
release_date: '2025-08-25'
+ 2.19.10:
+ changes:
+ release_summary: '| Release Date: 2026-05-18
+
+ | `Porting Guide
<https://docs.ansible.com/ansible-core/2.19/porting_guides/porting_guide_core_2.19.html>`__
+
+ '
+ codename: What Is and What Should Never Be
+ fragments:
+ - 2.19.10_summary.yaml
+ release_date: '2026-05-18'
+ 2.19.10rc1:
+ changes:
+ bugfixes:
+ - ansible-test remote alias - Alias values for ``--controller`` and
``--target``
+ are properly resolved for ``remote``. Previously, remote alias values
(e.g.
+ ``fedora/latest``) resolved to the correct name only for the legacy
``--remote``
+ arg, failing with an unknown image error for the newer args.
+ - module_utils/basic.py - Fix ``AnsibleModule.run_command()`` to handle
``None``
+ return from non-blocking pipe reads
(https://github.com/ansible/ansible/issues/86920).
+ release_summary: '| Release Date: 2026-05-11
+
+ | `Porting Guide
<https://docs.ansible.com/ansible-core/2.19/porting_guides/porting_guide_core_2.19.html>`__
+
+ '
+ security_fixes:
+ - 'psrp - Do not log raw stdout/stderr on verbosity 5 when task has
``no_log:
+ true`` set'
+ - 'winrm - Do not log raw stdout/stderr on verbosity 5 when task has
``no_log:
+ true`` set'
+ codename: What Is and What Should Never Be
+ fragments:
+ - 2.19.10rc1_summary.yaml
+ - 86920-fix-run-command-none-read.yml
+ - core_ci_remote_alias.yml
+ - winrm-psrp-nolog.yml
+ release_date: '2026-05-11'
2.19.1rc1:
changes:
bugfixes:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.19.9/lib/ansible/module_utils/ansible_release.py
new/ansible_core-2.19.10/lib/ansible/module_utils/ansible_release.py
--- old/ansible_core-2.19.9/lib/ansible/module_utils/ansible_release.py
2026-04-21 02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/lib/ansible/module_utils/ansible_release.py
2026-05-18 21:15:09.000000000 +0200
@@ -17,6 +17,6 @@
from __future__ import annotations
-__version__ = '2.19.9'
+__version__ = '2.19.10'
__author__ = 'Ansible, Inc.'
__codename__ = "What Is and What Should Never Be"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.19.9/lib/ansible/module_utils/basic.py
new/ansible_core-2.19.10/lib/ansible/module_utils/basic.py
--- old/ansible_core-2.19.9/lib/ansible/module_utils/basic.py 2026-04-21
02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/lib/ansible/module_utils/basic.py 2026-05-18
21:15:09.000000000 +0200
@@ -2090,7 +2090,13 @@
stdout_changed = False
for key, event in events:
b_chunk = key.fileobj.read(32768)
- if not b_chunk and b_chunk is not None:
+ if b_chunk is None:
+ # Non-blocking read returned None (no data currently
available).
+ # This can happen with certain file-like objects or in
edge cases.
+ # Skip this chunk and try again on next select
iteration.
+ continue
+ if not b_chunk:
+ # Empty bytes received, EOF reached
selector.unregister(key.fileobj)
elif key.fileobj == cmd.stdout:
stdout += b_chunk
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.19.9/lib/ansible/plugins/connection/psrp.py
new/ansible_core-2.19.10/lib/ansible/plugins/connection/psrp.py
--- old/ansible_core-2.19.9/lib/ansible/plugins/connection/psrp.py
2026-04-21 02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/lib/ansible/plugins/connection/psrp.py
2026-05-18 21:15:09.000000000 +0200
@@ -769,9 +769,14 @@
stderr_list += self.host.ui.stderr
stderr = "".join([to_text(o) for o in stderr_list])
+ log_stdout = stdout
+ log_stderr = stderr
+ if self._play_context.no_log:
+ log_stdout = log_stderr = '<censored due to no log>'
+
display.vvvvv("PSRP RC: %d" % rc, host=self._psrp_host)
- display.vvvvv("PSRP STDOUT: %s" % stdout, host=self._psrp_host)
- display.vvvvv("PSRP STDERR: %s" % stderr, host=self._psrp_host)
+ display.vvvvv(f"PSRP STDOUT: {log_stdout}", host=self._psrp_host)
+ display.vvvvv(f"PSRP STDERR: {log_stderr}", host=self._psrp_host)
# reset the host back output back to defaults, needed if running
# multiple pipelines on the same RunspacePool
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.19.9/lib/ansible/plugins/connection/winrm.py
new/ansible_core-2.19.10/lib/ansible/plugins/connection/winrm.py
--- old/ansible_core-2.19.9/lib/ansible/plugins/connection/winrm.py
2026-04-21 02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/lib/ansible/plugins/connection/winrm.py
2026-05-18 21:15:09.000000000 +0200
@@ -625,11 +625,16 @@
stdout = to_text(b_stdout)
stderr = to_text(b_stderr)
+ log_stdout = stdout
+ log_stderr = stderr
+ if self._play_context.no_log:
+ log_stdout = log_stderr = '<censored due to no log>'
+
if from_exec:
- display.vvvvv('WINRM RESULT <Response code %d, out %r, err
%r>' % (rc, stdout, stderr), host=self._winrm_host)
+ display.vvvvv(f'WINRM RESULT <Response code {rc}, out
{log_stdout!r}, err {log_stderr!r}>', host=self._winrm_host)
display.vvvvvv('WINRM RC %d' % rc, host=self._winrm_host)
- display.vvvvvv('WINRM STDOUT %s' % stdout, host=self._winrm_host)
- display.vvvvvv('WINRM STDERR %s' % stderr, host=self._winrm_host)
+ display.vvvvvv(f'WINRM STDOUT {log_stdout}', host=self._winrm_host)
+ display.vvvvvv(f'WINRM STDERR {log_stderr}', host=self._winrm_host)
# This is done after logging so we can still see the raw stderr for
# debugging purposes.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ansible_core-2.19.9/lib/ansible/release.py
new/ansible_core-2.19.10/lib/ansible/release.py
--- old/ansible_core-2.19.9/lib/ansible/release.py 2026-04-21
02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/lib/ansible/release.py 2026-05-18
21:15:09.000000000 +0200
@@ -17,6 +17,6 @@
from __future__ import annotations
-__version__ = '2.19.9'
+__version__ = '2.19.10'
__author__ = 'Ansible, Inc.'
__codename__ = "What Is and What Should Never Be"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.19.9/test/lib/ansible_test/_internal/host_configs.py
new/ansible_core-2.19.10/test/lib/ansible_test/_internal/host_configs.py
--- old/ansible_core-2.19.9/test/lib/ansible_test/_internal/host_configs.py
2026-04-21 02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/test/lib/ansible_test/_internal/host_configs.py
2026-05-18 21:15:09.000000000 +0200
@@ -384,6 +384,7 @@
super().apply_defaults(context, defaults)
self.become = self.become or defaults.become
+ self.name = defaults.name
@property
def have_root(self) -> bool:
@@ -413,6 +414,7 @@
super().apply_defaults(context, defaults)
self.connection = self.connection or defaults.connection
+ self.name = defaults.name
@dataclasses.dataclass
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ansible_core-2.19.9/test/units/module_utils/basic/test_run_command.py
new/ansible_core-2.19.10/test/units/module_utils/basic/test_run_command.py
--- old/ansible_core-2.19.9/test/units/module_utils/basic/test_run_command.py
2026-04-21 02:40:29.000000000 +0200
+++ new/ansible_core-2.19.10/test/units/module_utils/basic/test_run_command.py
2026-05-18 21:15:09.000000000 +0200
@@ -255,3 +255,81 @@
assert subprocess_mock.Popen.call_args[1]['pass_fds'] == (101, 42)
assert subprocess_mock.Popen.call_args[1]['close_fds'] is True
+
+
+class TestRunCommandNoneRead:
+ """
+ Test handling of read() returning None from non-blocking pipes.
+
+ This tests the fix for issue #86920 where read() can return None
+ in certain edge cases with non-blocking I/O, which would cause
+ TypeError when trying to concatenate None to bytes.
+ """
+
+ class NoneReturningBytesIO(SpecialBytesIO):
+ """
+ BytesIO that returns None on first read, then actual data.
+
+ This simulates edge cases where non-blocking read() returns None
+ to indicate "no data available right now" rather than empty bytes.
+ """
+
+ def __init__(self, *args, **kwargs):
+ # Pop 'data' before calling super().__init__() since BytesIO
doesn't accept it
+ self.data = kwargs.pop('data', b'test output')
+ self.read_count = 0
+ super(TestRunCommandNoneRead.NoneReturningBytesIO,
self).__init__(*args, **kwargs)
+
+ def read(self, size=-1):
+ self.read_count += 1
+ if self.read_count == 1:
+ # First read returns None (no data available)
+ return None
+ elif self.read_count == 2:
+ # Second read returns actual data
+ return self.data
+ else:
+ # Subsequent reads return empty bytes (EOF)
+ return b''
+
+ @pytest.mark.parametrize('stdin', [{}], indirect=['stdin'])
+ def test_none_from_stdout_read(self, mocker, rc_am):
+ """Test that None returned from stdout.read() doesn't cause
TypeError."""
+ rc_am._subprocess._output = {
+ mocker.sentinel.stdout:
+ self.NoneReturningBytesIO(fh=mocker.sentinel.stdout,
data=b'command output'),
+ mocker.sentinel.stderr:
+ SpecialBytesIO(b'', fh=mocker.sentinel.stderr)
+ }
+ (rc, stdout, stderr) = rc_am.run_command('/bin/test')
+ assert rc == 0
+ assert stdout == 'command output'
+ assert stderr == ''
+
+ @pytest.mark.parametrize('stdin', [{}], indirect=['stdin'])
+ def test_none_from_stderr_read(self, mocker, rc_am):
+ """Test that None returned from stderr.read() doesn't cause
TypeError."""
+ rc_am._subprocess._output = {
+ mocker.sentinel.stdout:
+ SpecialBytesIO(b'', fh=mocker.sentinel.stdout),
+ mocker.sentinel.stderr:
+ self.NoneReturningBytesIO(fh=mocker.sentinel.stderr,
data=b'error output')
+ }
+ (rc, stdout, stderr) = rc_am.run_command('/bin/test')
+ assert rc == 0
+ assert stdout == ''
+ assert stderr == 'error output'
+
+ @pytest.mark.parametrize('stdin', [{}], indirect=['stdin'])
+ def test_none_from_both_pipes(self, mocker, rc_am):
+ """Test that None returned from both pipes doesn't cause TypeError."""
+ rc_am._subprocess._output = {
+ mocker.sentinel.stdout:
+ self.NoneReturningBytesIO(fh=mocker.sentinel.stdout,
data=b'stdout data'),
+ mocker.sentinel.stderr:
+ self.NoneReturningBytesIO(fh=mocker.sentinel.stderr,
data=b'stderr data')
+ }
+ (rc, stdout, stderr) = rc_am.run_command('/bin/test')
+ assert rc == 0
+ assert stdout == 'stdout data'
+ assert stderr == 'stderr data'
++++++ ansible_core-2.19.9.tar.gz.sha256 -> ansible_core-2.19.10.tar.gz.sha256
++++++
---
/work/SRC/openSUSE:Factory/ansible-core-2.19/ansible_core-2.19.9.tar.gz.sha256
2026-04-21 12:47:31.557157232 +0200
+++
/work/SRC/openSUSE:Factory/.ansible-core-2.19.new.1966/ansible_core-2.19.10.tar.gz.sha256
2026-05-19 17:51:11.854689390 +0200
@@ -1 +1 @@
-74107de13d188ff579fb215bc3eb875c9198803215d6378ed588c7f35aba12f5
ansible_core-2.19.9.tar.gz
+afe0438d3acb402319baeb12a52465e69642e7497889a3a979cf390c6061a138
ansible_core-2.19.10.tar.gz