ansible-core 2.16.0b1__py3-none-any.whl → 2.16.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/galaxy.py +3 -0
  2. ansible/galaxy/role.py +29 -23
  3. ansible/module_utils/ansible_release.py +1 -1
  4. ansible/module_utils/urls.py +20 -3
  5. ansible/playbook/role_include.py +1 -1
  6. ansible/plugins/connection/winrm.py +40 -2
  7. ansible/release.py +1 -1
  8. ansible/vars/manager.py +12 -8
  9. {ansible_core-2.16.0b1.dist-info → ansible_core-2.16.0b2.dist-info}/METADATA +1 -1
  10. {ansible_core-2.16.0b1.dist-info → ansible_core-2.16.0b2.dist-info}/RECORD +27 -27
  11. ansible_test/_data/completion/docker.txt +9 -9
  12. ansible_test/_data/requirements/ansible-test.txt +1 -1
  13. ansible_test/_data/requirements/sanity.ansible-doc.txt +1 -1
  14. ansible_test/_data/requirements/sanity.changelog.txt +2 -2
  15. ansible_test/_data/requirements/sanity.mypy.txt +7 -7
  16. ansible_test/_data/requirements/sanity.pylint.txt +3 -7
  17. ansible_test/_internal/commands/sanity/pylint.py +0 -6
  18. ansible_test/_internal/coverage_util.py +1 -1
  19. ansible_test/_internal/host_profiles.py +2 -1
  20. ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +18 -5
  21. ansible_test/_util/controller/sanity/pylint/plugins/string_format.py +13 -2
  22. ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +7 -1
  23. {ansible_core-2.16.0b1.data → ansible_core-2.16.0b2.data}/scripts/ansible-test +0 -0
  24. {ansible_core-2.16.0b1.dist-info → ansible_core-2.16.0b2.dist-info}/COPYING +0 -0
  25. {ansible_core-2.16.0b1.dist-info → ansible_core-2.16.0b2.dist-info}/WHEEL +0 -0
  26. {ansible_core-2.16.0b1.dist-info → ansible_core-2.16.0b2.dist-info}/entry_points.txt +0 -0
  27. {ansible_core-2.16.0b1.dist-info → ansible_core-2.16.0b2.dist-info}/top_level.txt +0 -0
ansible/cli/galaxy.py CHANGED
@@ -1265,6 +1265,9 @@ class GalaxyCLI(CLI):
1265
1265
 
1266
1266
  if remote_data:
1267
1267
  role_info.update(remote_data)
1268
+ else:
1269
+ data = u"- the role %s was not found" % role
1270
+ break
1268
1271
 
1269
1272
  elif context.CLIARGS['offline'] and not gr._exists:
1270
1273
  data = u"- the role %s was not found" % role
ansible/galaxy/role.py CHANGED
@@ -394,30 +394,36 @@ class GalaxyRole(object):
394
394
  # bits that might be in the file for security purposes
395
395
  # and drop any containing directory, as mentioned above
396
396
  if member.isreg() or member.issym():
397
- n_member_name = to_native(member.name)
398
- n_archive_parent_dir = to_native(archive_parent_dir)
399
- n_parts = n_member_name.replace(n_archive_parent_dir, "", 1).split(os.sep)
400
- n_final_parts = []
401
- for n_part in n_parts:
402
- # TODO if the condition triggers it produces a broken installation.
403
- # It will create the parent directory as an empty file and will
404
- # explode if the directory contains valid files.
405
- # Leaving this as is since the whole module needs a rewrite.
406
- #
407
- # Check if we have any files with illegal names,
408
- # and display a warning if so. This could help users
409
- # to debug a broken installation.
410
- if n_part == '..':
411
- display.warning(f"Illegal filename '{n_part}': '..' is not allowed")
397
+ for attr in ('name', 'linkname'):
398
+ attr_value = getattr(member, attr, None)
399
+ if not attr_value:
412
400
  continue
413
- if n_part.startswith('~'):
414
- display.warning(f"Illegal filename '{n_part}': names cannot start with '~'")
415
- continue
416
- if '$' in n_part:
417
- display.warning(f"Illegal filename '{n_part}': names cannot contain '$'")
418
- continue
419
- n_final_parts.append(n_part)
420
- member.name = os.path.join(*n_final_parts)
401
+ n_attr_value = to_native(attr_value)
402
+ n_archive_parent_dir = to_native(archive_parent_dir)
403
+ n_parts = n_attr_value.replace(n_archive_parent_dir, "", 1).split(os.sep)
404
+ n_final_parts = []
405
+ for n_part in n_parts:
406
+ # TODO if the condition triggers it produces a broken installation.
407
+ # It will create the parent directory as an empty file and will
408
+ # explode if the directory contains valid files.
409
+ # Leaving this as is since the whole module needs a rewrite.
410
+ #
411
+ # Check if we have any files with illegal names,
412
+ # and display a warning if so. This could help users
413
+ # to debug a broken installation.
414
+ if not n_part:
415
+ continue
416
+ if n_part == '..':
417
+ display.warning(f"Illegal filename '{n_part}': '..' is not allowed")
418
+ continue
419
+ if n_part.startswith('~'):
420
+ display.warning(f"Illegal filename '{n_part}': names cannot start with '~'")
421
+ continue
422
+ if '$' in n_part:
423
+ display.warning(f"Illegal filename '{n_part}': names cannot contain '$'")
424
+ continue
425
+ n_final_parts.append(n_part)
426
+ setattr(member, attr, os.path.join(*n_final_parts))
421
427
 
422
428
  if _check_working_data_filter():
423
429
  # deprecated: description='extract fallback without filter' python_version='3.11'
@@ -19,6 +19,6 @@
19
19
  from __future__ import (absolute_import, division, print_function)
20
20
  __metaclass__ = type
21
21
 
22
- __version__ = '2.16.0b1'
22
+ __version__ = '2.16.0b2'
23
23
  __author__ = 'Ansible, Inc.'
24
24
  __codename__ = "All My Love"
@@ -129,13 +129,13 @@ if not HAS_SSLCONTEXT:
129
129
  try:
130
130
  from urllib3.contrib.pyopenssl import PyOpenSSLContext
131
131
  except Exception:
132
- from requests.packages.urllib3.contrib.pyopenssl import PyOpenSSLContext
132
+ from requests.packages.urllib3.contrib.pyopenssl import PyOpenSSLContext # type: ignore[no-redef]
133
133
  HAS_URLLIB3_PYOPENSSLCONTEXT = True
134
134
  except Exception:
135
135
  # urllib3<1.15,>=1.6
136
136
  try:
137
137
  try:
138
- from urllib3.contrib.pyopenssl import ssl_wrap_socket
138
+ from urllib3.contrib.pyopenssl import ssl_wrap_socket # type: ignore[attr-defined]
139
139
  except Exception:
140
140
  from requests.packages.urllib3.contrib.pyopenssl import ssl_wrap_socket
141
141
  HAS_URLLIB3_SSL_WRAP_SOCKET = True
@@ -771,6 +771,18 @@ def extract_pem_certs(b_data):
771
771
  yield match.group(0)
772
772
 
773
773
 
774
+ def _py2_get_param(headers, param, header='content-type'):
775
+ m = httplib.HTTPMessage(io.StringIO())
776
+ cd = headers.getheader(header) or ''
777
+ try:
778
+ m.plisttext = cd[cd.index(';'):]
779
+ m.parseplist()
780
+ except ValueError:
781
+ return None
782
+
783
+ return m.getparam(param)
784
+
785
+
774
786
  def get_response_filename(response):
775
787
  url = response.geturl()
776
788
  path = urlparse(url)[2]
@@ -778,7 +790,12 @@ def get_response_filename(response):
778
790
  if filename:
779
791
  filename = unquote(filename)
780
792
 
781
- return response.headers.get_param('filename', header='content-disposition') or filename
793
+ if PY2:
794
+ get_param = functools.partial(_py2_get_param, response.headers)
795
+ else:
796
+ get_param = response.headers.get_param
797
+
798
+ return get_param('filename', header='content-disposition') or filename
782
799
 
783
800
 
784
801
  def parse_content_type(response):
@@ -49,10 +49,10 @@ class IncludeRole(TaskInclude):
49
49
 
50
50
  # =================================================================================
51
51
  # ATTRIBUTES
52
+ public = NonInheritableFieldAttribute(isa='bool', default=None, private=False, always_post_validate=True)
52
53
 
53
54
  # private as this is a 'module options' vs a task property
54
55
  allow_duplicates = NonInheritableFieldAttribute(isa='bool', default=True, private=True, always_post_validate=True)
55
- public = NonInheritableFieldAttribute(isa='bool', default=False, private=True, always_post_validate=True)
56
56
  rolespec_validate = NonInheritableFieldAttribute(isa='bool', default=True, private=True, always_post_validate=True)
57
57
 
58
58
  def __init__(self, block=None, role=None, task_include=None):
@@ -170,6 +170,7 @@ import json
170
170
  import tempfile
171
171
  import shlex
172
172
  import subprocess
173
+ import time
173
174
  import typing as t
174
175
 
175
176
  from inspect import getfullargspec
@@ -199,6 +200,7 @@ from ansible.utils.display import Display
199
200
  try:
200
201
  import winrm
201
202
  from winrm import Response
203
+ from winrm.exceptions import WinRMError, WinRMOperationTimeoutError
202
204
  from winrm.protocol import Protocol
203
205
  import requests.exceptions
204
206
  HAS_WINRM = True
@@ -494,6 +496,43 @@ class Connection(ConnectionBase):
494
496
  else:
495
497
  raise AnsibleError('No transport found for WinRM connection')
496
498
 
499
+ def _winrm_write_stdin(self, command_id: str, stdin_iterator: t.Iterable[tuple[bytes, bool]]) -> None:
500
+ for (data, is_last) in stdin_iterator:
501
+ for attempt in range(1, 4):
502
+ try:
503
+ self._winrm_send_input(self.protocol, self.shell_id, command_id, data, eof=is_last)
504
+
505
+ except WinRMOperationTimeoutError:
506
+ # A WSMan OperationTimeout can be received for a Send
507
+ # operation when the server is under severe load. On manual
508
+ # testing the input is still processed and it's safe to
509
+ # continue. As the calling method still tries to wait for
510
+ # the proc to end if this failed it shouldn't hurt to just
511
+ # treat this as a warning.
512
+ display.warning(
513
+ "WSMan OperationTimeout during send input, attempting to continue. "
514
+ "If this continues to occur, try increasing the connection_timeout "
515
+ "value for this host."
516
+ )
517
+ if not is_last:
518
+ time.sleep(5)
519
+
520
+ except WinRMError as e:
521
+ # Error 170 == ERROR_BUSY. This could be the result of a
522
+ # timed out Send from above still being processed on the
523
+ # server. Add a 5 second delay and try up to 3 times before
524
+ # fully giving up.
525
+ # pywinrm does not expose the internal WSMan fault details
526
+ # through an actual object but embeds it as a repr.
527
+ if attempt == 3 or "'wsmanfault_code': '170'" not in str(e):
528
+ raise
529
+
530
+ display.warning(f"WSMan send failed on attempt {attempt} as the command is busy, trying to send data again")
531
+ time.sleep(5)
532
+ continue
533
+
534
+ break
535
+
497
536
  def _winrm_send_input(self, protocol: winrm.Protocol, shell_id: str, command_id: str, stdin: bytes, eof: bool = False) -> None:
498
537
  rq = {'env:Envelope': protocol._get_soap_header(
499
538
  resource_uri='http://schemas.microsoft.com/wbem/wsman/1/windows/shell/cmd',
@@ -529,8 +568,7 @@ class Connection(ConnectionBase):
529
568
 
530
569
  try:
531
570
  if stdin_iterator:
532
- for (data, is_last) in stdin_iterator:
533
- self._winrm_send_input(self.protocol, self.shell_id, command_id, data, eof=is_last)
571
+ self._winrm_write_stdin(command_id, stdin_iterator)
534
572
 
535
573
  except Exception as ex:
536
574
  display.warning("ERROR DURING WINRM SEND INPUT - attempting to recover: %s %s"
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.0b1'
22
+ __version__ = '2.16.0b2'
23
23
  __author__ = 'Ansible, Inc.'
24
24
  __codename__ = "All My Love"
ansible/vars/manager.py CHANGED
@@ -197,13 +197,13 @@ class VariableManager:
197
197
 
198
198
  if play:
199
199
  if not C.DEFAULT_PRIVATE_ROLE_VARS:
200
- # first we compile any vars specified in defaults/main.yml
201
- # for all roles within the specified play
202
200
  for role in play.get_roles():
203
- # role from roles or include_role+public or import_role and completed
204
- if not role.from_include or role.public or (role.static and role._completed.get(to_text(host), False)):
201
+ # role is public and
202
+ # either static or dynamic and completed
203
+ # role is not set
204
+ # use config option as default
205
+ if role.static or role.public and role._completed.get(host.name, False):
205
206
  all_vars = _combine_and_track(all_vars, role.get_default_vars(), "role '%s' defaults" % role.name)
206
-
207
207
  if task:
208
208
  # set basedirs
209
209
  if C.PLAYBOOK_VARS_ROOT == 'all': # should be default
@@ -386,11 +386,15 @@ class VariableManager:
386
386
  raise AnsibleParserError("Error while reading vars files - please supply a list of file names. "
387
387
  "Got '%s' of type %s" % (vars_files, type(vars_files)))
388
388
 
389
- # By default, we now merge in all exported vars from all roles in the play,
390
- # unless the user has disabled this via a config option
389
+ # We now merge in all exported vars from all roles in the play,
390
+ # unless the user has disabled this
391
+ # role is public and
392
+ # either static or dynamic and completed
393
+ # role is not set
394
+ # use config option as default
391
395
  if not C.DEFAULT_PRIVATE_ROLE_VARS:
392
396
  for role in play.get_roles():
393
- if not role.from_include or role.public or (role.static and role._completed.get(to_text(host), False)):
397
+ if role.static or role.public and role._completed.get(host.name, False):
394
398
  all_vars = _combine_and_track(all_vars, role.get_vars(include_params=False, only_exports=True), "role '%s' exported vars" % role.name)
395
399
 
396
400
  # next, we merge in the vars from the role, which will specifically
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ansible-core
3
- Version: 2.16.0b1
3
+ Version: 2.16.0b2
4
4
  Summary: Radically simple IT automation
5
5
  Home-page: https://ansible.com/
6
6
  Author: Ansible, Inc.
@@ -3,14 +3,14 @@ ansible/__main__.py,sha256=IvyRvY64pT0on94qCLibxgDJ0-7_2CRoaZ5kfGOl54Q,1395
3
3
  ansible/constants.py,sha256=guPiQ4Iqm5M9zPArRR9rT5CTzDbEhIBEgqCvVLqYecs,8154
4
4
  ansible/context.py,sha256=OzSlaA_GgGRyyf5I209sy19_eGOX6HXn441W9w_FcvU,2018
5
5
  ansible/keyword_desc.yml,sha256=FYY0Ld1Xc3AxJ_Tefz78kRSYzIKGS8qcPtVk370J118,7367
6
- ansible/release.py,sha256=FLXMvdBAC0VAKi3LTdkcR7iuuVas08ORDM5L0VYq9E0,917
6
+ ansible/release.py,sha256=E6iry-iqZJmBZsQtRfjp7ohkP6-mxyEI0s28EgJhcQ0,917
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
10
  ansible/cli/config.py,sha256=oN_pPQhWoBpNAfNLodncAVUd6-U8N4-ZTk83t5RoHFU,22165
11
11
  ansible/cli/console.py,sha256=Y3KVFNSEwHLeTJ2aBXv-sDAlg8PY9A-LnqyvrJuLPpI,22040
12
12
  ansible/cli/doc.py,sha256=t4KfhTv96R0bVLGm7FZE6cyiTSYxNfGqjh9aKLP4XQY,64080
13
- ansible/cli/galaxy.py,sha256=izJ5YpLuHAGjFeOuL41tNSnGkK2mpGxK6jvfNcDt-ss,94730
13
+ ansible/cli/galaxy.py,sha256=qgR-BEaixaxFkPN8bsHl0FCgCwIHsil33ZciGab4FFw,94843
14
14
  ansible/cli/inventory.py,sha256=tUwrybYErE1eQxJTPU7nWokKgB6z1Mb-FYdSq8fRykU,17708
15
15
  ansible/cli/playbook.py,sha256=1CmwCE3K1eH_UFebIp0M59r4LPDJ5KMzCLxxM41lst0,10918
16
16
  ansible/cli/pull.py,sha256=0u-irsK2E4VGxV5F44W9Bk3IUHxHPabvcqoBAm8-7e8,17023
@@ -57,7 +57,7 @@ ansible/executor/process/__init__.py,sha256=1lMXN1i2fFqslda4BmeI5tpYMFP95D5Wpr1A
57
57
  ansible/executor/process/worker.py,sha256=rTLNZeKhW91zlx9izZlPkAn6afsSj6rdKm1xIj78LGI,10125
58
58
  ansible/galaxy/__init__.py,sha256=E80kenF78N0K9cKZybnGMMjgG_kFlITuhxFf8gyBfAU,2550
59
59
  ansible/galaxy/api.py,sha256=toG5c23r2kLy2MuR41BpMF7f0ObEnTOgwOIJYEraSus,39922
60
- ansible/galaxy/role.py,sha256=cyp1AqsZ4s7JZ0Nb_3xU4U2sZF6rdCJ6lmd-1e-cxBY,21201
60
+ ansible/galaxy/role.py,sha256=xhY4fXkgQ9cb4REE2eaRPT51GZ9DO-Mw_rMAdkIw6qY,21658
61
61
  ansible/galaxy/token.py,sha256=X21edFoqAq4DyA6Xm8MaVu-PNYhVjw-yWkFRxRdWZOw,6184
62
62
  ansible/galaxy/user_agent.py,sha256=x7cJzzpnTngHcwqSUd2hg0i28Dv0tbAyBdke5CSiNhM,813
63
63
  ansible/galaxy/collection/__init__.py,sha256=4tljAb0RxxglfHDbQpWZfHkYc__KsogyETCDTCW3BdI,78192
@@ -140,7 +140,7 @@ ansible/inventory/host.py,sha256=wXJp6kpSaZtDr4JNsgdAuhi5MzQ9LTQzaAH10zoVbIA,505
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=FLXMvdBAC0VAKi3LTdkcR7iuuVas08ORDM5L0VYq9E0,917
143
+ ansible/module_utils/ansible_release.py,sha256=E6iry-iqZJmBZsQtRfjp7ohkP6-mxyEI0s28EgJhcQ0,917
144
144
  ansible/module_utils/api.py,sha256=BTo7stVOANbtd-ngZslaqx70r9t5gfvo44cKyu5SFjU,5837
145
145
  ansible/module_utils/basic.py,sha256=dGDLkVYbvdWqGJv0avFqvA8Q3HalJtDMvunYy-X8zTs,87138
146
146
  ansible/module_utils/connection.py,sha256=9Us-d-y1bhC3zNnziQxvYNT4umIaN0OYv8zPaUSdEf0,8447
@@ -149,7 +149,7 @@ ansible/module_utils/json_utils.py,sha256=IR_bSwrYK1Ie36dCQSHyN4mahkrZkzIIkH3Ddw
149
149
  ansible/module_utils/pycompat24.py,sha256=o0rCcuNi6H5_n926Meo7MIW2HBYCd9-v7GL5FRmbDhs,2269
150
150
  ansible/module_utils/service.py,sha256=ZhY36fHaGwaPLSbuZnOIwaKIpPVbaOMq6xzqweW_Jsw,9304
151
151
  ansible/module_utils/splitter.py,sha256=XdRIlHGnD45f85HK3CNWlDCkdULKcP-lHtcmKbSfnmI,9522
152
- ansible/module_utils/urls.py,sha256=7c9ZRc3yhxqVYUIwIPoDXcb7TFQ23fqt04JuE6R12Cw,85696
152
+ ansible/module_utils/urls.py,sha256=0-PZLY9RBMZDciYouFCYZGIa9OgiUhIHreIqMhOa_TA,86168
153
153
  ansible/module_utils/yumdnf.py,sha256=Itgdq7CSIyAOKQVJEspJA9iKtDnBxZOFQm8JJ4a3KOY,7713
154
154
  ansible/module_utils/common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
155
155
  ansible/module_utils/common/_collections_compat.py,sha256=BcWZGbHoKICMJWrj7aqXlTYM7cH5sNXnLqqRQw6hOL8,981
@@ -381,7 +381,7 @@ ansible/playbook/notifiable.py,sha256=V6cvqy4H1Ti_kmTEw1YOgZOAulI9WgAAnfHeLOGyB5
381
381
  ansible/playbook/play.py,sha256=5kz2BvfCbnopMnATTbqjFP4NDMhbYXZ8loxc6iuq6Aw,16343
382
382
  ansible/playbook/play_context.py,sha256=iJEssstLelnwaki3nY9AiCGrd7D6dFfpWVeGQbQOGPE,14591
383
383
  ansible/playbook/playbook_include.py,sha256=M0CZ7nGCvCNQuZQXwNHSXi9IhKXJLV74Bd9YvcarrZ4,7577
384
- ansible/playbook/role_include.py,sha256=6I9ELfnsZTsjCtbuVQj3FXnwpfvF6h4fAdar2JTP3Kc,8067
384
+ ansible/playbook/role_include.py,sha256=zdEtObpYpm303eS6iGabgSGE8heI3QbsNXIbP61vGDI,8067
385
385
  ansible/playbook/taggable.py,sha256=7pCyNHhAs2TBTV6h4LT9gd9v2syY_gJZqg5x6p0w9C4,3169
386
386
  ansible/playbook/task.py,sha256=Tc3VaNGYtrOhF1NdVhqO1wy3gmdATCCjFvMWx1oZpv8,20185
387
387
  ansible/playbook/task_include.py,sha256=C3x_tTzbRLTMsXCGonzp3SAzE7VuslvcAlwN4WqF-KM,5318
@@ -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=EGhA9A0E56W_B_N49gIApKpoA1Qk3ezZHfUOLrTlQ0k,36010
446
+ ansible/plugins/connection/winrm.py,sha256=yXUydHq80ALIbAupQu6PzhSPlBrl4DuwHIZetHjVMGE,37963
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
@@ -679,14 +679,14 @@ 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
681
  ansible/vars/hostvars.py,sha256=8Gs8lcVT6U8hJISEjKIyohIyaTrpnVWo5Tq8VMHDOL0,5134
682
- ansible/vars/manager.py,sha256=Kq-qHrUnJZjn-OFUmRLc67McY1GVuI7UUJmhSTGuIRo,38301
682
+ ansible/vars/manager.py,sha256=yveaNbsSlsk3rr-w4W7V7Gp3EOYFHyfStU2facyhxXE,38345
683
683
  ansible/vars/plugins.py,sha256=-xJNMvrcQPCqXyKxGNS7jfnpaCsZborTjK6mXQdSo4U,4714
684
684
  ansible/vars/reserved.py,sha256=FBD7n2dnA0CW4I0J1LtWwk2hQqvGW0KTRPcxaRtMKWo,2615
685
- ansible_core-2.16.0b1.data/scripts/ansible-test,sha256=CYIYL99IxWdVTtDIj3avilIJXhGAmtjuKPPWNuLWuc8,1690
685
+ ansible_core-2.16.0b2.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
689
- ansible_test/_data/completion/docker.txt,sha256=KLtQgxOz9-vGBq2Xv7ViZcY46YVv-Hwzo3ry5ZRNW90,823
689
+ ansible_test/_data/completion/docker.txt,sha256=ORKxvSabTWpf-dZ0UtWNVh73lmcSJaT6Gq4KVEJbDcU,825
690
690
  ansible_test/_data/completion/network.txt,sha256=_-mi013-JeufshKMUmykkOmZPw1cVbakIMaAuweHet8,198
691
691
  ansible_test/_data/completion/remote.txt,sha256=3R8M_uU5SMNTNvMKYCr60qGjsBPpy_eC9D4JNHWR9PE,883
692
692
  ansible_test/_data/completion/windows.txt,sha256=LunFLE7xMeoS9TVDuE58nUBVzsz-Wh-9wfL80mGiUmo,147
@@ -704,13 +704,13 @@ ansible_test/_data/playbooks/windows_hosts_restore.ps1,sha256=uFtxU7p2fIDt0uEEGW
704
704
  ansible_test/_data/playbooks/windows_hosts_restore.yml,sha256=fVSgEeJeNgeVAqlKw7DLTZwVLA96WUqDhSrOD1JDPpc,252
705
705
  ansible_test/_data/pytest/config/default.ini,sha256=3f5D0MA9l2RafBBriLaG2eH3ePHPLb43NpN7wZPB_u4,151
706
706
  ansible_test/_data/pytest/config/legacy.ini,sha256=WBpVsIeHL2szv5oFznM2WXYizBgYhBrivpvQliYUKTw,85
707
- ansible_test/_data/requirements/ansible-test.txt,sha256=nH9H4cfuPoHrf7MaRQm_roF4Fn1iS1Hs7qccMcAzWQc,377
707
+ ansible_test/_data/requirements/ansible-test.txt,sha256=7lUJeoB76W4kmFa6P7G-cyJouIYrKWUtY-uIjXrEGkE,377
708
708
  ansible_test/_data/requirements/ansible.txt,sha256=SoGhVAYgDYWYKwMSH0g8WsCQczVft6Obb5ePPMQPRTU,838
709
709
  ansible_test/_data/requirements/constraints.txt,sha256=PiFo21efTtdKHwfhzmNIPA6B5H3_OUh_boakiWlWUDU,1327
710
710
  ansible_test/_data/requirements/sanity.ansible-doc.in,sha256=9KRJJ-n37IMHpLJLv_VmFOhYF8Y3Vnk6eRyhwVKzC8A,108
711
- ansible_test/_data/requirements/sanity.ansible-doc.txt,sha256=DBx9JOlV-d2TEWT31nsqLzaQyDdBCuAqv-mg7ePhJ1E,169
711
+ ansible_test/_data/requirements/sanity.ansible-doc.txt,sha256=cEdRsJvYL6u2C-dsZinArt_5cYHhwmFl5PReUuRPfcw,169
712
712
  ansible_test/_data/requirements/sanity.changelog.in,sha256=gWVsUch6Jxrq55MEutB-b9GB6Pp2PL-FqM84v-aI4Ng,78
713
- ansible_test/_data/requirements/sanity.changelog.txt,sha256=uGwvoFV3s5sFUa2QcE8ZNU-ykWX2799HLiWHQrrpgTw,267
713
+ ansible_test/_data/requirements/sanity.changelog.txt,sha256=eVMtphCQfV3q7pxdS3t911kqw-6BTKVA8Lxa5DKtcMw,267
714
714
  ansible_test/_data/requirements/sanity.import.in,sha256=dL2716R_VoxiYHZxXNa_offbX8YNF0TI5K_cLTCIte8,37
715
715
  ansible_test/_data/requirements/sanity.import.plugin.in,sha256=7D0HGyPvCG8D1BMuBYP2IMJ__OgCP8So2hzEVTVxvDg,70
716
716
  ansible_test/_data/requirements/sanity.import.plugin.txt,sha256=1763N86RopirIzZjQTxvlyK8Z8YsGqLDeub7ZG4MJ14,157
@@ -718,12 +718,12 @@ ansible_test/_data/requirements/sanity.import.txt,sha256=ZDWT8cSK_rClm8rcp0yLKOM
718
718
  ansible_test/_data/requirements/sanity.integration-aliases.in,sha256=NMkWvYDYr5-OnrCqjdCkfHbP9dFqncYTIUrKwA628dE,7
719
719
  ansible_test/_data/requirements/sanity.integration-aliases.txt,sha256=3KjRK2VsFeLvzbyBX4gAp9rjdP9YsnwCeE4i0Z0BUZU,137
720
720
  ansible_test/_data/requirements/sanity.mypy.in,sha256=7TvFAsO1M6tYke9A576pJq3d8GQOl2PVR5ni3jXxjl8,239
721
- ansible_test/_data/requirements/sanity.mypy.txt,sha256=9ErCx91iFG4hq7x4clPbM7WKvSFIiH4IWcH4YPny8-k,434
721
+ ansible_test/_data/requirements/sanity.mypy.txt,sha256=MiEm2UEi1TSWvyv7zitEVGg3k-YoPJTSN87X0ae4LC4,423
722
722
  ansible_test/_data/requirements/sanity.pep8.in,sha256=rHbIEiXmvsJ016mFcLVcF_d-dKgP3VdfOB6CWbivZug,12
723
723
  ansible_test/_data/requirements/sanity.pep8.txt,sha256=1gOV4sAnqMxWPbAimO31STSr706DbpqObAr2ESpSw84,113
724
724
  ansible_test/_data/requirements/sanity.pslint.ps1,sha256=JoDUUNLXQ4xDXUB5_W00q9o-gZ1oW1oShLp--f5OEIE,1624
725
725
  ansible_test/_data/requirements/sanity.pylint.in,sha256=CqgyF_s4K3o41RSc6KZVicBlhrb4twRm9zbp-HBwFeE,49
726
- ansible_test/_data/requirements/sanity.pylint.txt,sha256=PK7IYHtk4EFRgBMti7rpY0FavCMLckhfZ9c0SyO1tQY,296
726
+ ansible_test/_data/requirements/sanity.pylint.txt,sha256=l4NTRlH144rypkHOIhtjKhRkhRrHJ7z3n8ZSeoLrXBQ,217
727
727
  ansible_test/_data/requirements/sanity.runtime-metadata.in,sha256=QzOCB5QxVHYuXHXQvkUsa5MwRQzPhI-ZDD-M2htj36s,18
728
728
  ansible_test/_data/requirements/sanity.runtime-metadata.txt,sha256=S5ilnGu2MIk0yt4KOKY3ntQkbvvCF0tstFOmmJZes7k,150
729
729
  ansible_test/_data/requirements/sanity.validate-modules.in,sha256=OVQi9h1QurdF-wa3-TkBuztXIs-QnyY2g8iYtOpo2cw,117
@@ -745,7 +745,7 @@ ansible_test/_internal/constants.py,sha256=djMgWI_xR1Yg6M9Au8dEtao6yTYIzeLA-Ctxb
745
745
  ansible_test/_internal/containers.py,sha256=8uRbrDtQKJznPYHbrCDuxZI0teyhcL8qT3mAO2M_DU8,33905
746
746
  ansible_test/_internal/content_config.py,sha256=pkhIu5lg-o8oWc7RBzuniYE-mBPyjnf400vpaO0gr08,5778
747
747
  ansible_test/_internal/core_ci.py,sha256=pyiwFG_TgDSQw34qW-PG8T2VYS6XxiF0zOEWGYXRRek,17309
748
- ansible_test/_internal/coverage_util.py,sha256=E9unYyDNTFcHoSDHpaKxe7mv9rjfYsIMfaAxBZYQaZk,9381
748
+ ansible_test/_internal/coverage_util.py,sha256=VscejjrRQ0m0XTQRtqNYpYwkji8CbqHQTqMxdd4fQNY,9381
749
749
  ansible_test/_internal/data.py,sha256=OFDpRa47yqBqQO1aSvTZVQQpScHvBHsr861586MQEUI,11184
750
750
  ansible_test/_internal/delegation.py,sha256=D8hluDQf_YN3DtVG_8HW0iumRBY3gjp_zP-rlc3VNY4,13418
751
751
  ansible_test/_internal/diff.py,sha256=qfzSL7BtoW7bLLgzF0-m--jthVDpUQSr9aBw1fCMIHk,7310
@@ -754,7 +754,7 @@ ansible_test/_internal/encoding.py,sha256=E61EfXbQw0uQoFhbN3SYx3Oy_1tAMCPAAvY9hk
754
754
  ansible_test/_internal/executor.py,sha256=KW5yI-f-giErQ077MTj707fTtFkf_Kr8IV_Nr36NNmc,2959
755
755
  ansible_test/_internal/git.py,sha256=njtciWq2DlzZ1DAkQi08HRRP-TgH0mgeGZsWcsJGctI,4366
756
756
  ansible_test/_internal/host_configs.py,sha256=0S6EfSE2QMkOi4-ySxM6A4hlGxfb3aSjJKUHOC4wiwM,18283
757
- ansible_test/_internal/host_profiles.py,sha256=PPBqMLxJ553tG9L9iza9fGzfPMtqNnMUxgy73z6Ppqk,65202
757
+ ansible_test/_internal/host_profiles.py,sha256=Ib8rgcUwT4sBzDcQQbKZxjqQbTqBAz8znA1LFT1QDrw,65318
758
758
  ansible_test/_internal/http.py,sha256=27EGOIWupvFXPo8abJ-3DScE2V2fyMMwAJ_3g0eL7O4,4123
759
759
  ansible_test/_internal/init.py,sha256=f2ZN7F-FyjMgN73SUgxwbVtWNhkJv7BIlZ-q4ALHyjM,505
760
760
  ansible_test/_internal/inventory.py,sha256=c79s-xc1uv2nD7rPISv0JKkKspY-X2-kHoozF2R4e1Q,5408
@@ -869,7 +869,7 @@ ansible_test/_internal/commands/sanity/integration_aliases.py,sha256=sGN5ATjW3_X
869
869
  ansible_test/_internal/commands/sanity/mypy.py,sha256=4Vp5PVBSNMmWgSKxd2TjRQoeugCN8DRXscRNeKJwaLY,10982
870
870
  ansible_test/_internal/commands/sanity/pep8.py,sha256=SSulTIljaSu_exl93ZklKyuhbKS-zf18SKu23k3VJhA,3125
871
871
  ansible_test/_internal/commands/sanity/pslint.py,sha256=lVgL6RrDolRgIOJ2NRr04k2KVwMddZz1M7I-6h57vII,3210
872
- ansible_test/_internal/commands/sanity/pylint.py,sha256=rMiSJh5r9L3MTOoE4BHPrM34qdGyb9GX3LPj9KsKfuc,12579
872
+ ansible_test/_internal/commands/sanity/pylint.py,sha256=lkuVpbxu0o0RRk3uPnZcYI5dQL-1Y_P6en4d3l1pdeg,12152
873
873
  ansible_test/_internal/commands/sanity/shellcheck.py,sha256=CZHNN_2iNVE3iqf5SIDSH9b2hwF6aXtJ0H6MPCEJX4s,3070
874
874
  ansible_test/_internal/commands/sanity/validate_modules.py,sha256=-NFR5xbp4DPaD-lW-JAwpI0dpGTQuMGnqjt4bxRERvU,8186
875
875
  ansible_test/_internal/commands/sanity/yamllint.py,sha256=rF_L-QVWLfQ5HiOf_Q-6AMdk7orOJN_Bu8XyMfobRQ8,3423
@@ -949,9 +949,9 @@ ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg,sha256=Q2hIW
949
949
  ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg,sha256=yZd1BKFApRrZrUKvj3Iips8aDRR9mXS5cUfKXO9Oc8w,1621
950
950
  ansible_test/_util/controller/sanity/pylint/config/collection.cfg,sha256=VU7PJ2G0sxdcMxmCHMebFvi1Avy3fELFDzvaQkU0p3s,4400
951
951
  ansible_test/_util/controller/sanity/pylint/config/default.cfg,sha256=hRFKTA4wt2UVdiUapm6d-fAIGmiDMdrJU3Op3xhwz2E,3906
952
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py,sha256=shn1FYJgh-Vjog1F1TBhCkVfaqKqZBocdCom2deRJpw,18271
953
- ansible_test/_util/controller/sanity/pylint/plugins/string_format.py,sha256=fOMOPYKMUCY25S4LHDRnrEDMNQ5CyP894Kt_L-S1u-g,2330
954
- ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py,sha256=WGG1z4M3N5Yp-HVoOLw74_OiqHi3GymDvMfrS2fWHW0,8879
952
+ ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py,sha256=WZdwUwc6Jyxf25VI8z34JH7Itw1XFunRYoXuEXUXaZg,18674
953
+ ansible_test/_util/controller/sanity/pylint/plugins/string_format.py,sha256=hAX_9P0VR5ngilRKxN5NOgS4vJmoeGCgLJ2mMI8IliA,2626
954
+ ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py,sha256=9ZS9CiTARriKsHw807pO4Wp9FGg01xQqWJXwD9MeiJ8,9061
955
955
  ansible_test/_util/controller/sanity/shellcheck/exclude.txt,sha256=-idybvpZeOHVfR8usoyCNdNLD5WpaKQeP9mgzganMpQ,21
956
956
  ansible_test/_util/controller/sanity/validate-modules/validate.py,sha256=jpNOhA5qJ5LdlWlSOJoJyTUh9H1tepjcSYZXeHdhJRY,114
957
957
  ansible_test/_util/controller/sanity/validate-modules/validate_modules/__init__.py,sha256=CRUAj-k-zJye4RAGZ8eR9HvP6weM6VKTwGmFYpI_0Bw,816
@@ -1000,9 +1000,9 @@ ansible_test/config/cloud-config-vultr.ini.template,sha256=XLKHk3lg_8ReQMdWfZzhh
1000
1000
  ansible_test/config/config.yml,sha256=wb3knoBmZewG3GWOMnRHoVPQWW4vPixKLPMNS6vJmTc,2620
1001
1001
  ansible_test/config/inventory.networking.template,sha256=bFNSk8zNQOaZ_twaflrY0XZ9mLwUbRLuNT0BdIFwvn4,1335
1002
1002
  ansible_test/config/inventory.winrm.template,sha256=1QU8W-GFLnYEw8yY9bVIvUAVvJYPM3hyoijf6-M7T00,1098
1003
- ansible_core-2.16.0b1.dist-info/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1004
- ansible_core-2.16.0b1.dist-info/METADATA,sha256=WIz-NtXuhXSLCBlbl3EMPI9EYYbP4hb8dAJfkwOh47Y,6856
1005
- ansible_core-2.16.0b1.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
1006
- ansible_core-2.16.0b1.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
1007
- ansible_core-2.16.0b1.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1008
- ansible_core-2.16.0b1.dist-info/RECORD,,
1003
+ ansible_core-2.16.0b2.dist-info/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
1004
+ ansible_core-2.16.0b2.dist-info/METADATA,sha256=lRhGir5_VtZS-Lj-pmuS_tkKJFXIPldTdgK6L3U6Dgw,6856
1005
+ ansible_core-2.16.0b2.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
1006
+ ansible_core-2.16.0b2.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
1007
+ ansible_core-2.16.0b2.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1008
+ ansible_core-2.16.0b2.dist-info/RECORD,,
@@ -1,9 +1,9 @@
1
- base image=quay.io/ansible/base-test-container:5.4.0 python=3.11,2.7,3.6,3.7,3.8,3.9,3.10,3.12
2
- default image=quay.io/ansible/default-test-container:8.7.0 python=3.11,2.7,3.6,3.7,3.8,3.9,3.10,3.12 context=collection
3
- default image=quay.io/ansible/ansible-core-test-container:8.7.0 python=3.11,2.7,3.6,3.7,3.8,3.9,3.10,3.12 context=ansible-core
4
- alpine3 image=quay.io/ansible/alpine3-test-container:5.0.0 python=3.10 cgroup=none audit=none
5
- centos7 image=quay.io/ansible/centos7-test-container:5.0.0 python=2.7 cgroup=v1-only
6
- fedora38 image=quay.io/ansible/fedora38-test-container:6.1.0 python=3.11
7
- opensuse15 image=quay.io/ansible/opensuse15-test-container:6.0.0 python=3.6
8
- ubuntu2004 image=quay.io/ansible/ubuntu2004-test-container:5.0.0 python=3.8
9
- ubuntu2204 image=quay.io/ansible/ubuntu2204-test-container:5.0.0 python=3.10
1
+ base image=quay.io/ansible/base-test-container:5.9.0 python=3.11,2.7,3.6,3.7,3.8,3.9,3.10,3.12
2
+ default image=quay.io/ansible/default-test-container:8.11.0 python=3.11,2.7,3.6,3.7,3.8,3.9,3.10,3.12 context=collection
3
+ default image=quay.io/ansible/ansible-core-test-container:8.11.0 python=3.11,2.7,3.6,3.7,3.8,3.9,3.10,3.12 context=ansible-core
4
+ alpine3 image=quay.io/ansible/alpine3-test-container:6.3.0 python=3.11 cgroup=none audit=none
5
+ centos7 image=quay.io/ansible/centos7-test-container:6.3.0 python=2.7 cgroup=v1-only
6
+ fedora38 image=quay.io/ansible/fedora38-test-container:6.3.0 python=3.11
7
+ opensuse15 image=quay.io/ansible/opensuse15-test-container:6.3.0 python=3.6
8
+ ubuntu2004 image=quay.io/ansible/ubuntu2004-test-container:6.3.0 python=3.8
9
+ ubuntu2204 image=quay.io/ansible/ubuntu2204-test-container:6.3.0 python=3.10
@@ -1,5 +1,5 @@
1
1
  # The test-constraints sanity test verifies this file, but changes must be made manually to keep it in up-to-date.
2
2
  virtualenv == 16.7.12 ; python_version < '3'
3
- coverage == 7.3.0 ; python_version >= '3.8' and python_version <= '3.12'
3
+ coverage == 7.3.2 ; python_version >= '3.8' and python_version <= '3.12'
4
4
  coverage == 6.5.0 ; python_version >= '3.7' and python_version <= '3.7'
5
5
  coverage == 4.5.4 ; python_version >= '2.6' and python_version <= '3.6'
@@ -1,5 +1,5 @@
1
1
  # edit "sanity.ansible-doc.in" and generate with: hacking/update-sanity-requirements.py --test ansible-doc
2
2
  Jinja2==3.1.2
3
3
  MarkupSafe==2.1.3
4
- packaging==23.1
4
+ packaging==23.2
5
5
  PyYAML==6.0.1
@@ -1,9 +1,9 @@
1
1
  # edit "sanity.changelog.in" and generate with: hacking/update-sanity-requirements.py --test changelog
2
2
  antsibull-changelog==0.23.0
3
3
  docutils==0.18.1
4
- packaging==23.1
4
+ packaging==23.2
5
5
  PyYAML==6.0.1
6
6
  rstcheck==5.0.0
7
7
  semantic-version==2.10.0
8
8
  types-docutils==0.18.3
9
- typing_extensions==4.7.1
9
+ typing_extensions==4.8.0
@@ -1,18 +1,18 @@
1
1
  # edit "sanity.mypy.in" and generate with: hacking/update-sanity-requirements.py --test mypy
2
- cffi==1.15.1
3
- cryptography==41.0.3
2
+ cffi==1.16.0
3
+ cryptography==41.0.4
4
4
  Jinja2==3.1.2
5
5
  MarkupSafe==2.1.3
6
6
  mypy==1.5.1
7
7
  mypy-extensions==1.0.0
8
- packaging==23.1
8
+ packaging==23.2
9
9
  pycparser==2.21
10
10
  tomli==2.0.1
11
11
  types-backports==0.1.3
12
12
  types-paramiko==3.3.0.0
13
- types-PyYAML==6.0.12.11
14
- types-requests==2.31.0.2
13
+ types-PyYAML==6.0.12.12
14
+ types-requests==2.31.0.7
15
15
  types-setuptools==68.2.0.0
16
16
  types-toml==0.10.8.7
17
- types-urllib3==1.26.25.14
18
- typing_extensions==4.7.1
17
+ typing_extensions==4.8.0
18
+ urllib3==2.0.6
@@ -1,13 +1,9 @@
1
1
  # edit "sanity.pylint.in" and generate with: hacking/update-sanity-requirements.py --test pylint
2
- astroid==2.15.6
2
+ astroid==3.0.0
3
3
  dill==0.3.7
4
4
  isort==5.12.0
5
- lazy-object-proxy==1.9.0
6
5
  mccabe==0.7.0
7
- platformdirs==3.10.0
8
- pylint==2.17.5
6
+ platformdirs==3.11.0
7
+ pylint==3.0.0
9
8
  PyYAML==6.0.1
10
- tomli==2.0.1
11
9
  tomlkit==0.12.1
12
- typing_extensions==4.7.1
13
- wrapt==1.15.0
@@ -82,12 +82,6 @@ class PylintTest(SanitySingleVersion):
82
82
  """Error code for ansible-test matching the format used by the underlying test program, or None if the program does not use error codes."""
83
83
  return 'ansible-test'
84
84
 
85
- @property
86
- def supported_python_versions(self) -> t.Optional[tuple[str, ...]]:
87
- """A tuple of supported Python versions or None if the test does not depend on specific Python versions."""
88
- # NOTE: When removing the Python 3.12 exclusion, be sure to update the ansible-test-sanity-pylint integration test.
89
- return tuple(version for version in super().supported_python_versions if version != '3.12')
90
-
91
85
  def filter_targets(self, targets: list[TestTarget]) -> list[TestTarget]:
92
86
  """Return the given list of test targets, filtered to include only those relevant for the test."""
93
87
  return [target for target in targets if os.path.splitext(target.path)[1] == '.py' or is_subdir(target.path, 'bin')]
@@ -69,7 +69,7 @@ class CoverageVersion:
69
69
 
70
70
  COVERAGE_VERSIONS = (
71
71
  # IMPORTANT: Keep this in sync with the ansible-test.txt requirements file.
72
- CoverageVersion('7.3.0', 7, (3, 8), (3, 12)),
72
+ CoverageVersion('7.3.2', 7, (3, 8), (3, 12)),
73
73
  CoverageVersion('6.5.0', 7, (3, 7), (3, 7)),
74
74
  CoverageVersion('4.5.4', 0, (2, 6), (3, 6)),
75
75
  )
@@ -806,6 +806,7 @@ class DockerProfile(ControllerHostProfile[DockerConfig], SshTargetHostProfile[Do
806
806
  - Avoid hanging indefinitely or for an unreasonably long time.
807
807
 
808
808
  NOTE: The container must have a POSIX-compliant default shell "sh" with a non-builtin "sleep" command.
809
+ The "sleep" command is invoked through "env" to avoid using a shell builtin "sleep" (if present).
809
810
  """
810
811
  command = ''
811
812
 
@@ -813,7 +814,7 @@ class DockerProfile(ControllerHostProfile[DockerConfig], SshTargetHostProfile[Do
813
814
  command += f'{init_config.command} && '
814
815
 
815
816
  if sleep or init_config.command_privileged:
816
- command += 'sleep 60 ; '
817
+ command += 'env sleep 60 ; '
817
818
 
818
819
  if not command:
819
820
  return None
@@ -14,9 +14,22 @@ from tokenize import COMMENT, TokenInfo
14
14
 
15
15
  import astroid
16
16
 
17
- from pylint.interfaces import IAstroidChecker, ITokenChecker
17
+ # support pylint 2.x and 3.x -- remove when supporting only 3.x
18
+ try:
19
+ from pylint.interfaces import IAstroidChecker, ITokenChecker
20
+ except ImportError:
21
+ class IAstroidChecker:
22
+ """Backwards compatibility for 2.x / 3.x support."""
23
+
24
+ class ITokenChecker:
25
+ """Backwards compatibility for 2.x / 3.x support."""
26
+
27
+ try:
28
+ from pylint.checkers.utils import check_messages
29
+ except ImportError:
30
+ from pylint.checkers.utils import only_required_for_messages as check_messages
31
+
18
32
  from pylint.checkers import BaseChecker, BaseTokenChecker
19
- from pylint.checkers.utils import check_messages
20
33
 
21
34
  from ansible.module_utils.compat.version import LooseVersion
22
35
  from ansible.module_utils.six import string_types
@@ -214,14 +227,14 @@ class AnsibleDeprecatedChecker(BaseChecker):
214
227
  @property
215
228
  def collection_name(self) -> t.Optional[str]:
216
229
  """Return the collection name, or None if ansible-core is being tested."""
217
- return self.config.collection_name
230
+ return self.linter.config.collection_name
218
231
 
219
232
  @property
220
233
  def collection_version(self) -> t.Optional[SemanticVersion]:
221
234
  """Return the collection version, or None if ansible-core is being tested."""
222
- if self.config.collection_version is None:
235
+ if self.linter.config.collection_version is None:
223
236
  return None
224
- sem_ver = SemanticVersion(self.config.collection_version)
237
+ sem_ver = SemanticVersion(self.linter.config.collection_version)
225
238
  # Ignore pre-release for version comparison to catch issues before the final release is cut.
226
239
  sem_ver.prerelease = ()
227
240
  return sem_ver
@@ -5,10 +5,21 @@
5
5
  from __future__ import annotations
6
6
 
7
7
  import astroid
8
- from pylint.interfaces import IAstroidChecker
8
+
9
+ # support pylint 2.x and 3.x -- remove when supporting only 3.x
10
+ try:
11
+ from pylint.interfaces import IAstroidChecker
12
+ except ImportError:
13
+ class IAstroidChecker:
14
+ """Backwards compatibility for 2.x / 3.x support."""
15
+
16
+ try:
17
+ from pylint.checkers.utils import check_messages
18
+ except ImportError:
19
+ from pylint.checkers.utils import only_required_for_messages as check_messages
20
+
9
21
  from pylint.checkers import BaseChecker
10
22
  from pylint.checkers import utils
11
- from pylint.checkers.utils import check_messages
12
23
 
13
24
  MSGS = {
14
25
  'E9305': ("disabled", # kept for backwards compatibility with inline ignores, remove after 2.14 is EOL
@@ -6,8 +6,14 @@ import typing as t
6
6
 
7
7
  import astroid
8
8
 
9
+ # support pylint 2.x and 3.x -- remove when supporting only 3.x
10
+ try:
11
+ from pylint.interfaces import IAstroidChecker
12
+ except ImportError:
13
+ class IAstroidChecker:
14
+ """Backwards compatibility for 2.x / 3.x support."""
15
+
9
16
  from pylint.checkers import BaseChecker
10
- from pylint.interfaces import IAstroidChecker
11
17
 
12
18
  ANSIBLE_TEST_MODULES_PATH = os.environ['ANSIBLE_TEST_MODULES_PATH']
13
19
  ANSIBLE_TEST_MODULE_UTILS_PATH = os.environ['ANSIBLE_TEST_MODULE_UTILS_PATH']