ansible-core 2.17.0rc1__py3-none-any.whl → 2.17.1rc1__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 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
- desc = " ".join(doc['description'])
1299
+ descs = doc['description']
1300
1300
  else:
1301
- desc = doc['description']
1302
- text.append("%s" % DocCLI.warp_fill(DocCLI.tty_ify(desc), limit, initial_indent=opt_indent, subsequent_indent=opt_indent))
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 inicates it is required):" % ("=" if C.ANSIBLE_NOCOLOR else 'red'))
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
- desc = " ".join(doc.pop('description'))
1359
+ descs = doc.pop('description')
1359
1360
  else:
1360
- desc = doc.pop('description')
1361
+ descs = [doc.pop('description')]
1361
1362
 
1362
1363
  text.append('')
1363
- text.append(DocCLI.warp_fill(DocCLI.tty_ify(desc), limit, initial_indent=base_indent, subsequent_indent=base_indent))
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 inicates it is required):" % ("=" if C.ANSIBLE_NOCOLOR else 'red'))
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
- 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.0rc1'
20
+ __version__ = '2.17.1rc1'
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()) {
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. V(all) will follow all redirects.
111
- V(safe) will follow only "safe" redirects, where "safe" means that the client is only
112
- doing a GET or HEAD on the URI to which it is being redirected. V(none) will not follow
113
- any redirects. Note that V(true) and V(false) choices are accepted for backwards compatibility,
114
- where V(true) is the equivalent of V(all) and V(false) is the equivalent of V(safe). V(true) and V(false)
115
- are deprecated and will be removed in some future version of Ansible.
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:
@@ -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,
@@ -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: '{{ "/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
@@ -99,12 +99,12 @@ options:
99
99
  - section: url_lookup
100
100
  key: follow_redirects
101
101
  choices:
102
- - urllib2
103
- - all
104
- - 'yes'
105
- - safe
106
- - none
107
- - 'no'
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, 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.0rc1'
20
+ __version__ = '2.17.1rc1'
21
21
  __author__ = 'Ansible, Inc.'
22
22
  __codename__ = "Gallows Pole"
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
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ansible-core
3
- Version: 2.17.0rc1
3
+ Version: 2.17.1rc1
4
4
  Summary: Radically simple IT automation
5
5
  Home-page: https://ansible.com/
6
6
  Author: Ansible, Inc.
@@ -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=V3ZaI78P9iI1sYQQWErIjJjq0faSHe5D6OXh3C-Vv1k,835
6
+ ansible/release.py,sha256=przYupRfciXEc2JycbwcsDAJqgFknvuQKGWRVxIsT6U,835
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=kjyJlvlWwrE87I9TT0KT_XEoaltXqDPtBJHHBbGr1QU,69602
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=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=V3ZaI78P9iI1sYQQWErIjJjq0faSHe5D6OXh3C-Vv1k,835
143
+ ansible/module_utils/ansible_release.py,sha256=przYupRfciXEc2JycbwcsDAJqgFknvuQKGWRVxIsT6U,835
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
@@ -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=gO-ALWZ1T7sp9mJk78Jnmku2KXnhMH06ANfevGA9oX4,28368
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=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
@@ -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=WRpeCYp77UZpjp9qRahgn-He-Kq-gp2Aa52aBWs2e0U,36732
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=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
@@ -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=JteVmGKClq0fI29W6CKbnStNe3TxWWdAplTjRbuaPlU,9068
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=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
@@ -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=lwcxAZDBDsSitFXqOde7QwQXoW2QkN-ZHIMw9ms2rqY,32080
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.0rc1.data/scripts/ansible-test,sha256=dyY2HtRZotRQO3b89HGXY_KnJgBvgsm4eLIe4B2LUoA,1637
681
+ ansible_core-2.17.1rc1.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=MzqRG9eh7CYXv3K8HSX9lQ6tNzO-_WphuA9z7pb0v80,821
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
@@ -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.0rc1.dist-info/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
983
- ansible_core-2.17.0rc1.dist-info/METADATA,sha256=6wgPzc0F9QJGZxMPkGJoH3JeE2EiCaK2qLic9wu02Dc,6948
984
- ansible_core-2.17.0rc1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
985
- ansible_core-2.17.0rc1.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
986
- ansible_core-2.17.0rc1.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
987
- ansible_core-2.17.0rc1.dist-info/RECORD,,
982
+ ansible_core-2.17.1rc1.dist-info/COPYING,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
983
+ ansible_core-2.17.1rc1.dist-info/METADATA,sha256=OoYHrOSlwHhxPAauGpu1iONMk2qEvaNqym0zueuhPNE,6948
984
+ ansible_core-2.17.1rc1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
985
+ ansible_core-2.17.1rc1.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
986
+ ansible_core-2.17.1rc1.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
987
+ ansible_core-2.17.1rc1.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