ansible-core 2.20.0b1__py3-none-any.whl → 2.20.0b2__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.

Files changed (27) hide show
  1. ansible/cli/doc.py +3 -1
  2. ansible/collections/list.py +4 -2
  3. ansible/galaxy/dependency_resolution/providers.py +23 -116
  4. ansible/module_utils/ansible_release.py +1 -1
  5. ansible/module_utils/six/__init__.py +8 -0
  6. ansible/modules/known_hosts.py +7 -1
  7. ansible/parsing/dataloader.py +2 -2
  8. ansible/playbook/block.py +1 -3
  9. ansible/playbook/helpers.py +15 -13
  10. ansible/playbook/play.py +2 -12
  11. ansible/plugins/action/fetch.py +1 -1
  12. ansible/plugins/test/falsy.yml +1 -1
  13. ansible/plugins/test/truthy.yml +1 -1
  14. ansible/release.py +1 -1
  15. ansible/vars/manager.py +1 -2
  16. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/METADATA +1 -1
  17. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/RECORD +27 -27
  18. ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +14 -4
  19. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/WHEEL +0 -0
  20. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/entry_points.txt +0 -0
  21. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/licenses/COPYING +0 -0
  22. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/licenses/licenses/Apache-License.txt +0 -0
  23. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/licenses/licenses/BSD-3-Clause.txt +0 -0
  24. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/licenses/licenses/MIT-license.txt +0 -0
  25. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/licenses/licenses/PSF-license.txt +0 -0
  26. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/licenses/licenses/simplified_bsd.txt +0 -0
  27. {ansible_core-2.20.0b1.dist-info → ansible_core-2.20.0b2.dist-info}/top_level.txt +0 -0
ansible/cli/doc.py CHANGED
@@ -236,7 +236,9 @@ class RoleMixin(object):
236
236
  b_colldirs = list_collection_dirs(coll_filter=collection_filter)
237
237
  for b_path in b_colldirs:
238
238
  path = to_text(b_path, errors='surrogate_or_strict')
239
- collname = _get_collection_name_from_path(b_path)
239
+ if not (collname := _get_collection_name_from_path(b_path)):
240
+ display.debug(f'Skipping invalid path {b_path!r}')
241
+ continue
240
242
 
241
243
  roles_dir = os.path.join(path, 'roles')
242
244
  if os.path.exists(roles_dir):
@@ -17,8 +17,10 @@ def list_collections(coll_filter=None, search_paths=None, dedupe=True, artifacts
17
17
 
18
18
  collections = {}
19
19
  for candidate in list_collection_dirs(search_paths=search_paths, coll_filter=coll_filter, artifacts_manager=artifacts_manager, dedupe=dedupe):
20
- collection = _get_collection_name_from_path(candidate)
21
- collections[collection] = candidate
20
+ if collection := _get_collection_name_from_path(candidate):
21
+ collections[collection] = candidate
22
+ else:
23
+ display.debug(f'Skipping invalid collection in path: {candidate!r}')
22
24
  return collections
23
25
 
24
26
 
@@ -5,6 +5,7 @@
5
5
 
6
6
  from __future__ import annotations
7
7
 
8
+ import collections.abc as _c
8
9
  import functools
9
10
  import typing as t
10
11
 
@@ -37,16 +38,16 @@ except ImportError:
37
38
 
38
39
 
39
40
  # TODO: add python requirements to ansible-test's ansible-core distribution info and remove the hardcoded lowerbound/upperbound fallback
40
- RESOLVELIB_LOWERBOUND = SemanticVersion("0.5.3")
41
+ RESOLVELIB_LOWERBOUND = SemanticVersion("0.8.0")
41
42
  RESOLVELIB_UPPERBOUND = SemanticVersion("2.0.0")
42
43
  RESOLVELIB_VERSION = SemanticVersion.from_loose_version(LooseVersion(resolvelib_version))
43
44
 
44
45
 
45
- class CollectionDependencyProviderBase(AbstractProvider):
46
+ class CollectionDependencyProvider(AbstractProvider):
46
47
  """Delegate providing a requirement interface for the resolver."""
47
48
 
48
49
  def __init__(
49
- self, # type: CollectionDependencyProviderBase
50
+ self,
50
51
  apis, # type: MultiGalaxyAPIProxy
51
52
  concrete_artifacts_manager=None, # type: ConcreteArtifactsManager
52
53
  preferred_candidates=None, # type: t.Iterable[Candidate]
@@ -102,8 +103,14 @@ class CollectionDependencyProviderBase(AbstractProvider):
102
103
  """
103
104
  return requirement_or_candidate.canonical_package_id
104
105
 
105
- def get_preference(self, *args, **kwargs):
106
- # type: (t.Any, t.Any) -> t.Union[float, int]
106
+ def get_preference(
107
+ self,
108
+ identifier: str,
109
+ resolutions: _c.Mapping[str, Candidate],
110
+ candidates: _c.Mapping[str, _c.Iterator[Candidate]],
111
+ information: _c.Iterator[t.NamedTuple],
112
+ backtrack_causes: _c.Sequence,
113
+ ) -> float | int:
107
114
  """Return sort key function return value for given requirement.
108
115
 
109
116
  This result should be based on preference that is defined as
@@ -111,38 +118,6 @@ class CollectionDependencyProviderBase(AbstractProvider):
111
118
  The lower the return value is, the more preferred this
112
119
  group of arguments is.
113
120
 
114
- resolvelib >=0.5.3, <0.7.0
115
-
116
- :param resolution: Currently pinned candidate, or ``None``.
117
-
118
- :param candidates: A list of possible candidates.
119
-
120
- :param information: A list of requirement information.
121
-
122
- Each ``information`` instance is a named tuple with two entries:
123
-
124
- * ``requirement`` specifies a requirement contributing to
125
- the current candidate list
126
-
127
- * ``parent`` specifies the candidate that provides
128
- (depended on) the requirement, or `None`
129
- to indicate a root requirement.
130
-
131
- resolvelib >=0.7.0, < 0.8.0
132
-
133
- :param identifier: The value returned by ``identify()``.
134
-
135
- :param resolutions: Mapping of identifier, candidate pairs.
136
-
137
- :param candidates: Possible candidates for the identifier.
138
- Mapping of identifier, list of candidate pairs.
139
-
140
- :param information: Requirement information of each package.
141
- Mapping of identifier, list of named tuple pairs.
142
- The named tuples have the entries ``requirement`` and ``parent``.
143
-
144
- resolvelib >=0.8.0, <= 1.0.1
145
-
146
121
  :param identifier: The value returned by ``identify()``.
147
122
 
148
123
  :param resolutions: Mapping of identifier, candidate pairs.
@@ -178,10 +153,6 @@ class CollectionDependencyProviderBase(AbstractProvider):
178
153
  the value is, the more preferred this requirement is (i.e. the
179
154
  sorting function is called with ``reverse=False``).
180
155
  """
181
- raise NotImplementedError
182
-
183
- def _get_preference(self, candidates):
184
- # type: (list[Candidate]) -> t.Union[float, int]
185
156
  if any(
186
157
  candidate in self._preferred_candidates
187
158
  for candidate in candidates
@@ -191,8 +162,12 @@ class CollectionDependencyProviderBase(AbstractProvider):
191
162
  return float('-inf')
192
163
  return len(candidates)
193
164
 
194
- def find_matches(self, *args, **kwargs):
195
- # type: (t.Any, t.Any) -> list[Candidate]
165
+ def find_matches(
166
+ self,
167
+ identifier: str,
168
+ requirements: _c.Mapping[str, _c.Iterator[Requirement]],
169
+ incompatibilities: _c.Mapping[str, _c.Iterator[Candidate]],
170
+ ) -> list[Candidate]:
196
171
  r"""Find all possible candidates satisfying given requirements.
197
172
 
198
173
  This tries to get candidates based on the requirements' types.
@@ -203,32 +178,13 @@ class CollectionDependencyProviderBase(AbstractProvider):
203
178
  For a "named" requirement, Galaxy-compatible APIs are consulted
204
179
  to find concrete candidates for this requirement. If there's a
205
180
  pre-installed candidate, it's prepended in front of others.
206
-
207
- resolvelib >=0.5.3, <0.6.0
208
-
209
- :param requirements: A collection of requirements which all of \
210
- the returned candidates must match. \
211
- All requirements are guaranteed to have \
212
- the same identifier. \
213
- The collection is never empty.
214
-
215
- resolvelib >=0.6.0
216
-
217
- :param identifier: The value returned by ``identify()``.
218
-
219
- :param requirements: The requirements all returned candidates must satisfy.
220
- Mapping of identifier, iterator of requirement pairs.
221
-
222
- :param incompatibilities: Incompatible versions that must be excluded
223
- from the returned list.
224
-
225
- :returns: An iterable that orders candidates by preference, \
226
- e.g. the most preferred candidate comes first.
227
181
  """
228
- raise NotImplementedError
182
+ return [
183
+ match for match in self._find_matches(list(requirements[identifier]))
184
+ if not any(match.ver == incompat.ver for incompat in incompatibilities[identifier])
185
+ ]
229
186
 
230
- def _find_matches(self, requirements):
231
- # type: (list[Requirement]) -> list[Candidate]
187
+ def _find_matches(self, requirements: list[Requirement]) -> list[Candidate]:
232
188
  # FIXME: The first requirement may be a Git repo followed by
233
189
  # FIXME: its cloned tmp dir. Using only the first one creates
234
190
  # FIXME: loops that prevent any further dependency exploration.
@@ -456,52 +412,3 @@ class CollectionDependencyProviderBase(AbstractProvider):
456
412
  self._make_req_from_dict({'name': dep_name, 'version': dep_req})
457
413
  for dep_name, dep_req in req_map.items()
458
414
  ]
459
-
460
-
461
- # Classes to handle resolvelib API changes between minor versions for 0.X
462
- class CollectionDependencyProvider050(CollectionDependencyProviderBase):
463
- def find_matches(self, requirements): # type: ignore[override]
464
- # type: (list[Requirement]) -> list[Candidate]
465
- return self._find_matches(requirements)
466
-
467
- def get_preference(self, resolution, candidates, information): # type: ignore[override]
468
- # type: (t.Optional[Candidate], list[Candidate], list[t.NamedTuple]) -> t.Union[float, int]
469
- return self._get_preference(candidates)
470
-
471
-
472
- class CollectionDependencyProvider060(CollectionDependencyProviderBase):
473
- def find_matches(self, identifier, requirements, incompatibilities): # type: ignore[override]
474
- # type: (str, t.Mapping[str, t.Iterator[Requirement]], t.Mapping[str, t.Iterator[Requirement]]) -> list[Candidate]
475
- return [
476
- match for match in self._find_matches(list(requirements[identifier]))
477
- if not any(match.ver == incompat.ver for incompat in incompatibilities[identifier])
478
- ]
479
-
480
- def get_preference(self, resolution, candidates, information): # type: ignore[override]
481
- # type: (t.Optional[Candidate], list[Candidate], list[t.NamedTuple]) -> t.Union[float, int]
482
- return self._get_preference(candidates)
483
-
484
-
485
- class CollectionDependencyProvider070(CollectionDependencyProvider060):
486
- def get_preference(self, identifier, resolutions, candidates, information): # type: ignore[override]
487
- # type: (str, t.Mapping[str, Candidate], t.Mapping[str, t.Iterator[Candidate]], t.Iterator[t.NamedTuple]) -> t.Union[float, int]
488
- return self._get_preference(list(candidates[identifier]))
489
-
490
-
491
- class CollectionDependencyProvider080(CollectionDependencyProvider060):
492
- def get_preference(self, identifier, resolutions, candidates, information, backtrack_causes): # type: ignore[override]
493
- # type: (str, t.Mapping[str, Candidate], t.Mapping[str, t.Iterator[Candidate]], t.Iterator[t.NamedTuple], t.Sequence) -> t.Union[float, int]
494
- return self._get_preference(list(candidates[identifier]))
495
-
496
-
497
- def _get_provider(): # type () -> CollectionDependencyProviderBase
498
- if RESOLVELIB_VERSION >= SemanticVersion("0.8.0"):
499
- return CollectionDependencyProvider080
500
- if RESOLVELIB_VERSION >= SemanticVersion("0.7.0"):
501
- return CollectionDependencyProvider070
502
- if RESOLVELIB_VERSION >= SemanticVersion("0.6.0"):
503
- return CollectionDependencyProvider060
504
- return CollectionDependencyProvider050
505
-
506
-
507
- CollectionDependencyProvider = _get_provider()
@@ -17,6 +17,6 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- __version__ = '2.20.0b1'
20
+ __version__ = '2.20.0b2'
21
21
  __author__ = 'Ansible, Inc.'
22
22
  __codename__ = "Good Times Bad Times"
@@ -33,6 +33,14 @@ import operator
33
33
  import sys
34
34
  import types
35
35
 
36
+ from ansible.module_utils.common import warnings as _warnings
37
+
38
+ _warnings.deprecate(
39
+ msg="The `ansible.module_utils.six` module is deprecated.",
40
+ help_text="Use the Python standard library equivalent instead.",
41
+ version="2.24",
42
+ )
43
+
36
44
  # The following makes it easier for us to script updates of the bundled code. It is not part of
37
45
  # upstream six
38
46
  _BUNDLED_METADATA = {"pypi_name": "six", "version": "1.17.0"}
@@ -225,7 +225,13 @@ def sanity_check(module, host, key, sshkeygen):
225
225
  rc, stdout, stderr = module.run_command(sshkeygen_command)
226
226
 
227
227
  if stdout == '': # host not found
228
- module.fail_json(msg="Host parameter does not match hashed host field in supplied key")
228
+ results = {
229
+ "msg": "Host parameter does not match hashed host field in supplied key",
230
+ "rc": rc,
231
+ }
232
+ if stderr:
233
+ results["stderr"] = stderr
234
+ module.fail_json(**results)
229
235
 
230
236
 
231
237
  def search_for_host_key(module, host, key, path, sshkeygen):
@@ -54,7 +54,7 @@ class DataLoader:
54
54
 
55
55
  def __init__(self) -> None:
56
56
 
57
- self._basedir: str = '.'
57
+ self._basedir: str = os.path.abspath('.')
58
58
 
59
59
  # NOTE: not effective with forks as the main copy does not get updated.
60
60
  # avoids rereading files
@@ -227,7 +227,7 @@ class DataLoader:
227
227
 
228
228
  def set_basedir(self, basedir: str) -> None:
229
229
  """ sets the base directory, used to find files when a relative path is given """
230
- self._basedir = basedir
230
+ self._basedir = os.path.abspath(basedir)
231
231
 
232
232
  def path_dwim(self, given: str) -> str:
233
233
  """
ansible/playbook/block.py CHANGED
@@ -17,7 +17,6 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- import ansible.constants as C
21
20
  from ansible.errors import AnsibleParserError
22
21
  from ansible.module_utils.common.sentinel import Sentinel
23
22
  from ansible.playbook.attribute import NonInheritableFieldAttribute
@@ -316,8 +315,7 @@ class Block(Base, Conditional, CollectionSearch, Taggable, Notifiable, Delegatab
316
315
  filtered_block = evaluate_block(task)
317
316
  if filtered_block.has_tasks():
318
317
  tmp_list.append(filtered_block)
319
- elif ((task.action in C._ACTION_META and task.implicit) or
320
- task.evaluate_tags(self._play.only_tags, self._play.skip_tags, all_vars=all_vars)):
318
+ elif task.evaluate_tags(self._play.only_tags, self._play.skip_tags, all_vars=all_vars):
321
319
  tmp_list.append(task)
322
320
  return tmp_list
323
321
 
@@ -165,17 +165,29 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
165
165
  subdir = 'tasks'
166
166
  if use_handlers:
167
167
  subdir = 'handlers'
168
+ try:
169
+ include_target = templar.template(task.args['_raw_params'])
170
+ except AnsibleUndefinedVariable as ex:
171
+ raise AnsibleParserError(
172
+ message=f"Error when evaluating variable in import path {task.args['_raw_params']!r}.",
173
+ help_text="When using static imports, ensure that any variables used in their names are defined in vars/vars_files\n"
174
+ "or extra-vars passed in from the command line. Static imports cannot use variables from facts or inventory\n"
175
+ "sources like group or host vars.",
176
+ obj=task_ds,
177
+ ) from ex
178
+ # FIXME this appears to be (almost?) duplicate code as in IncludedFile for include_tasks
168
179
  while parent_include is not None:
169
180
  if not isinstance(parent_include, TaskInclude):
170
181
  parent_include = parent_include._parent
171
182
  continue
172
- parent_include.post_validate(templar=templar)
173
- parent_include_dir = os.path.dirname(parent_include.args.get('_raw_params'))
183
+ if isinstance(parent_include, IncludeRole):
184
+ parent_include_dir = parent_include._role_path
185
+ else:
186
+ parent_include_dir = os.path.dirname(templar.template(parent_include.args.get('_raw_params')))
174
187
  if cumulative_path is None:
175
188
  cumulative_path = parent_include_dir
176
189
  elif not os.path.isabs(cumulative_path):
177
190
  cumulative_path = os.path.join(parent_include_dir, cumulative_path)
178
- include_target = templar.template(task.args['_raw_params'])
179
191
  if task._role:
180
192
  new_basedir = os.path.join(task._role._role_path, subdir, cumulative_path)
181
193
  include_file = loader.path_dwim_relative(new_basedir, subdir, include_target)
@@ -189,16 +201,6 @@ def load_list_of_tasks(ds, play, block=None, role=None, task_include=None, use_h
189
201
  parent_include = parent_include._parent
190
202
 
191
203
  if not found:
192
- try:
193
- include_target = templar.template(task.args['_raw_params'])
194
- except AnsibleUndefinedVariable as ex:
195
- raise AnsibleParserError(
196
- message=f"Error when evaluating variable in import path {task.args['_raw_params']!r}.",
197
- help_text="When using static imports, ensure that any variables used in their names are defined in vars/vars_files\n"
198
- "or extra-vars passed in from the command line. Static imports cannot use variables from facts or inventory\n"
199
- "sources like group or host vars.",
200
- obj=task_ds,
201
- ) from ex
202
204
  if task._role:
203
205
  include_file = loader.path_dwim_relative(task._role._role_path, subdir, include_target)
204
206
  else:
ansible/playbook/play.py CHANGED
@@ -314,19 +314,9 @@ class Play(Base, Taggable, CollectionSearch):
314
314
  t.args['_raw_params'] = 'flush_handlers'
315
315
  t.implicit = True
316
316
  t.set_loader(self._loader)
317
+ t.tags = ['always']
317
318
 
318
- if self.tags:
319
- # Avoid calling flush_handlers in case the whole play is skipped on tags,
320
- # this could be performance improvement since calling flush_handlers on
321
- # large inventories could be expensive even if no hosts are notified
322
- # since we call flush_handlers per host.
323
- # Block.filter_tagged_tasks ignores evaluating tags on implicit meta
324
- # tasks so we need to explicitly call Task.evaluate_tags here.
325
- t.tags = self.tags
326
- if t.evaluate_tags(self.only_tags, self.skip_tags, all_vars=self.vars):
327
- flush_block.block = [t]
328
- else:
329
- flush_block.block = [t]
319
+ flush_block.block = [t]
330
320
 
331
321
  # NOTE keep flush_handlers tasks even if a section has no regular tasks,
332
322
  # there may be notified handlers from the previous section
@@ -192,7 +192,7 @@ class ActionModule(ActionBase):
192
192
  msg="checksum mismatch", file=source, dest=dest, remote_md5sum=None,
193
193
  checksum=new_checksum, remote_checksum=remote_checksum))
194
194
  else:
195
- result.update({'changed': True, 'md5sum': new_md5, 'dest': dest,
195
+ result.update({'changed': True, 'md5sum': new_md5, 'file': source, 'dest': dest,
196
196
  'remote_md5sum': None, 'checksum': new_checksum,
197
197
  'remote_checksum': remote_checksum})
198
198
  else:
@@ -5,7 +5,7 @@ DOCUMENTATION:
5
5
  short_description: Pythonic false
6
6
  description:
7
7
  - This check is a more Python version of what is 'false'.
8
- - It is the opposite of 'truthy'.
8
+ - It is the opposite of P(ansible.builtin.truthy#test).
9
9
  options:
10
10
  _input:
11
11
  description: An expression that can be expressed in a boolean context.
@@ -20,5 +20,5 @@ EXAMPLES: |
20
20
  thisisfalse: '{{ "" is truthy }}'
21
21
  RETURN:
22
22
  _value:
23
- description: Returns V(True) if the condition is not "Python truthy", V(False) otherwise.
23
+ description: Returns V(True) if the condition is "Python truthy", V(False) otherwise.
24
24
  type: boolean
ansible/release.py CHANGED
@@ -17,6 +17,6 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- __version__ = '2.20.0b1'
20
+ __version__ = '2.20.0b2'
21
21
  __author__ = 'Ansible, Inc.'
22
22
  __codename__ = "Good Times Bad Times"
ansible/vars/manager.py CHANGED
@@ -17,7 +17,6 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- import os
21
20
  import sys
22
21
  import typing as t
23
22
 
@@ -447,7 +446,7 @@ class VariableManager:
447
446
  """
448
447
 
449
448
  variables = {}
450
- variables['playbook_dir'] = os.path.abspath(self._loader.get_basedir())
449
+ variables['playbook_dir'] = self._loader.get_basedir()
451
450
  variables['ansible_playbook_python'] = sys.executable
452
451
  variables['ansible_config_file'] = C.CONFIG_FILE
453
452
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ansible-core
3
- Version: 2.20.0b1
3
+ Version: 2.20.0b2
4
4
  Summary: Radically simple IT automation
5
5
  Author: Ansible Project
6
6
  Project-URL: Homepage, https://ansible.com/
@@ -3,7 +3,7 @@ ansible/__main__.py,sha256=24j-7-YT4lZ2fmV80JD-VRoYBnxR7YoP_VP-orJtDt0,796
3
3
  ansible/constants.py,sha256=qef45QpHi-yFFMvllvNKmqFpXdKKr304e5fEZnjgwZc,7989
4
4
  ansible/context.py,sha256=oKYyfjfWpy8vDeProtqfnqSmuij_t75_5e5t0U_hQ1g,1933
5
5
  ansible/keyword_desc.yml,sha256=i3d_5dCS8Qsy5DNyrZnPHupkFnj6U3onpgEe2VqS8AY,7273
6
- ansible/release.py,sha256=wUvJBk_SBCP7irI_l9VPFYGdvh4LlahAq3hpr_7hwzg,842
6
+ ansible/release.py,sha256=MHD1PthxmFO6BBW8FDGHrx_D_sBABtICDeMysD2xoE0,842
7
7
  ansible/_internal/__init__.py,sha256=pLZlT_Cm_fKBKDcWB5g0KZt2XWKZGlC7sfytkuUTbJU,2186
8
8
  ansible/_internal/_collection_proxy.py,sha256=Dm7iePwbX9fHPCYsadPLek47eiYSJSQkfcmSWHI8kr8,1154
9
9
  ansible/_internal/_display_utils.py,sha256=2dOknOQpt_GW2AkoMUJxPvmQUCAVYv911KwX6Dwrh0c,5651
@@ -80,7 +80,7 @@ ansible/cli/_ssh_askpass.py,sha256=fKYjoUkAxh1slpKm969wtJxX78zXe57bgLtQDhxMk_Y,2
80
80
  ansible/cli/adhoc.py,sha256=ybYB9k6KsT2126E7My7lkOGFOIm2i0yF1FdY5MYtujg,8326
81
81
  ansible/cli/config.py,sha256=3lHmiX-pOI4lM7jnMPpLU1-xiOc76JWSXnVvVZelHLk,28512
82
82
  ansible/cli/console.py,sha256=F9jL6C3LTZBBD_0OIanGyM86PfxCSAe-gcvv7bqmt58,22002
83
- ansible/cli/doc.py,sha256=tjCFkv0K4GPYyE1q8BsZbZbV8QOoF4x5DKHLSDkqnW8,72974
83
+ ansible/cli/doc.py,sha256=7y1IJfNJbfJKeGNJJi5pzZDjrkj2raAMhnxQLAvszCg,73077
84
84
  ansible/cli/galaxy.py,sha256=nSRvhTJnYmrf6OvSnJV-uqw3w9I0d-HRIxHiS9A6HSE,94348
85
85
  ansible/cli/inventory.py,sha256=F5vifIv1t_wOLDSY9B3giSpS-876pKIXXwHE_ISET30,15983
86
86
  ansible/cli/playbook.py,sha256=F8v8t4v2dIpSVOlLb2RtvoHC3MraKjPbq1j01OOrQrA,10480
@@ -91,7 +91,7 @@ ansible/cli/arguments/option_helpers.py,sha256=BO_yCmofRJRuaVQXVmfiLHfaEJaKkoiMP
91
91
  ansible/cli/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
92
92
  ansible/cli/scripts/ansible_connection_cli_stub.py,sha256=LVRkDIrsgL_72dJ7ZzZVn6On9u_SASNsh-tgCog8ZxU,13121
93
93
  ansible/collections/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
94
- ansible/collections/list.py,sha256=PhQU6f7-bieg892uWnSg_8Cg4etbDnQUbR5a6SOnydk,2873
94
+ ansible/collections/list.py,sha256=kRYyW0UUu2Js5UuDW_pELrU3pQMPHSOW0hUXVA6b7-8,2977
95
95
  ansible/compat/__init__.py,sha256=CvyoCuJ9EdeWO3_nj5fBSQ495YP0tCbXhQ6cramBdGY,1002
96
96
  ansible/compat/importlib_resources.py,sha256=75SJApiBzBKuBDknj81vdfzSJSxc2Pi4YvgQkmmGtew,542
97
97
  ansible/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -200,7 +200,7 @@ ansible/galaxy/data/network/vars/main.yml.j2,sha256=3I4QQOFgSN3CSJ2C1qRFPeRVv23S
200
200
  ansible/galaxy/dependency_resolution/__init__.py,sha256=_0Ss541x_EPocg1b_arUpqFpchADtfQwiAw-1B7nqEE,1996
201
201
  ansible/galaxy/dependency_resolution/dataclasses.py,sha256=HjBvJjq9dn60CBnyPzJEELi80J28SXZtQu4syN6ealk,24024
202
202
  ansible/galaxy/dependency_resolution/errors.py,sha256=t9RSyjCNaeB9ipzW_UmZA96SDHlMh0v5IsqbN1L_LQ4,697
203
- ansible/galaxy/dependency_resolution/providers.py,sha256=lv2wCBXPmhsXXDvfbudn_KxDbrH0ZK2ouVzkfjV1PnE,23359
203
+ ansible/galaxy/dependency_resolution/providers.py,sha256=fCw7Wg14NLC80M-v6wpPKbzsw6pQWuz0jsfysOsFHn8,19124
204
204
  ansible/galaxy/dependency_resolution/reporters.py,sha256=HKYT0lf6sihCQ2EheYD07m6mZ5P69l1pLYBjx8Vhk-k,3389
205
205
  ansible/galaxy/dependency_resolution/resolvers.py,sha256=NUtKTwIBMegoMkfhbxKA_COF0bSsXMCLkp8cqI0ZKGA,623
206
206
  ansible/galaxy/dependency_resolution/versioning.py,sha256=QIpRw4anhAhXFFWbRyALIrCBRgwvX7SMgDDw4sEhJQU,1726
@@ -212,7 +212,7 @@ ansible/inventory/host.py,sha256=cZw906LeMYe6oF3ZxW6K2HWoW2Qc0jxHssg_C8cRumE,493
212
212
  ansible/inventory/manager.py,sha256=IiODOOpm5iGpAHn5Sjap-_XTX0pZsXrQCevEaFNF_Sc,31743
213
213
  ansible/module_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
214
214
  ansible/module_utils/_text.py,sha256=MjBVvIttHxQbicW6EY9F0B7GTbhjyiVDNt92fCZnQOw,1207
215
- ansible/module_utils/ansible_release.py,sha256=wUvJBk_SBCP7irI_l9VPFYGdvh4LlahAq3hpr_7hwzg,842
215
+ ansible/module_utils/ansible_release.py,sha256=MHD1PthxmFO6BBW8FDGHrx_D_sBABtICDeMysD2xoE0,842
216
216
  ansible/module_utils/api.py,sha256=8BmCzQtp9rClsLGlDn4I9iJrUFLCdnoEIxYX59_IL9c,5756
217
217
  ansible/module_utils/basic.py,sha256=GsM5pubhLqRjdXE21LxdbbzOgRDrQm6a9bJ-_-kHHSI,90082
218
218
  ansible/module_utils/connection.py,sha256=5RE7BmO58yvutG4Z1sVNsb1Km9ea1hA37HRcPuSJxFA,7575
@@ -387,7 +387,7 @@ ansible/module_utils/powershell/Ansible.ModuleUtils.PrivilegeUtil.psm1,sha256=1u
387
387
  ansible/module_utils/powershell/Ansible.ModuleUtils.SID.psm1,sha256=TX70j9dlg_SGVcb2HrHxakrkZzsyxPtaIeKaRevgy54,3639
388
388
  ansible/module_utils/powershell/Ansible.ModuleUtils.WebRequest.psm1,sha256=4Wb0K_GO8maVpQYpdDBrUvl7YgkReeunXSNM1N6nq74,19182
389
389
  ansible/module_utils/powershell/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
390
- ansible/module_utils/six/__init__.py,sha256=R8WpTF9a4x8RcBnCbS4StADOgbh-sCncsQkvQdik78w,35132
390
+ ansible/module_utils/six/__init__.py,sha256=j2dk0uS3NrLLJ-4VhBQ8sO7Uep7kt3FE9q1v293nDlo,35372
391
391
  ansible/modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
392
392
  ansible/modules/add_host.py,sha256=VZ3gc-phY5myzGijo6AIB1omD9ykfWpoqRvzleZp3DU,3859
393
393
  ansible/modules/apt.py,sha256=267kolDkjiXbO80Oum2wrM96pQQJLHk3NROTe2fCF8w,63056
@@ -426,7 +426,7 @@ ansible/modules/include_role.py,sha256=9FWEwk09DT0ucD6OOMPOS1i6jkllJOn7gkzJkRg8v
426
426
  ansible/modules/include_tasks.py,sha256=SrEIkzv7o01GXmRsXmWHhaNJcHiqN9qXZeDsNAhHuo4,2659
427
427
  ansible/modules/include_vars.py,sha256=JplpZJT9d4nKPUbKYSlPOh1_huyZuaSmpt-z4i2olx0,6730
428
428
  ansible/modules/iptables.py,sha256=94iDMuVpx3Qq52cJaUW0dxZO3FE8cvs4op8t7nsvNm8,35494
429
- ansible/modules/known_hosts.py,sha256=672GEOal1uEVn0P6uCs4U4wZmEYJasBLJFTNsROEJOM,14313
429
+ ansible/modules/known_hosts.py,sha256=4mZFUKtNuvTT60cf_XV7P6DjyX-K5IO5RhKHaE8Tqc0,14449
430
430
  ansible/modules/lineinfile.py,sha256=x0nR7uJ5B28Ckap_Yo_3zMabc742jXj59Dk9qF616dQ,23595
431
431
  ansible/modules/meta.py,sha256=0oLfvydcj8XeZsRR8yoRzgTINaPsEfl3-jxp1T-lzDM,7264
432
432
  ansible/modules/mount_facts.py,sha256=vy9Eeu17_EMsJbxgc23pa7DDXwU8rg11WFJTqcLjMXo,26018
@@ -463,7 +463,7 @@ ansible/modules/wait_for_connection.py,sha256=U7yQEXyWnrTGpaBAfMF1KFQpg3ZhX4QjZd
463
463
  ansible/modules/yum_repository.py,sha256=3kV5z7nTdLWuYPKT292aj-p8Z4UXwaSKxcXzQktUUkU,23852
464
464
  ansible/parsing/__init__.py,sha256=NMP9ZkK59SNdQktw76aWAXVAm5U2POXLgAK7wH-1h0g,742
465
465
  ansible/parsing/ajson.py,sha256=nv82WTeWYuKdy4LE_YM6nhLR7eb-Tyr4F6arjTP8nmY,692
466
- ansible/parsing/dataloader.py,sha256=GuES1WHbl9c8NIqVe8uwWOPurU5GiGrdwWDqftj6Rl4,22331
466
+ ansible/parsing/dataloader.py,sha256=2znBPFGXFcYKuTCDJ48so9JMsYc1kBN_HV2PixSDQqI,22365
467
467
  ansible/parsing/mod_args.py,sha256=5-JzLXH1sW9XxyeZgNOEqWt8_I6cPl2C9VwZQ_3z1K8,15090
468
468
  ansible/parsing/plugin_docs.py,sha256=UYWDpLCF4FrBU0lxgR6C2bkoa7N8TBplh4KcW-B6enk,6326
469
469
  ansible/parsing/quoting.py,sha256=myYxG625XK6rgNULbBuKp23G2R83c0UilrF1ZImDjGs,1057
@@ -480,17 +480,17 @@ ansible/parsing/yaml/objects.py,sha256=muP81NhLvhJAh9MZ5UTUp8AMUTkTKM4Pk-xl6gOeV
480
480
  ansible/playbook/__init__.py,sha256=5FKnJsBz35UvBbwyiLrniAwkdse8jTRzjOrI0RLU05E,4766
481
481
  ansible/playbook/attribute.py,sha256=kAWselKvFurdGC0EaKJLh8b9y7IWChZwXG648aH6S-4,7800
482
482
  ansible/playbook/base.py,sha256=DL_jvJQ_E21xkyLsZrUxOEUQ0DyQ3XafKo57icx797Y,33809
483
- ansible/playbook/block.py,sha256=nfs8xAkjSLcgIgYfxFr-rpYWbocSswM5ROey8kvBHdU,14492
483
+ ansible/playbook/block.py,sha256=SkEwtHHFGI3gadaF9YhuXH5vjsfwwK5TNqFuayGwD_Y,14383
484
484
  ansible/playbook/collectionsearch.py,sha256=GO3tuBSKVeMnfp1xGtGSdHRZzk3eYMhL_zYVCLVcqYA,1828
485
485
  ansible/playbook/conditional.py,sha256=oq0Adm8LwibKuBC0LTk1TsQcqS1ZwPjSQuM2FUeip8g,1317
486
486
  ansible/playbook/delegatable.py,sha256=BBcw2GU85V7ome7qX0KRg-vZyjv2J890kEHjYQOyoTk,625
487
487
  ansible/playbook/handler.py,sha256=2LItktoUgVDejUeoxOJbUqjob8INJFALq6FAUSFEzOE,2735
488
488
  ansible/playbook/handler_task_include.py,sha256=kCrBThzmIRWKaecLl9UNB8VBvtVPI0dt8eHpBldsnlY,1391
489
- ansible/playbook/helpers.py,sha256=xMaOK-5Q_lIqrewu-UU3vLH214MaTgXWoH-XRPexjMc,14699
489
+ ansible/playbook/helpers.py,sha256=FAKTvIb99W8JRBBuK_kJCnd3UP-U_YmiLYTzHrd9j-4,14829
490
490
  ansible/playbook/included_file.py,sha256=WgPV0H0f4V11nauyQC5u_gPiWWuocMEHGU7vgR3qbWg,12027
491
491
  ansible/playbook/loop_control.py,sha256=5rZz6aWXpvvwOD4CzrS_b_cnXIu4Gf56czkomX1NS7w,2022
492
492
  ansible/playbook/notifiable.py,sha256=MQz4VZuOga35VLcdUxVd9FQVzFg-djtQZhs09DS2juA,299
493
- ansible/playbook/play.py,sha256=0I_kEb6xpcCyKjPGpWAnYQ2PLXDnHosKSN4ZwaLfTDQ,20206
493
+ ansible/playbook/play.py,sha256=KiKImFJfJIZoWpjpJu_2LKq8Sk3RtWDBUTpcRglU6LE,19579
494
494
  ansible/playbook/play_context.py,sha256=nfluy9HF2bI-LoFCNImpE33EGN_L5Zx8rmvIzVtzrlM,13847
495
495
  ansible/playbook/playbook_include.py,sha256=zTzEsS20DB9hSzRfU9DI4-BsteHwzWVshUF_SoIVVE0,5515
496
496
  ansible/playbook/role_include.py,sha256=MZd0EnPjQstRg0-AZBso1iCT8Vr9vThAwyBXeaHpjPg,7551
@@ -515,7 +515,7 @@ ansible/plugins/action/copy.py,sha256=dq8wGc83xYyRc9X887QnOJxdRAt0rB2-NJQxuxowCl
515
515
  ansible/plugins/action/debug.py,sha256=KPWtGEPbc119_e1rNQztCB-wzelJObAv16qJNHPUNb4,3604
516
516
  ansible/plugins/action/dnf.py,sha256=2ObzxBLRPBPy2JCp3wWRzR1fIEHzhS5y34CoAzTXqN0,3664
517
517
  ansible/plugins/action/fail.py,sha256=MzIefYaHaRdpjgnqc9eNge0P32btlTPzO6TB22jkadk,1457
518
- ansible/plugins/action/fetch.py,sha256=V3VoY_TQtPz348hdc3FQyjWJdiKPoykDQ2aPV-0cbdo,10031
518
+ ansible/plugins/action/fetch.py,sha256=4lNe-55Fy1Ph33m26xLLn6OfYqsRE5nBBKSz0v2jG0s,10047
519
519
  ansible/plugins/action/gather_facts.py,sha256=vr-3BJiBDP25aJd9e1uydpS3r8Np2T6nubUbYAls58w,9109
520
520
  ansible/plugins/action/group_by.py,sha256=O1PfwBJ4wLyE0BMOhhSfx8tlTYQHT1V-_ZZDD6ShE3Q,1835
521
521
  ansible/plugins/action/include_vars.py,sha256=tYsdXiV-NGBJkJ_uhS5Rybp7HJ9_X6Iz_2Ug9ZbZ44A,11436
@@ -710,7 +710,7 @@ ansible/plugins/test/directory.yml,sha256=UpHBKTYTqusESrl9PA5lyhhIdoMXke6sf_1z5n
710
710
  ansible/plugins/test/exists.yml,sha256=R8lteO8uYy-XelgK7nK3U_sTUDz0DrTO2BAUr8ltgrM,885
711
711
  ansible/plugins/test/failed.yml,sha256=lTzQSd0r-SZn2y_ifWO4eszPWd72oea8fCl44p7erA0,803
712
712
  ansible/plugins/test/failure.yml,sha256=lTzQSd0r-SZn2y_ifWO4eszPWd72oea8fCl44p7erA0,803
713
- ansible/plugins/test/falsy.yml,sha256=SFzc-DA00IVrZ0qhf170YVq9eU14gw67cm7Gp062ns4,801
713
+ ansible/plugins/test/falsy.yml,sha256=zoK1YNP94tRd0mDHinoZn4a0ODMZiBFVjiKEAU6L0BU,823
714
714
  ansible/plugins/test/file.yml,sha256=_yCsLZH8jHhbEwOyI_X4DxYixut6i7oRHaeZWltH50c,651
715
715
  ansible/plugins/test/files.py,sha256=YvdrNZ23EOKIttRBiwThij4sPgbFvgOvgc2Uw9RiMM4,1407
716
716
  ansible/plugins/test/finished.yml,sha256=tJ5NDBpiuk-VVq0-Q1CHVi4vI0eZjzT9o43iU5HJvgo,702
@@ -742,7 +742,7 @@ ansible/plugins/test/success.yml,sha256=YCWf9SYePHlqhffTkKEVUOXWMMlYWDDVGdypw9gn
742
742
  ansible/plugins/test/successful.yml,sha256=YCWf9SYePHlqhffTkKEVUOXWMMlYWDDVGdypw9gngjk,691
743
743
  ansible/plugins/test/superset.yml,sha256=KcPyWv-MqREe_hgKdilPJjOJ1O7hGgHLLZEfvEg1Cd8,714
744
744
  ansible/plugins/test/timedout.yml,sha256=w-QWRd_nJqY9oE4ypd6Eyi4oc12ngIDZJBICBvWossU,594
745
- ansible/plugins/test/truthy.yml,sha256=Flgl3QawsSbBYK24d1ciSSmrUCJwnWRdt8YIOI9uyLw,810
745
+ ansible/plugins/test/truthy.yml,sha256=sSGai78h38UtaHd21WiqdhbKb4XmuzijviMJSvu5KD4,806
746
746
  ansible/plugins/test/unreachable.yml,sha256=KCrtQULh4YZ3iOZiE0-_SGCCpqnjIDf3n5Go5w5d58k,695
747
747
  ansible/plugins/test/uri.py,sha256=j1WZU7eCfNEu3m2udzVTP8nIbJ6TFsG3DmO62FIosM4,965
748
748
  ansible/plugins/test/uri.yml,sha256=jqb-Ppm-uQfOh-XgTm6iW8dxW1s2NvFpHBsPBsWEMzM,1115
@@ -787,15 +787,15 @@ ansible/utils/collection_loader/_collection_meta.py,sha256=p2eZArsO8RCl4PlN1x2I-
787
787
  ansible/vars/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
788
788
  ansible/vars/clean.py,sha256=5YwNY0ERBr29vQsdncjKSesLwB_Ku7SNk46edkiCXsM,5959
789
789
  ansible/vars/hostvars.py,sha256=cRK_4dssUwIN4aDxxYXEj7KzTazrykQ4PbJotne5oJc,4364
790
- ansible/vars/manager.py,sha256=HOeJyEQewOoObJ_HLArrud1p55cieEcjK-cHUIbGHE4,28333
790
+ ansible/vars/manager.py,sha256=bsh_Ie5qSPxySkpxtz37n3uXaPcC4bDbDHN8tcSf4xo,28306
791
791
  ansible/vars/plugins.py,sha256=Ry0wY-Y7lMlQgowItFngE6EjP_6sFcUEjvS0tGocweg,3127
792
792
  ansible/vars/reserved.py,sha256=NgxlMBm_tloqDVb5TEX4eGhpYsz_AO6-Fmyi3kJpIFk,3107
793
- ansible_core-2.20.0b1.dist-info/licenses/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
794
- ansible_core-2.20.0b1.dist-info/licenses/licenses/Apache-License.txt,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325
795
- ansible_core-2.20.0b1.dist-info/licenses/licenses/BSD-3-Clause.txt,sha256=la0N3fE3Se8vBiuvUcFKA8b-E41G7flTic6P8CkUroE,1548
796
- ansible_core-2.20.0b1.dist-info/licenses/licenses/MIT-license.txt,sha256=jLXp2XurnyZKbye40g9tfmLGtVlxh3pPD4n8xNqX8xc,1023
797
- ansible_core-2.20.0b1.dist-info/licenses/licenses/PSF-license.txt,sha256=g7BC_H1qyg8Q1o5F76Vrm8ChSWYI5-dyj-CdGlNKBUo,2484
798
- ansible_core-2.20.0b1.dist-info/licenses/licenses/simplified_bsd.txt,sha256=8R5R7R7sOa0h1Fi6RNgFgHowHBfun-OVOMzJ4rKAk2w,1237
793
+ ansible_core-2.20.0b2.dist-info/licenses/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
794
+ ansible_core-2.20.0b2.dist-info/licenses/licenses/Apache-License.txt,sha256=y16Ofl9KOYjhBjwULGDcLfdWBfTEZRXnduOspt-XbhQ,11325
795
+ ansible_core-2.20.0b2.dist-info/licenses/licenses/BSD-3-Clause.txt,sha256=la0N3fE3Se8vBiuvUcFKA8b-E41G7flTic6P8CkUroE,1548
796
+ ansible_core-2.20.0b2.dist-info/licenses/licenses/MIT-license.txt,sha256=jLXp2XurnyZKbye40g9tfmLGtVlxh3pPD4n8xNqX8xc,1023
797
+ ansible_core-2.20.0b2.dist-info/licenses/licenses/PSF-license.txt,sha256=g7BC_H1qyg8Q1o5F76Vrm8ChSWYI5-dyj-CdGlNKBUo,2484
798
+ ansible_core-2.20.0b2.dist-info/licenses/licenses/simplified_bsd.txt,sha256=8R5R7R7sOa0h1Fi6RNgFgHowHBfun-OVOMzJ4rKAk2w,1237
799
799
  ansible_test/__init__.py,sha256=20VPOj11c6Ut1Av9RaurgwJvFhMqkWG3vAvcCbecNKw,66
800
800
  ansible_test/_data/ansible.cfg,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
801
801
  ansible_test/_data/coveragerc,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -1044,7 +1044,7 @@ ansible_test/_util/controller/sanity/pylint/plugins/deprecated_calls.py,sha256=3
1044
1044
  ansible_test/_util/controller/sanity/pylint/plugins/deprecated_comment.py,sha256=tmQf_-2VAT2GVfwa9X9ruBcaj0Sz6Ifx4cXmdzJ99SQ,5226
1045
1045
  ansible_test/_util/controller/sanity/pylint/plugins/hide_unraisable.py,sha256=s0AIoK03uqZSTwXSLvd4oXvf4WJ0Ckol5ingitHoMr4,836
1046
1046
  ansible_test/_util/controller/sanity/pylint/plugins/string_format.py,sha256=Mb1Mx8WS4RulsORFgyctlFRR0Sn-PYPy4mVu_GYCD18,2359
1047
- ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py,sha256=W07F44GcL46H2CBytsaqQGld7Yh5JOEgffFkAokPy6g,8255
1047
+ ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py,sha256=Xq8ThjQTlO1OkdZl59tIJeGm1GIHYFa1WZYugSQxxNM,8710
1048
1048
  ansible_test/_util/controller/sanity/shellcheck/exclude.txt,sha256=8U3ZTe1A1YRCXUB1AIAIgcd33ejBhzelBPkVdOJnhj8,21
1049
1049
  ansible_test/_util/controller/sanity/validate-modules/validate.py,sha256=jpNOhA5qJ5LdlWlSOJoJyTUh9H1tepjcSYZXeHdhJRY,114
1050
1050
  ansible_test/_util/controller/sanity/validate-modules/validate_modules/__init__.py,sha256=CRUAj-k-zJye4RAGZ8eR9HvP6weM6VKTwGmFYpI_0Bw,816
@@ -1091,8 +1091,8 @@ ansible_test/config/cloud-config-vultr.ini.template,sha256=XLKHk3lg_8ReQMdWfZzhh
1091
1091
  ansible_test/config/config.yml,sha256=1zdGucnIl6nIecZA7ISIANvqXiHWqq6Dthsk_6MUwNc,2642
1092
1092
  ansible_test/config/inventory.networking.template,sha256=bFNSk8zNQOaZ_twaflrY0XZ9mLwUbRLuNT0BdIFwvn4,1335
1093
1093
  ansible_test/config/inventory.winrm.template,sha256=1QU8W-GFLnYEw8yY9bVIvUAVvJYPM3hyoijf6-M7T00,1098
1094
- ansible_core-2.20.0b1.dist-info/METADATA,sha256=CToFpmZgU9mpQ4FLnmo2Qh4cA4TMoCqv-yJwC3MEQdY,7732
1095
- ansible_core-2.20.0b1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1096
- ansible_core-2.20.0b1.dist-info/entry_points.txt,sha256=S9yJij5Im6FgRQxzkqSCnPQokC7PcWrDW_NSygZczJU,451
1097
- ansible_core-2.20.0b1.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1098
- ansible_core-2.20.0b1.dist-info/RECORD,,
1094
+ ansible_core-2.20.0b2.dist-info/METADATA,sha256=9EZQhLa0qNtDowW4jyvDRJReTtejQWpWvZHZjJxSmME,7732
1095
+ ansible_core-2.20.0b2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1096
+ ansible_core-2.20.0b2.dist-info/entry_points.txt,sha256=S9yJij5Im6FgRQxzkqSCnPQokC7PcWrDW_NSygZczJU,451
1097
+ ansible_core-2.20.0b2.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1098
+ ansible_core-2.20.0b2.dist-info/RECORD,,
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import functools
5
6
  import os
6
7
  import typing as t
7
8
 
@@ -108,10 +109,6 @@ class AnsibleUnwantedChecker(BaseChecker):
108
109
  'Iterator',
109
110
  )
110
111
  ),
111
-
112
- 'ansible.module_utils.six': UnwantedEntry(
113
- 'the Python standard library equivalent'
114
- ),
115
112
  }
116
113
 
117
114
  unwanted_functions = {
@@ -136,6 +133,19 @@ class AnsibleUnwantedChecker(BaseChecker):
136
133
  modules_only=True),
137
134
  }
138
135
 
136
+ def __init__(self, *args, **kwargs) -> None:
137
+ super().__init__(*args, **kwargs)
138
+ # ansible.module_utils.six is deprecated and collections can still use it until it is removed
139
+ if self.is_ansible_core:
140
+ self.unwanted_imports['ansible.module_utils.six'] = UnwantedEntry(
141
+ 'the Python standard library equivalent'
142
+ )
143
+
144
+ @functools.cached_property
145
+ def is_ansible_core(self) -> bool:
146
+ """True if ansible-core is being tested."""
147
+ return not self.linter.config.collection_name
148
+
139
149
  def visit_import(self, node): # type: (astroid.node_classes.Import) -> None
140
150
  """Visit an import node."""
141
151
  for name in node.names: