ansible-core 2.17.0rc2__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.

@@ -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
- Add-CSharpType -References $csharp_utils -TempPath $new_tmp -IncludeDebugInfo
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) {
@@ -17,6 +17,6 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- __version__ = '2.17.0rc2'
20
+ __version__ = '2.17.1'
21
21
  __author__ = 'Ansible, Inc.'
22
22
  __codename__ = "Gallows Pole"
@@ -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 (!legalInputs.Contains(paramKey, StringComparer.OrdinalIgnoreCase))
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 = $env:TMP,
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 = $TempPath
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
- $ignore_warnings = [System.Collections.ArrayList]@()
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
- $compile = $provider.CompileAssemblyFromDom($compile_parameters, $compile_units)
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()) {
@@ -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 = action_loader.find_plugin_with_context(item, collection_list=self._collection_list)
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
@@ -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,
@@ -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: '{{ "/etc//hoasdf/" | splitext }}'
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
- # just the drive letter
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 drive letter
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: List in which the first element is the drive letter and the second the rest of the path.
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
@@ -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, shlex.quote(text_type(v))) for k, v in kwargs.items()])
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
- cmd = [shlex.quote(c) for c in cmd]
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
- cmd = [shlex.quote(c) for c in cmd]
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
- cmd = [shlex.quote(c) for c in cmd]
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
- cmd = [shlex.quote(c) for c in cmd]
127
-
128
- return ' '.join(cmd)
120
+ return shlex.join(cmd)
129
121
 
130
122
  def remove(self, path, recurse=False):
131
- path = shlex.quote(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', shlex.quote(path)]
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
- # shlex.quote will make the shell return the string verbatim
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
- # don't quote the cmd if it's an empty string, because this will break pipelining mode
211
- if cmd.strip() != '':
212
- cmd = shlex.quote(cmd)
201
+ env_string = env_string.strip()
202
+ if env_string:
203
+ env_string += ' '
213
204
 
214
- cmd_parts = []
215
- if shebang:
216
- shebang = shebang.replace("#!", "").strip()
217
- else:
218
- shebang = ""
219
- cmd_parts.extend([env_string.strip(), shebang, cmd])
220
- if arg_path is not None:
221
- cmd_parts.append(arg_path)
222
- new_cmd = " ".join(cmd_parts)
223
- return new_cmd
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"""
@@ -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 = shlex.quote(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
- templar.available_variables = {}
553
- seen = []
552
+ seen = set()
554
553
  for handler in handlers:
555
- if listeners := handler.listen:
556
- listeners = handler.get_validated_value(
557
- 'listen',
558
- handler.fattributes.get('listen'),
559
- listeners,
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
@@ -17,6 +17,6 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- __version__ = '2.17.0rc2'
20
+ __version__ = '2.17.1'
21
21
  __author__ = 'Ansible, Inc.'
22
22
  __codename__ = "Gallows Pole"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ansible-core
3
- Version: 2.17.0rc2
3
+ Version: 2.17.1
4
4
  Summary: Radically simple IT automation
5
5
  Home-page: https://ansible.com/
6
6
  Author: Ansible, Inc.
@@ -3,7 +3,7 @@ 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=grMBcL2FJJlTs0BXFMNu_bgy_-y625b3VRpw0HD9G68,835
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
@@ -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=6jHQZntr_WTD6tRlVV3mxgsvSZksdVtJM95HC_b9N2E,10128
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=6dPo5tSV6B-KipCBrz3iTvOM2Y_yj-gn_u7OKKmfjAs,3179
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=grMBcL2FJJlTs0BXFMNu_bgy_-y625b3VRpw0HD9G68,835
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=OJWK7DJcC03dINFN84WirWgtcFlnV66_lLLAlefZZf8,78388
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=MdM_0YR0eyNrtrgQtNnWP182ZBWa-2MR_CfHt5JoHzU,18847
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
@@ -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=boqUujyLuY567BNbOPprX2szwjLaEiSsPWRHxhaCggA,14015
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=bNqRc3eDzapsoycG0JUEFGOlk2GYcAXxBguW6Kk0j08,2226
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=iu_dr-Juvg86607AQLtlDDFkrUotELzW2BAQtPYA4-k,21406
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
@@ -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=BP4cb5btISHFeyP4K-YBty7jd1PfV90yjIhpB1cuxQY,748
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=NCgVxQ41uL5IwFVARPJQdJ2faX-Po_VR13me684_1RY,819
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
@@ -572,11 +572,11 @@ ansible/plugins/lookup/url.py,sha256=8JFMlk9diqsboHr1ArYGudsapPBP995maJdzHlair74
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=SRvk3tV11-igm9typtjVB7BmOI-FSZGHqjX0q166SSE,9520
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=SXwK-BetmOCjJkT7thHsTlfJh1cvxsXU1bncxhgWtnU,3899
579
- ansible/plugins/strategy/__init__.py,sha256=BvCm78HaXU6AfxtLZDyFG2EeuN4CVwAjNrNsVc_PovY,57913
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
@@ -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.0rc2.data/scripts/ansible-test,sha256=dyY2HtRZotRQO3b89HGXY_KnJgBvgsm4eLIe4B2LUoA,1637
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
@@ -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=C_AppiOKHtTfQPMYOSJQJyPB01K9UQ1-bUTOBcnO11E,6019
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.0rc2.dist-info/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
983
- ansible_core-2.17.0rc2.dist-info/METADATA,sha256=iYAzAFo8Bkvga6-m7XliJdPukm6wvA_gh-woWz1NNPg,6948
984
- ansible_core-2.17.0rc2.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
985
- ansible_core-2.17.0rc2.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
986
- ansible_core-2.17.0rc2.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
987
- ansible_core-2.17.0rc2.dist-info/RECORD,,
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,,
@@ -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:2.0.0'
72
+ image = 'quay.io/ansible/pypi-test-container:3.1.0'
73
73
  port = 3141
74
74
 
75
75
  run_support_container(