ansible-core 2.16.5__py3-none-any.whl → 2.16.6__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ansible-core might be problematic. Click here for more details.

ansible/cli/config.py CHANGED
@@ -270,7 +270,7 @@ class ConfigCLI(CLI):
270
270
  if not settings[setting].get('description'):
271
271
  continue
272
272
 
273
- default = settings[setting].get('default', '')
273
+ default = self.config.template_default(settings[setting].get('default', ''), get_constants())
274
274
  if subkey == 'env':
275
275
  stype = settings[setting].get('type', '')
276
276
  if stype == 'boolean':
@@ -352,7 +352,7 @@ class ConfigCLI(CLI):
352
352
  if entry['key'] not in seen[entry['section']]:
353
353
  seen[entry['section']].append(entry['key'])
354
354
 
355
- default = opt.get('default', '')
355
+ default = self.config.template_default(opt.get('default', ''), get_constants())
356
356
  if opt.get('type', '') == 'list' and not isinstance(default, string_types):
357
357
  # python lists are not valid ini ones
358
358
  default = ', '.join(default)
@@ -414,14 +414,16 @@ class ConfigCLI(CLI):
414
414
  if context.CLIARGS['format'] == 'display':
415
415
  if isinstance(config[setting], Setting):
416
416
  # proceed normally
417
+ value = config[setting].value
417
418
  if config[setting].origin == 'default':
418
419
  color = 'green'
420
+ value = self.config.template_default(value, get_constants())
419
421
  elif config[setting].origin == 'REQUIRED':
420
422
  # should include '_terms', '_input', etc
421
423
  color = 'red'
422
424
  else:
423
425
  color = 'yellow'
424
- msg = "%s(%s) = %s" % (setting, config[setting].origin, config[setting].value)
426
+ msg = "%s(%s) = %s" % (setting, config[setting].origin, value)
425
427
  else:
426
428
  color = 'green'
427
429
  msg = "%s(%s) = %s" % (setting, 'default', config[setting].get('default'))
ansible/cli/inventory.py CHANGED
@@ -25,26 +25,6 @@ from ansible.vars.plugins import get_vars_from_inventory_sources, get_vars_from_
25
25
 
26
26
  display = Display()
27
27
 
28
- INTERNAL_VARS = frozenset(['ansible_diff_mode',
29
- 'ansible_config_file',
30
- 'ansible_facts',
31
- 'ansible_forks',
32
- 'ansible_inventory_sources',
33
- 'ansible_limit',
34
- 'ansible_playbook_python',
35
- 'ansible_run_tags',
36
- 'ansible_skip_tags',
37
- 'ansible_verbosity',
38
- 'ansible_version',
39
- 'inventory_dir',
40
- 'inventory_file',
41
- 'inventory_hostname',
42
- 'inventory_hostname_short',
43
- 'groups',
44
- 'group_names',
45
- 'omit',
46
- 'playbook_dir', ])
47
-
48
28
 
49
29
  class InventoryCLI(CLI):
50
30
  ''' used to display or dump the configured inventory as Ansible sees it '''
@@ -247,7 +227,7 @@ class InventoryCLI(CLI):
247
227
  @staticmethod
248
228
  def _remove_internal(dump):
249
229
 
250
- for internal in INTERNAL_VARS:
230
+ for internal in C.INTERNAL_STATIC_VARS:
251
231
  if internal in dump:
252
232
  del dump[internal]
253
233
 
ansible/config/manager.py CHANGED
@@ -305,6 +305,17 @@ class ConfigManager(object):
305
305
  # ensure we always have config def entry
306
306
  self._base_defs['CONFIG_FILE'] = {'default': None, 'type': 'path'}
307
307
 
308
+ def template_default(self, value, variables):
309
+ if isinstance(value, string_types) and (value.startswith('{{') and value.endswith('}}')) and variables is not None:
310
+ # template default values if possible
311
+ # NOTE: cannot use is_template due to circular dep
312
+ try:
313
+ t = NativeEnvironment().from_string(value)
314
+ value = t.render(variables)
315
+ except Exception:
316
+ pass # not templatable
317
+ return value
318
+
308
319
  def _read_config_yaml_file(self, yml_file):
309
320
  # TODO: handle relative paths as relative to the directory containing the current playbook instead of CWD
310
321
  # Currently this is only used with absolute paths to the `ansible/config` directory
@@ -548,17 +559,7 @@ class ConfigManager(object):
548
559
  to_native(_get_entry(plugin_type, plugin_name, config)))
549
560
  else:
550
561
  origin = 'default'
551
- value = defs[config].get('default')
552
- if isinstance(value, string_types) and (value.startswith('{{') and value.endswith('}}')) and variables is not None:
553
- # template default values if possible
554
- # NOTE: cannot use is_template due to circular dep
555
- try:
556
- t = NativeEnvironment().from_string(value)
557
- value = t.render(variables)
558
- except Exception:
559
- pass # not templatable
560
-
561
- # ensure correct type, can raise exceptions on mismatched types
562
+ value = self.template_default(defs[config].get('default'), variables)
562
563
  try:
563
564
  value = ensure_type(value, defs[config].get('type'), origin=origin)
564
565
  except ValueError as e:
ansible/constants.py CHANGED
@@ -112,6 +112,46 @@ CONFIGURABLE_PLUGINS = ('become', 'cache', 'callback', 'cliconf', 'connection',
112
112
  DOCUMENTABLE_PLUGINS = CONFIGURABLE_PLUGINS + ('module', 'strategy', 'test', 'filter')
113
113
  IGNORE_FILES = ("COPYING", "CONTRIBUTING", "LICENSE", "README", "VERSION", "GUIDELINES", "MANIFEST", "Makefile") # ignore during module search
114
114
  INTERNAL_RESULT_KEYS = ('add_host', 'add_group')
115
+ INTERNAL_STATIC_VARS = frozenset(
116
+ [
117
+ "ansible_async_path",
118
+ "ansible_collection_name",
119
+ "ansible_config_file",
120
+ "ansible_dependent_role_names",
121
+ "ansible_diff_mode",
122
+ "ansible_config_file",
123
+ "ansible_facts",
124
+ "ansible_forks",
125
+ "ansible_inventory_sources",
126
+ "ansible_limit",
127
+ "ansible_play_batch",
128
+ "ansible_play_hosts",
129
+ "ansible_play_hosts_all",
130
+ "ansible_play_role_names",
131
+ "ansible_playbook_python",
132
+ "ansible_role_name",
133
+ "ansible_role_names",
134
+ "ansible_run_tags",
135
+ "ansible_skip_tags",
136
+ "ansible_verbosity",
137
+ "ansible_version",
138
+ "inventory_dir",
139
+ "inventory_file",
140
+ "inventory_hostname",
141
+ "inventory_hostname_short",
142
+ "groups",
143
+ "group_names",
144
+ "omit",
145
+ "hostvars",
146
+ "playbook_dir",
147
+ "play_hosts",
148
+ "role_name",
149
+ "role_names",
150
+ "role_path",
151
+ "role_uuid",
152
+ "role_names",
153
+ ]
154
+ )
115
155
  LOCALHOST = ('127.0.0.1', 'localhost', '::1')
116
156
  MODULE_REQUIRE_ARGS = tuple(add_internal_fqcns(('command', 'win_command', 'ansible.windows.win_command', 'shell', 'win_shell',
117
157
  'ansible.windows.win_shell', 'raw', 'script')))
@@ -841,7 +841,12 @@ class TaskExecutor:
841
841
  # that (with a sleep for "poll" seconds between each retry) until the
842
842
  # async time limit is exceeded.
843
843
 
844
- async_task = Task.load(dict(action='async_status', args={'jid': async_jid}, environment=self._task.environment))
844
+ async_task = Task.load(dict(
845
+ action='async_status',
846
+ args={'jid': async_jid},
847
+ check_mode=self._task.check_mode,
848
+ environment=self._task.environment,
849
+ ))
845
850
 
846
851
  # FIXME: this is no longer the case, normal takes care of all, see if this can just be generalized
847
852
  # Because this is an async task, the action handler is async. However,
@@ -913,6 +918,7 @@ class TaskExecutor:
913
918
  'jid': async_jid,
914
919
  'mode': 'cleanup',
915
920
  },
921
+ 'check_mode': self._task.check_mode,
916
922
  'environment': self._task.environment,
917
923
  }
918
924
  )
@@ -1086,7 +1092,7 @@ class TaskExecutor:
1086
1092
 
1087
1093
  # deals with networking sub_plugins (network_cli/httpapi/netconf)
1088
1094
  sub = getattr(self._connection, '_sub_plugin', None)
1089
- if sub is not None and sub.get('type') != 'external':
1095
+ if sub and sub.get('type') != 'external':
1090
1096
  plugin_type = get_plugin_class(sub.get("obj"))
1091
1097
  varnames.extend(self._set_plugin_options(plugin_type, variables, templar, task_keys))
1092
1098
  sub_conn = getattr(self._connection, 'ssh_type_conn', None)
@@ -19,6 +19,6 @@
19
19
  from __future__ import (absolute_import, division, print_function)
20
20
  __metaclass__ = type
21
21
 
22
- __version__ = '2.16.5'
22
+ __version__ = '2.16.6'
23
23
  __author__ = 'Ansible, Inc.'
24
24
  __codename__ = "All My Love"
@@ -176,7 +176,7 @@ class LinuxVirtual(Virtual):
176
176
  virtual_facts['virtualization_type'] = 'RHEV'
177
177
  found_virt = True
178
178
 
179
- if product_name in ('VMware Virtual Platform', 'VMware7,1'):
179
+ if product_name and product_name.startswith(("VMware",)):
180
180
  guest_tech.add('VMware')
181
181
  if not found_virt:
182
182
  virtual_facts['virtualization_type'] = 'VMware'
@@ -269,7 +269,7 @@ def main():
269
269
  module.fail_json(rc=257,
270
270
  msg='Path %s does not exist !' % path)
271
271
  destpath = os.path.dirname(path)
272
- if not os.path.exists(destpath) and not module.check_mode:
272
+ if destpath and not os.path.exists(destpath) and not module.check_mode:
273
273
  try:
274
274
  os.makedirs(destpath)
275
275
  except OSError as e:
ansible/modules/dnf.py CHANGED
@@ -1441,8 +1441,10 @@ class DnfModule(YumDnf):
1441
1441
 
1442
1442
  if self.with_modules:
1443
1443
  self.module_base = dnf.module.module_base.ModuleBase(self.base)
1444
-
1445
- self.ensure()
1444
+ try:
1445
+ self.ensure()
1446
+ finally:
1447
+ self.base.close()
1446
1448
 
1447
1449
 
1448
1450
  def main():
ansible/modules/dnf5.py CHANGED
@@ -484,7 +484,7 @@ class Dnf5Module(YumDnf):
484
484
  conf.config_file_path = self.conf_file
485
485
 
486
486
  try:
487
- base.load_config_from_file()
487
+ base.load_config()
488
488
  except RuntimeError as e:
489
489
  self.module.fail_json(
490
490
  msg=str(e),
@@ -520,7 +520,8 @@ class Dnf5Module(YumDnf):
520
520
  log_router = base.get_logger()
521
521
  global_logger = libdnf5.logger.GlobalLogger()
522
522
  global_logger.set(log_router.get(), libdnf5.logger.Logger.Level_DEBUG)
523
- logger = libdnf5.logger.create_file_logger(base)
523
+ # FIXME hardcoding the filename does not seem right, should libdnf5 expose the default file name?
524
+ logger = libdnf5.logger.create_file_logger(base, "dnf5.log")
524
525
  log_router.add_logger(logger)
525
526
 
526
527
  if self.update_cache:
@@ -545,7 +546,11 @@ class Dnf5Module(YumDnf):
545
546
  for repo in repo_query:
546
547
  repo.enable()
547
548
 
548
- sack.update_and_load_enabled_repos(True)
549
+ try:
550
+ sack.load_repos()
551
+ except AttributeError:
552
+ # dnf5 < 5.2.0.0
553
+ sack.update_and_load_enabled_repos(True)
549
554
 
550
555
  if self.update_cache and not self.names and not self.list:
551
556
  self.module.exit_json(
@@ -577,7 +582,11 @@ class Dnf5Module(YumDnf):
577
582
  self.module.exit_json(msg="", results=results, rc=0)
578
583
 
579
584
  settings = libdnf5.base.GoalJobSettings()
580
- settings.group_with_name = True
585
+ try:
586
+ settings.set_group_with_name(True)
587
+ except AttributeError:
588
+ # dnf5 < 5.2.0.0
589
+ settings.group_with_name = True
581
590
  if self.bugfix or self.security:
582
591
  advisory_query = libdnf5.advisory.AdvisoryQuery(base)
583
592
  types = []
ansible/modules/find.py CHANGED
@@ -258,6 +258,7 @@ skipped_paths:
258
258
  version_added: '2.12'
259
259
  '''
260
260
 
261
+ import errno
261
262
  import fnmatch
262
263
  import grp
263
264
  import os
@@ -434,10 +435,6 @@ def statinfo(st):
434
435
  }
435
436
 
436
437
 
437
- def handle_walk_errors(e):
438
- raise e
439
-
440
-
441
438
  def main():
442
439
  module = AnsibleModule(
443
440
  argument_spec=dict(
@@ -482,6 +479,12 @@ def main():
482
479
  filelist = []
483
480
  skipped = {}
484
481
 
482
+ def handle_walk_errors(e):
483
+ if e.errno in (errno.EPERM, errno.EACCES):
484
+ skipped[e.filename] = to_text(e)
485
+ return
486
+ raise e
487
+
485
488
  if params['age'] is None:
486
489
  age = None
487
490
  else:
@@ -969,7 +969,7 @@ class TarZstdArchive(TgzArchive):
969
969
  class ZipZArchive(ZipArchive):
970
970
  def __init__(self, src, b_dest, file_args, module):
971
971
  super(ZipZArchive, self).__init__(src, b_dest, file_args, module)
972
- self.zipinfoflag = '-Z'
972
+ self.zipinfoflag = '-Zl'
973
973
  self.binaries = (
974
974
  ('unzip', 'cmd_path'),
975
975
  ('unzip', 'zipinfo_cmd_path'),
@@ -586,7 +586,7 @@ class Role(Base, Conditional, Taggable, CollectionSearch, Delegatable):
586
586
  at least one task was run
587
587
  '''
588
588
 
589
- return host.name in self._completed and not self._metadata.allow_duplicates
589
+ return host.name in self._completed
590
590
 
591
591
  def compile(self, play, dep_chain=None):
592
592
  '''
@@ -150,6 +150,10 @@ class ActionModule(ActionBase):
150
150
  # destination filename
151
151
  base = os.path.basename(source_local)
152
152
  dest = os.path.join(dest, base)
153
+
154
+ if os.path.isdir(to_bytes(dest, errors='surrogate_or_strict')):
155
+ raise AnsibleActionFail(
156
+ f"calculated dest '{dest}' is an existing directory, use another path that does not point to an existing directory")
153
157
  if not dest.startswith("/"):
154
158
  # if dest does not start with "/", we'll assume a relative path
155
159
  dest = self._loader.path_dwim(dest)
@@ -165,6 +165,7 @@ class BaseFileCacheModule(BaseCacheModule):
165
165
  display.warning("error in '%s' cache plugin while trying to write to '%s' : %s" % (self.plugin_name, tmpfile_path, to_bytes(e)))
166
166
  try:
167
167
  os.rename(tmpfile_path, cachefile)
168
+ os.chmod(cachefile, mode=0o644)
168
169
  except (OSError, IOError) as e:
169
170
  display.warning("error in '%s' cache plugin while trying to move '%s' to '%s' : %s" % (self.plugin_name, tmpfile_path, cachefile, to_bytes(e)))
170
171
  finally:
@@ -199,7 +199,7 @@ from ansible.utils.display import Display
199
199
 
200
200
  try:
201
201
  import winrm
202
- from winrm.exceptions import WinRMError, WinRMOperationTimeoutError
202
+ from winrm.exceptions import WinRMError, WinRMOperationTimeoutError, WinRMTransportError
203
203
  from winrm.protocol import Protocol
204
204
  import requests.exceptions
205
205
  HAS_WINRM = True
@@ -684,7 +684,19 @@ class Connection(ConnectionBase):
684
684
  raise AnsibleConnectionFailure('winrm connection error: %s' % to_native(exc))
685
685
  finally:
686
686
  if command_id:
687
- self.protocol.cleanup_command(self.shell_id, command_id)
687
+ # Due to a bug in how pywinrm works with message encryption we
688
+ # ignore a 400 error which can occur when a task timeout is
689
+ # set and the code tries to clean up the command. This happens
690
+ # as the cleanup msg is sent over a new socket but still uses
691
+ # the already encrypted payload bound to the other socket
692
+ # causing the server to reply with 400 Bad Request.
693
+ try:
694
+ self.protocol.cleanup_command(self.shell_id, command_id)
695
+ except WinRMTransportError as e:
696
+ if e.code != 400:
697
+ raise
698
+
699
+ display.warning("Failed to cleanup running WinRM command, resources might still be in use on the target server")
688
700
 
689
701
  def _connect(self) -> Connection:
690
702
 
@@ -177,7 +177,7 @@ class StrategyModule(StrategyBase):
177
177
  # role which has already run (and whether that role allows duplicate execution)
178
178
  if not isinstance(task, Handler) and task._role:
179
179
  role_obj = self._get_cached_role(task, iterator._play)
180
- if role_obj.has_run(host) and role_obj._metadata.allow_duplicates is False:
180
+ if role_obj.has_run(host) and task._role._metadata.allow_duplicates is False:
181
181
  display.debug("'%s' skipped because role has already run" % task, host=host_name)
182
182
  del self._blocked_hosts[host_name]
183
183
  continue
@@ -172,7 +172,7 @@ class StrategyModule(StrategyBase):
172
172
  # role which has already run (and whether that role allows duplicate execution)
173
173
  if not isinstance(task, Handler) and task._role:
174
174
  role_obj = self._get_cached_role(task, iterator._play)
175
- if role_obj.has_run(host) and role_obj._metadata.allow_duplicates is False:
175
+ if role_obj.has_run(host) and task._role._metadata.allow_duplicates is False:
176
176
  display.debug("'%s' skipped because role has already run" % task)
177
177
  continue
178
178
 
ansible/release.py CHANGED
@@ -19,6 +19,6 @@
19
19
  from __future__ import (absolute_import, division, print_function)
20
20
  __metaclass__ = type
21
21
 
22
- __version__ = '2.16.5'
22
+ __version__ = '2.16.6'
23
23
  __author__ = 'Ansible, Inc.'
24
24
  __codename__ = "All My Love"
ansible/vars/hostvars.py CHANGED
@@ -21,26 +21,9 @@ __metaclass__ = type
21
21
 
22
22
  from collections.abc import Mapping
23
23
 
24
+ from ansible import constants as C
24
25
  from ansible.template import Templar, AnsibleUndefined
25
26
 
26
- STATIC_VARS = [
27
- 'ansible_version',
28
- 'ansible_play_hosts',
29
- 'ansible_dependent_role_names',
30
- 'ansible_play_role_names',
31
- 'ansible_role_names',
32
- 'inventory_hostname',
33
- 'inventory_hostname_short',
34
- 'inventory_file',
35
- 'inventory_dir',
36
- 'groups',
37
- 'group_names',
38
- 'omit',
39
- 'playbook_dir',
40
- 'play_hosts',
41
- 'role_names',
42
- 'ungrouped',
43
- ]
44
27
 
45
28
  __all__ = ['HostVars', 'HostVarsVars']
46
29
 
@@ -134,10 +117,12 @@ class HostVarsVars(Mapping):
134
117
  def __init__(self, variables, loader):
135
118
  self._vars = variables
136
119
  self._loader = loader
120
+ # NOTE: this only has access to the host's own vars,
121
+ # so templates that depend on vars in other scopes will not work.
122
+ self._templar = Templar(variables=self._vars, loader=self._loader)
137
123
 
138
124
  def __getitem__(self, var):
139
- templar = Templar(variables=self._vars, loader=self._loader)
140
- return templar.template(self._vars[var], fail_on_undefined=False, static_vars=STATIC_VARS)
125
+ return self._templar.template(self._vars[var], fail_on_undefined=False, static_vars=C.INTERNAL_STATIC_VARS)
141
126
 
142
127
  def __contains__(self, var):
143
128
  return (var in self._vars)
@@ -150,5 +135,4 @@ class HostVarsVars(Mapping):
150
135
  return len(self._vars.keys())
151
136
 
152
137
  def __repr__(self):
153
- templar = Templar(variables=self._vars, loader=self._loader)
154
- return repr(templar.template(self._vars, fail_on_undefined=False, static_vars=STATIC_VARS))
138
+ return repr(self._templar.template(self._vars, fail_on_undefined=False, static_vars=C.INTERNAL_STATIC_VARS))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ansible-core
3
- Version: 2.16.5
3
+ Version: 2.16.6
4
4
  Summary: Radically simple IT automation
5
5
  Home-page: https://ansible.com/
6
6
  Author: Ansible, Inc.
@@ -1,17 +1,17 @@
1
1
  ansible/__init__.py,sha256=hp8v4cmglYqNarXbNO_o6X5UiSrhsZPYiQWyTG2hK5M,1299
2
2
  ansible/__main__.py,sha256=IvyRvY64pT0on94qCLibxgDJ0-7_2CRoaZ5kfGOl54Q,1395
3
- ansible/constants.py,sha256=guPiQ4Iqm5M9zPArRR9rT5CTzDbEhIBEgqCvVLqYecs,8154
3
+ ansible/constants.py,sha256=FvX7PDG0GWV91Vszb5-DFKvkR8O2OTpBmIbQk-d51sc,9193
4
4
  ansible/context.py,sha256=OzSlaA_GgGRyyf5I209sy19_eGOX6HXn441W9w_FcvU,2018
5
5
  ansible/keyword_desc.yml,sha256=vE9joFgSeHR4Djl7Bd-HHVCrGByRCrTUmWYZ8LKPZKk,7412
6
- ansible/release.py,sha256=y-DCgkzDBHkEgHG-Gf1aQlJgUtu36yBRTPGufw5sVEE,915
6
+ ansible/release.py,sha256=J0fxbJGiPqQTdDQmUq028tdtlSwGKMYrmscShbhHe2U,915
7
7
  ansible/_vendor/__init__.py,sha256=wJRKH7kI9OzYVY9hgSchOsTNTmTnugpPLGYj9Y5akX0,2086
8
8
  ansible/cli/__init__.py,sha256=6jaX6SS-UBM7pjiUlDsC0y07k3klUjxTR5ZEnDiCmP8,28706
9
9
  ansible/cli/adhoc.py,sha256=suzo4QnsaMjJBk5JlAUd-cpQLs8Ckj6A55CiG9Y8Gns,8247
10
- ansible/cli/config.py,sha256=rsf3Y8MB7rlehSG2jOojr1iqaMBhJXOoEqF-XCwu8NE,22503
10
+ ansible/cli/config.py,sha256=PZw8ghGsNgj3fpCWbmQst3AoxkUKU_GR64gdqMJCLmo,22716
11
11
  ansible/cli/console.py,sha256=Y3KVFNSEwHLeTJ2aBXv-sDAlg8PY9A-LnqyvrJuLPpI,22040
12
12
  ansible/cli/doc.py,sha256=t4KfhTv96R0bVLGm7FZE6cyiTSYxNfGqjh9aKLP4XQY,64080
13
13
  ansible/cli/galaxy.py,sha256=Ot45ARa20cMsVTb4uo_Zz8ClZpGl-mvsjBPAJxhwcA4,95115
14
- ansible/cli/inventory.py,sha256=uCXZ24iLIik2Z_QJLYaA45jmwVGqKLOp00YC4_S9PQ0,17735
14
+ ansible/cli/inventory.py,sha256=B1RQAPHnqA6xApxo7EvXoF6H8WkxZxxeqSOZtsNm-y0,16861
15
15
  ansible/cli/playbook.py,sha256=1CmwCE3K1eH_UFebIp0M59r4LPDJ5KMzCLxxM41lst0,10918
16
16
  ansible/cli/pull.py,sha256=fqGi-kBWM_B7jdKgA3XcO67znUK1rvhT9t9JjUialjQ,17336
17
17
  ansible/cli/vault.py,sha256=Ho-Mms0N6tV_Bgnx9Dm_r3z2IyYydp8kGbCfvvPsLrI,23007
@@ -27,7 +27,7 @@ ansible/compat/selectors/__init__.py,sha256=dD8KQZBa0NUi-hxhGx0eppTE3wHdMIchORAp
27
27
  ansible/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  ansible/config/ansible_builtin_runtime.yml,sha256=TSP32-cHB3kKhRJ_3whBwtCr2Dtry2i-7HY4gERUWeA,376031
29
29
  ansible/config/base.yml,sha256=1WH7epi5BW-lrSU_K-BRvwnLh-OgQwadwucjnO75Oxw,84999
30
- ansible/config/manager.py,sha256=v5SU-iBeL9zN5hLR1wlEwROr_3AKpPebcBlryXttEJY,25379
30
+ ansible/config/manager.py,sha256=LYCaiOAyGvFclsV82GG81l-V_3qIQhETImS9UKthz_I,25312
31
31
  ansible/errors/__init__.py,sha256=f8N3525uEu2b9Kw98ze_ngLITalq5MbrJn2b1oR_NeQ,14823
32
32
  ansible/errors/yaml_strings.py,sha256=p8WIWbjKSIvr_MWx3jOyGyUZMXoKttTPzuWVbHMwdmY,3942
33
33
  ansible/executor/__init__.py,sha256=1lMXN1i2fFqslda4BmeI5tpYMFP95D5Wpr1AjDJi-SQ,833
@@ -37,7 +37,7 @@ ansible/executor/module_common.py,sha256=GjRWM0L9Y4iDPa3ffhxjpy07i9e6ozpvvPnSLxZ
37
37
  ansible/executor/play_iterator.py,sha256=6Sf7im1-6rZjzF6ewQJNONkIVfv8VkIZy4jPvVfK9jc,30507
38
38
  ansible/executor/playbook_executor.py,sha256=RYYgI82wviDOE1o8zrIB5WWsSEg13KdxEVMXLGPKK7A,15098
39
39
  ansible/executor/stats.py,sha256=757UK8wDzLCXq4ltI9PqpoMNAdtRsd9D9-GS-5Al_Hs,3264
40
- ansible/executor/task_executor.py,sha256=ok7ra8k24MCnQ9Q6ej7vgDHUDY2XyfQFglDqCJua8uE,60307
40
+ ansible/executor/task_executor.py,sha256=uarhaFNWGboyKO2AegjEp-KQSr9BMlF2PnmOdYwkmD0,60445
41
41
  ansible/executor/task_queue_manager.py,sha256=DUWwK8RZuUJPY66to8kplFBFcUPAJwLB3kW8vfl1IOM,18724
42
42
  ansible/executor/task_result.py,sha256=DvshMci5i9-qCXs0m_vScSa6BJMbPwwNQBV7L2DTCzE,5748
43
43
  ansible/executor/discovery/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -140,7 +140,7 @@ ansible/inventory/host.py,sha256=7RZjLiB7M74bejFRflOTa8XPHxMC334qhSo_5VmZrKI,512
140
140
  ansible/inventory/manager.py,sha256=ZwmEF3E2BKOJi9SMVQNz83A2f3raQn6Nyo-rfSNMn2k,29507
141
141
  ansible/module_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
142
  ansible/module_utils/_text.py,sha256=F_YfeaxhwmTI16HICAzQS9ZmlKgBDdQ4mqR-Kh--okg,597
143
- ansible/module_utils/ansible_release.py,sha256=y-DCgkzDBHkEgHG-Gf1aQlJgUtu36yBRTPGufw5sVEE,915
143
+ ansible/module_utils/ansible_release.py,sha256=J0fxbJGiPqQTdDQmUq028tdtlSwGKMYrmscShbhHe2U,915
144
144
  ansible/module_utils/api.py,sha256=BTo7stVOANbtd-ngZslaqx70r9t5gfvo44cKyu5SFjU,5837
145
145
  ansible/module_utils/basic.py,sha256=7xL3IsZK68gyyYm2x8yB2s1V7Sx77-vK3rkXmp2mlCM,87489
146
146
  ansible/module_utils/connection.py,sha256=9Us-d-y1bhC3zNnziQxvYNT4umIaN0OYv8zPaUSdEf0,8447
@@ -255,7 +255,7 @@ ansible/module_utils/facts/virtual/base.py,sha256=-E9fRYdyCOzq9VIryQSdpTNBUVCHay
255
255
  ansible/module_utils/facts/virtual/dragonfly.py,sha256=h8Xap4VGXOO3j8-fLUtVVe9-OwoqqLkaAV8VRHk-gL0,1012
256
256
  ansible/module_utils/facts/virtual/freebsd.py,sha256=TCe2GkBaybTG76rRucSUXv1FCGZp9MN-qCdHlEgw5pE,3071
257
257
  ansible/module_utils/facts/virtual/hpux.py,sha256=NbwiW87bzdTiPnWpFikokJlfZJKvoPmcMHyeEACDEaY,2876
258
- ansible/module_utils/facts/virtual/linux.py,sha256=KN59Dx3RPkXGLY9_-2--EQlwFTh1OiuC4341_ZBJ_lU,17878
258
+ ansible/module_utils/facts/virtual/linux.py,sha256=E9ikOXcFDxQDmXFI75waRt0lCumccP-oQXZNdSN8qLI,17875
259
259
  ansible/module_utils/facts/virtual/netbsd.py,sha256=FAOMM2tVHAehUpc1HxyxaxqeUpmo_wu87q7sr87y1fo,2949
260
260
  ansible/module_utils/facts/virtual/openbsd.py,sha256=JcEQZV1qpCRjeZ3NcZaHNWudsrPgUUONXcULWlaUF58,2838
261
261
  ansible/module_utils/facts/virtual/sunos.py,sha256=_m7Ob1v-9T3nEAs5JJleTuGXHKNWznQR6cNMY2huMk0,6270
@@ -284,21 +284,21 @@ ansible/modules/assemble.py,sha256=FLBLH_SZCgFGoHqTcQ8b0TETokXMrJTo2bIbDFQMwlU,9
284
284
  ansible/modules/assert.py,sha256=rrvyacnzGt7FU_J9dRPZvb9TuJJ7Ah_u1YfLR7tmyj8,2816
285
285
  ansible/modules/async_status.py,sha256=aiYunlP0IhBfKw1jjVEb-MRM1RYCpq8VngPAHdAUY4E,4526
286
286
  ansible/modules/async_wrapper.py,sha256=Uouodh1EMehkZ1zjOksRb5R7xaE83vQMdTE4Chwc2zY,11718
287
- ansible/modules/blockinfile.py,sha256=C9v9tHx3FGrYzp0i-jcsDq42YdtxKRn-6GxXz0kAahs,15545
287
+ ansible/modules/blockinfile.py,sha256=bGhu20J7mc_3qjikLpULl5Pca5CO6tv3Ps9mvxsAts8,15558
288
288
  ansible/modules/command.py,sha256=yd3Dmls_jWCD-5bCAxjxbGk-AA83bElDii3yRzCNVww,14012
289
289
  ansible/modules/copy.py,sha256=yjF_N7eiQz7naq2bP7SH1ygPMQw9WGL-nOyrn8xQbNM,35906
290
290
  ansible/modules/cron.py,sha256=HlokG4Pcx219oksqbZRLXC61SlpbZSpCFVG-uRL_Qz4,26189
291
291
  ansible/modules/deb822_repository.py,sha256=rZzJzyl7TfVKrcICzYOBJISTrqRYGq8AoWNLwyl6eb0,15693
292
292
  ansible/modules/debconf.py,sha256=dqW8NQtQom64KUjre6liHNzT5oqyuEumyRQpyEfD9RE,8452
293
293
  ansible/modules/debug.py,sha256=eAQPIQ_LKHy718uD175T22nTrv7_8OlHjwO0ekKBQMU,2958
294
- ansible/modules/dnf.py,sha256=2_JoifgFPTQe7_Xi-UAf6nHwPUevuHE28uGXY7jLf_E,60098
295
- ansible/modules/dnf5.py,sha256=1RxYjibK18vM2pu3PeAFL7S-1iq3MoWjINH1gFkHkMI,25680
294
+ ansible/modules/dnf.py,sha256=OJBLow95N31inSg0pHdj7Ux08nCsV_1hJGdP5JqeKR4,60173
295
+ ansible/modules/dnf5.py,sha256=5IUzioKKT6ueDUM2GlkOL7acLVWtT1hsQtY3XDWKlCk,26019
296
296
  ansible/modules/dpkg_selections.py,sha256=NBiePEQRamuOO5ncxt6mBbvlWihhMFwMmqiql7zZU34,2833
297
297
  ansible/modules/expect.py,sha256=C7t85H_TV9Y10wLVx0ok6qvYk4Lb6n6xT2qu3DSMBKE,9067
298
298
  ansible/modules/fail.py,sha256=AI4gNQC7E5U2Vs7QiIlFk7PcWozN0tXtiVPa_LJrQpk,1710
299
299
  ansible/modules/fetch.py,sha256=20Nixmigo7AcS0AUDdltONBabXI2w-i81b-LrD7hrYc,4267
300
300
  ansible/modules/file.py,sha256=MWQJZHi3hgqEOKsjJ9cJ_tI815Ij1WMQ2dhnMJMORtA,40957
301
- ansible/modules/find.py,sha256=huWeFyr05mJiFMn5_1pPBvOuZWLG2xYAWR8hsMETdGU,21729
301
+ ansible/modules/find.py,sha256=Fh1mbDSnqlxF0fU8P9tdjykdCSldz9xd8nvESPtWaxA,21864
302
302
  ansible/modules/gather_facts.py,sha256=HxjznA12SAz5ONVTqHrq79-gY35F-RVeU-RjrPA3c4c,2952
303
303
  ansible/modules/get_url.py,sha256=PfAYVmSJETTHAK9FwwswAFy6a-Y8ptGomEAYxbgQPn8,26996
304
304
  ansible/modules/getent.py,sha256=mXkjPwilYjmic36v9_0XBD1FEN6GZPS-srh7LQvssaA,5696
@@ -340,7 +340,7 @@ ansible/modules/systemd_service.py,sha256=J9UZrpcASlrOPnHexS25syvBPQXIkmOAC49gV5
340
340
  ansible/modules/sysvinit.py,sha256=MS_Hus1xvXSn_jF-o6mYbK7duIsOT0mi6UPMoC8YvYY,13835
341
341
  ansible/modules/tempfile.py,sha256=5QDq5jiUcIlhTQnZmAuoyUMwtd13sIgcIAMoEcKdVyI,3539
342
342
  ansible/modules/template.py,sha256=E3GB8_LZNSu_64hzFKQD6Ov7HTfrkzsaJ3Xl4IOrL8A,4586
343
- ansible/modules/unarchive.py,sha256=mivoH2vOiMymgrPq3Lqw8NrfPvQ23iitb1W7_FbdrOY,44450
343
+ ansible/modules/unarchive.py,sha256=6szHhYTZo4IQoXNNaF43TZbUIVvsM0VgefroScs4wDM,44451
344
344
  ansible/modules/uri.py,sha256=3vrPsO-q2JJ7JOaJA0GIJMS5gikO0USZRH7z6wrIlCk,28521
345
345
  ansible/modules/user.py,sha256=3yOjzB_9Dgj2nS-CMb3X3J3ATFisCUnG6crO_8QEB8I,118135
346
346
  ansible/modules/validate_argument_spec.py,sha256=wbFJ6zNUOcRBtmES7rYBqt_Cqior9CKVBNem5k6jvsk,3128
@@ -385,7 +385,7 @@ ansible/playbook/role_include.py,sha256=9IsYSolvScuzBREoDh2lg-S6mN7_WAF-usQMZvVX
385
385
  ansible/playbook/taggable.py,sha256=QpIS7BXQ9N48Vu1HW96OdSMyrQHckYtCgsVL9-mv-Ts,3249
386
386
  ansible/playbook/task.py,sha256=Vxn471kaQYgVckQ27MxZfNvs5luEo8HLUcXSlXmbU30,21490
387
387
  ansible/playbook/task_include.py,sha256=C3x_tTzbRLTMsXCGonzp3SAzE7VuslvcAlwN4WqF-KM,5318
388
- ansible/playbook/role/__init__.py,sha256=bz8lmY2Ah8dsae0nxcRAsfFg0uiXBzv3l5yAMHbLz-Y,29821
388
+ ansible/playbook/role/__init__.py,sha256=ZPASFccReB6DaJtZZ5UT_0IXtZjLTzdEQoP9ebiIom0,29781
389
389
  ansible/playbook/role/definition.py,sha256=MGvEmAsOUYj2geHD5H7JG4N5O3wCxQwmtlH7IpgZqfk,9634
390
390
  ansible/playbook/role/include.py,sha256=Vq5ywSkMeIAHYgEH0M9B-HOOTSq2AkyU5tksmHyKc9k,2426
391
391
  ansible/playbook/role/metadata.py,sha256=5rWZ3ET9-xUCxHL2371o8nRS2aYTn4Ni8fU5_T09Evg,5158
@@ -403,7 +403,7 @@ ansible/plugins/action/copy.py,sha256=sglEtAq6DrxTLGZaE-0KWau2waXuV1rFTqlwOU98bF
403
403
  ansible/plugins/action/debug.py,sha256=wPkpx7oFGEUDXPxSRopJbER3xdArfs5Ifjvr5KOKvII,3525
404
404
  ansible/plugins/action/dnf.py,sha256=B97AXQGqWnlloqzubSt6caaBaoBr6Ho88WfKrX7SRUQ,3569
405
405
  ansible/plugins/action/fail.py,sha256=JEVU_Xoc9iuo2RjQUE5ZnoHZNilHh2eTC9OggnUS7nI,1510
406
- ansible/plugins/action/fetch.py,sha256=3FBQjdXeQnmMemQLTEqk7NSziMU75AILcKoSR-NtLts,9970
406
+ ansible/plugins/action/fetch.py,sha256=27ufzOz81oO8EzKZJvCGGJuPv7MwEBCR0LJ3uanuV9I,10249
407
407
  ansible/plugins/action/gather_facts.py,sha256=Ilj7MeE9O75S_6A6lvcy4pbFDSBMyAaDeGvVZ3Y1ql8,7914
408
408
  ansible/plugins/action/group_by.py,sha256=lj6Grr05Qq5vaMLuoS4slfKkwiBt3QUCJVfrwwRsDT4,1947
409
409
  ansible/plugins/action/include_vars.py,sha256=RmX44-HPLIzOYJaUxLIWU_7NdZfYFlHlW2KS9ak7aPo,11578
@@ -427,7 +427,7 @@ ansible/plugins/become/__init__.py,sha256=oCkeak7JFmS44bs8LlWn4F2s6a88kdLApytQcm
427
427
  ansible/plugins/become/runas.py,sha256=O-Hl6cE5qMxWZnT0Uo3g-8NKpNKJKL4MdMXf0JxOFEg,2617
428
428
  ansible/plugins/become/su.py,sha256=dyb8FT_zZMriEWIPqIZeeu3cWxgq8j6-Fs27x8exc8w,5379
429
429
  ansible/plugins/become/sudo.py,sha256=ZZnnT4J84hRZ9WNfmV9bX8RlJzNMf1hHW3tbF-ls6uw,4035
430
- ansible/plugins/cache/__init__.py,sha256=eUbG5eosFcxjzRMZbvulaF8zgl47RBwSGTJa0jekWEA,12243
430
+ ansible/plugins/cache/__init__.py,sha256=TfGsTIrum1edPcVV-lZEFPJpqNbatj3KgYuWkRc4G5g,12291
431
431
  ansible/plugins/cache/base.py,sha256=eGsvbtBYhCPlAsTFu2IFQHmZtMbXYwbhSMfGttexkzo,960
432
432
  ansible/plugins/cache/jsonfile.py,sha256=r3V3ipncC5UYCSOuPbTs45e3PfMh7dg86ct02MAe9po,1985
433
433
  ansible/plugins/cache/memory.py,sha256=AdCQG2qM-3cWiFwe8QBiGGT_h6cGTqOonYigxAp1E44,1271
@@ -443,7 +443,7 @@ ansible/plugins/connection/local.py,sha256=RFIZEyZjXQ_AcynPiYfmgZbHDNpgV6GiKb9qe
443
443
  ansible/plugins/connection/paramiko_ssh.py,sha256=gMaVa1GqhymC7EHdtvp_rBN7MilHGDLYAgxs-l1_AAc,30111
444
444
  ansible/plugins/connection/psrp.py,sha256=MmhZ2aDpB4eT5BfHXguuNhO-7-9wDXNbxgg27-5wLuQ,36798
445
445
  ansible/plugins/connection/ssh.py,sha256=ISeEuEPTxkgZEChz562155tDNk6A3d9kUnbvrzZITWU,64393
446
- ansible/plugins/connection/winrm.py,sha256=zj2k_u4lsmCFbnIN4hV1jGuEznSyyqfCgwgqUFGixKc,39915
446
+ ansible/plugins/connection/winrm.py,sha256=xk7IGA9rnhlg8gwiUI7FK19UFut_KzqKS6glRPJJFFA,40666
447
447
  ansible/plugins/doc_fragments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
448
448
  ansible/plugins/doc_fragments/action_common_attributes.py,sha256=ouV8CMIP0TkfkxN4p_pLbPvRSC5wu6w0Y6ScONOg-c4,2449
449
449
  ansible/plugins/doc_fragments/action_core.py,sha256=f4UV5QBnmtiecabxbXbTlxZtcPGQH2PNN9gNGVnYPh4,2908
@@ -582,9 +582,9 @@ ansible/plugins/shell/powershell.py,sha256=y0cBJeaNplF8sqwu2YxhWcUHR7eeZAeEODBeD
582
582
  ansible/plugins/shell/sh.py,sha256=1nhiMv0_c8zu2MaDHvOCr--dG8b-iUVEPPnpMh_Hx8I,3952
583
583
  ansible/plugins/strategy/__init__.py,sha256=eS8JSyb3zFrTK8qm0-tK-bk8fNtG_tmbmUZ10bJsyZk,57101
584
584
  ansible/plugins/strategy/debug.py,sha256=GxUS0bSiaWInIK8zgB7rMREEqvgrZhVlFUzOCJtnjFo,1258
585
- ansible/plugins/strategy/free.py,sha256=OhUm6uahTmROd-KMJ14axrl9eV7WITK44IvLjNnh1T4,15895
585
+ ansible/plugins/strategy/free.py,sha256=BAz89LpU2_uP4mFizdG7Lt5GmxsDGOmR9bS_M4RKCQk,15897
586
586
  ansible/plugins/strategy/host_pinned.py,sha256=3-q5l-tpheMlU-BXGm6ZQNgHvQv5IMvOCDZBLibl1L4,1959
587
- ansible/plugins/strategy/linear.py,sha256=xmM78y2Bar1NMTPeDLjIUyEv14uNIf6Tztod82M3LHU,20413
587
+ ansible/plugins/strategy/linear.py,sha256=zATuGnW0u2JeqGXJUf689RZ77_KbrAiJNJJD2TM3j_M,20415
588
588
  ansible/plugins/terminal/__init__.py,sha256=Pgzb8SsOGE2irgrv4f--4rfTDNxDFURzToWOatDg8J4,4472
589
589
  ansible/plugins/test/__init__.py,sha256=6DY18LxzSdtO7-fDS6957bo61fg-xG3TDWvtFkhGYOQ,471
590
590
  ansible/plugins/test/abs.yml,sha256=lZA0XP1oBNg___Du6SqNOkDeQC9xIcZpROYV5XJG9bg,764
@@ -678,11 +678,11 @@ ansible/utils/collection_loader/_collection_meta.py,sha256=THmk42SU58welYL5C-dg3
678
678
  ansible/vars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
679
679
  ansible/vars/clean.py,sha256=TeNDx7skJFqR0K1ok_cQuvKDjzTrCc7u2qGWTNambQo,6083
680
680
  ansible/vars/fact_cache.py,sha256=4lxkYru1qucTDQ0aSmtc5UDWP-gm3edPmDSuTZ2GCmE,1956
681
- ansible/vars/hostvars.py,sha256=8Gs8lcVT6U8hJISEjKIyohIyaTrpnVWo5Tq8VMHDOL0,5134
681
+ ansible/vars/hostvars.py,sha256=px4HRxotkuXedT6pbLTa6TyptNwRp5ttzVUgBjm0LRI,4896
682
682
  ansible/vars/manager.py,sha256=lIfISTPyRcNfJVWJhhNof36Zmk6xSMUkf9sFxrzCzcI,38180
683
683
  ansible/vars/plugins.py,sha256=RsRU9fiLcJwPIAyTYnmVZglsiEOMCIgQskflavE-XnE,4546
684
684
  ansible/vars/reserved.py,sha256=FBD7n2dnA0CW4I0J1LtWwk2hQqvGW0KTRPcxaRtMKWo,2615
685
- ansible_core-2.16.5.data/scripts/ansible-test,sha256=CYIYL99IxWdVTtDIj3avilIJXhGAmtjuKPPWNuLWuc8,1690
685
+ ansible_core-2.16.6.data/scripts/ansible-test,sha256=CYIYL99IxWdVTtDIj3avilIJXhGAmtjuKPPWNuLWuc8,1690
686
686
  ansible_test/__init__.py,sha256=6e721yAyyyocRKzbCKtQXloAfFP7Aqv0L3zG70uh-4A,190
687
687
  ansible_test/_data/ansible.cfg,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
688
688
  ansible_test/_data/coveragerc,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -860,7 +860,7 @@ ansible_test/_internal/commands/integration/cloud/scaleway.py,sha256=ZoScZMW5xP-
860
860
  ansible_test/_internal/commands/integration/cloud/vcenter.py,sha256=ynBTiQcs30ZAdbSljMwtW77ZonRziIRbrGzKlrIUqDM,2190
861
861
  ansible_test/_internal/commands/integration/cloud/vultr.py,sha256=TE43tKiAerXbKD9FXBrBVzeWNUB87qtR5twg_zDicHM,1488
862
862
  ansible_test/_internal/commands/sanity/__init__.py,sha256=-uOkky1PbfGYf-HVG-wS-SqRZMGITmhryHSD4MR20xo,50931
863
- ansible_test/_internal/commands/sanity/ansible_doc.py,sha256=EY2PbiIAXkJRTS-WbTIirLDGaCwWZRJSnUIpViylHJA,5734
863
+ ansible_test/_internal/commands/sanity/ansible_doc.py,sha256=kKgXCyLeRO5iCeneknpkECZnf2NxGoEbb5p--DzfCfk,5776
864
864
  ansible_test/_internal/commands/sanity/bin_symlinks.py,sha256=uDiaMM3lf9KLlGTlGT53zYjgj6Fo-G-_dhJgFWnLS-o,3072
865
865
  ansible_test/_internal/commands/sanity/compile.py,sha256=ZQwHB85a7N6utr038kLbDZwFlXGEJMkSI63YyoGcd-I,2539
866
866
  ansible_test/_internal/commands/sanity/ignores.py,sha256=9wpzc8eRKS4nAVWOeSgXju5j1tDXNFPMSlskrR-Pohs,2789
@@ -1001,9 +1001,9 @@ ansible_test/config/cloud-config-vultr.ini.template,sha256=XLKHk3lg_8ReQMdWfZzhh
1001
1001
  ansible_test/config/config.yml,sha256=wb3knoBmZewG3GWOMnRHoVPQWW4vPixKLPMNS6vJmTc,2620
1002
1002
  ansible_test/config/inventory.networking.template,sha256=bFNSk8zNQOaZ_twaflrY0XZ9mLwUbRLuNT0BdIFwvn4,1335
1003
1003
  ansible_test/config/inventory.winrm.template,sha256=1QU8W-GFLnYEw8yY9bVIvUAVvJYPM3hyoijf6-M7T00,1098
1004
- ansible_core-2.16.5.dist-info/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1005
- ansible_core-2.16.5.dist-info/METADATA,sha256=GfaBPdrmsbwzJ9c-vzxuXSUyKeB2XxvhgJPpixd5C-I,6905
1006
- ansible_core-2.16.5.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
1007
- ansible_core-2.16.5.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
1008
- ansible_core-2.16.5.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1009
- ansible_core-2.16.5.dist-info/RECORD,,
1004
+ ansible_core-2.16.6.dist-info/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1005
+ ansible_core-2.16.6.dist-info/METADATA,sha256=eET8TIMyKgKybojZroQ311uHSS8TPbvSw-CIDjwQlio,6905
1006
+ ansible_core-2.16.6.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
1007
+ ansible_core-2.16.6.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
1008
+ ansible_core-2.16.6.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1009
+ ansible_core-2.16.6.dist-info/RECORD,,
@@ -79,7 +79,7 @@ class AnsibleDocTest(SanitySingleVersion):
79
79
  plugin_parts = os.path.relpath(plugin_file_path, plugin_path).split(os.path.sep)
80
80
  plugin_name = os.path.splitext(plugin_parts[-1])[0]
81
81
 
82
- if plugin_name.startswith('_'):
82
+ if plugin_name.startswith('_') and not data_context().content.collection:
83
83
  plugin_name = plugin_name[1:]
84
84
 
85
85
  plugin_fqcn = data_context().content.prefix + '.'.join(plugin_parts[:-1] + [plugin_name])