Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package ansible-core for openSUSE:Factory 
checked in at 2025-08-21 20:31:03
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ansible-core (Old)
 and      /work/SRC/openSUSE:Factory/.ansible-core.new.29662 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ansible-core"

Thu Aug 21 20:31:03 2025 rev:46 rq:1300686 version:2.18.8

Changes:
--------
--- /work/SRC/openSUSE:Factory/ansible-core/ansible-core.changes        
2025-07-16 17:36:20.222920616 +0200
+++ /work/SRC/openSUSE:Factory/.ansible-core.new.29662/ansible-core.changes     
2025-08-21 20:31:08.395050534 +0200
@@ -1,0 +2,21 @@
+Thu Aug 21 06:32:55 UTC 2025 - Johannes Kastl 
<opensuse_buildserv...@ojkastl.de>
+
+- update to 2.18.8:
+  * Minor Changes
+    - ansible-test - Improve formatting of generated coverage
+      config file.
+    - ansible-test - Replace remote FreeBSD 13.3 with 13.5.
+    - ansible-test - Use OS packages to satisfy controller
+      requirements on FreeBSD 13.5 during managed instance
+      bootstrapping.
+  * Bugfixes
+    - ansible-test - Always exclude the tests/output/ directory
+      from a collection's code coverage. (#84244)
+    - ansible-test - Limit package install retries during managed
+      remote instance bootstrapping.
+    - ansible-test - Use a consistent coverage config for all
+      collection testing.
+    - plugins config, get_option_and_origin now correctly displays
+      the value and origin of the option.
+
+-------------------------------------------------------------------

Old:
----
  ansible_core-2.18.7.tar.gz
  ansible_core-2.18.7.tar.gz.sha256

New:
----
  ansible_core-2.18.8.tar.gz
  ansible_core-2.18.8.tar.gz.sha256

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ansible-core.spec ++++++
--- /var/tmp/diff_new_pack.MmxyVB/_old  2025-08-21 20:31:11.675187067 +0200
+++ /var/tmp/diff_new_pack.MmxyVB/_new  2025-08-21 20:31:11.679187234 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package ansible-core
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 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
-Version:        2.18.7
+Version:        2.18.8
 Release:        0
 Summary:        Radically simple IT automation
 License:        GPL-3.0-or-later

++++++ ansible_core-2.18.7.tar.gz -> ansible_core-2.18.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible_core-2.18.7/PKG-INFO 
new/ansible_core-2.18.8/PKG-INFO
--- old/ansible_core-2.18.7/PKG-INFO    2025-07-15 19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/PKG-INFO    2025-08-11 20:59:54.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: ansible-core
-Version: 2.18.7
+Version: 2.18.8
 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.7/ansible_core.egg-info/PKG-INFO 
new/ansible_core-2.18.8/ansible_core.egg-info/PKG-INFO
--- old/ansible_core-2.18.7/ansible_core.egg-info/PKG-INFO      2025-07-15 
19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/ansible_core.egg-info/PKG-INFO      2025-08-11 
20:59:54.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: ansible-core
-Version: 2.18.7
+Version: 2.18.8
 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.7/ansible_core.egg-info/SOURCES.txt 
new/ansible_core-2.18.8/ansible_core.egg-info/SOURCES.txt
--- old/ansible_core-2.18.7/ansible_core.egg-info/SOURCES.txt   2025-07-15 
19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/ansible_core.egg-info/SOURCES.txt   2025-08-11 
20:59:54.000000000 +0200
@@ -1700,6 +1700,7 @@
 test/integration/targets/conditionals/vars/main.yml
 test/integration/targets/config/aliases
 test/integration/targets/config/inline_comment_ansible.cfg
+test/integration/targets/config/match_option_methods.yml
 test/integration/targets/config/runme.sh
 test/integration/targets/config/type_munging.cfg
 test/integration/targets/config/types.yml
@@ -1709,6 +1710,7 @@
 test/integration/targets/config/files/types.vars
 test/integration/targets/config/files/types_dump.txt
 test/integration/targets/config/lookup_plugins/bogus.py
+test/integration/targets/config/lookup_plugins/broken.py
 test/integration/targets/config/lookup_plugins/casting.py
 test/integration/targets/config/lookup_plugins/casting_individual.py
 test/integration/targets/config/lookup_plugins/types.py
@@ -1785,7 +1787,6 @@
 test/integration/targets/copy/tasks/src_remote_file_is_not_file.yml
 test/integration/targets/copy/tasks/tests.yml
 test/integration/targets/cron/aliases
-test/integration/targets/cron/defaults/main.yml
 test/integration/targets/cron/meta/main.yml
 test/integration/targets/cron/tasks/main.yml
 test/integration/targets/cron/vars/alpine.yml
@@ -3428,6 +3429,7 @@
 test/integration/targets/setup_cron/vars/debian.yml
 test/integration/targets/setup_cron/vars/default.yml
 test/integration/targets/setup_cron/vars/fedora.yml
+test/integration/targets/setup_cron/vars/freebsd-14.yml
 test/integration/targets/setup_cron/vars/freebsd.yml
 test/integration/targets/setup_cron/vars/redhat.yml
 test/integration/targets/setup_cron/vars/suse.yml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible_core-2.18.7/changelogs/CHANGELOG-v2.18.rst 
new/ansible_core-2.18.8/changelogs/CHANGELOG-v2.18.rst
--- old/ansible_core-2.18.7/changelogs/CHANGELOG-v2.18.rst      2025-07-15 
19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/changelogs/CHANGELOG-v2.18.rst      2025-08-11 
20:59:54.000000000 +0200
@@ -4,6 +4,30 @@
 
 .. contents:: Topics
 
+v2.18.8
+=======
+
+Release Summary
+---------------
+
+| Release Date: 2025-08-11
+| `Porting Guide 
<https://docs.ansible.com/ansible-core/2.18/porting_guides/porting_guide_core_2.18.html>`__
+
+Minor Changes
+-------------
+
+- ansible-test - Improve formatting of generated coverage config file.
+- ansible-test - Replace remote FreeBSD 13.3 with 13.5.
+- ansible-test - Use OS packages to satisfy controller requirements on FreeBSD 
13.5 during managed instance bootstrapping.
+
+Bugfixes
+--------
+
+- ansible-test - Always exclude the ``tests/output/`` directory from a 
collection's code coverage. (https://github.com/ansible/ansible/issues/84244)
+- ansible-test - Limit package install retries during managed remote instance 
bootstrapping.
+- ansible-test - Use a consistent coverage config for all collection testing.
+- plugins config, get_option_and_origin now correctly displays the value and 
origin of the option.
+
 v2.18.7
 =======
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible_core-2.18.7/changelogs/changelog.yaml 
new/ansible_core-2.18.8/changelogs/changelog.yaml
--- old/ansible_core-2.18.7/changelogs/changelog.yaml   2025-07-15 
19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/changelogs/changelog.yaml   2025-08-11 
20:59:54.000000000 +0200
@@ -909,3 +909,43 @@
     - pull_changed_fix.yml
     - user_passphrase.yml
     release_date: '2025-07-08'
+  2.18.8:
+    changes:
+      release_summary: '| Release Date: 2025-08-11
+
+        | `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.8_summary.yaml
+    release_date: '2025-08-11'
+  2.18.8rc1:
+    changes:
+      bugfixes:
+      - ansible-test - Always exclude the ``tests/output/`` directory from a 
collection's
+        code coverage. (https://github.com/ansible/ansible/issues/84244)
+      - ansible-test - Limit package install retries during managed remote 
instance
+        bootstrapping.
+      - ansible-test - Use a consistent coverage config for all collection 
testing.
+      - plugins config, get_option_and_origin now correctly displays the value 
and
+        origin of the option.
+      minor_changes:
+      - ansible-test - Improve formatting of generated coverage config file.
+      - ansible-test - Replace remote FreeBSD 13.3 with 13.5.
+      - ansible-test - Use OS packages to satisfy controller requirements on 
FreeBSD
+        13.5 during managed instance bootstrapping.
+      release_summary: '| Release Date: 2025-08-04
+
+        | `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.8rc1_summary.yaml
+    - ansible-test-bootstrap-retry.yml
+    - ansible-test-coverage-config.yml
+    - ansible-test-freebsd-bootstrap.yml
+    - ansible-test-remotes.yml
+    - plugins_fix_origin.yml
+    release_date: '2025-08-04'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible_core-2.18.7/lib/ansible/config/manager.py 
new/ansible_core-2.18.8/lib/ansible/config/manager.py
--- old/ansible_core-2.18.7/lib/ansible/config/manager.py       2025-07-15 
19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/lib/ansible/config/manager.py       2025-08-11 
20:59:54.000000000 +0200
@@ -420,13 +420,17 @@
         pass
 
     def get_plugin_options(self, plugin_type, name, keys=None, variables=None, 
direct=None):
+        options, dummy = self.get_plugin_options_and_origins(plugin_type, 
name, keys=keys, variables=variables, direct=direct)
+        return options
 
+    def get_plugin_options_and_origins(self, plugin_type, name, keys=None, 
variables=None, direct=None):
         options = {}
+        origins = {}
         defs = self.get_configuration_definitions(plugin_type=plugin_type, 
name=name)
         for option in defs:
-            options[option] = self.get_config_value(option, 
plugin_type=plugin_type, plugin_name=name, keys=keys, variables=variables, 
direct=direct)
-
-        return options
+            options[option], origins[option] = 
self.get_config_value_and_origin(option, plugin_type=plugin_type, 
plugin_name=name, keys=keys,
+                                                                               
 variables=variables, direct=direct)
+        return options, origins
 
     def get_plugin_vars(self, plugin_type, name):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/lib/ansible/module_utils/ansible_release.py 
new/ansible_core-2.18.8/lib/ansible/module_utils/ansible_release.py
--- old/ansible_core-2.18.7/lib/ansible/module_utils/ansible_release.py 
2025-07-15 19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/lib/ansible/module_utils/ansible_release.py 
2025-08-11 20:59:54.000000000 +0200
@@ -17,6 +17,6 @@
 
 from __future__ import annotations
 
-__version__ = '2.18.7'
+__version__ = '2.18.8'
 __author__ = 'Ansible, Inc.'
 __codename__ = "Fool in the Rain"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible_core-2.18.7/lib/ansible/modules/meta.py 
new/ansible_core-2.18.8/lib/ansible/modules/meta.py
--- old/ansible_core-2.18.7/lib/ansible/modules/meta.py 2025-07-15 
19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/lib/ansible/modules/meta.py 2025-08-11 
20:59:54.000000000 +0200
@@ -33,6 +33,7 @@
         - V(clear_facts) (added in Ansible 2.1) causes the gathered facts for 
the hosts specified in the play's list of hosts to be cleared,
           including the fact cache.
         - V(clear_host_errors) (added in Ansible 2.1) clears the failed state 
(if any) from hosts specified in the play's list of hosts.
+          This will make them available for targetting in subsequent plays, 
but not continue execution in the current play.
         - V(end_play) (added in Ansible 2.2) causes the play to end without 
failing the host(s). Note that this affects all hosts.
         - V(reset_connection) (added in Ansible 2.3) interrupts a persistent 
connection (i.e. ssh + control persist)
         - V(end_host) (added in Ansible 2.8) is a per-host variation of 
V(end_play). Causes the play to end for the current host without failing it.
@@ -108,7 +109,7 @@
 - name: Clear gathered facts from all currently targeted hosts
   ansible.builtin.meta: clear_facts
 
-# Example showing how to continue using a failed target
+# Example showing how to continue using a failed target, for the next play
 - name: Bring host back to play after failure
   ansible.builtin.copy:
     src: file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible_core-2.18.7/lib/ansible/plugins/__init__.py 
new/ansible_core-2.18.8/lib/ansible/plugins/__init__.py
--- old/ansible_core-2.18.7/lib/ansible/plugins/__init__.py     2025-07-15 
19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/lib/ansible/plugins/__init__.py     2025-08-11 
20:59:54.000000000 +0200
@@ -59,6 +59,7 @@
 
     def __init__(self):
         self._options = {}
+        self._origins = {}
         self._defs = None
 
     @property
@@ -78,18 +79,22 @@
         return bool(possible_fqcns.intersection(set(self.ansible_aliases)))
 
     def get_option_and_origin(self, option, hostvars=None):
-        try:
-            option_value, origin = 
C.config.get_config_value_and_origin(option, plugin_type=self.plugin_type, 
plugin_name=self._load_name, variables=hostvars)
-        except AnsibleError as e:
-            raise KeyError(to_native(e))
-        return option_value, origin
+        if option not in self._options:
+            try:
+                # some plugins don't use set_option(s) and cannot use direct 
settings, so this populates the local copy for them
+                self._options[option], self._origins[option] = 
C.config.get_config_value_and_origin(option, plugin_type=self.plugin_type,
+                                                                               
                     plugin_name=self._load_name, variables=hostvars)
+            except AnsibleError as e:
+                # callers expect key error on missing
+                raise KeyError(str(e))
 
-    def get_option(self, option, hostvars=None):
+        return self._options[option], self._origins[option]
 
+    def get_option(self, option, hostvars=None):
         if option not in self._options:
-            option_value, dummy = self.get_option_and_origin(option, 
hostvars=hostvars)
-            self.set_option(option, option_value)
-        return self._options.get(option)
+            # let it populate _options
+            self.get_option_and_origin(option, hostvars=hostvars)
+        return self._options[option]
 
     def get_options(self, hostvars=None):
         options = {}
@@ -100,6 +105,7 @@
     def set_option(self, option, value):
         self._options[option] = C.config.get_config_value(option, 
plugin_type=self.plugin_type, plugin_name=self._load_name, direct={option: 
value})
         C.handle_config_noise(display)
+        self._origins[option] = 'Direct'
 
     def set_options(self, task_keys=None, var_options=None, direct=None):
         '''
@@ -109,12 +115,14 @@
         :arg var_options: Dict with either 'connection variables'
         :arg direct: Dict with 'direct assignment'
         '''
-        self._options = C.config.get_plugin_options(self.plugin_type, 
self._load_name, keys=task_keys, variables=var_options, direct=direct)
+        self._options, self._origins = 
C.config.get_plugin_options_and_origins(self.plugin_type, self._load_name, 
keys=task_keys,
+                                                                               
variables=var_options, direct=direct)
 
         # allow extras/wildcards from vars that are not directly consumed in 
configuration
         # this is needed to support things like winrm that can have extended 
protocol options we don't directly handle
         if self.allow_extras and var_options and '_extras' in var_options:
             # these are largely unvalidated passthroughs, either plugin or 
underlying API will validate
+            # TODO: deprecate and remove, most plugins that needed this don't 
use this facility anymore
             self._options['_extras'] = var_options['_extras']
         C.handle_config_noise(display)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/lib/ansible/plugins/callback/__init__.py 
new/ansible_core-2.18.8/lib/ansible/plugins/callback/__init__.py
--- old/ansible_core-2.18.7/lib/ansible/plugins/callback/__init__.py    
2025-07-15 19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/lib/ansible/plugins/callback/__init__.py    
2025-08-11 20:59:54.000000000 +0200
@@ -172,17 +172,25 @@
 
     def set_option(self, k, v):
         self._plugin_options[k] = C.config.get_config_value(k, 
plugin_type=self.plugin_type, plugin_name=self._load_name, direct={k: v})
+        self._origins[k] = 'direct'
 
     def get_option(self, k):
         return self._plugin_options[k]
 
+    def get_option_and_origin(self, k, hostvars=None):
+        return self._plugin_options[k], self._origins[k]
+
+    def has_option(self, option):
+        return (option in self._plugin_options)
+
     def set_options(self, task_keys=None, var_options=None, direct=None):
         ''' This is different than the normal plugin method as callbacks get 
called early and really don't accept keywords.
             Also _options was already taken for CLI args and callbacks use 
_plugin_options instead.
         '''
 
         # load from config
-        self._plugin_options = C.config.get_plugin_options(self.plugin_type, 
self._load_name, keys=task_keys, variables=var_options, direct=direct)
+        self._plugin_options, self._origins = 
C.config.get_plugin_options_and_origins(self.plugin_type, self._load_name,
+                                                                               
       keys=task_keys, variables=var_options, direct=direct)
 
     @staticmethod
     def host_label(result):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ansible_core-2.18.7/lib/ansible/release.py 
new/ansible_core-2.18.8/lib/ansible/release.py
--- old/ansible_core-2.18.7/lib/ansible/release.py      2025-07-15 
19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/lib/ansible/release.py      2025-08-11 
20:59:54.000000000 +0200
@@ -17,6 +17,6 @@
 
 from __future__ import annotations
 
-__version__ = '2.18.7'
+__version__ = '2.18.8'
 __author__ = 'Ansible, Inc.'
 __codename__ = "Fool in the Rain"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/integration/targets/config/lookup_plugins/broken.py
 
new/ansible_core-2.18.8/test/integration/targets/config/lookup_plugins/broken.py
--- 
old/ansible_core-2.18.7/test/integration/targets/config/lookup_plugins/broken.py
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/ansible_core-2.18.8/test/integration/targets/config/lookup_plugins/broken.py
    2025-08-11 20:59:54.000000000 +0200
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# Copyright (c) 2025, Felix Fontein <fe...@fontein.de>, The Ansible Project
+# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or 
https://www.gnu.org/licenses/gpl-3.0.txt)
+# SPDX-License-Identifier: GPL-3.0-or-later
+from __future__ import annotations
+
+
+DOCUMENTATION = r"""
+name: broken
+short_description: Test input precedence
+author: Felix Fontein (@felixfontein)
+description:
+  - Test input precedence.
+options:
+  _terms:
+    description:
+      - Ignored.
+    type: list
+    elements: str
+    required: true
+  some_option:
+    description:
+      - The interesting part.
+    type: str
+    default: default value
+    env:
+      - name: PLAYGROUND_TEST_1
+      - name: PLAYGROUND_TEST_2
+    vars:
+      - name: playground_test_1
+      - name: playground_test_2
+    ini:
+      - key: playground_test_1
+        section: playground
+      - key: playground_test_2
+        section: playground
+"""
+
+EXAMPLES = r"""#"""
+
+RETURN = r"""
+_list:
+  description:
+    - The value of O(some_option).
+  type: list
+  elements: str
+"""
+
+from ansible.plugins.lookup import LookupBase
+
+
+class LookupModule(LookupBase):
+    def run(self, terms, variables=None, **kwargs):
+        """Generate list."""
+        self.set_options(var_options=variables, direct=kwargs)
+
+        return [self.get_option("some_option"), 
*self.get_option_and_origin("some_option")]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/integration/targets/config/match_option_methods.yml
 
new/ansible_core-2.18.8/test/integration/targets/config/match_option_methods.yml
--- 
old/ansible_core-2.18.7/test/integration/targets/config/match_option_methods.yml
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/ansible_core-2.18.8/test/integration/targets/config/match_option_methods.yml
    2025-08-11 20:59:54.000000000 +0200
@@ -0,0 +1,37 @@
+- hosts: localhost
+  gather_facts: false
+  vars:
+      direct: "{{ query('broken', some_option='foo') }}"
+      default: "{{ query('broken') }}"
+  tasks:
+    - name: Set directly but also have  vars
+      set_fact:
+        direct_with_vars: "{{ query('broken', some_option='foo') }}"
+      vars:
+        playground_test_1: var 1
+        playground_test_2: var 2
+    - name:  Set via vars only
+      set_fact:
+        vars_only: "{{ query('broken') }}"
+      vars:
+        playground_test_1: var 1
+        playground_test_2: var 2
+
+    - debug: msg={{q('vars', item)}}
+      loop:
+        - direct
+        - default
+        - direct_with_vars
+        - vars_only
+
+    - name: now ensure it all worked as expected (simple value, origin value, 
origin)
+      assert:
+        that:
+          - direct[0] == direct[1]
+          - direct[2] == 'Direct'
+          - default[0] == default[1]
+          - default[2] == 'default'
+          - direct_with_vars[0] == direct_with_vars[1]
+          - direct_with_vars[2] == 'Direct'
+          - vars_only[0] == vars_only[1]
+          - vars_only[2].startswith('var:')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/integration/targets/config/runme.sh 
new/ansible_core-2.18.8/test/integration/targets/config/runme.sh
--- old/ansible_core-2.18.7/test/integration/targets/config/runme.sh    
2025-07-15 19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/test/integration/targets/config/runme.sh    
2025-08-11 20:59:54.000000000 +0200
@@ -43,3 +43,6 @@
 
 # ensure we don't show default templates, but templated defaults
 [ "$(ansible-config init |grep '={{' -c )" -eq 0 ]
+
+# test seldom used '_and_origin' api 
+ansible-playbook match_option_methods.yml "$@"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/integration/targets/cron/defaults/main.yml 
new/ansible_core-2.18.8/test/integration/targets/cron/defaults/main.yml
--- old/ansible_core-2.18.7/test/integration/targets/cron/defaults/main.yml     
2025-07-15 19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/test/integration/targets/cron/defaults/main.yml     
1970-01-01 01:00:00.000000000 +0100
@@ -1 +0,0 @@
-faketime_pkg: libfaketime
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/integration/targets/setup_cron/defaults/main.yml 
new/ansible_core-2.18.8/test/integration/targets/setup_cron/defaults/main.yml
--- 
old/ansible_core-2.18.7/test/integration/targets/setup_cron/defaults/main.yml   
    2025-07-15 19:46:32.000000000 +0200
+++ 
new/ansible_core-2.18.8/test/integration/targets/setup_cron/defaults/main.yml   
    2025-08-11 20:59:54.000000000 +0200
@@ -1 +1,2 @@
 remote_dir: "{{ remote_tmp_dir }}"
+faketime_pkg: libfaketime
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/integration/targets/setup_cron/tasks/main.yml 
new/ansible_core-2.18.8/test/integration/targets/setup_cron/tasks/main.yml
--- old/ansible_core-2.18.7/test/integration/targets/setup_cron/tasks/main.yml  
2025-07-15 19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/test/integration/targets/setup_cron/tasks/main.yml  
2025-08-11 20:59:54.000000000 +0200
@@ -7,6 +7,7 @@
   vars:
     search:
       files:
+        - '{{ ansible_distribution | lower }}-{{ 
ansible_distribution_major_version }}.yml'
         - '{{ ansible_distribution | lower }}.yml'
         - '{{ ansible_os_family | lower }}.yml'
         - '{{ ansible_system | lower }}.yml'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/integration/targets/setup_cron/vars/freebsd-14.yml 
new/ansible_core-2.18.8/test/integration/targets/setup_cron/vars/freebsd-14.yml
--- 
old/ansible_core-2.18.7/test/integration/targets/setup_cron/vars/freebsd-14.yml 
    1970-01-01 01:00:00.000000000 +0100
+++ 
new/ansible_core-2.18.8/test/integration/targets/setup_cron/vars/freebsd-14.yml 
    2025-08-11 20:59:54.000000000 +0200
@@ -0,0 +1,4 @@
+cron_pkg:
+cron_service: cron
+list_pkg_files: pkg info --list-files
+faketime_pkg: libfaketime
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/integration/targets/setup_cron/vars/freebsd.yml 
new/ansible_core-2.18.8/test/integration/targets/setup_cron/vars/freebsd.yml
--- 
old/ansible_core-2.18.7/test/integration/targets/setup_cron/vars/freebsd.yml    
    2025-07-15 19:46:32.000000000 +0200
+++ 
new/ansible_core-2.18.8/test/integration/targets/setup_cron/vars/freebsd.yml    
    2025-08-11 20:59:54.000000000 +0200
@@ -1,3 +1,4 @@
 cron_pkg:
 cron_service: cron
 list_pkg_files: pkg info --list-files
+faketime_pkg: ~
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/lib/ansible_test/_data/completion/remote.txt 
new/ansible_core-2.18.8/test/lib/ansible_test/_data/completion/remote.txt
--- old/ansible_core-2.18.7/test/lib/ansible_test/_data/completion/remote.txt   
2025-07-15 19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/test/lib/ansible_test/_data/completion/remote.txt   
2025-08-11 20:59:54.000000000 +0200
@@ -2,7 +2,7 @@
 alpine become=doas_sudo provider=aws arch=x86_64
 fedora/40 python=3.12 become=sudo provider=aws arch=x86_64
 fedora become=sudo provider=aws arch=x86_64
-freebsd/13.3 python=3.9,3.11 python_dir=/usr/local/bin become=su_sudo 
provider=aws arch=x86_64
+freebsd/13.5 python=3.11 python_dir=/usr/local/bin become=su_sudo provider=aws 
arch=x86_64
 freebsd/14.1 python=3.9,3.11 python_dir=/usr/local/bin become=su_sudo 
provider=aws arch=x86_64
 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/lib/ansible_test/_internal/commands/integration/coverage.py
 
new/ansible_core-2.18.8/test/lib/ansible_test/_internal/commands/integration/coverage.py
--- 
old/ansible_core-2.18.7/test/lib/ansible_test/_internal/commands/integration/coverage.py
    2025-07-15 19:46:32.000000000 +0200
+++ 
new/ansible_core-2.18.8/test/lib/ansible_test/_internal/commands/integration/coverage.py
    2025-08-11 20:59:54.000000000 +0200
@@ -165,7 +165,7 @@
         coverage_config_path = os.path.join(self.common_temp_path, 
COVERAGE_CONFIG_NAME)
         coverage_output_path = os.path.join(self.common_temp_path, 
ResultType.COVERAGE.name)
 
-        coverage_config = generate_coverage_config(self.args)
+        coverage_config = generate_coverage_config()
 
         write_text_file(coverage_config_path, coverage_config, 
create_directories=True)
 
@@ -254,7 +254,7 @@
         """Return a dictionary of variables for setup and teardown of POSIX 
coverage."""
         return dict(
             common_temp_dir=self.common_temp_path,
-            coverage_config=generate_coverage_config(self.args),
+            coverage_config=generate_coverage_config(),
             coverage_config_path=os.path.join(self.common_temp_path, 
COVERAGE_CONFIG_NAME),
             coverage_output_path=os.path.join(self.common_temp_path, 
ResultType.COVERAGE.name),
             mode_directory=f'{MODE_DIRECTORY:04o}',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/lib/ansible_test/_internal/coverage_util.py 
new/ansible_core-2.18.8/test/lib/ansible_test/_internal/coverage_util.py
--- old/ansible_core-2.18.7/test/lib/ansible_test/_internal/coverage_util.py    
2025-07-15 19:46:32.000000000 +0200
+++ new/ansible_core-2.18.8/test/lib/ansible_test/_internal/coverage_util.py    
2025-08-11 20:59:54.000000000 +0200
@@ -5,11 +5,10 @@
 import os
 import sqlite3
 import tempfile
+import textwrap
 import typing as t
 
 from .config import (
-    IntegrationConfig,
-    SanityConfig,
     TestConfig,
 )
 
@@ -216,7 +215,7 @@
     except AttributeError:
         pass
 
-    coverage_config = generate_coverage_config(args)
+    coverage_config = generate_coverage_config()
 
     if args.explain:
         temp_dir = '/tmp/coverage-temp-dir'
@@ -234,10 +233,10 @@
     return path
 
 
-def generate_coverage_config(args: TestConfig) -> str:
+def generate_coverage_config() -> str:
     """Generate code coverage configuration for tests."""
     if data_context().content.collection:
-        coverage_config = generate_collection_coverage_config(args)
+        coverage_config = generate_collection_coverage_config()
     else:
         coverage_config = generate_ansible_coverage_config()
 
@@ -264,12 +263,29 @@
     */test/results/*
 '''
 
+    coverage_config = coverage_config.lstrip()
+
     return coverage_config
 
 
-def generate_collection_coverage_config(args: TestConfig) -> str:
+def generate_collection_coverage_config() -> str:
     """Generate code coverage configuration for Ansible Collection tests."""
-    coverage_config = '''
+    include_patterns = [
+        # {base}/ansible_collections/{ns}/{col}/*
+        os.path.join(data_context().content.root, '*'),
+        # */ansible_collections/{ns}/{col}/* (required to pick up AnsiballZ 
coverage)
+        os.path.join('*', data_context().content.collection.directory, '*'),
+    ]
+
+    omit_patterns = [
+        # {base}/ansible_collections/{ns}/{col}/tests/output/*
+        os.path.join(data_context().content.root, 
data_context().content.results_path, '*'),
+    ]
+
+    include = textwrap.indent('\n'.join(include_patterns), ' ' * 4)
+    omit = textwrap.indent('\n'.join(omit_patterns), ' ' * 4)
+
+    coverage_config = f"""
 [run]
 branch = True
 concurrency =
@@ -278,28 +294,15 @@
 parallel = True
 disable_warnings =
     no-data-collected
-'''
 
-    if isinstance(args, IntegrationConfig):
-        coverage_config += '''
 include =
-    %s/*
-    */%s/*
-''' % (data_context().content.root, 
data_context().content.collection.directory)
-    elif isinstance(args, SanityConfig):
-        # temporary work-around for import sanity test
-        coverage_config += '''
-include =
-    %s/*
+{include}
 
 omit =
-    %s/*
-''' % (data_context().content.root, os.path.join(data_context().content.root, 
data_context().content.results_path))
-    else:
-        coverage_config += '''
-include =
-     %s/*
-''' % data_context().content.root
+{omit}
+"""
+
+    coverage_config = coverage_config.lstrip()
 
     return coverage_config
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/ansible_core-2.18.7/test/lib/ansible_test/_util/target/setup/bootstrap.sh 
new/ansible_core-2.18.8/test/lib/ansible_test/_util/target/setup/bootstrap.sh
--- 
old/ansible_core-2.18.7/test/lib/ansible_test/_util/target/setup/bootstrap.sh   
    2025-07-15 19:46:32.000000000 +0200
+++ 
new/ansible_core-2.18.8/test/lib/ansible_test/_util/target/setup/bootstrap.sh   
    2025-08-11 20:59:54.000000000 +0200
@@ -2,6 +2,24 @@
 
 set -eu
 
+retry_init()
+{
+    attempt=0
+}
+
+retry_or_fail()
+{
+    attempt=$((attempt + 1))
+
+    if [ $attempt -gt 5 ]; then
+      echo "Failed to install packages. Giving up."
+      exit 1
+    fi
+
+    echo "Failed to install packages. Sleeping before trying again..."
+    sleep 10
+}
+
 remove_externally_managed_marker()
 {
     "${python_interpreter}" -c '
@@ -26,13 +44,13 @@
         echo "${ssh_private_key}" > "${ssh_private_key_path}"
 
         # add public key to authorized_keys
-        authoried_keys_path="${HOME}/.ssh/authorized_keys"
+        authorized_keys_path="${HOME}/.ssh/authorized_keys"
 
         # the existing file is overwritten to avoid conflicts (ex: RHEL on EC2 
blocks root login)
-        cat "${public_key_path}" > "${authoried_keys_path}"
-        chmod 0600 "${authoried_keys_path}"
+        cat "${public_key_path}" > "${authorized_keys_path}"
+        chmod 0600 "${authorized_keys_path}"
 
-        # add localhost's server keys to known_hosts
+        # add localhost server keys to known_hosts
         known_hosts_path="${HOME}/.ssh/known_hosts"
 
         for key in /etc/ssh/ssh_host_*_key.pub; do
@@ -64,13 +82,13 @@
                 ;;
         esac
 
+        retry_init
         while true; do
             curl --silent --show-error "${pip_bootstrap_url}" -o 
/tmp/get-pip.py && \
             "${python_interpreter}" /tmp/get-pip.py 
--disable-pip-version-check --quiet && \
             rm /tmp/get-pip.py \
             && break
-            echo "Failed to install packages. Sleeping before trying again..."
-            sleep 10
+            retry_or_fail
         done
     fi
 }
@@ -99,21 +117,21 @@
             "
     fi
 
+    retry_init
     while true; do
         # shellcheck disable=SC2086
         apk add -q ${packages} \
         && break
-        echo "Failed to install packages. Sleeping before trying again..."
-        sleep 10
+        retry_or_fail
     done
 
     # Upgrade the `libexpat` package to ensure that an upgraded Python 
(`pyexpat`) continues to work.
+    retry_init
     while true; do
         # shellcheck disable=SC2086
         apk upgrade -q libexpat \
         && break
-        echo "Failed to upgrade libexpat. Sleeping before trying again..."
-        sleep 10
+        retry_or_fail
     done
 }
 
@@ -138,12 +156,12 @@
             "
     fi
 
+    retry_init
     while true; do
         # shellcheck disable=SC2086
         dnf install -q -y ${packages} \
         && break
-        echo "Failed to install packages. Sleeping before trying again..."
-        sleep 10
+        retry_or_fail
     done
 }
 
@@ -162,22 +180,14 @@
     if [ "${controller}" ]; then
         jinja2_pkg="py${python_package_version}-jinja2"
         cryptography_pkg="py${python_package_version}-cryptography"
-        pyyaml_pkg="py${python_package_version}-yaml"
+        pyyaml_pkg="py${python_package_version}-pyyaml"
         packaging_pkg="py${python_package_version}-packaging"
 
         # Declare platform/python version combinations which do not have 
supporting OS packages available.
         # For these combinations ansible-test will use pip to install the 
requirements instead.
         case "${platform_version}/${python_version}" in
-            13.3/3.9)
-                # defaults above 'just work'TM
-                ;;
-            13.3/3.11)
-                jinja2_pkg=""  # not available
-                cryptography_pkg=""  # not available
-                pyyaml_pkg=""  # not available
-                ;;
-            14.1/3.9)
-                # defaults above 'just work'TM
+            13.5/3.11)
+                # defaults available
                 ;;
             14.1/3.11)
                 cryptography_pkg=""  # not available
@@ -203,13 +213,13 @@
             "
     fi
 
+    retry_init
     while true; do
         # shellcheck disable=SC2086
         env ASSUME_ALWAYS_YES=YES pkg bootstrap && \
         pkg install -q -y ${packages} \
         && break
-        echo "Failed to install packages. Sleeping before trying again..."
-        sleep 10
+        retry_or_fail
     done
 
     install_pip
@@ -283,12 +293,12 @@
             "
     fi
 
+    retry_init
     while true; do
         # shellcheck disable=SC2086
         dnf install -q -y ${packages} \
         && break
-        echo "Failed to install packages. Sleeping before trying again..."
-        sleep 10
+        retry_or_fail
     done
 }
 
@@ -313,12 +323,12 @@
             "
     fi
 
+    retry_init
     while true; do
         # shellcheck disable=SC2086
         dnf install -q -y ${packages} \
         && break
-        echo "Failed to install packages. Sleeping before trying again..."
-        sleep 10
+        retry_or_fail
     done
 }
 
@@ -365,13 +375,13 @@
             "
     fi
 
+    retry_init
     while true; do
         # shellcheck disable=SC2086
         apt-get update -qq -y && \
         DEBIAN_FRONTEND=noninteractive apt-get install -qq -y 
--no-install-recommends ${packages} \
         && break
-        echo "Failed to install packages. Sleeping before trying again..."
-        sleep 10
+        retry_or_fail
     done
 }
 

++++++ ansible_core-2.18.7.tar.gz.sha256 -> ansible_core-2.18.8.tar.gz.sha256 
++++++
--- /work/SRC/openSUSE:Factory/ansible-core/ansible_core-2.18.7.tar.gz.sha256   
2025-07-16 17:36:21.174960424 +0200
+++ 
/work/SRC/openSUSE:Factory/.ansible-core.new.29662/ansible_core-2.18.8.tar.gz.sha256
        2025-08-21 20:31:10.915155431 +0200
@@ -1 +1 @@
-1a129bf9fcd5dca2b17e83ce77147ee2fbc3c51a4958970152897cc5b6d0aae7  
ansible_core-2.18.7.tar.gz
+b0766215a96a47ce39933d27e1e996ca2beb54cf1b3907c742d35c913b1f78cd  
ansible_core-2.18.8.tar.gz

Reply via email to