ansible-core 2.14.12rc1__py3-none-any.whl → 2.14.14__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/galaxy/role.py +35 -36
- ansible/module_utils/ansible_release.py +1 -1
- ansible/modules/import_playbook.py +1 -1
- ansible/modules/import_role.py +1 -1
- ansible/modules/import_tasks.py +1 -1
- ansible/modules/include_role.py +1 -1
- ansible/modules/include_tasks.py +1 -1
- ansible/playbook/base.py +1 -1
- ansible/playbook/play_context.py +0 -4
- ansible/release.py +1 -1
- ansible/utils/unsafe_proxy.py +41 -30
- {ansible_core-2.14.12rc1.dist-info → ansible_core-2.14.14.dist-info}/METADATA +1 -1
- {ansible_core-2.14.12rc1.dist-info → ansible_core-2.14.14.dist-info}/RECORD +21 -21
- ansible_test/_data/completion/remote.txt +1 -2
- ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py +38 -8
- ansible_test/_util/target/sanity/import/importer.py +6 -0
- {ansible_core-2.14.12rc1.data → ansible_core-2.14.14.data}/scripts/ansible-test +0 -0
- {ansible_core-2.14.12rc1.dist-info → ansible_core-2.14.14.dist-info}/COPYING +0 -0
- {ansible_core-2.14.12rc1.dist-info → ansible_core-2.14.14.dist-info}/WHEEL +0 -0
- {ansible_core-2.14.12rc1.dist-info → ansible_core-2.14.14.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.14.12rc1.dist-info → ansible_core-2.14.14.dist-info}/top_level.txt +0 -0
ansible/galaxy/role.py
CHANGED
|
@@ -42,6 +42,7 @@ from ansible.module_utils.compat.version import LooseVersion
|
|
|
42
42
|
from ansible.module_utils.urls import open_url
|
|
43
43
|
from ansible.playbook.role.requirement import RoleRequirement
|
|
44
44
|
from ansible.utils.display import Display
|
|
45
|
+
from ansible.utils.path import is_subpath, unfrackpath
|
|
45
46
|
|
|
46
47
|
display = Display()
|
|
47
48
|
|
|
@@ -393,43 +394,41 @@ class GalaxyRole(object):
|
|
|
393
394
|
# we only extract files, and remove any relative path
|
|
394
395
|
# bits that might be in the file for security purposes
|
|
395
396
|
# and drop any containing directory, as mentioned above
|
|
396
|
-
if member.isreg() or member.issym():
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
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))
|
|
427
|
-
|
|
428
|
-
if _check_working_data_filter():
|
|
429
|
-
# deprecated: description='extract fallback without filter' python_version='3.11'
|
|
430
|
-
role_tar_file.extract(member, to_native(self.path), filter='data') # type: ignore[call-arg]
|
|
397
|
+
if not (member.isreg() or member.issym()):
|
|
398
|
+
continue
|
|
399
|
+
|
|
400
|
+
for attr in ('name', 'linkname'):
|
|
401
|
+
if not (attr_value := getattr(member, attr, None)):
|
|
402
|
+
continue
|
|
403
|
+
|
|
404
|
+
if attr_value.startswith(os.sep) and not is_subpath(attr_value, archive_parent_dir):
|
|
405
|
+
err = f"Invalid {attr} for tarfile member: path {attr_value} is not a subpath of the role {archive_parent_dir}"
|
|
406
|
+
raise AnsibleError(err)
|
|
407
|
+
|
|
408
|
+
if attr == 'linkname':
|
|
409
|
+
# Symlinks are relative to the link
|
|
410
|
+
relative_to_archive_dir = os.path.dirname(getattr(member, 'name', ''))
|
|
411
|
+
archive_dir_path = os.path.join(archive_parent_dir, relative_to_archive_dir, attr_value)
|
|
431
412
|
else:
|
|
432
|
-
|
|
413
|
+
# Normalize paths that start with the archive dir
|
|
414
|
+
attr_value = attr_value.replace(archive_parent_dir, "", 1)
|
|
415
|
+
attr_value = os.path.join(*attr_value.split(os.sep)) # remove leading os.sep
|
|
416
|
+
archive_dir_path = os.path.join(archive_parent_dir, attr_value)
|
|
417
|
+
|
|
418
|
+
resolved_archive = unfrackpath(archive_parent_dir)
|
|
419
|
+
resolved_path = unfrackpath(archive_dir_path)
|
|
420
|
+
if not is_subpath(resolved_path, resolved_archive):
|
|
421
|
+
err = f"Invalid {attr} for tarfile member: path {resolved_path} is not a subpath of the role {resolved_archive}"
|
|
422
|
+
raise AnsibleError(err)
|
|
423
|
+
|
|
424
|
+
relative_path = os.path.join(*resolved_path.replace(resolved_archive, "", 1).split(os.sep)) or '.'
|
|
425
|
+
setattr(member, attr, relative_path)
|
|
426
|
+
|
|
427
|
+
if _check_working_data_filter():
|
|
428
|
+
# deprecated: description='extract fallback without filter' python_version='3.11'
|
|
429
|
+
role_tar_file.extract(member, to_native(self.path), filter='data') # type: ignore[call-arg]
|
|
430
|
+
else:
|
|
431
|
+
role_tar_file.extract(member, to_native(self.path))
|
|
433
432
|
|
|
434
433
|
# write out the install info file for later use
|
|
435
434
|
self._write_galaxy_install_info()
|
|
@@ -41,7 +41,7 @@ seealso:
|
|
|
41
41
|
- module: ansible.builtin.import_tasks
|
|
42
42
|
- module: ansible.builtin.include_role
|
|
43
43
|
- module: ansible.builtin.include_tasks
|
|
44
|
-
- ref:
|
|
44
|
+
- ref: playbooks_reuse
|
|
45
45
|
description: More information related to including and importing playbooks, roles and tasks.
|
|
46
46
|
'''
|
|
47
47
|
|
ansible/modules/import_role.py
CHANGED
|
@@ -78,7 +78,7 @@ seealso:
|
|
|
78
78
|
- module: ansible.builtin.import_tasks
|
|
79
79
|
- module: ansible.builtin.include_role
|
|
80
80
|
- module: ansible.builtin.include_tasks
|
|
81
|
-
- ref:
|
|
81
|
+
- ref: playbooks_reuse
|
|
82
82
|
description: More information related to including and importing playbooks, roles and tasks.
|
|
83
83
|
'''
|
|
84
84
|
|
ansible/modules/import_tasks.py
CHANGED
|
@@ -45,7 +45,7 @@ seealso:
|
|
|
45
45
|
- module: ansible.builtin.import_role
|
|
46
46
|
- module: ansible.builtin.include_role
|
|
47
47
|
- module: ansible.builtin.include_tasks
|
|
48
|
-
- ref:
|
|
48
|
+
- ref: playbooks_reuse
|
|
49
49
|
description: More information related to including and importing playbooks, roles and tasks.
|
|
50
50
|
'''
|
|
51
51
|
|
ansible/modules/include_role.py
CHANGED
|
@@ -91,7 +91,7 @@ seealso:
|
|
|
91
91
|
- module: ansible.builtin.import_role
|
|
92
92
|
- module: ansible.builtin.import_tasks
|
|
93
93
|
- module: ansible.builtin.include_tasks
|
|
94
|
-
- ref:
|
|
94
|
+
- ref: playbooks_reuse
|
|
95
95
|
description: More information related to including and importing playbooks, roles and tasks.
|
|
96
96
|
'''
|
|
97
97
|
|
ansible/modules/include_tasks.py
CHANGED
|
@@ -49,7 +49,7 @@ seealso:
|
|
|
49
49
|
- module: ansible.builtin.import_role
|
|
50
50
|
- module: ansible.builtin.import_tasks
|
|
51
51
|
- module: ansible.builtin.include_role
|
|
52
|
-
- ref:
|
|
52
|
+
- ref: playbooks_reuse
|
|
53
53
|
description: More information related to including and importing playbooks, roles and tasks.
|
|
54
54
|
'''
|
|
55
55
|
|
ansible/playbook/base.py
CHANGED
|
@@ -722,7 +722,7 @@ class Base(FieldAttributeBase):
|
|
|
722
722
|
|
|
723
723
|
# flags and misc. settings
|
|
724
724
|
environment = FieldAttribute(isa='list', extend=True, prepend=True)
|
|
725
|
-
no_log = FieldAttribute(isa='bool')
|
|
725
|
+
no_log = FieldAttribute(isa='bool', default=C.DEFAULT_NO_LOG)
|
|
726
726
|
run_once = FieldAttribute(isa='bool')
|
|
727
727
|
ignore_errors = FieldAttribute(isa='bool')
|
|
728
728
|
ignore_unreachable = FieldAttribute(isa='bool')
|
ansible/playbook/play_context.py
CHANGED
|
@@ -320,10 +320,6 @@ class PlayContext(Base):
|
|
|
320
320
|
display.warning('The "%s" connection plugin has an improperly configured remote target value, '
|
|
321
321
|
'forcing "inventory_hostname" templated value instead of the string' % new_info.connection)
|
|
322
322
|
|
|
323
|
-
# set no_log to default if it was not previously set
|
|
324
|
-
if new_info.no_log is None:
|
|
325
|
-
new_info.no_log = C.DEFAULT_NO_LOG
|
|
326
|
-
|
|
327
323
|
if task.check_mode is not None:
|
|
328
324
|
new_info.check_mode = task.check_mode
|
|
329
325
|
|
ansible/release.py
CHANGED
ansible/utils/unsafe_proxy.py
CHANGED
|
@@ -53,11 +53,14 @@
|
|
|
53
53
|
from __future__ import (absolute_import, division, print_function)
|
|
54
54
|
__metaclass__ = type
|
|
55
55
|
|
|
56
|
+
import sys
|
|
57
|
+
import types
|
|
58
|
+
import warnings
|
|
59
|
+
from sys import intern as _sys_intern
|
|
56
60
|
from collections.abc import Mapping, Set
|
|
57
61
|
|
|
58
62
|
from ansible.module_utils._text import to_bytes, to_text
|
|
59
63
|
from ansible.module_utils.common.collections import is_sequence
|
|
60
|
-
from ansible.module_utils.six import string_types, binary_type, text_type
|
|
61
64
|
from ansible.utils.native_jinja import NativeJinjaText
|
|
62
65
|
|
|
63
66
|
|
|
@@ -68,12 +71,15 @@ class AnsibleUnsafe(object):
|
|
|
68
71
|
__UNSAFE__ = True
|
|
69
72
|
|
|
70
73
|
|
|
71
|
-
class AnsibleUnsafeBytes(
|
|
74
|
+
class AnsibleUnsafeBytes(bytes, AnsibleUnsafe):
|
|
72
75
|
def _strip_unsafe(self):
|
|
73
76
|
return super().__bytes__()
|
|
74
77
|
|
|
78
|
+
def __reduce__(self, /):
|
|
79
|
+
return (self.__class__, (self._strip_unsafe(),))
|
|
80
|
+
|
|
75
81
|
def __str__(self, /): # pylint: disable=invalid-str-returned
|
|
76
|
-
return self.
|
|
82
|
+
return self.decode()
|
|
77
83
|
|
|
78
84
|
def __bytes__(self, /): # pylint: disable=invalid-bytes-returned
|
|
79
85
|
return self
|
|
@@ -82,15 +88,13 @@ class AnsibleUnsafeBytes(binary_type, AnsibleUnsafe):
|
|
|
82
88
|
return AnsibleUnsafeText(super().__repr__())
|
|
83
89
|
|
|
84
90
|
def __format__(self, format_spec, /): # pylint: disable=invalid-format-returned
|
|
85
|
-
return
|
|
91
|
+
return AnsibleUnsafeText(super().__format__(format_spec))
|
|
86
92
|
|
|
87
93
|
def __getitem__(self, key, /):
|
|
94
|
+
if isinstance(key, int):
|
|
95
|
+
return super().__getitem__(key)
|
|
88
96
|
return self.__class__(super().__getitem__(key))
|
|
89
97
|
|
|
90
|
-
def __iter__(self, /):
|
|
91
|
-
cls = self.__class__
|
|
92
|
-
return (cls(c) for c in super().__iter__())
|
|
93
|
-
|
|
94
98
|
def __reversed__(self, /):
|
|
95
99
|
return self[::-1]
|
|
96
100
|
|
|
@@ -114,9 +118,6 @@ class AnsibleUnsafeBytes(binary_type, AnsibleUnsafe):
|
|
|
114
118
|
def capitalize(self, /):
|
|
115
119
|
return self.__class__(super().capitalize())
|
|
116
120
|
|
|
117
|
-
def casefold(self, /):
|
|
118
|
-
return self.__class__(super().casefold())
|
|
119
|
-
|
|
120
121
|
def center(self, width, fillchar=b' ', /):
|
|
121
122
|
return self.__class__(super().center(width, fillchar))
|
|
122
123
|
|
|
@@ -132,12 +133,6 @@ class AnsibleUnsafeBytes(binary_type, AnsibleUnsafe):
|
|
|
132
133
|
def expandtabs(self, /, tabsize=8):
|
|
133
134
|
return self.__class__(super().expandtabs(tabsize))
|
|
134
135
|
|
|
135
|
-
def format(self, /, *args, **kwargs):
|
|
136
|
-
return self.__class__(super().format(*args, **kwargs))
|
|
137
|
-
|
|
138
|
-
def format_map(self, mapping, /):
|
|
139
|
-
return self.__class__(super().format_map(mapping))
|
|
140
|
-
|
|
141
136
|
def join(self, iterable_of_bytes, /):
|
|
142
137
|
return self.__class__(super().join(iterable_of_bytes))
|
|
143
138
|
|
|
@@ -147,8 +142,8 @@ class AnsibleUnsafeBytes(binary_type, AnsibleUnsafe):
|
|
|
147
142
|
def lower(self, /):
|
|
148
143
|
return self.__class__(super().lower())
|
|
149
144
|
|
|
150
|
-
def lstrip(self,
|
|
151
|
-
return self.__class__(super().lstrip(
|
|
145
|
+
def lstrip(self, chars=None, /):
|
|
146
|
+
return self.__class__(super().lstrip(chars))
|
|
152
147
|
|
|
153
148
|
def partition(self, sep, /):
|
|
154
149
|
cls = self.__class__
|
|
@@ -164,8 +159,8 @@ class AnsibleUnsafeBytes(binary_type, AnsibleUnsafe):
|
|
|
164
159
|
cls = self.__class__
|
|
165
160
|
return tuple(cls(e) for e in super().rpartition(sep))
|
|
166
161
|
|
|
167
|
-
def rstrip(self,
|
|
168
|
-
return self.__class__(super().rstrip(
|
|
162
|
+
def rstrip(self, chars=None, /):
|
|
163
|
+
return self.__class__(super().rstrip(chars))
|
|
169
164
|
|
|
170
165
|
def split(self, /, sep=None, maxsplit=-1):
|
|
171
166
|
cls = self.__class__
|
|
@@ -179,8 +174,8 @@ class AnsibleUnsafeBytes(binary_type, AnsibleUnsafe):
|
|
|
179
174
|
cls = self.__class__
|
|
180
175
|
return [cls(e) for e in super().splitlines(keepends=keepends)]
|
|
181
176
|
|
|
182
|
-
def strip(self,
|
|
183
|
-
return self.__class__(super().strip(
|
|
177
|
+
def strip(self, chars=None, /):
|
|
178
|
+
return self.__class__(super().strip(chars))
|
|
184
179
|
|
|
185
180
|
def swapcase(self, /):
|
|
186
181
|
return self.__class__(super().swapcase())
|
|
@@ -198,14 +193,13 @@ class AnsibleUnsafeBytes(binary_type, AnsibleUnsafe):
|
|
|
198
193
|
return self.__class__(super().zfill(width))
|
|
199
194
|
|
|
200
195
|
|
|
201
|
-
class AnsibleUnsafeText(
|
|
202
|
-
# def __getattribute__(self, name):
|
|
203
|
-
# print(f'attr: {name}')
|
|
204
|
-
# return object.__getattribute__(self, name)
|
|
205
|
-
|
|
196
|
+
class AnsibleUnsafeText(str, AnsibleUnsafe):
|
|
206
197
|
def _strip_unsafe(self, /):
|
|
207
198
|
return super().__str__()
|
|
208
199
|
|
|
200
|
+
def __reduce__(self, /):
|
|
201
|
+
return (self.__class__, (self._strip_unsafe(),))
|
|
202
|
+
|
|
209
203
|
def __str__(self, /): # pylint: disable=invalid-str-returned
|
|
210
204
|
return self
|
|
211
205
|
|
|
@@ -361,9 +355,9 @@ def wrap_var(v):
|
|
|
361
355
|
v = _wrap_sequence(v)
|
|
362
356
|
elif isinstance(v, NativeJinjaText):
|
|
363
357
|
v = NativeJinjaUnsafeText(v)
|
|
364
|
-
elif isinstance(v,
|
|
358
|
+
elif isinstance(v, bytes):
|
|
365
359
|
v = AnsibleUnsafeBytes(v)
|
|
366
|
-
elif isinstance(v,
|
|
360
|
+
elif isinstance(v, str):
|
|
367
361
|
v = AnsibleUnsafeText(v)
|
|
368
362
|
|
|
369
363
|
return v
|
|
@@ -379,3 +373,20 @@ def to_unsafe_text(*args, **kwargs):
|
|
|
379
373
|
|
|
380
374
|
def _is_unsafe(obj):
|
|
381
375
|
return getattr(obj, '__UNSAFE__', False) is True
|
|
376
|
+
|
|
377
|
+
|
|
378
|
+
def _intern(string):
|
|
379
|
+
"""This is a monkey patch for ``sys.intern`` that will strip
|
|
380
|
+
the unsafe wrapper prior to interning the string.
|
|
381
|
+
|
|
382
|
+
This will not exist in future versions.
|
|
383
|
+
"""
|
|
384
|
+
if isinstance(string, AnsibleUnsafeText):
|
|
385
|
+
string = string._strip_unsafe()
|
|
386
|
+
return _sys_intern(string)
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
if isinstance(sys.intern, types.BuiltinFunctionType):
|
|
390
|
+
sys.intern = _intern
|
|
391
|
+
else:
|
|
392
|
+
warnings.warn("skipped sys.intern patch; appears to have already been patched", RuntimeWarning)
|
|
@@ -3,7 +3,7 @@ ansible/__main__.py,sha256=IvyRvY64pT0on94qCLibxgDJ0-7_2CRoaZ5kfGOl54Q,1395
|
|
|
3
3
|
ansible/constants.py,sha256=JLIDnuSz3_PbtXWsL4vnvVBbxlh3lSrJREd7T73atEI,8293
|
|
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=
|
|
6
|
+
ansible/release.py,sha256=eCLw_ZAHW8derz7BhfelrnhXKKU3VLP06buBoteirg8,920
|
|
7
7
|
ansible/_vendor/__init__.py,sha256=wJRKH7kI9OzYVY9hgSchOsTNTmTnugpPLGYj9Y5akX0,2086
|
|
8
8
|
ansible/cli/__init__.py,sha256=yDt8_ny7HauC9Aj-MMHQr3Y6gDQADfdEU0O1BfzkSwA,27957
|
|
9
9
|
ansible/cli/adhoc.py,sha256=pGW6eysaireovp4sVsUuntg-l1o7DSujuhxVhVC2zsM,8230
|
|
@@ -56,7 +56,7 @@ ansible/executor/process/__init__.py,sha256=1lMXN1i2fFqslda4BmeI5tpYMFP95D5Wpr1A
|
|
|
56
56
|
ansible/executor/process/worker.py,sha256=mO9-GR7bDVxgDh65ROBhEBNg8qb9FWkkaP1vb_sklxY,8843
|
|
57
57
|
ansible/galaxy/__init__.py,sha256=_ccTedn8dUGGtkmHcQLIkeje_YD0TYSXlvCl1AOY5fE,2533
|
|
58
58
|
ansible/galaxy/api.py,sha256=deSYsFinaJodT2Y9-XnOerWIwYY8V2AWQ_9kZI0pWCE,39872
|
|
59
|
-
ansible/galaxy/role.py,sha256=
|
|
59
|
+
ansible/galaxy/role.py,sha256=g7vPiT4IWpsXHP3Z5g9L4Y0lxfRbrRXixewAIN-XgRk,21379
|
|
60
60
|
ansible/galaxy/token.py,sha256=K0dAwD3Fjkn3Zs2N9sG98UesSWfAukie47QGyYpIf0M,6167
|
|
61
61
|
ansible/galaxy/user_agent.py,sha256=x7cJzzpnTngHcwqSUd2hg0i28Dv0tbAyBdke5CSiNhM,813
|
|
62
62
|
ansible/galaxy/collection/__init__.py,sha256=GnhmFRCktOQK3p6lFr-pupxeEMOG09HPJLujyruIx-I,75744
|
|
@@ -139,7 +139,7 @@ ansible/inventory/host.py,sha256=wXJp6kpSaZtDr4JNsgdAuhi5MzQ9LTQzaAH10zoVbIA,505
|
|
|
139
139
|
ansible/inventory/manager.py,sha256=tGwhBR6poLuG_i4jZ5RGOG-rH4gu4DBfT0-4iLLZZMs,29490
|
|
140
140
|
ansible/module_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
141
141
|
ansible/module_utils/_text.py,sha256=VCjTJovTxGfLahnzyrvOehpwTXLpRzMUug6wheirt4A,565
|
|
142
|
-
ansible/module_utils/ansible_release.py,sha256=
|
|
142
|
+
ansible/module_utils/ansible_release.py,sha256=eCLw_ZAHW8derz7BhfelrnhXKKU3VLP06buBoteirg8,920
|
|
143
143
|
ansible/module_utils/api.py,sha256=BTo7stVOANbtd-ngZslaqx70r9t5gfvo44cKyu5SFjU,5837
|
|
144
144
|
ansible/module_utils/basic.py,sha256=dGTJD-84x2a0hqKgoqB6PNhjmOEqYuuf2EgWyX5zVC8,86621
|
|
145
145
|
ansible/module_utils/connection.py,sha256=XHxMlyAdwLiXDSo8jBMkV61-lz_0FDJUYH1B152UGJU,8430
|
|
@@ -303,11 +303,11 @@ ansible/modules/git.py,sha256=Da1dyZazvethGEfDO61mly1gJhwlak678B5d-V5hZ2I,56545
|
|
|
303
303
|
ansible/modules/group.py,sha256=Q3Psaq4aS8tbdL2XvrFivaFp5jVmaLYg3GZzNwPL0Cg,20040
|
|
304
304
|
ansible/modules/group_by.py,sha256=moe6dJFQ9c9Q39kQkAgq3fpq61kzKpWOM33tljrFqM0,2467
|
|
305
305
|
ansible/modules/hostname.py,sha256=BW47SL8_oTH9eZz8dX6-jA7sBMQr_n0D8LHCHSQD94I,28795
|
|
306
|
-
ansible/modules/import_playbook.py,sha256=
|
|
307
|
-
ansible/modules/import_role.py,sha256=
|
|
308
|
-
ansible/modules/import_tasks.py,sha256=
|
|
309
|
-
ansible/modules/include_role.py,sha256=
|
|
310
|
-
ansible/modules/include_tasks.py,sha256=
|
|
306
|
+
ansible/modules/import_playbook.py,sha256=2Ekq8SsYeIOyrwIpt6822xv2ZHRBqe4QNToLOACRDYU,2107
|
|
307
|
+
ansible/modules/import_role.py,sha256=ybsJfXKKxW-Gncs_gIAE32JP2FfZxrbavqp6-lrGg-k,3345
|
|
308
|
+
ansible/modules/import_tasks.py,sha256=K28dgE-ENrPYCkfhwHX92nMFrGZ92RPv6zBKv4u16l8,2188
|
|
309
|
+
ansible/modules/include_role.py,sha256=FIe2GRhrChllGXMnDj3ffY7TFUH-YSrczjdC5MVGt5M,4251
|
|
310
|
+
ansible/modules/include_tasks.py,sha256=E6h6QHoBVVud_4-z5n_mOqs04988dccQWs4Isk8jkP8,2703
|
|
311
311
|
ansible/modules/include_vars.py,sha256=pDM_E0L3VMPh-MB69SzyoykAKG7C22DXzVTlvPYunh4,6609
|
|
312
312
|
ansible/modules/iptables.py,sha256=YcLC8tfoRmVdhzEaUUBBJ5IZI9THqwdKI2ypppNFBK8,33048
|
|
313
313
|
ansible/modules/known_hosts.py,sha256=i1SA88gqAIb_fSrMT0MB4W1tkk4rRVHt9ohXlYFCMKE,13819
|
|
@@ -364,7 +364,7 @@ ansible/parsing/yaml/loader.py,sha256=mYJ5c8WgwKlc5a8dv8mcPwMMifOY0cJrKiAqaRIWPu
|
|
|
364
364
|
ansible/parsing/yaml/objects.py,sha256=BNu1ZwbTBKklyCuAz_KCaidMgbL5Qw6IBTwH4NNNP5k,10561
|
|
365
365
|
ansible/playbook/__init__.py,sha256=Q_R_9VslOm6SKFnj42CwaBPTtd4y2aQm2ExCKGHnQtE,4807
|
|
366
366
|
ansible/playbook/attribute.py,sha256=4z2_otPvKiacjd049sF4d7I2KowK6l7BakXGzSr6L0s,7766
|
|
367
|
-
ansible/playbook/base.py,sha256=
|
|
367
|
+
ansible/playbook/base.py,sha256=6oE0Qt4Wch3M-x972U7KugIZYWjXynQapZs4yi0vo5o,33560
|
|
368
368
|
ansible/playbook/block.py,sha256=8lv2qNsSiIBm6HlIH5P3j16Q7aKCRN0wSrtggoq4DHs,16787
|
|
369
369
|
ansible/playbook/collectionsearch.py,sha256=dfTz79Af_3iurr0YZDcNWsAffaRlbrffXz_KZ3xZlpQ,2654
|
|
370
370
|
ansible/playbook/conditional.py,sha256=qX5WvYFDGjXtsiWoN_VC4oVuEh97_5kbKdoJvPLwsuU,10128
|
|
@@ -374,7 +374,7 @@ ansible/playbook/helpers.py,sha256=jotNlRQmN4SoHpbuMv0Mx_pfVjIjAGpf3TYwc9Iw7xQ,1
|
|
|
374
374
|
ansible/playbook/included_file.py,sha256=r3A19Iy_9BtUBfIMeZL_Ep755MfkzVJAYE3uSvHc4KA,11591
|
|
375
375
|
ansible/playbook/loop_control.py,sha256=BJv5j6jFNo_M5nK6HaXCsNdaM-JClMcCv9D21TCRku4,1764
|
|
376
376
|
ansible/playbook/play.py,sha256=CI6pJarF19Mcc7vAeGsgBSPXRH4x2jzXF3kPXTF7pOE,15717
|
|
377
|
-
ansible/playbook/play_context.py,sha256=
|
|
377
|
+
ansible/playbook/play_context.py,sha256=i5VD5tzL_w5CC47L0oLc1Eearf_Xx12PFzGHqHnXZYU,14565
|
|
378
378
|
ansible/playbook/playbook_include.py,sha256=QK6rccZUtKra60_VvF0Cd4LZ9yaH_t4Sq9evmald6jA,7565
|
|
379
379
|
ansible/playbook/role_include.py,sha256=F5gpKxdkJunyuxLTRUxMbiRujZUTlaFl02WnSvU8lEE,7904
|
|
380
380
|
ansible/playbook/taggable.py,sha256=7pCyNHhAs2TBTV6h4LT9gd9v2syY_gJZqg5x6p0w9C4,3169
|
|
@@ -660,7 +660,7 @@ ansible/utils/shlex.py,sha256=OMoMe9Kd5Ck3LLiiL87OixmYt4Qf3hpiphseg6rwX1Q,1279
|
|
|
660
660
|
ansible/utils/singleton.py,sha256=fzXOd2ql_zrjCmnWR8Qx2WF_lmO5A8r46U81v7tePSo,949
|
|
661
661
|
ansible/utils/ssh_functions.py,sha256=GpLSJC-vDj5YyTHN48QaSUpuwAsaDb1oS4tbyVTRKgU,2282
|
|
662
662
|
ansible/utils/unicode.py,sha256=aJoGG4GCriSxk6mD8pHLgHrnmbU9C5aIyAVyucwWaFk,1167
|
|
663
|
-
ansible/utils/unsafe_proxy.py,sha256
|
|
663
|
+
ansible/utils/unsafe_proxy.py,sha256=-3GKHvmPvW-EHF1Df212rHnp4HUD7rb4D_ysJhbuo30,12733
|
|
664
664
|
ansible/utils/vars.py,sha256=uNLgZKzkxKvw_fNVB0H4mHZR3mUPFBTJGAC3HnBFKqA,10140
|
|
665
665
|
ansible/utils/version.py,sha256=RSC0jNO2r16Nr8TnjVkfngouPb1Xc_7j8U0WvDIK1XA,7837
|
|
666
666
|
ansible/utils/collection_loader/__init__.py,sha256=l6gUbk5MzfUXlySWrj4xi4IF9UBIrOrEpRQ52-xfGsA,1118
|
|
@@ -674,13 +674,13 @@ ansible/vars/hostvars.py,sha256=dg3jpVmNwSg8EJ4SIvYGT80uxMgRtrOW6vvtDfrQzDU,5152
|
|
|
674
674
|
ansible/vars/manager.py,sha256=9d-9uD9x1X35QgLOZRyJtAxg3b1j4sp8Ivc5C78viOk,36178
|
|
675
675
|
ansible/vars/plugins.py,sha256=B7L3fXoSOoBZSXqJ2ulk0adx1g5SpAb8BxyLGPNA7d4,4695
|
|
676
676
|
ansible/vars/reserved.py,sha256=FBD7n2dnA0CW4I0J1LtWwk2hQqvGW0KTRPcxaRtMKWo,2615
|
|
677
|
-
ansible_core-2.14.
|
|
677
|
+
ansible_core-2.14.14.data/scripts/ansible-test,sha256=CYIYL99IxWdVTtDIj3avilIJXhGAmtjuKPPWNuLWuc8,1690
|
|
678
678
|
ansible_test/__init__.py,sha256=6e721yAyyyocRKzbCKtQXloAfFP7Aqv0L3zG70uh-4A,190
|
|
679
679
|
ansible_test/_data/ansible.cfg,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
680
680
|
ansible_test/_data/coveragerc,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
681
681
|
ansible_test/_data/completion/docker.txt,sha256=q47NhD2sEadcFZ_eOi33MqUh_nJNUsnyUmCnkszIhuM,822
|
|
682
682
|
ansible_test/_data/completion/network.txt,sha256=_-mi013-JeufshKMUmykkOmZPw1cVbakIMaAuweHet8,198
|
|
683
|
-
ansible_test/_data/completion/remote.txt,sha256=
|
|
683
|
+
ansible_test/_data/completion/remote.txt,sha256=NmxcuGAfR0oH2ON8DOnKpXikaflJVe2WFTJR-t5e2Zw,954
|
|
684
684
|
ansible_test/_data/completion/windows.txt,sha256=7xcstRugKOY6lnvJd1nzLE7I5awR-uQfmPtRoyPAg7g,230
|
|
685
685
|
ansible_test/_data/playbooks/posix_coverage_setup.yml,sha256=PgQNVzVTsNmfnu0sT2SAYiWtkMSOppfmh0oVmAsb7TQ,594
|
|
686
686
|
ansible_test/_data/playbooks/posix_coverage_teardown.yml,sha256=xHci5QllwJymFtig-hsOXm-Wdrxz063JH14aIyRXhyc,212
|
|
@@ -919,7 +919,7 @@ ansible_test/_util/controller/sanity/code-smell/no-unicode-literals.py,sha256=-5
|
|
|
919
919
|
ansible_test/_util/controller/sanity/code-smell/replace-urlopen.json,sha256=SsCZ1ULl6HPGBcMpXeCTH5-nNVU9jR-ZSeNy4fotpNY,111
|
|
920
920
|
ansible_test/_util/controller/sanity/code-smell/replace-urlopen.py,sha256=PSLEuYW5SBrcC7YIt8jdvJ3arxLL7SK7Mxbsvz1UfXc,624
|
|
921
921
|
ansible_test/_util/controller/sanity/code-smell/runtime-metadata.json,sha256=H2E2-01YXLlSWjvLJT5Vtj3Gn4zB6xhPXsDJh4a7EH0,225
|
|
922
|
-
ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py,sha256=
|
|
922
|
+
ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py,sha256=14n1CpI9OzjZGgOLUpWg1a38DWZp5gTpkYf5sL4vj5c,12136
|
|
923
923
|
ansible_test/_util/controller/sanity/code-smell/shebang.json,sha256=3vtNzoowM53gi2KZi9peIKVIU79ulQY3FE0jYcSP77M,63
|
|
924
924
|
ansible_test/_util/controller/sanity/code-smell/shebang.py,sha256=AKCti3RCgZy0GWB3bXgimr_OhqfVPOp_I7345UN_DV8,4672
|
|
925
925
|
ansible_test/_util/controller/sanity/code-smell/symlinks.json,sha256=JkalgX52aKGUKqjKG5P-68F0tXmUMgldPrNAknMN2Fk,96
|
|
@@ -969,7 +969,7 @@ ansible_test/_util/target/injector/virtualenv.sh,sha256=OhiPVykh_qhPMlcE4vozBF5B
|
|
|
969
969
|
ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py,sha256=ANmNUgiYN4nw-VZijG1gk9-F-id3w0cBDEHTNXbCFT4,2970
|
|
970
970
|
ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py,sha256=Nr52YbVP7BwI4u6mZZptZIYGAfmqzzytdbC98lTr5Ks,1599
|
|
971
971
|
ansible_test/_util/target/sanity/compile/compile.py,sha256=X1WHH2iLT4K8kyYJKlr-6AL6EAzKisL_hYrjvGrHCZ8,1637
|
|
972
|
-
ansible_test/_util/target/sanity/import/importer.py,sha256=
|
|
972
|
+
ansible_test/_util/target/sanity/import/importer.py,sha256=Q2cmqi-dFOfXYFzPybbWKgqMYUnjmXz7WFiYb9ysEO4,26208
|
|
973
973
|
ansible_test/_util/target/setup/ConfigureRemotingForAnsible.ps1,sha256=pW9YaaSNvhc_0ijjMfSMdoQkrmZNJ-Rb4xCL8m8t7yU,16693
|
|
974
974
|
ansible_test/_util/target/setup/bootstrap.sh,sha256=CPZvtpT8H7l2F2Th9kc85EseMm6evxsWPLCgfirBNSA,12994
|
|
975
975
|
ansible_test/_util/target/setup/check_systemd_cgroup_v1.sh,sha256=Aq0T62x_KLtkGaWzYqWjvhchTqYFflrTbQET3h6xrT0,395
|
|
@@ -992,9 +992,9 @@ ansible_test/config/cloud-config-vultr.ini.template,sha256=yO2Xz76Ay3kbG54jX7y8-
|
|
|
992
992
|
ansible_test/config/config.yml,sha256=wb3knoBmZewG3GWOMnRHoVPQWW4vPixKLPMNS6vJmTc,2620
|
|
993
993
|
ansible_test/config/inventory.networking.template,sha256=vQ7x1-u5Q4Y5CqZU-7eMSEJOSCzAbPOL1rmK_AQOQuY,1262
|
|
994
994
|
ansible_test/config/inventory.winrm.template,sha256=_M2i1B9RYfwSjwvgf3M-H_5Br5FO_kney_kMRPmoggk,1025
|
|
995
|
-
ansible_core-2.14.
|
|
996
|
-
ansible_core-2.14.
|
|
997
|
-
ansible_core-2.14.
|
|
998
|
-
ansible_core-2.14.
|
|
999
|
-
ansible_core-2.14.
|
|
1000
|
-
ansible_core-2.14.
|
|
995
|
+
ansible_core-2.14.14.dist-info/COPYING,sha256=CuBIWlvTemPmNgNZZBfk6w5lMzT6bH-TLKOg6F1K8ic,35148
|
|
996
|
+
ansible_core-2.14.14.dist-info/METADATA,sha256=VkKvwUekf59jhBdMbVRlzQdQ6lXEbArpOJ81PN7mTxI,6904
|
|
997
|
+
ansible_core-2.14.14.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
998
|
+
ansible_core-2.14.14.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
|
|
999
|
+
ansible_core-2.14.14.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
|
|
1000
|
+
ansible_core-2.14.14.dist-info/RECORD,,
|
|
@@ -2,8 +2,7 @@ alpine/3.16 python=3.10 become=doas_sudo provider=aws arch=x86_64
|
|
|
2
2
|
alpine become=doas_sudo provider=aws arch=x86_64
|
|
3
3
|
fedora/36 python=3.10 become=sudo provider=aws arch=x86_64
|
|
4
4
|
fedora become=sudo provider=aws arch=x86_64
|
|
5
|
-
freebsd/
|
|
6
|
-
freebsd/13.1 python=3.8,3.7,3.9,3.10 python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
|
|
5
|
+
freebsd/13.2 python=3.8,3.7,3.9,3.10 python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
|
|
7
6
|
freebsd python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
|
|
8
7
|
macos/12.0 python=3.10 python_dir=/usr/local/bin become=sudo provider=parallels arch=x86_64
|
|
9
8
|
macos python_dir=/usr/local/bin become=sudo provider=parallels arch=x86_64
|
|
@@ -16,9 +16,19 @@ from voluptuous.humanize import humanize_error
|
|
|
16
16
|
|
|
17
17
|
from ansible.module_utils.compat.version import StrictVersion, LooseVersion
|
|
18
18
|
from ansible.module_utils.six import string_types
|
|
19
|
+
from ansible.utils.collection_loader import AnsibleCollectionRef
|
|
19
20
|
from ansible.utils.version import SemanticVersion
|
|
20
21
|
|
|
21
22
|
|
|
23
|
+
def fqcr(value):
|
|
24
|
+
"""Validate a FQCR."""
|
|
25
|
+
if not isinstance(value, string_types):
|
|
26
|
+
raise Invalid('Must be a string that is a FQCR')
|
|
27
|
+
if not AnsibleCollectionRef.is_valid_fqcr(value):
|
|
28
|
+
raise Invalid('Must be a FQCR')
|
|
29
|
+
return value
|
|
30
|
+
|
|
31
|
+
|
|
22
32
|
def isodate(value, check_deprecation_date=False, is_tombstone=False):
|
|
23
33
|
"""Validate a datetime.date or ISO 8601 date string."""
|
|
24
34
|
# datetime.date objects come from YAML dates, these are ok
|
|
@@ -184,17 +194,37 @@ def validate_metadata_file(path, is_ansible, check_deprecation_dates=False):
|
|
|
184
194
|
avoid_additional_data
|
|
185
195
|
)
|
|
186
196
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
197
|
+
plugins_routing_common_schema = Schema({
|
|
198
|
+
('deprecation'): Any(deprecation_schema),
|
|
199
|
+
('tombstone'): Any(tombstoning_schema),
|
|
200
|
+
('redirect'): fqcr,
|
|
201
|
+
}, extra=PREVENT_EXTRA)
|
|
202
|
+
|
|
203
|
+
plugin_routing_schema = Any(plugins_routing_common_schema)
|
|
204
|
+
|
|
205
|
+
# Adjusted schema for modules only
|
|
206
|
+
plugin_routing_schema_modules = Any(
|
|
207
|
+
plugins_routing_common_schema.extend({
|
|
208
|
+
('action_plugin'): fqcr}
|
|
209
|
+
)
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
# Adjusted schema for module_utils
|
|
213
|
+
plugin_routing_schema_mu = Any(
|
|
214
|
+
plugins_routing_common_schema.extend({
|
|
215
|
+
('redirect'): Any(*string_types)}
|
|
216
|
+
),
|
|
193
217
|
)
|
|
194
218
|
|
|
195
219
|
list_dict_plugin_routing_schema = [{str_type: plugin_routing_schema}
|
|
196
220
|
for str_type in string_types]
|
|
197
221
|
|
|
222
|
+
list_dict_plugin_routing_schema_mu = [{str_type: plugin_routing_schema_mu}
|
|
223
|
+
for str_type in string_types]
|
|
224
|
+
|
|
225
|
+
list_dict_plugin_routing_schema_modules = [{str_type: plugin_routing_schema_modules}
|
|
226
|
+
for str_type in string_types]
|
|
227
|
+
|
|
198
228
|
plugin_schema = Schema({
|
|
199
229
|
('action'): Any(None, *list_dict_plugin_routing_schema),
|
|
200
230
|
('become'): Any(None, *list_dict_plugin_routing_schema),
|
|
@@ -207,8 +237,8 @@ def validate_metadata_file(path, is_ansible, check_deprecation_dates=False):
|
|
|
207
237
|
('httpapi'): Any(None, *list_dict_plugin_routing_schema),
|
|
208
238
|
('inventory'): Any(None, *list_dict_plugin_routing_schema),
|
|
209
239
|
('lookup'): Any(None, *list_dict_plugin_routing_schema),
|
|
210
|
-
('module_utils'): Any(None, *
|
|
211
|
-
('modules'): Any(None, *
|
|
240
|
+
('module_utils'): Any(None, *list_dict_plugin_routing_schema_mu),
|
|
241
|
+
('modules'): Any(None, *list_dict_plugin_routing_schema_modules),
|
|
212
242
|
('netconf'): Any(None, *list_dict_plugin_routing_schema),
|
|
213
243
|
('shell'): Any(None, *list_dict_plugin_routing_schema),
|
|
214
244
|
('strategy'): Any(None, *list_dict_plugin_routing_schema),
|
|
@@ -560,6 +560,12 @@ def main():
|
|
|
560
560
|
"ignore",
|
|
561
561
|
"Python 3.5 support will be dropped in the next release of cryptography. Please upgrade your Python.")
|
|
562
562
|
|
|
563
|
+
# ansible.utils.unsafe_proxy attempts patching sys.intern generating a warning if it was already patched
|
|
564
|
+
warnings.filterwarnings(
|
|
565
|
+
"ignore",
|
|
566
|
+
"skipped sys.intern patch; appears to have already been patched"
|
|
567
|
+
)
|
|
568
|
+
|
|
563
569
|
try:
|
|
564
570
|
yield
|
|
565
571
|
finally:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|