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

Reply via email to