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