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