ansible-core 2.17.0rc1__py3-none-any.whl → 2.17.1__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/doc.py +10 -8
- ansible/executor/powershell/exec_wrapper.ps1 +1 -0
- ansible/executor/powershell/module_powershell_wrapper.ps1 +12 -1
- ansible/module_utils/ansible_release.py +1 -1
- ansible/module_utils/csharp/Ansible.Basic.cs +10 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1 +30 -5
- ansible/modules/uri.py +8 -7
- ansible/parsing/mod_args.py +17 -3
- ansible/playbook/handler.py +10 -0
- ansible/playbook/task.py +1 -0
- ansible/plugins/connection/psrp.py +1 -1
- ansible/plugins/filter/splitext.yml +4 -4
- ansible/plugins/filter/win_splitdrive.yml +16 -4
- ansible/plugins/lookup/url.py +6 -6
- ansible/plugins/shell/__init__.py +21 -30
- ansible/plugins/shell/sh.py +1 -3
- ansible/plugins/strategy/__init__.py +6 -20
- ansible/release.py +1 -1
- ansible/utils/display.py +2 -1
- {ansible_core-2.17.0rc1.dist-info → ansible_core-2.17.1.dist-info}/METADATA +1 -1
- {ansible_core-2.17.0rc1.dist-info → ansible_core-2.17.1.dist-info}/RECORD +28 -28
- ansible_test/_data/requirements/constraints.txt +1 -0
- ansible_test/_internal/pypi_proxy.py +1 -1
- {ansible_core-2.17.0rc1.data → ansible_core-2.17.1.data}/scripts/ansible-test +0 -0
- {ansible_core-2.17.0rc1.dist-info → ansible_core-2.17.1.dist-info}/COPYING +0 -0
- {ansible_core-2.17.0rc1.dist-info → ansible_core-2.17.1.dist-info}/WHEEL +0 -0
- {ansible_core-2.17.0rc1.dist-info → ansible_core-2.17.1.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.17.0rc1.dist-info → ansible_core-2.17.1.dist-info}/top_level.txt +0 -0
ansible/cli/doc.py
CHANGED
|
@@ -1296,14 +1296,15 @@ class DocCLI(CLI, RoleMixin):
|
|
|
1296
1296
|
|
|
1297
1297
|
if doc.get('description'):
|
|
1298
1298
|
if isinstance(doc['description'], list):
|
|
1299
|
-
|
|
1299
|
+
descs = doc['description']
|
|
1300
1300
|
else:
|
|
1301
|
-
|
|
1302
|
-
|
|
1301
|
+
descs = [doc['description']]
|
|
1302
|
+
for desc in descs:
|
|
1303
|
+
text.append("%s" % DocCLI.warp_fill(DocCLI.tty_ify(desc), limit, initial_indent=opt_indent, subsequent_indent=opt_indent))
|
|
1303
1304
|
text.append('')
|
|
1304
1305
|
|
|
1305
1306
|
if doc.get('options'):
|
|
1306
|
-
text.append(_format("Options", 'bold') + " (%s
|
|
1307
|
+
text.append(_format("Options", 'bold') + " (%s indicates it is required):" % ("=" if C.ANSIBLE_NOCOLOR else 'red'))
|
|
1307
1308
|
DocCLI.add_fields(text, doc.pop('options'), limit, opt_indent)
|
|
1308
1309
|
|
|
1309
1310
|
if doc.get('attributes', False):
|
|
@@ -1355,12 +1356,13 @@ class DocCLI(CLI, RoleMixin):
|
|
|
1355
1356
|
text.append("> %s %s (%s)" % (plugin_type.upper(), _format(doc.pop('plugin_name'), 'bold'), doc.pop('filename')))
|
|
1356
1357
|
|
|
1357
1358
|
if isinstance(doc['description'], list):
|
|
1358
|
-
|
|
1359
|
+
descs = doc.pop('description')
|
|
1359
1360
|
else:
|
|
1360
|
-
|
|
1361
|
+
descs = [doc.pop('description')]
|
|
1361
1362
|
|
|
1362
1363
|
text.append('')
|
|
1363
|
-
|
|
1364
|
+
for desc in descs:
|
|
1365
|
+
text.append(DocCLI.warp_fill(DocCLI.tty_ify(desc), limit, initial_indent=base_indent, subsequent_indent=base_indent))
|
|
1364
1366
|
|
|
1365
1367
|
if display.verbosity > 0:
|
|
1366
1368
|
doc['added_in'] = DocCLI._format_version_added(doc.pop('version_added', 'historical'), doc.pop('version_added_collection', 'ansible-core'))
|
|
@@ -1385,7 +1387,7 @@ class DocCLI(CLI, RoleMixin):
|
|
|
1385
1387
|
|
|
1386
1388
|
if doc.get('options', False):
|
|
1387
1389
|
text.append("")
|
|
1388
|
-
text.append(_format("OPTIONS", 'bold') + " (%s
|
|
1390
|
+
text.append(_format("OPTIONS", 'bold') + " (%s indicates it is required):" % ("=" if C.ANSIBLE_NOCOLOR else 'red'))
|
|
1389
1391
|
DocCLI.add_fields(text, doc.pop('options'), limit, opt_indent, man=(display.verbosity == 0))
|
|
1390
1392
|
|
|
1391
1393
|
if doc.get('attributes', False):
|
|
@@ -178,6 +178,7 @@ $($ErrorRecord.InvocationInfo.PositionMessage)
|
|
|
178
178
|
|
|
179
179
|
Write-AnsibleLog "INFO - converting json raw to a payload" "exec_wrapper"
|
|
180
180
|
$payload = ConvertFrom-AnsibleJson -InputObject $json_raw
|
|
181
|
+
$payload.module_args._ansible_exec_wrapper_warnings = [System.Collections.Generic.List[string]]@()
|
|
181
182
|
|
|
182
183
|
# TODO: handle binary modules
|
|
183
184
|
# TODO: handle persistence
|
|
@@ -29,7 +29,18 @@ if ($csharp_utils.Count -gt 0) {
|
|
|
29
29
|
|
|
30
30
|
# add any C# references so the module does not have to do so
|
|
31
31
|
$new_tmp = [System.Environment]::ExpandEnvironmentVariables($Payload.module_args["_ansible_remote_tmp"])
|
|
32
|
-
|
|
32
|
+
|
|
33
|
+
# We use a fake module object to capture warnings
|
|
34
|
+
$fake_module = [PSCustomObject]@{
|
|
35
|
+
Tmpdir = $new_tmp
|
|
36
|
+
Verbosity = 3
|
|
37
|
+
}
|
|
38
|
+
$warning_func = New-Object -TypeName System.Management.Automation.PSScriptMethod -ArgumentList Warn, {
|
|
39
|
+
param($message)
|
|
40
|
+
$Payload.module_args._ansible_exec_wrapper_warnings.Add($message)
|
|
41
|
+
}
|
|
42
|
+
$fake_module.PSObject.Members.Add($warning_func)
|
|
43
|
+
Add-CSharpType -References $csharp_utils -AnsibleModule $fake_module
|
|
33
44
|
}
|
|
34
45
|
|
|
35
46
|
if ($Payload.ContainsKey("coverage") -and $null -ne $host.Runspace -and $null -ne $host.Runspace.Debugger) {
|
|
@@ -1025,7 +1025,16 @@ namespace Ansible.Basic
|
|
|
1025
1025
|
foreach (DictionaryEntry entry in param)
|
|
1026
1026
|
{
|
|
1027
1027
|
string paramKey = (string)entry.Key;
|
|
1028
|
-
if (
|
|
1028
|
+
if (paramKey == "_ansible_exec_wrapper_warnings")
|
|
1029
|
+
{
|
|
1030
|
+
// Special key used in module_powershell_wrapper to pass
|
|
1031
|
+
// along any warnings that should be returned back to
|
|
1032
|
+
// Ansible.
|
|
1033
|
+
removedParameters.Add(paramKey);
|
|
1034
|
+
foreach (string warning in (IList<string>)entry.Value)
|
|
1035
|
+
Warn(warning);
|
|
1036
|
+
}
|
|
1037
|
+
else if (!legalInputs.Contains(paramKey, StringComparer.OrdinalIgnoreCase))
|
|
1029
1038
|
unsupportedParameters.Add(paramKey);
|
|
1030
1039
|
else if (!legalInputs.Contains(paramKey))
|
|
1031
1040
|
// For backwards compatibility we do not care about the case but we need to warn the users as this will
|
|
@@ -75,7 +75,7 @@ Function Add-CSharpType {
|
|
|
75
75
|
[Switch]$IgnoreWarnings,
|
|
76
76
|
[Switch]$PassThru,
|
|
77
77
|
[Parameter(Mandatory = $true, ParameterSetName = "Module")][Object]$AnsibleModule,
|
|
78
|
-
[Parameter(ParameterSetName = "Manual")][String]$TempPath
|
|
78
|
+
[Parameter(ParameterSetName = "Manual")][String]$TempPath,
|
|
79
79
|
[Parameter(ParameterSetName = "Manual")][Switch]$IncludeDebugInfo,
|
|
80
80
|
[String[]]$CompileSymbols = @()
|
|
81
81
|
)
|
|
@@ -280,9 +280,11 @@ Function Add-CSharpType {
|
|
|
280
280
|
$include_debug = $AnsibleModule.Verbosity -ge 3
|
|
281
281
|
}
|
|
282
282
|
else {
|
|
283
|
-
$temp_path =
|
|
283
|
+
$temp_path = [System.IO.Path]::GetTempPath()
|
|
284
284
|
$include_debug = $IncludeDebugInfo.IsPresent
|
|
285
285
|
}
|
|
286
|
+
$temp_path = Join-Path -Path $temp_path -ChildPath ([Guid]::NewGuid().Guid)
|
|
287
|
+
|
|
286
288
|
$compiler_options = [System.Collections.ArrayList]@("/optimize")
|
|
287
289
|
if ($defined_symbols.Count -gt 0) {
|
|
288
290
|
$compiler_options.Add("/define:" + ([String]::Join(";", $defined_symbols.ToArray()))) > $null
|
|
@@ -304,8 +306,12 @@ Function Add-CSharpType {
|
|
|
304
306
|
)
|
|
305
307
|
|
|
306
308
|
# create a code snippet for each reference and check if we need
|
|
307
|
-
# to reference any extra assemblies
|
|
308
|
-
|
|
309
|
+
# to reference any extra assemblies.
|
|
310
|
+
# CS1610 is a warning when csc.exe failed to delete temporary files.
|
|
311
|
+
# We use our own temp dir deletion mechanism so this doesn't become a
|
|
312
|
+
# fatal error.
|
|
313
|
+
# https://github.com/ansible-collections/ansible.windows/issues/598
|
|
314
|
+
$ignore_warnings = [System.Collections.ArrayList]@('1610')
|
|
309
315
|
$compile_units = [System.Collections.Generic.List`1[System.CodeDom.CodeSnippetCompileUnit]]@()
|
|
310
316
|
foreach ($reference in $References) {
|
|
311
317
|
# scan through code and add any assemblies that match
|
|
@@ -373,7 +379,26 @@ Function Add-CSharpType {
|
|
|
373
379
|
}
|
|
374
380
|
}
|
|
375
381
|
|
|
376
|
-
$
|
|
382
|
+
$null = New-Item -Path $temp_path -ItemType Directory -Force
|
|
383
|
+
try {
|
|
384
|
+
$compile = $provider.CompileAssemblyFromDom($compile_parameters, $compile_units)
|
|
385
|
+
}
|
|
386
|
+
finally {
|
|
387
|
+
# Try to delete the temp path, if this fails and we are running
|
|
388
|
+
# with a module object write a warning instead of failing.
|
|
389
|
+
try {
|
|
390
|
+
[System.IO.Directory]::Delete($temp_path, $true)
|
|
391
|
+
}
|
|
392
|
+
catch {
|
|
393
|
+
$msg = "Failed to cleanup temporary directory '$temp_path' used for compiling C# code."
|
|
394
|
+
if ($AnsibleModule) {
|
|
395
|
+
$AnsibleModule.Warn("$msg Files may still be present after the task is complete. Error: $_")
|
|
396
|
+
}
|
|
397
|
+
else {
|
|
398
|
+
throw "$msg Error: $_"
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
377
402
|
}
|
|
378
403
|
finally {
|
|
379
404
|
foreach ($kvp in $originalEnv.GetEnumerator()) {
|
ansible/modules/uri.py
CHANGED
|
@@ -107,14 +107,15 @@ options:
|
|
|
107
107
|
default: no
|
|
108
108
|
follow_redirects:
|
|
109
109
|
description:
|
|
110
|
-
- Whether or not the URI module should follow redirects.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
110
|
+
- Whether or not the URI module should follow redirects.
|
|
111
|
+
choices:
|
|
112
|
+
all: Will follow all redirects.
|
|
113
|
+
none: Will not follow any redirects.
|
|
114
|
+
safe: Only redirects doing GET or HEAD requests will be followed.
|
|
115
|
+
urllib2: Defer to urllib2 behavior (As of writing this follows HTTP redirects).
|
|
116
|
+
'no': (DEPRECATED, will be removed in the future version) alias of V(none).
|
|
117
|
+
'yes': (DEPRECATED, will be removed in the future version) alias of V(all).
|
|
116
118
|
type: str
|
|
117
|
-
choices: ['all', 'no', 'none', 'safe', 'urllib2', 'yes']
|
|
118
119
|
default: safe
|
|
119
120
|
creates:
|
|
120
121
|
description:
|
ansible/parsing/mod_args.py
CHANGED
|
@@ -53,6 +53,17 @@ BUILTIN_TASKS = frozenset(add_internal_fqcns((
|
|
|
53
53
|
)))
|
|
54
54
|
|
|
55
55
|
|
|
56
|
+
def _get_action_context(action_or_module, collection_list):
|
|
57
|
+
module_context = module_loader.find_plugin_with_context(action_or_module, collection_list=collection_list)
|
|
58
|
+
if module_context and module_context.resolved and module_context.action_plugin:
|
|
59
|
+
action_or_module = module_context.action_plugin
|
|
60
|
+
|
|
61
|
+
context = action_loader.find_plugin_with_context(action_or_module, collection_list=collection_list)
|
|
62
|
+
if not context or not context.resolved:
|
|
63
|
+
context = module_context
|
|
64
|
+
return context
|
|
65
|
+
|
|
66
|
+
|
|
56
67
|
class ModuleArgsParser:
|
|
57
68
|
|
|
58
69
|
"""
|
|
@@ -291,6 +302,11 @@ class ModuleArgsParser:
|
|
|
291
302
|
delegate_to = 'localhost'
|
|
292
303
|
action, args = self._normalize_parameters(thing, action=action, additional_args=additional_args)
|
|
293
304
|
|
|
305
|
+
if action is not None and not skip_action_validation:
|
|
306
|
+
context = _get_action_context(action, self._collection_list)
|
|
307
|
+
if context is not None and context.resolved:
|
|
308
|
+
self.resolved_action = context.resolved_fqcn
|
|
309
|
+
|
|
294
310
|
# module: <stuff> is the more new-style invocation
|
|
295
311
|
|
|
296
312
|
# filter out task attributes so we're only querying unrecognized keys as actions/modules
|
|
@@ -306,9 +322,7 @@ class ModuleArgsParser:
|
|
|
306
322
|
is_action_candidate = True
|
|
307
323
|
else:
|
|
308
324
|
try:
|
|
309
|
-
context =
|
|
310
|
-
if not context.resolved:
|
|
311
|
-
context = module_loader.find_plugin_with_context(item, collection_list=self._collection_list)
|
|
325
|
+
context = _get_action_context(item, self._collection_list)
|
|
312
326
|
except AnsibleError as e:
|
|
313
327
|
if e.obj is None:
|
|
314
328
|
e.obj = self._task_ds
|
ansible/playbook/handler.py
CHANGED
|
@@ -37,6 +37,16 @@ class Handler(Task):
|
|
|
37
37
|
''' returns a human-readable representation of the handler '''
|
|
38
38
|
return "HANDLER: %s" % self.get_name()
|
|
39
39
|
|
|
40
|
+
def _validate_listen(self, attr, name, value):
|
|
41
|
+
new_value = self.get_validated_value(name, attr, value, None)
|
|
42
|
+
if self._role is not None:
|
|
43
|
+
for listener in new_value.copy():
|
|
44
|
+
new_value.extend([
|
|
45
|
+
f"{self._role.get_name(include_role_fqcn=True)} : {listener}",
|
|
46
|
+
f"{self._role.get_name(include_role_fqcn=False)} : {listener}",
|
|
47
|
+
])
|
|
48
|
+
setattr(self, name, new_value)
|
|
49
|
+
|
|
40
50
|
@staticmethod
|
|
41
51
|
def load(data, block=None, role=None, task_include=None, variable_manager=None, loader=None):
|
|
42
52
|
t = Handler(block=block, role=role, task_include=task_include)
|
ansible/playbook/task.py
CHANGED
|
@@ -208,6 +208,7 @@ class Task(Base, Conditional, Taggable, CollectionSearch, Notifiable, Delegatabl
|
|
|
208
208
|
# But if it wasn't, we can add the yaml object now to get more detail
|
|
209
209
|
raise AnsibleParserError(to_native(e), obj=ds, orig_exc=e)
|
|
210
210
|
else:
|
|
211
|
+
# Set the resolved action plugin (or if it does not exist, module) for callbacks.
|
|
211
212
|
self.resolved_action = args_parser.resolved_action
|
|
212
213
|
|
|
213
214
|
# the command/shell/script modules used to support the `cmd` arg,
|
|
@@ -13,7 +13,7 @@ description:
|
|
|
13
13
|
underlying transport but instead runs in a PowerShell interpreter.
|
|
14
14
|
version_added: "2.7"
|
|
15
15
|
requirements:
|
|
16
|
-
- pypsrp>=0.4.0 (Python library)
|
|
16
|
+
- pypsrp>=0.4.0, <1.0.0 (Python library)
|
|
17
17
|
extends_documentation_fragment:
|
|
18
18
|
- connection_pipelining
|
|
19
19
|
options:
|
|
@@ -14,14 +14,14 @@ DOCUMENTATION:
|
|
|
14
14
|
|
|
15
15
|
EXAMPLES: |
|
|
16
16
|
|
|
17
|
-
# gobble => [ '/etc/make', 'conf' ]
|
|
17
|
+
# gobble => [ '/etc/make', '.conf' ]
|
|
18
18
|
gobble: "{{ '/etc/make.conf' | splitext }}"
|
|
19
19
|
|
|
20
|
-
# file_n_ext => [ 'ansible', 'cfg' ]
|
|
20
|
+
# file_n_ext => [ 'ansible', '.cfg' ]
|
|
21
21
|
file_n_ext: "{{ 'ansible.cfg' | splitext }}"
|
|
22
22
|
|
|
23
|
-
# hoax => ['/etc/hoasdf', '']
|
|
24
|
-
hoax:
|
|
23
|
+
# hoax => [ '/etc/hoasdf', '' ]
|
|
24
|
+
hoax: "{{ '/etc/hoasdf' | splitext }}"
|
|
25
25
|
|
|
26
26
|
RETURN:
|
|
27
27
|
_value:
|
|
@@ -5,6 +5,8 @@ DOCUMENTATION:
|
|
|
5
5
|
short_description: Split a Windows path by the drive letter
|
|
6
6
|
description:
|
|
7
7
|
- Returns a list with the first component being the drive letter and the second, the rest of the path.
|
|
8
|
+
- If the path contains a drive letter, drive will contain everything up to and including the colon.
|
|
9
|
+
- If the path contains a UNC (Universal Naming Convention) path, drive will contain the host name and share, up to but not including the fourth separator.
|
|
8
10
|
options:
|
|
9
11
|
_input:
|
|
10
12
|
description: A Windows path.
|
|
@@ -13,17 +15,27 @@ DOCUMENTATION:
|
|
|
13
15
|
|
|
14
16
|
EXAMPLES: |
|
|
15
17
|
|
|
16
|
-
# To get the last name of a file Windows path, like ['C', '\Users\asdf\foo.txt'] out of 'C:\Users\asdf\foo.txt'
|
|
18
|
+
# To get the last name of a file Windows path, like ['C:', '\Users\asdf\foo.txt'] out of 'C:\Users\asdf\foo.txt'
|
|
17
19
|
{{ mypath | win_splitdrive }}
|
|
18
20
|
|
|
19
|
-
#
|
|
21
|
+
# To get path from UNC (Universal Naming Convention) path, like ['//host/computer', '/dir/a'] out of '//host/computer/dir/a'
|
|
22
|
+
|
|
23
|
+
# just the drive letter, like ['C:'] out of 'C:\Users\asdf\foo.txt'
|
|
24
|
+
{{ mypath | win_splitdrive | first }}
|
|
25
|
+
|
|
26
|
+
# path w/o drive letter, like ['\Users\asdf\foo.txt'] out of 'C:\Users\asdf\foo.txt'
|
|
27
|
+
{{ mypath | win_splitdrive | last }}
|
|
28
|
+
|
|
29
|
+
# just the hostname and share, like ['//host/computer'] out of '//host/computer/dir/a'
|
|
20
30
|
{{ mypath | win_splitdrive | first }}
|
|
21
31
|
|
|
22
|
-
# path w/o
|
|
32
|
+
# path w/o hostname and share, like ['/dir/a'] out of '//host/computer/dir/a'
|
|
23
33
|
{{ mypath | win_splitdrive | last }}
|
|
24
34
|
|
|
25
35
|
RETURN:
|
|
26
36
|
_value:
|
|
27
|
-
description:
|
|
37
|
+
description:
|
|
38
|
+
- List in which the first element is the drive letter with colon and the second the rest of the path.
|
|
39
|
+
- In case of UNC path, first element is the hostname and share and the second the rest of the path.
|
|
28
40
|
type: list
|
|
29
41
|
elements: str
|
ansible/plugins/lookup/url.py
CHANGED
|
@@ -99,12 +99,12 @@ options:
|
|
|
99
99
|
- section: url_lookup
|
|
100
100
|
key: follow_redirects
|
|
101
101
|
choices:
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
102
|
+
all: Will follow all redirects.
|
|
103
|
+
none: Will not follow any redirects.
|
|
104
|
+
safe: Only redirects doing GET or HEAD requests will be followed.
|
|
105
|
+
urllib2: Defer to urllib2 behavior (As of writing this follows HTTP redirects).
|
|
106
|
+
'no': (DEPRECATED, will be removed in the future version) alias of V(none).
|
|
107
|
+
'yes': (DEPRECATED, will be removed in the future version) alias of V(all).
|
|
108
108
|
use_gssapi:
|
|
109
109
|
description:
|
|
110
110
|
- Use GSSAPI handler of requests
|
|
@@ -85,7 +85,7 @@ class ShellBase(AnsiblePlugin):
|
|
|
85
85
|
return 'ansible-tmp-%s-%s-%s' % (time.time(), os.getpid(), random.randint(0, 2**48))
|
|
86
86
|
|
|
87
87
|
def env_prefix(self, **kwargs):
|
|
88
|
-
return ' '.join(['%s=%s' % (k,
|
|
88
|
+
return ' '.join(['%s=%s' % (k, self.quote(text_type(v))) for k, v in kwargs.items()])
|
|
89
89
|
|
|
90
90
|
def join_path(self, *args):
|
|
91
91
|
return os.path.join(*args)
|
|
@@ -101,41 +101,33 @@ class ShellBase(AnsiblePlugin):
|
|
|
101
101
|
def chmod(self, paths, mode):
|
|
102
102
|
cmd = ['chmod', mode]
|
|
103
103
|
cmd.extend(paths)
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
return ' '.join(cmd)
|
|
104
|
+
return shlex.join(cmd)
|
|
107
105
|
|
|
108
106
|
def chown(self, paths, user):
|
|
109
107
|
cmd = ['chown', user]
|
|
110
108
|
cmd.extend(paths)
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
return ' '.join(cmd)
|
|
109
|
+
return shlex.join(cmd)
|
|
114
110
|
|
|
115
111
|
def chgrp(self, paths, group):
|
|
116
112
|
cmd = ['chgrp', group]
|
|
117
113
|
cmd.extend(paths)
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
return ' '.join(cmd)
|
|
114
|
+
return shlex.join(cmd)
|
|
121
115
|
|
|
122
116
|
def set_user_facl(self, paths, user, mode):
|
|
123
117
|
"""Only sets acls for users as that's really all we need"""
|
|
124
118
|
cmd = ['setfacl', '-m', 'u:%s:%s' % (user, mode)]
|
|
125
119
|
cmd.extend(paths)
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
return ' '.join(cmd)
|
|
120
|
+
return shlex.join(cmd)
|
|
129
121
|
|
|
130
122
|
def remove(self, path, recurse=False):
|
|
131
|
-
path =
|
|
123
|
+
path = self.quote(path)
|
|
132
124
|
cmd = 'rm -f '
|
|
133
125
|
if recurse:
|
|
134
126
|
cmd += '-r '
|
|
135
127
|
return cmd + "%s %s" % (path, self._SHELL_REDIRECT_ALLNULL)
|
|
136
128
|
|
|
137
129
|
def exists(self, path):
|
|
138
|
-
cmd = ['test', '-e',
|
|
130
|
+
cmd = ['test', '-e', self.quote(path)]
|
|
139
131
|
return ' '.join(cmd)
|
|
140
132
|
|
|
141
133
|
def mkdtemp(self, basefile=None, system=False, mode=0o700, tmpdir=None):
|
|
@@ -194,8 +186,7 @@ class ShellBase(AnsiblePlugin):
|
|
|
194
186
|
# Check that the user_path to expand is safe
|
|
195
187
|
if user_home_path != '~':
|
|
196
188
|
if not _USER_HOME_PATH_RE.match(user_home_path):
|
|
197
|
-
|
|
198
|
-
user_home_path = shlex.quote(user_home_path)
|
|
189
|
+
user_home_path = self.quote(user_home_path)
|
|
199
190
|
elif username:
|
|
200
191
|
# if present the user name is appended to resolve "that user's home"
|
|
201
192
|
user_home_path += username
|
|
@@ -207,20 +198,20 @@ class ShellBase(AnsiblePlugin):
|
|
|
207
198
|
return 'echo %spwd%s' % (self._SHELL_SUB_LEFT, self._SHELL_SUB_RIGHT)
|
|
208
199
|
|
|
209
200
|
def build_module_command(self, env_string, shebang, cmd, arg_path=None):
|
|
210
|
-
|
|
211
|
-
if
|
|
212
|
-
|
|
201
|
+
env_string = env_string.strip()
|
|
202
|
+
if env_string:
|
|
203
|
+
env_string += ' '
|
|
213
204
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
shebang
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
return
|
|
205
|
+
if shebang is None:
|
|
206
|
+
shebang = ''
|
|
207
|
+
|
|
208
|
+
cmd_parts = [
|
|
209
|
+
shebang.removeprefix('#!').strip(),
|
|
210
|
+
cmd.strip(),
|
|
211
|
+
arg_path,
|
|
212
|
+
]
|
|
213
|
+
|
|
214
|
+
return f'{env_string}%s' % shlex.join(cps for cp in cmd_parts if cp and (cps := cp.strip()))
|
|
224
215
|
|
|
225
216
|
def append_command(self, cmd, cmd_to_append):
|
|
226
217
|
"""Append an additional command if supported by the shell"""
|
ansible/plugins/shell/sh.py
CHANGED
|
@@ -13,8 +13,6 @@ extends_documentation_fragment:
|
|
|
13
13
|
- shell_common
|
|
14
14
|
'''
|
|
15
15
|
|
|
16
|
-
import shlex
|
|
17
|
-
|
|
18
16
|
from ansible.plugins.shell import ShellBase
|
|
19
17
|
|
|
20
18
|
|
|
@@ -66,7 +64,7 @@ class ShellModule(ShellBase):
|
|
|
66
64
|
# Quoting gets complex here. We're writing a python string that's
|
|
67
65
|
# used by a variety of shells on the remote host to invoke a python
|
|
68
66
|
# "one-liner".
|
|
69
|
-
shell_escaped_path =
|
|
67
|
+
shell_escaped_path = self.quote(path)
|
|
70
68
|
test = "rc=flag; [ -r %(p)s ] %(shell_or)s rc=2; [ -f %(p)s ] %(shell_or)s rc=1; [ -d %(p)s ] %(shell_and)s rc=3; %(i)s -V 2>/dev/null %(shell_or)s rc=4; [ x\"$rc\" != \"xflag\" ] %(shell_and)s echo \"${rc} \"%(p)s %(shell_and)s exit 0" % dict(p=shell_escaped_path, i=python_interp, shell_and=self._SHELL_AND, shell_or=self._SHELL_OR) # NOQA
|
|
71
69
|
csums = [
|
|
72
70
|
u"({0} -c 'import hashlib; BLOCKSIZE = 65536; hasher = hashlib.sha1();{2}afile = open(\"'{1}'\", \"rb\"){2}buf = afile.read(BLOCKSIZE){2}while len(buf) > 0:{2}\thasher.update(buf){2}\tbuf = afile.read(BLOCKSIZE){2}afile.close(){2}print(hasher.hexdigest())' 2>/dev/null)".format(python_interp, shell_escaped_path, self._SHELL_EMBEDDED_PY_EOL), # NOQA Python > 2.4 (including python3)
|
|
@@ -549,27 +549,13 @@ class StrategyBase:
|
|
|
549
549
|
yield handler
|
|
550
550
|
break
|
|
551
551
|
|
|
552
|
-
|
|
553
|
-
seen = []
|
|
552
|
+
seen = set()
|
|
554
553
|
for handler in handlers:
|
|
555
|
-
if
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
templar,
|
|
561
|
-
)
|
|
562
|
-
if handler._role is not None:
|
|
563
|
-
for listener in listeners.copy():
|
|
564
|
-
listeners.extend([
|
|
565
|
-
handler._role.get_name(include_role_fqcn=True) + ' : ' + listener,
|
|
566
|
-
handler._role.get_name(include_role_fqcn=False) + ' : ' + listener
|
|
567
|
-
])
|
|
568
|
-
if notification in listeners:
|
|
569
|
-
if handler.name and handler.name in seen:
|
|
570
|
-
continue
|
|
571
|
-
seen.append(handler.name)
|
|
572
|
-
yield handler
|
|
554
|
+
if notification in handler.listen:
|
|
555
|
+
if handler.name and handler.name in seen:
|
|
556
|
+
continue
|
|
557
|
+
seen.add(handler.name)
|
|
558
|
+
yield handler
|
|
573
559
|
|
|
574
560
|
@debug_closure
|
|
575
561
|
def _process_pending_results(self, iterator, one_pass=False, max_passes=None):
|
ansible/release.py
CHANGED
ansible/utils/display.py
CHANGED
|
@@ -451,7 +451,7 @@ class Display(metaclass=Singleton):
|
|
|
451
451
|
|
|
452
452
|
def _log(self, msg: str, color: str | None = None, caplevel: int | None = None):
|
|
453
453
|
|
|
454
|
-
if caplevel is None or self.log_verbosity > caplevel:
|
|
454
|
+
if logger and (caplevel is None or self.log_verbosity > caplevel):
|
|
455
455
|
msg2 = msg.lstrip('\n')
|
|
456
456
|
|
|
457
457
|
lvl = logging.INFO
|
|
@@ -462,6 +462,7 @@ class Display(metaclass=Singleton):
|
|
|
462
462
|
except KeyError:
|
|
463
463
|
# this should not happen, but JIC
|
|
464
464
|
raise AnsibleAssertionError('Invalid color supplied to display: %s' % color)
|
|
465
|
+
|
|
465
466
|
# actually log
|
|
466
467
|
logger.log(lvl, msg2)
|
|
467
468
|
|
|
@@ -3,13 +3,13 @@ ansible/__main__.py,sha256=EnLcULXNtSXkuJ8igEHPPLBTZKAwqXv4PvMEhvzp2Oo,1430
|
|
|
3
3
|
ansible/constants.py,sha256=vRwEcoynqtuKDPKsxKUY94XzrTSV3J0y1slb907DioU,9140
|
|
4
4
|
ansible/context.py,sha256=oKYyfjfWpy8vDeProtqfnqSmuij_t75_5e5t0U_hQ1g,1933
|
|
5
5
|
ansible/keyword_desc.yml,sha256=vE9joFgSeHR4Djl7Bd-HHVCrGByRCrTUmWYZ8LKPZKk,7412
|
|
6
|
-
ansible/release.py,sha256=
|
|
6
|
+
ansible/release.py,sha256=VTnyAY54l_uZVz7YodOpT6Qf0RDKEaJfDOaV0FLB2ow,832
|
|
7
7
|
ansible/_vendor/__init__.py,sha256=2QBeBwT7uG7M3Aw-pIdCpt6XPtHMCpbEKfACYKA7xIg,2033
|
|
8
8
|
ansible/cli/__init__.py,sha256=fzgR82NIGBH3GujIMehhAaP4KYszn4uztuCaFYRUpGk,28718
|
|
9
9
|
ansible/cli/adhoc.py,sha256=quJ9WzRzf3dz_dtDGmahNMffqyNVy1jzQCMo21YL5Qg,8194
|
|
10
10
|
ansible/cli/config.py,sha256=54IEhW7pH5bpWB7u1abEh-4zjU2xqhB0nQi5dHGBZSY,22663
|
|
11
11
|
ansible/cli/console.py,sha256=GOdaJfy0NtBIo4HUom4V4VrcrmLiBYcaSBZgbmAP9Ss,21987
|
|
12
|
-
ansible/cli/doc.py,sha256=
|
|
12
|
+
ansible/cli/doc.py,sha256=WM-LAlsVREtyppuYKQDF3E6EDnhtRsrGItQSxXz1rjI,69662
|
|
13
13
|
ansible/cli/galaxy.py,sha256=E9llaIyZEbfFl9j2SEbu74Gghpt6x6Egz1CwtqPw_2g,95494
|
|
14
14
|
ansible/cli/inventory.py,sha256=bVT2FRQLSab_vDqw_vTMLpxzd2HYW1KDslsEb6gqFSI,16771
|
|
15
15
|
ansible/cli/playbook.py,sha256=d0x_X0BXjxYjPJ-qc6JcyGxR6IzxdvnSjoT4tUtaGKQ,10865
|
|
@@ -48,9 +48,9 @@ ansible/executor/powershell/async_wrapper.ps1,sha256=XwYF4S-F3vAUBHd45O9GOTco-oG
|
|
|
48
48
|
ansible/executor/powershell/become_wrapper.ps1,sha256=c0a4nYlFbpoZHzRpRHKgndZbYB18K5t9YJWC_HgBiH8,7439
|
|
49
49
|
ansible/executor/powershell/bootstrap_wrapper.ps1,sha256=8xudggKTMGibFCspF5m2BrJALARd67Rj062qCbKM2eY,487
|
|
50
50
|
ansible/executor/powershell/coverage_wrapper.ps1,sha256=EM4X0tEWw2vMrNVQoxen6y8rYxTB8kEjx3PHoH4Mx5c,8296
|
|
51
|
-
ansible/executor/powershell/exec_wrapper.ps1,sha256=
|
|
51
|
+
ansible/executor/powershell/exec_wrapper.ps1,sha256=RS5uzkSebd7WiR-gh-4mOBi1VUUHItKa4oPrh75xUP8,10231
|
|
52
52
|
ansible/executor/powershell/module_manifest.py,sha256=bq0fOPM_eYTbxMfj7Ka9EIivYpGmNACfqVjZrygElQQ,17368
|
|
53
|
-
ansible/executor/powershell/module_powershell_wrapper.ps1,sha256=
|
|
53
|
+
ansible/executor/powershell/module_powershell_wrapper.ps1,sha256=AkHcfW-qx5AJUqZ02Gvb907oCAYSptRwqb8RVyNJvHg,3581
|
|
54
54
|
ansible/executor/powershell/module_script_wrapper.ps1,sha256=Th1KTjKE3aOul6kRMunUj0EXFf7Jn7WOH-byCap9pqU,872
|
|
55
55
|
ansible/executor/powershell/module_wrapper.ps1,sha256=KFIQHPNnzA88Y4lkzn3B3LH3oz-4AAajU36ju9AZx9g,9042
|
|
56
56
|
ansible/executor/process/__init__.py,sha256=mRvbCJPA-_veSG5ka3v04G5vsarLVDeB3EWFsu6geSI,749
|
|
@@ -140,7 +140,7 @@ ansible/inventory/host.py,sha256=PDb5OTplhfpUIvdHiP2BckUOB1gUl302N-3sW0_sTyg,503
|
|
|
140
140
|
ansible/inventory/manager.py,sha256=45mHgZTAkQ3IjAtrgsNzJXvynC-HIEor-JJE-V3xXN4,29454
|
|
141
141
|
ansible/module_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
142
142
|
ansible/module_utils/_text.py,sha256=VkWgAnSNVCbTQqZgllUObBFsH3uM4EUW5srl1UR9t1g,544
|
|
143
|
-
ansible/module_utils/ansible_release.py,sha256=
|
|
143
|
+
ansible/module_utils/ansible_release.py,sha256=VTnyAY54l_uZVz7YodOpT6Qf0RDKEaJfDOaV0FLB2ow,832
|
|
144
144
|
ansible/module_utils/api.py,sha256=DWIuLW5gDWuyyDHLLgGnub42Qa8kagDdkf1xDeLAFl4,5784
|
|
145
145
|
ansible/module_utils/basic.py,sha256=1BHf9_6SsFlfeTcYlOqOzbnITG3x8galaBcPm8ec6nE,85703
|
|
146
146
|
ansible/module_utils/connection.py,sha256=q_BdUaST6E44ltHsWPOFOheXK9vKmzaJvP-eQOrOrmE,8394
|
|
@@ -180,7 +180,7 @@ ansible/module_utils/compat/selinux.py,sha256=8OSQ-kzCahoPyja3j25Au7HOINXT_A2bdp
|
|
|
180
180
|
ansible/module_utils/compat/typing.py,sha256=J_K9Ru1-f0KSKO_WhWGRCh0WBNWl6jUmQK1_0yYYZOs,736
|
|
181
181
|
ansible/module_utils/compat/version.py,sha256=ifck3MH9LhxMENpZXOrntEqX6b7X8shknt3Fweg6AzQ,12734
|
|
182
182
|
ansible/module_utils/csharp/Ansible.AccessToken.cs,sha256=4HzIFQKGG3ZTg8tehVcM_ukMi057wxxLdYFZoqsij5I,15871
|
|
183
|
-
ansible/module_utils/csharp/Ansible.Basic.cs,sha256=
|
|
183
|
+
ansible/module_utils/csharp/Ansible.Basic.cs,sha256=xp1pMZNhib3vhR3Wdc5JlDv1SORo4dIGjc17LmnLr1g,78845
|
|
184
184
|
ansible/module_utils/csharp/Ansible.Become.cs,sha256=1yasfX8SpbcIWJWiobr2Ms-Hl5W47_XNSKvwMXOyiz4,30457
|
|
185
185
|
ansible/module_utils/csharp/Ansible.Privilege.cs,sha256=7e46na6k6ygdRwN53bzfIS8O-IwfM1TF_q5DeFH2Z80,19398
|
|
186
186
|
ansible/module_utils/csharp/Ansible.Process.cs,sha256=g6R2PkbxiVBry4bk35ieWwYCAZOi7RSeyKmtOW8j90I,19449
|
|
@@ -260,7 +260,7 @@ ansible/module_utils/facts/virtual/sunos.py,sha256=OcT2yemUKUgF8lHzMNkTqCwD4ScHw
|
|
|
260
260
|
ansible/module_utils/facts/virtual/sysctl.py,sha256=lHR0b-9-1wFJTmVHiK3dRZ8v3MuewU4nn-x-hoFhu-E,5260
|
|
261
261
|
ansible/module_utils/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
262
262
|
ansible/module_utils/parsing/convert_bool.py,sha256=ZEe44iS-9dLnWIK4RAHreTjh4HnO2hMR52C0VLY6q9I,1061
|
|
263
|
-
ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1,sha256=
|
|
263
|
+
ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1,sha256=WOHO9E576ivZk8lOQaujXGnNDzz46pVvmIGjvPKxJsE,20040
|
|
264
264
|
ansible/module_utils/powershell/Ansible.ModuleUtils.ArgvParser.psm1,sha256=x9wTV5jOpoCtFbpZW6GoZEELdL3RNOhdY91QOhYxJqk,3327
|
|
265
265
|
ansible/module_utils/powershell/Ansible.ModuleUtils.Backup.psm1,sha256=ebgpraCNmPwswlLHShgiviTk2thw8ch3ekF5n_I_cXg,1104
|
|
266
266
|
ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1,sha256=ySb9N6g0sWnUpgUMtDyBSBgjtQmvlye3NoXl3fiu_5g,2456
|
|
@@ -339,7 +339,7 @@ ansible/modules/sysvinit.py,sha256=lW3t6HBH_lCcBi9mBhRgiYmeADIu0Xbaf9uM_b05FH0,1
|
|
|
339
339
|
ansible/modules/tempfile.py,sha256=lA9e8lyFXf9J5ud0R6Jkt8sIFyRcOwzhc9Jz-5_HOZQ,3627
|
|
340
340
|
ansible/modules/template.py,sha256=D1sm36GB_mEimH0CfWq1cJ4w1eRvpcsHwZ-ufVzC_Gs,4537
|
|
341
341
|
ansible/modules/unarchive.py,sha256=hlRAn2Ma36rmeQ4-OldGLPnHu3w8rlxlvLovQ2pYg5c,44880
|
|
342
|
-
ansible/modules/uri.py,sha256=
|
|
342
|
+
ansible/modules/uri.py,sha256=WgJA04YvgKTpQsMJFWAg9ITbj8cpIYwZD_tPlD_hcz4,28203
|
|
343
343
|
ansible/modules/user.py,sha256=W53gNWD8ymV5o7j80-ROHMfkwG4IPVLuQ2r5Efk98_U,118055
|
|
344
344
|
ansible/modules/validate_argument_spec.py,sha256=epLh4EUaoDLvhdVszRM68Q2QdicK-3jxhMA530dQaIE,3044
|
|
345
345
|
ansible/modules/wait_for.py,sha256=VXFFcYG88EJVXnrJfa0fzh9rD_2luSty__qdzRuTAQE,27322
|
|
@@ -348,7 +348,7 @@ ansible/modules/yum_repository.py,sha256=v9nsLd5NLy33ygJ_6IYzknFDPnZaGvyKemWEL58
|
|
|
348
348
|
ansible/parsing/__init__.py,sha256=NMP9ZkK59SNdQktw76aWAXVAm5U2POXLgAK7wH-1h0g,742
|
|
349
349
|
ansible/parsing/ajson.py,sha256=wr13wRYyK_VPBVki-5hisJZZKwi1T4rSi37gWj7zrOU,1254
|
|
350
350
|
ansible/parsing/dataloader.py,sha256=Lm11qSwF3OD7kzrZJWit2UcrC8h1hExKXNPuAdli6eE,20953
|
|
351
|
-
ansible/parsing/mod_args.py,sha256=
|
|
351
|
+
ansible/parsing/mod_args.py,sha256=bDPfCFFYx9DwlJ16CHaIlWK8sXURqFSuJvXHtzcFxs0,14585
|
|
352
352
|
ansible/parsing/plugin_docs.py,sha256=XBpeEALC-eBOZJPM4jPPxbKu0dYDRDyUG4STDUsrf9o,8661
|
|
353
353
|
ansible/parsing/quoting.py,sha256=JokJozzFk7NDxDGTTZerfBntBls1NzNWyK7AQgsH5C8,1057
|
|
354
354
|
ansible/parsing/splitter.py,sha256=gRNuRkAEsf-kpGGezrr7oFO2JkNUSxZy3skAFzGyoAQ,11021
|
|
@@ -369,7 +369,7 @@ ansible/playbook/block.py,sha256=ZQgbwzqh6QcxKbjQkWtVII-kSiWeAMPlIh_U75H-TD0,165
|
|
|
369
369
|
ansible/playbook/collectionsearch.py,sha256=tJN4E9m8dRc_6UNki21htiitiVOMj8T4GR1RCArRMqI,2601
|
|
370
370
|
ansible/playbook/conditional.py,sha256=yqv1fjQEr01myNW7lejWKfCl496IEtvsIUoJ3-eU_XU,4882
|
|
371
371
|
ansible/playbook/delegatable.py,sha256=BBcw2GU85V7ome7qX0KRg-vZyjv2J890kEHjYQOyoTk,625
|
|
372
|
-
ansible/playbook/handler.py,sha256=
|
|
372
|
+
ansible/playbook/handler.py,sha256=EXKDm9FEEPhnnniz3ZtEaQlUCzFl2ne2-Ar41U8wT2U,2689
|
|
373
373
|
ansible/playbook/handler_task_include.py,sha256=kCrBThzmIRWKaecLl9UNB8VBvtVPI0dt8eHpBldsnlY,1391
|
|
374
374
|
ansible/playbook/helpers.py,sha256=f1O_o6VlZeXHdI-Zhq6U_KtT44gvr4-nSVMkDuZ6o20,15160
|
|
375
375
|
ansible/playbook/included_file.py,sha256=-Pd20gvOv2FZW6ReaoicjjIlZiJ1Sc607rFnwtrqycY,11735
|
|
@@ -380,7 +380,7 @@ ansible/playbook/play_context.py,sha256=w5P-lAyN1cr01JgSLw8tnYy4QsSyDFLzbSy_ehuc
|
|
|
380
380
|
ansible/playbook/playbook_include.py,sha256=hr3N_yV4unjhiC2IIdchY0TPSARwlv0SXH9bIsIrbaA,7493
|
|
381
381
|
ansible/playbook/role_include.py,sha256=NCgDHtXlOltJ0XXSgGTTxDVrLC6IBe_d9SgNGXtsI20,7575
|
|
382
382
|
ansible/playbook/taggable.py,sha256=PfbiQhDDafwKja2yIknJTEAHPspb7tPmCRDEO_8gmvY,3165
|
|
383
|
-
ansible/playbook/task.py,sha256=
|
|
383
|
+
ansible/playbook/task.py,sha256=K-qy32w9w_SK6tdPZRn5sobFOrYZFQt2eM9yC7SwKC4,21500
|
|
384
384
|
ansible/playbook/task_include.py,sha256=eGJOfmJj9bgQoTwz3wFvD77x9qWK2rEi20qvA24XDzs,5234
|
|
385
385
|
ansible/playbook/role/__init__.py,sha256=HSvzDNMq8DtNG4jQvZe1UAkR42vyj8Qt1ScgRBZ2MYE,29697
|
|
386
386
|
ansible/playbook/role/definition.py,sha256=ZKs9FI3kqJETFHMh-8lOH6xGY_g2siuTxYgQj5VkcDk,9550
|
|
@@ -437,7 +437,7 @@ ansible/plugins/cliconf/__init__.py,sha256=NlIs8a21RJSPOmoO-fVSJtO4OGNPxCAMFntDZ
|
|
|
437
437
|
ansible/plugins/connection/__init__.py,sha256=7B9UmhcM4divUhg-RsurhOOGQiCVeLGGh0Zp_zCvK4w,17947
|
|
438
438
|
ansible/plugins/connection/local.py,sha256=A-XQy_wIky16xrgkm2KW2jyZLpzmcUPjNOPtoQQnDJg,8339
|
|
439
439
|
ansible/plugins/connection/paramiko_ssh.py,sha256=NnCHPiVZTzJVu0EQ4p4g0k0jxUgEHC9PHvuD6IFZ6O4,30045
|
|
440
|
-
ansible/plugins/connection/psrp.py,sha256=
|
|
440
|
+
ansible/plugins/connection/psrp.py,sha256=1wihaS4h7-Yq2SVsQ9KI1ipxn7Jg9fvzmf7q7KannOw,36740
|
|
441
441
|
ansible/plugins/connection/ssh.py,sha256=zTaDGv23CmIvrXqSkMmoosLnFecszJlaFl1fDD8BOMA,62811
|
|
442
442
|
ansible/plugins/connection/winrm.py,sha256=x9FHPRkEyI_ua4PUPbYVb7_joyMJYEiGSv45jxxkNTQ,40599
|
|
443
443
|
ansible/plugins/doc_fragments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -510,7 +510,7 @@ ansible/plugins/filter/root.yml,sha256=sT1tsUZ5NBX7LjrPc-08Omg__szm9kOlamivlflJJ
|
|
|
510
510
|
ansible/plugins/filter/sha1.yml,sha256=Un-4PtcF2eCoc22ezn5QcsIotbpGTnRxAcZRzgv1BwM,729
|
|
511
511
|
ansible/plugins/filter/shuffle.yml,sha256=rcdsrsZhe5tMqtF00V8khecdVKmzHnHwkUqIdISrpQQ,685
|
|
512
512
|
ansible/plugins/filter/split.yml,sha256=rLF3diTDl3ZxxGCqEtdjqYPUwZkqlln1rxbKsuM0G_E,835
|
|
513
|
-
ansible/plugins/filter/splitext.yml,sha256=
|
|
513
|
+
ansible/plugins/filter/splitext.yml,sha256=8LnOkRdTaZwm9B560Kt__wquDwyvpKfznvICHIIcRy0,750
|
|
514
514
|
ansible/plugins/filter/strftime.yml,sha256=s4DFNaKyLiQn-vUOUpRQWJP5PLnwRcfb-SKVW0sexaU,1538
|
|
515
515
|
ansible/plugins/filter/subelements.yml,sha256=JKHy2GRpOi5zLXZVRtmZoIs_J8sDEuAR0qiT9RkLWLY,1438
|
|
516
516
|
ansible/plugins/filter/symmetric_difference.yml,sha256=2eqzKo8ZCtAY6xxd5f74TEHNhZ6rVeQVimMSRO_DgnU,1094
|
|
@@ -531,7 +531,7 @@ ansible/plugins/filter/urlsplit.py,sha256=GHNIc-Z3KrsYG-8NuuktR5iEQh3KaG1LfUus0b
|
|
|
531
531
|
ansible/plugins/filter/vault.yml,sha256=best4Ns3YLXITc1KwxLZTdOT41OFSgIJ8itdxlNYcNU,1668
|
|
532
532
|
ansible/plugins/filter/win_basename.yml,sha256=hAdBZBrh80ULOehK9-7XrFiqoOx8Mg9usKAH8WEJogg,673
|
|
533
533
|
ansible/plugins/filter/win_dirname.yml,sha256=nVHAM8iUuXYlc_xE-IO7qAOh2ZMIGZuA4IEgvgnXVtI,679
|
|
534
|
-
ansible/plugins/filter/win_splitdrive.yml,sha256=
|
|
534
|
+
ansible/plugins/filter/win_splitdrive.yml,sha256=C2MPXUTJL4zqPa4x3uDKiVftF4aHyGQME4trukBPiZk,1687
|
|
535
535
|
ansible/plugins/filter/zip.yml,sha256=LEtp9xRWuPjWDHyHdm1rVYbe1k9hdxGToLrNriRgHc4,1352
|
|
536
536
|
ansible/plugins/filter/zip_longest.yml,sha256=VHaZlibbKoh9F9cxo9Z7EakellHAvJAsliVRS4Mq_co,1256
|
|
537
537
|
ansible/plugins/httpapi/__init__.py,sha256=k5YFXPK7gug-6LkI5gihNZR5cMY6N1uRKT4wOYRWdOE,3093
|
|
@@ -568,15 +568,15 @@ ansible/plugins/lookup/subelements.py,sha256=2dZdjfOe0_yNkYMQRDWl86eFyt4YqEm1mOY
|
|
|
568
568
|
ansible/plugins/lookup/template.py,sha256=xFYWKY808hHPj7nJbaLM2mZro79p6TjpFXyAcRK4AR0,7112
|
|
569
569
|
ansible/plugins/lookup/together.py,sha256=T4J2miqHTnrDP6-CrlJ3wgI0UgyZyYVRVrDTWx3olpY,2110
|
|
570
570
|
ansible/plugins/lookup/unvault.py,sha256=5LU8Lf7Gx0yRh8z0u1giSXkd93pkSZ34ibkoQnHCsyw,2049
|
|
571
|
-
ansible/plugins/lookup/url.py,sha256=
|
|
571
|
+
ansible/plugins/lookup/url.py,sha256=8JFMlk9diqsboHr1ArYGudsapPBP995maJdzHlair74,9378
|
|
572
572
|
ansible/plugins/lookup/varnames.py,sha256=h5ZAHOx8MlEvv466AirXCaGZ5DeH95evGb2he8_aKqA,2330
|
|
573
573
|
ansible/plugins/lookup/vars.py,sha256=eXVZdwumdcp3ajaDX7JyIYeGvQ6L-HxHGfnob9Pnkg8,3424
|
|
574
574
|
ansible/plugins/netconf/__init__.py,sha256=50w1g2rhUo6L-xtiMT20jbR8WyOnhwNSRd2IRNSjNX4,17094
|
|
575
|
-
ansible/plugins/shell/__init__.py,sha256=
|
|
575
|
+
ansible/plugins/shell/__init__.py,sha256=i3ICKMXfrxslShlueu_J5IUCjJudVG0wROfCW5etgMo,9151
|
|
576
576
|
ansible/plugins/shell/cmd.py,sha256=kPCSKrJJFH5XTkmteEI3P1Da6WfPSXxDnV39VFpgD-A,2170
|
|
577
577
|
ansible/plugins/shell/powershell.py,sha256=4PcJG54USxhUDtWXhHUkVt8ixUtXEzg8J0qQwhlfSOA,11340
|
|
578
|
-
ansible/plugins/shell/sh.py,sha256=
|
|
579
|
-
ansible/plugins/strategy/__init__.py,sha256=
|
|
578
|
+
ansible/plugins/shell/sh.py,sha256=wblaY2EGdA2O00gNuTVZVgVV08RH0e_g4V_AkE50Iws,3884
|
|
579
|
+
ansible/plugins/strategy/__init__.py,sha256=pjT5mEI3a7N3SgIBXJcjQgpGC527rzddMuByN2tU4O4,57233
|
|
580
580
|
ansible/plugins/strategy/debug.py,sha256=yMmfT-lQHfR2y9bQcqrSPzqHuWZMo7V9y4ZWOXoboRE,1205
|
|
581
581
|
ansible/plugins/strategy/free.py,sha256=b7ke-4s9IcHLJWmfP8gYzc_z5n2kI-v3D0YVQBtI4x8,16483
|
|
582
582
|
ansible/plugins/strategy/host_pinned.py,sha256=GrDDQCtohmmJn3t9VOPb0lUZK_nUWy0s__z5Tq_rHfI,1875
|
|
@@ -645,7 +645,7 @@ ansible/utils/_junit_xml.py,sha256=5op7cjGK7Et0OSjcAAuUEqNWNAv5ZoNI0rkLx2ERXwM,8
|
|
|
645
645
|
ansible/utils/cmd_functions.py,sha256=VmGs5ntdVaaqAJHcCTpGG3rYAAcTNl1b2-Iw4YVOt9Y,2180
|
|
646
646
|
ansible/utils/color.py,sha256=LjJO_12OsJiavBxwSDVXtLxdTzdwd2YWUp1OJ6KcM2g,4057
|
|
647
647
|
ansible/utils/context_objects.py,sha256=vYulSJkzR3zxsQF_6_AqbPCCMy8WGC5dSqLFXJZqGIo,3034
|
|
648
|
-
ansible/utils/display.py,sha256=
|
|
648
|
+
ansible/utils/display.py,sha256=Ld3dNZTvvLRZmPCq191Iu-t4EIzoIP1fY_-X7qcoSts,32094
|
|
649
649
|
ansible/utils/encrypt.py,sha256=MU0teLATt7qtTwk-y809H5HApafSl2QMW1INWIUL3T4,7221
|
|
650
650
|
ansible/utils/fqcn.py,sha256=Jx5SwYzlbMZ-SlkjyKkM4pCe5jIyXeeo62BU1msUunU,1215
|
|
651
651
|
ansible/utils/galaxy.py,sha256=wQ3s8Mr7Ib0C2ou1SloA76ZOraJr48ADZZf_6vaNYdg,3830
|
|
@@ -678,7 +678,7 @@ ansible/vars/hostvars.py,sha256=rzxFov5bLpRtCSAFJswuRSCBx0DMNPnMJwkFKepvMuY,4764
|
|
|
678
678
|
ansible/vars/manager.py,sha256=ujVDQXWvy8BihIxGzBPX6fMeUl2AlclkwadKMo6VjSk,38583
|
|
679
679
|
ansible/vars/plugins.py,sha256=RsRU9fiLcJwPIAyTYnmVZglsiEOMCIgQskflavE-XnE,4546
|
|
680
680
|
ansible/vars/reserved.py,sha256=kZiQMPvaFin35006gLwDpX16w-9xlu6EaL4LSTKP40U,2531
|
|
681
|
-
ansible_core-2.17.
|
|
681
|
+
ansible_core-2.17.1.data/scripts/ansible-test,sha256=dyY2HtRZotRQO3b89HGXY_KnJgBvgsm4eLIe4B2LUoA,1637
|
|
682
682
|
ansible_test/__init__.py,sha256=20VPOj11c6Ut1Av9RaurgwJvFhMqkWG3vAvcCbecNKw,66
|
|
683
683
|
ansible_test/_data/ansible.cfg,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
684
684
|
ansible_test/_data/coveragerc,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -702,7 +702,7 @@ ansible_test/_data/pytest/config/default.ini,sha256=3f5D0MA9l2RafBBriLaG2eH3ePHP
|
|
|
702
702
|
ansible_test/_data/pytest/config/legacy.ini,sha256=WBpVsIeHL2szv5oFznM2WXYizBgYhBrivpvQliYUKTw,85
|
|
703
703
|
ansible_test/_data/requirements/ansible-test.txt,sha256=YnGKjOaFRegMcwnUgWuHcCr8rfb4kJVoHNaQ5BxFHvw,260
|
|
704
704
|
ansible_test/_data/requirements/ansible.txt,sha256=SoGhVAYgDYWYKwMSH0g8WsCQczVft6Obb5ePPMQPRTU,838
|
|
705
|
-
ansible_test/_data/requirements/constraints.txt,sha256=
|
|
705
|
+
ansible_test/_data/requirements/constraints.txt,sha256=XzihQc6_VxMGAGU5zX2odpKYJVEvCzaOO18pEm2G9Zw,893
|
|
706
706
|
ansible_test/_data/requirements/sanity.ansible-doc.in,sha256=9KRJJ-n37IMHpLJLv_VmFOhYF8Y3Vnk6eRyhwVKzC8A,108
|
|
707
707
|
ansible_test/_data/requirements/sanity.ansible-doc.txt,sha256=rmCIJGr5BK2pq84QLbO3uDudXkX5Q1Be4B19kihcK-E,169
|
|
708
708
|
ansible_test/_data/requirements/sanity.changelog.in,sha256=gWVsUch6Jxrq55MEutB-b9GB6Pp2PL-FqM84v-aI4Ng,78
|
|
@@ -760,7 +760,7 @@ ansible_test/_internal/locale_util.py,sha256=tjRbwKmgMQc1ysIhvP8yBhFcNA-2UCaWfQB
|
|
|
760
760
|
ansible_test/_internal/metadata.py,sha256=c9ThXPUlgeKYhaTUmfCSS4INRNQ1JhN2KEOVaX3m1Gk,4791
|
|
761
761
|
ansible_test/_internal/payload.py,sha256=1Pw05OEHvP3LMQnoLXch8631c94YMklWlpDn0CvQECw,8012
|
|
762
762
|
ansible_test/_internal/provisioning.py,sha256=9Zl3xQqljx0MGDTp55Q4LZPWQ7Afj5K87cGsXzPGS5Y,7320
|
|
763
|
-
ansible_test/_internal/pypi_proxy.py,sha256=
|
|
763
|
+
ansible_test/_internal/pypi_proxy.py,sha256=1y21FjIyzXMdbFFWiOQWr3BocxXTsavw_NCagSkD0uM,6019
|
|
764
764
|
ansible_test/_internal/python_requirements.py,sha256=tilVPxEthIWBYd7PGx89cVyYX_Ahy9CVxlJ10PfkzUU,15672
|
|
765
765
|
ansible_test/_internal/ssh.py,sha256=WeVvn3ReHmjg6Im5BdSBRl1YIj1lOmi71jO9T5fTkik,10781
|
|
766
766
|
ansible_test/_internal/target.py,sha256=Whtb_n0jn4zbiMmX7je5jewgzsRczfXRm_ndYtjTSTQ,25320
|
|
@@ -979,9 +979,9 @@ ansible_test/config/cloud-config-vultr.ini.template,sha256=XLKHk3lg_8ReQMdWfZzhh
|
|
|
979
979
|
ansible_test/config/config.yml,sha256=wb3knoBmZewG3GWOMnRHoVPQWW4vPixKLPMNS6vJmTc,2620
|
|
980
980
|
ansible_test/config/inventory.networking.template,sha256=bFNSk8zNQOaZ_twaflrY0XZ9mLwUbRLuNT0BdIFwvn4,1335
|
|
981
981
|
ansible_test/config/inventory.winrm.template,sha256=1QU8W-GFLnYEw8yY9bVIvUAVvJYPM3hyoijf6-M7T00,1098
|
|
982
|
-
ansible_core-2.17.
|
|
983
|
-
ansible_core-2.17.
|
|
984
|
-
ansible_core-2.17.
|
|
985
|
-
ansible_core-2.17.
|
|
986
|
-
ansible_core-2.17.
|
|
987
|
-
ansible_core-2.17.
|
|
982
|
+
ansible_core-2.17.1.dist-info/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
983
|
+
ansible_core-2.17.1.dist-info/METADATA,sha256=eKCnIDto9NA6GHB1MkMmK45QWZ4X-gJhmhpN24gzO10,6945
|
|
984
|
+
ansible_core-2.17.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
985
|
+
ansible_core-2.17.1.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
|
|
986
|
+
ansible_core-2.17.1.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
|
|
987
|
+
ansible_core-2.17.1.dist-info/RECORD,,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# do not add a cryptography or pyopenssl constraint to this file, they require special handling, see get_cryptography_requirements in python_requirements.py
|
|
2
2
|
# do not add a coverage constraint to this file, it is handled internally by ansible-test
|
|
3
|
+
pypsrp < 1.0.0 # in case the next major version is too big of a change
|
|
3
4
|
pywinrm >= 0.3.0 ; python_version < '3.11' # message encryption support
|
|
4
5
|
pywinrm >= 0.4.3 ; python_version >= '3.11' # support for Python 3.11
|
|
5
6
|
pytest >= 4.5.0 # pytest 4.5.0 added support for --strict-markers
|
|
@@ -69,7 +69,7 @@ def run_pypi_proxy(args: EnvironmentConfig, targets_use_pypi: bool) -> None:
|
|
|
69
69
|
display.warning('Unable to use the PyPI proxy because Docker is not available. Installation of packages using `pip` may fail.')
|
|
70
70
|
return
|
|
71
71
|
|
|
72
|
-
image = 'quay.io/ansible/pypi-test-container:
|
|
72
|
+
image = 'quay.io/ansible/pypi-test-container:3.1.0'
|
|
73
73
|
port = 3141
|
|
74
74
|
|
|
75
75
|
run_support_container(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|