ansible-core 2.15.1__py3-none-any.whl → 2.15.2__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.

Files changed (43) hide show
  1. ansible/config/manager.py +1 -1
  2. ansible/galaxy/collection/__init__.py +12 -15
  3. ansible/module_utils/ansible_release.py +1 -1
  4. ansible/modules/apt_key.py +8 -5
  5. ansible/modules/apt_repository.py +2 -0
  6. ansible/modules/dnf5.py +5 -7
  7. ansible/modules/find.py +3 -0
  8. ansible/modules/validate_argument_spec.py +1 -1
  9. ansible/plugins/action/template.py +26 -15
  10. ansible/plugins/connection/paramiko_ssh.py +8 -0
  11. ansible/plugins/connection/psrp.py +3 -3
  12. ansible/plugins/connection/ssh.py +19 -2
  13. ansible/plugins/filter/comment.yml +1 -1
  14. ansible/plugins/filter/split.yml +1 -1
  15. ansible/plugins/filter/to_yaml.yml +1 -1
  16. ansible/plugins/lookup/template.py +11 -6
  17. ansible/plugins/strategy/__init__.py +20 -12
  18. ansible/plugins/test/change.yml +1 -1
  19. ansible/plugins/test/changed.yml +1 -1
  20. ansible/plugins/test/reachable.yml +1 -1
  21. ansible/plugins/test/succeeded.yml +1 -1
  22. ansible/plugins/test/success.yml +1 -1
  23. ansible/plugins/test/successful.yml +1 -1
  24. ansible/plugins/test/unreachable.yml +1 -1
  25. ansible/release.py +1 -1
  26. ansible/template/__init__.py +38 -24
  27. {ansible_core-2.15.1.dist-info → ansible_core-2.15.2.dist-info}/METADATA +1 -1
  28. {ansible_core-2.15.1.dist-info → ansible_core-2.15.2.dist-info}/RECORD +43 -43
  29. ansible_test/_data/completion/remote.txt +2 -1
  30. ansible_test/_internal/__init__.py +7 -0
  31. ansible_test/_internal/commands/integration/cloud/__init__.py +2 -2
  32. ansible_test/_internal/commands/sanity/validate_modules.py +2 -2
  33. ansible_test/_internal/containers.py +2 -2
  34. ansible_test/_internal/coverage_util.py +2 -2
  35. ansible_test/_internal/payload.py +2 -2
  36. ansible_test/_internal/provisioning.py +5 -2
  37. ansible_test/_internal/pypi_proxy.py +4 -4
  38. ansible_test/_internal/util_common.py +38 -6
  39. {ansible_core-2.15.1.data → ansible_core-2.15.2.data}/scripts/ansible-test +0 -0
  40. {ansible_core-2.15.1.dist-info → ansible_core-2.15.2.dist-info}/COPYING +0 -0
  41. {ansible_core-2.15.1.dist-info → ansible_core-2.15.2.dist-info}/WHEEL +0 -0
  42. {ansible_core-2.15.1.dist-info → ansible_core-2.15.2.dist-info}/entry_points.txt +0 -0
  43. {ansible_core-2.15.1.dist-info → ansible_core-2.15.2.dist-info}/top_level.txt +0 -0
ansible/release.py CHANGED
@@ -19,6 +19,6 @@
19
19
  from __future__ import (absolute_import, division, print_function)
20
20
  __metaclass__ = type
21
21
 
22
- __version__ = '2.15.1'
22
+ __version__ = '2.15.2'
23
23
  __author__ = 'Ansible, Inc.'
24
24
  __codename__ = "Ten Years Gone"
@@ -153,6 +153,39 @@ def _escape_backslashes(data, jinja_env):
153
153
  return data
154
154
 
155
155
 
156
+ def _create_overlay(data, overrides, jinja_env):
157
+ if overrides is None:
158
+ overrides = {}
159
+
160
+ try:
161
+ has_override_header = data.startswith(JINJA2_OVERRIDE)
162
+ except (TypeError, AttributeError):
163
+ has_override_header = False
164
+
165
+ if overrides or has_override_header:
166
+ overlay = jinja_env.overlay(**overrides)
167
+ else:
168
+ overlay = jinja_env
169
+
170
+ # Get jinja env overrides from template
171
+ if has_override_header:
172
+ eol = data.find('\n')
173
+ line = data[len(JINJA2_OVERRIDE):eol]
174
+ data = data[eol + 1:]
175
+ for pair in line.split(','):
176
+ if ':' not in pair:
177
+ raise AnsibleError("failed to parse jinja2 override '%s'."
178
+ " Did you use something different from colon as key-value separator?" % pair.strip())
179
+ (key, val) = pair.split(':', 1)
180
+ key = key.strip()
181
+ if hasattr(overlay, key):
182
+ setattr(overlay, key, ast.literal_eval(val.strip()))
183
+ else:
184
+ display.warning(f"Could not find Jinja2 environment setting to override: '{key}'")
185
+
186
+ return data, overlay
187
+
188
+
156
189
  def is_possibly_template(data, jinja_env):
157
190
  """Determines if a string looks like a template, by seeing if it
158
191
  contains a jinja2 start delimiter. Does not guarantee that the string
@@ -705,7 +738,7 @@ class Templar:
705
738
  variable = self._convert_bare_variable(variable)
706
739
 
707
740
  if isinstance(variable, string_types):
708
- if not self.is_possibly_template(variable):
741
+ if not self.is_possibly_template(variable, overrides):
709
742
  return variable
710
743
 
711
744
  # Check to see if the string we are trying to render is just referencing a single
@@ -776,8 +809,9 @@ class Templar:
776
809
 
777
810
  templatable = is_template
778
811
 
779
- def is_possibly_template(self, data):
780
- return is_possibly_template(data, self.environment)
812
+ def is_possibly_template(self, data, overrides=None):
813
+ data, env = _create_overlay(data, overrides, self.environment)
814
+ return is_possibly_template(data, env)
781
815
 
782
816
  def _convert_bare_variable(self, variable):
783
817
  '''
@@ -918,31 +952,11 @@ class Templar:
918
952
  if fail_on_undefined is None:
919
953
  fail_on_undefined = self._fail_on_undefined_errors
920
954
 
921
- has_template_overrides = data.startswith(JINJA2_OVERRIDE)
922
-
923
955
  try:
924
956
  # NOTE Creating an overlay that lives only inside do_template means that overrides are not applied
925
957
  # when templating nested variables in AnsibleJ2Vars where Templar.environment is used, not the overlay.
926
958
  # This is historic behavior that is kept for backwards compatibility.
927
- if overrides:
928
- myenv = self.environment.overlay(overrides)
929
- elif has_template_overrides:
930
- myenv = self.environment.overlay()
931
- else:
932
- myenv = self.environment
933
-
934
- # Get jinja env overrides from template
935
- if has_template_overrides:
936
- eol = data.find('\n')
937
- line = data[len(JINJA2_OVERRIDE):eol]
938
- data = data[eol + 1:]
939
- for pair in line.split(','):
940
- if ':' not in pair:
941
- raise AnsibleError("failed to parse jinja2 override '%s'."
942
- " Did you use something different from colon as key-value separator?" % pair.strip())
943
- (key, val) = pair.split(':', 1)
944
- key = key.strip()
945
- setattr(myenv, key, ast.literal_eval(val.strip()))
959
+ data, myenv = _create_overlay(data, overrides, self.environment)
946
960
 
947
961
  if escape_backslashes:
948
962
  # Allow users to specify backslashes in playbooks as "\\" instead of as "\\\\".
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ansible-core
3
- Version: 2.15.1
3
+ Version: 2.15.2
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=IvyRvY64pT0on94qCLibxgDJ0-7_2CRoaZ5kfGOl54Q,1395
3
3
  ansible/constants.py,sha256=JLIDnuSz3_PbtXWsL4vnvVBbxlh3lSrJREd7T73atEI,8293
4
4
  ansible/context.py,sha256=OzSlaA_GgGRyyf5I209sy19_eGOX6HXn441W9w_FcvU,2018
5
5
  ansible/keyword_desc.yml,sha256=FYY0Ld1Xc3AxJ_Tefz78kRSYzIKGS8qcPtVk370J118,7367
6
- ansible/release.py,sha256=KWpTXcUExURZxPHePF2H6RGLidT5f3geGFOdlFq3jow,918
6
+ ansible/release.py,sha256=PkcmHI8311b8VMFltNqDtbzltSVPXcn8_lyC4v2T3IQ,918
7
7
  ansible/_vendor/__init__.py,sha256=wJRKH7kI9OzYVY9hgSchOsTNTmTnugpPLGYj9Y5akX0,2086
8
8
  ansible/cli/__init__.py,sha256=ZK8bKuMmeRqeAcePriGtJ0tMuoDur3sN-ySBmOzAF3c,28687
9
9
  ansible/cli/adhoc.py,sha256=pGW6eysaireovp4sVsUuntg-l1o7DSujuhxVhVC2zsM,8230
@@ -27,7 +27,7 @@ ansible/compat/selectors/__init__.py,sha256=dD8KQZBa0NUi-hxhGx0eppTE3wHdMIchORAp
27
27
  ansible/config/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  ansible/config/ansible_builtin_runtime.yml,sha256=G_Kl7zWgFwkShHEYt0y9Y293jBJRDIDWD1z9E1OIAKw,375893
29
29
  ansible/config/base.yml,sha256=EBtqnHK445QQiP9v4IlfrDy7-DZyY2GP872u8VSEYQQ,84100
30
- ansible/config/manager.py,sha256=qdZ0G8NiG1Sm6X9muZjiLixP6sUJieWKW-qPEX5-I5g,25362
30
+ ansible/config/manager.py,sha256=WhMhopX7aH_ncl8lqPZatfkPZikw2SlcJLs0j3e97WA,25362
31
31
  ansible/errors/__init__.py,sha256=p_RaO3GztgMyKdlS8CWMoM-WRmSSZrrM6-pFsjHrz5s,14806
32
32
  ansible/errors/yaml_strings.py,sha256=p8WIWbjKSIvr_MWx3jOyGyUZMXoKttTPzuWVbHMwdmY,3942
33
33
  ansible/executor/__init__.py,sha256=1lMXN1i2fFqslda4BmeI5tpYMFP95D5Wpr1AjDJi-SQ,833
@@ -60,7 +60,7 @@ ansible/galaxy/api.py,sha256=deSYsFinaJodT2Y9-XnOerWIwYY8V2AWQ_9kZI0pWCE,39872
60
60
  ansible/galaxy/role.py,sha256=roEhuloz2-UHLdNwK7pqRCYsOLpu_Xg6sC_nyE5A30w,19086
61
61
  ansible/galaxy/token.py,sha256=K0dAwD3Fjkn3Zs2N9sG98UesSWfAukie47QGyYpIf0M,6167
62
62
  ansible/galaxy/user_agent.py,sha256=x7cJzzpnTngHcwqSUd2hg0i28Dv0tbAyBdke5CSiNhM,813
63
- ansible/galaxy/collection/__init__.py,sha256=J70mRatMRC3DJ1yGICZQaLA4Av3daqEkzI6O0REbLZk,77340
63
+ ansible/galaxy/collection/__init__.py,sha256=U5_Gn33Fz2Ope0448KnGlh1rSArK3vU2LSryri8Ptlg,77327
64
64
  ansible/galaxy/collection/concrete_artifact_manager.py,sha256=lF7_9jvTvVB0DMjMvPD9N6kT7L4zsX7ZrSfB-J-y-Qw,29180
65
65
  ansible/galaxy/collection/galaxy_api_proxy.py,sha256=HWnMiWIEt1YW7srbnFXjRsgpSC-3Iwj7-wkrkmVtXkA,7972
66
66
  ansible/galaxy/collection/gpg.py,sha256=1wk22RJnX--FsB-4h_EdaT05PWlx9AMxhfH3H7db1i4,7312
@@ -140,7 +140,7 @@ ansible/inventory/host.py,sha256=wXJp6kpSaZtDr4JNsgdAuhi5MzQ9LTQzaAH10zoVbIA,505
140
140
  ansible/inventory/manager.py,sha256=tGwhBR6poLuG_i4jZ5RGOG-rH4gu4DBfT0-4iLLZZMs,29490
141
141
  ansible/module_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
142
142
  ansible/module_utils/_text.py,sha256=F_YfeaxhwmTI16HICAzQS9ZmlKgBDdQ4mqR-Kh--okg,597
143
- ansible/module_utils/ansible_release.py,sha256=KWpTXcUExURZxPHePF2H6RGLidT5f3geGFOdlFq3jow,918
143
+ ansible/module_utils/ansible_release.py,sha256=PkcmHI8311b8VMFltNqDtbzltSVPXcn8_lyC4v2T3IQ,918
144
144
  ansible/module_utils/api.py,sha256=BTo7stVOANbtd-ngZslaqx70r9t5gfvo44cKyu5SFjU,5837
145
145
  ansible/module_utils/basic.py,sha256=KwFTKMws6bPfSEP1fIc7Srvan6b34EEbZ5nedfhhiTw,87493
146
146
  ansible/module_utils/connection.py,sha256=XHxMlyAdwLiXDSo8jBMkV61-lz_0FDJUYH1B152UGJU,8430
@@ -278,8 +278,8 @@ ansible/modules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
278
278
  ansible/modules/_include.py,sha256=ta9jlFnEv_gb9DMdPKBwO3ZoBX8-ljmyaB3H_BUZYI8,3138
279
279
  ansible/modules/add_host.py,sha256=_iCqmf-fzBR6Nw10pS95knwniVZlYC7tAJYpnKQGaOY,3909
280
280
  ansible/modules/apt.py,sha256=vxpOLORc21bmO0Qkz7OYf02n-QYIEUzVqoGzaBt2uZ8,59434
281
- ansible/modules/apt_key.py,sha256=tLnq96QpSwJWuWzvnHn6e-19ci8BmCnqQ7_SMyhDcqw,17855
282
- ansible/modules/apt_repository.py,sha256=Br-KH9fR1lWTviH8gURZYZcrXmnt2b6eqSk61MizJP4,30234
281
+ ansible/modules/apt_key.py,sha256=OEehrhf3rKbMqY2TXalk9xVVQVWghtb4cWRVlwVn0nc,18128
282
+ ansible/modules/apt_repository.py,sha256=7SeuEhTi8F59POkiCSDhxatTHe4BM5wv1D_g4i8B-hE,30289
283
283
  ansible/modules/assemble.py,sha256=FmDXZ2cBp8X0Q-riBowEs_dUsEafwet6CLsd5RuonGM,8971
284
284
  ansible/modules/assert.py,sha256=7C_DFHatc7EQ9FOSCI_Gr_ZtrpRVM3yVeom-ipw2N4E,2816
285
285
  ansible/modules/async_status.py,sha256=CCGFqq0FjXKVSXY59rDJA0rfopWfZykJwdObWc3pSWE,4392
@@ -292,13 +292,13 @@ ansible/modules/deb822_repository.py,sha256=uVmdJId_qMFJLpFpcgDkDUsl7hZmS7UxhLVk
292
292
  ansible/modules/debconf.py,sha256=uCnyPYGhNPHq7cBUVzfxHp_5-N8RauBL8zlc19NHQic,7732
293
293
  ansible/modules/debug.py,sha256=_wSyvOmlhpDeiD40oC_uwbRisSJLVbfIbEN98TJxVfs,2958
294
294
  ansible/modules/dnf.py,sha256=OqX1KZlkop-pW5ye1kSUQqbn4y41wgDcVTdSf-VPJX0,59955
295
- ansible/modules/dnf5.py,sha256=aGdw6f75dfxHNN7ilY77Zthv3ncHWt5jlAEbnINKDDc,25651
295
+ ansible/modules/dnf5.py,sha256=EPhfa7i1TgbZ3vJOzGvSXG458cR444sjRg5Jv_WTZUg,25603
296
296
  ansible/modules/dpkg_selections.py,sha256=X3owrI7nDVM2tYOiVgLPkzBEZxfwkfBuomjbAfzG1GQ,2408
297
297
  ansible/modules/expect.py,sha256=dselod_fRiiUVKXZa-kt6xtoz1RUEZB30Mn3xZmqFDQ,8653
298
298
  ansible/modules/fail.py,sha256=AI4gNQC7E5U2Vs7QiIlFk7PcWozN0tXtiVPa_LJrQpk,1710
299
299
  ansible/modules/fetch.py,sha256=TDfUMk3zim4Bjt9D6nv0cjrh7ggzQAXMA02p61mUBOo,4267
300
300
  ansible/modules/file.py,sha256=16a6R2WvXQWrZiW4P2pfwae4ljN1KGGRNcb4gK9MwcI,40890
301
- ansible/modules/find.py,sha256=CnlnCmEtwh_roDJcSTxJZGZKrroH6i1f7_qfoPREIYA,19182
301
+ ansible/modules/find.py,sha256=q9k261Z9NJYXGs-YY9neFXK7yjrPeUDwEiiMis-uyGg,19420
302
302
  ansible/modules/gather_facts.py,sha256=9KeprPoUly-WNfDTngSee48PBlqKo4wuk-yZMcfmCN4,2560
303
303
  ansible/modules/get_url.py,sha256=UWqSiwKCwtqDo79ieyS7b5ZBtV7Euh8yjjftKNVhioQ,27007
304
304
  ansible/modules/getent.py,sha256=Lf6-fu8L9VvqF8MSu2r-4uXkHig8sSKX8mqyxlXn-o8,5676
@@ -343,7 +343,7 @@ ansible/modules/template.py,sha256=k0h7j9n9v2efC0f1boCsTq2NwgTLkFuQxgxmUgq4nZE,3
343
343
  ansible/modules/unarchive.py,sha256=kO7V_VBll7n__wQum3BepmBHgQzdbfU0CB0_sf9v49E,44322
344
344
  ansible/modules/uri.py,sha256=WxTR6SU12aYFQRmoK94-C6t5sOFh_iSFXi3CQVQAXCk,28484
345
345
  ansible/modules/user.py,sha256=_CRsU_ZcTr90zB1EzF1pJ8OH-wieK0eoLCdcug--8a4,116547
346
- ansible/modules/validate_argument_spec.py,sha256=EfnD0_Ge9JsMUpvrI3krMvGqIXJEbwlg2BVz5cqQn4w,3082
346
+ ansible/modules/validate_argument_spec.py,sha256=kZanwHDzN14bSWbuxxjbOiPN_M-32DvJ2kR5FWizkps,3129
347
347
  ansible/modules/wait_for.py,sha256=3-oqc2JneQcptTjJxty_2qy1zv2GWh36aKk4vpC0ajk,26530
348
348
  ansible/modules/wait_for_connection.py,sha256=YKLM15BMeJxi7ev0h5bRxo5DVWK9yKV_6xaP2LyUfvY,3461
349
349
  ansible/modules/yum.py,sha256=5dgsGHH-qaxLwjE_dzcsV5jCdT3nyTkGHXV0y-JcdHE,73989
@@ -417,7 +417,7 @@ ansible/plugins/action/service.py,sha256=flXBjcOtqaC7V76CDd7NOYOm9wmRS0DznOQsFdq
417
417
  ansible/plugins/action/set_fact.py,sha256=vHpOEwTa0FBR4kuGJMiTI-_9VN6FJU-aGuL-w63CxPw,2818
418
418
  ansible/plugins/action/set_stats.py,sha256=SlT1E2LoY-oPocGx8R9m2KrfPe1qJsjBqBHC26iAUaw,2839
419
419
  ansible/plugins/action/shell.py,sha256=c2FK6E_jXU3dytCBySjtludHi7gRYrQIaZBrKv0MiC4,1254
420
- ansible/plugins/action/template.py,sha256=arQdIU8eSGT7Njr6hupedbWKsbttjMTGmkltKae9ubI,9978
420
+ ansible/plugins/action/template.py,sha256=oiFJp-p8ULohtHGpQPK3qcB524V6MWaN2OJvTqjiLfw,10015
421
421
  ansible/plugins/action/unarchive.py,sha256=J8077hwvgS_U_MFDdxu6Hs0lAyEocxtvihdRTGCx4-w,4895
422
422
  ansible/plugins/action/uri.py,sha256=fziCyB5eLijVB4CyaEf-KpKWbM9KRSBStecl_ZlvKIc,4006
423
423
  ansible/plugins/action/validate_argument_spec.py,sha256=Y1FJCABwwP-gDyKLjFwYr9f_NPBTihVqPNKaAgL3cEQ,3957
@@ -440,9 +440,9 @@ ansible/plugins/callback/tree.py,sha256=Nw9t7QBW87tGrSvX7IsiBoakyiVC10eIijUaMpsq
440
440
  ansible/plugins/cliconf/__init__.py,sha256=a_Am6c0D8jbeZlc9Q1KYXemoiBf8CNbxF-ErsU8KdtE,22762
441
441
  ansible/plugins/connection/__init__.py,sha256=wuMOmg7G5tbluCy4uecRXG_pc0v3-NdUt7PX9RAzgho,16712
442
442
  ansible/plugins/connection/local.py,sha256=W2HFk14nKVaMZUE7YeX2bJLL0dvsVqYRf3qtCDdA2x4,8251
443
- ansible/plugins/connection/paramiko_ssh.py,sha256=h5ZWvRCTBWmDG-8Dwu1bOnRxLpaenDdT18ninYp0BY0,29418
444
- ansible/plugins/connection/psrp.py,sha256=I_wlNupun2ktjIk8eOBEWljH6aAoG6jQ3513TJ67k3E,36041
445
- ansible/plugins/connection/ssh.py,sha256=hhLrkXrJB9cWn12tpEv7ybe-jvCwN3Rh-vjCvn5JWbQ,62297
443
+ ansible/plugins/connection/paramiko_ssh.py,sha256=YAxz8xFBMWTZzvoqmiuwlyp7a4MHvoBmVgjizvIkmtI,29594
444
+ ansible/plugins/connection/psrp.py,sha256=DXeW4gUTfcbR4X-p-4KKZ8_-MU7dsHHH1C0_MjBtxJY,36046
445
+ ansible/plugins/connection/ssh.py,sha256=fORZ8o8tLWkQxUuc5Vqi8hQsJgZH57VaGIesuyS4dvw,62678
446
446
  ansible/plugins/connection/winrm.py,sha256=suHo7dB5O68YDsnvnWjrwtuYUmCjq2AeKvin636E_Nk,35326
447
447
  ansible/plugins/doc_fragments/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
448
448
  ansible/plugins/doc_fragments/action_common_attributes.py,sha256=ouV8CMIP0TkfkxN4p_pLbPvRSC5wu6w0Y6ScONOg-c4,2449
@@ -471,7 +471,7 @@ ansible/plugins/filter/bool.yml,sha256=PkoiSy7pwnkiyOEN59cRNaY56TAWEtzFhIuYxfLQT
471
471
  ansible/plugins/filter/checksum.yml,sha256=CMk4pVtvOWGyXoqH98KlvGOjMzMBDLTYl82SkzlOC0k,524
472
472
  ansible/plugins/filter/combinations.yml,sha256=LttrIICjapNtZHWnvJD-C9Pv3PIKP16i8WAXcU7TSLI,780
473
473
  ansible/plugins/filter/combine.yml,sha256=w7VQFagRs_D92HNroEaJzzr8a8NZ3DXjrdfzpDA-tFk,1671
474
- ansible/plugins/filter/comment.yml,sha256=3oYuPwp_stX1rOkkVinSFXoZLcpMvk93oj9RpF-E6zg,2138
474
+ ansible/plugins/filter/comment.yml,sha256=iSIJjpp8qZa8fYr_bGWFsYHYVWJtLK3PrytmOmoWhSM,2138
475
475
  ansible/plugins/filter/commonpath.yml,sha256=1puPZy62k3s-N1xxfDyDV9aAelb2eS6D3qhZhuwyjQo,672
476
476
  ansible/plugins/filter/core.py,sha256=e--btD-V9SrNpE5N8FeXgJR3l2za7JbKUdcQKstQjDg,22820
477
477
  ansible/plugins/filter/dict2items.yml,sha256=tUWJLVdZQ4sO0GYrJaC9wALSitTactFTdsrI9xb09KM,1314
@@ -513,7 +513,7 @@ ansible/plugins/filter/relpath.yml,sha256=X95UZfvgjdRn6ia-pfts9ksBhF3LvASNyg7BTq
513
513
  ansible/plugins/filter/root.yml,sha256=gHnrBCmNl-wYTF3N1U2lUTh4O-fRUj-EK4WT4RbEQOA,618
514
514
  ansible/plugins/filter/sha1.yml,sha256=Un-4PtcF2eCoc22ezn5QcsIotbpGTnRxAcZRzgv1BwM,729
515
515
  ansible/plugins/filter/shuffle.yml,sha256=rcdsrsZhe5tMqtF00V8khecdVKmzHnHwkUqIdISrpQQ,685
516
- ansible/plugins/filter/split.yml,sha256=fvNi71paIM3YuGBf_s-Gijlk9_nqJiGDsP8zdqcicOI,842
516
+ ansible/plugins/filter/split.yml,sha256=4RgDPhGZY3EcWGNTWkVt_VuqMJXElhU60iY45n2COrE,843
517
517
  ansible/plugins/filter/splitext.yml,sha256=bveXiKxDAMwlvGfSDSYoocfv3yn3zJzPa_HyZhVTfQI,746
518
518
  ansible/plugins/filter/strftime.yml,sha256=cjUzZF1-93ceDKp03oKfrHyC1FuP7ugVfqzXASQd7eE,1862
519
519
  ansible/plugins/filter/subelements.yml,sha256=oXsQgDnoFVznLp5C6IyyOvCVtj49eQhpPTzNz3vLcbo,1438
@@ -524,7 +524,7 @@ ansible/plugins/filter/to_json.yml,sha256=Wp7xybWbwAZMLyQz_DQBOMkkNOjuLEotxX_IgG
524
524
  ansible/plugins/filter/to_nice_json.yml,sha256=GcYws0sXacuY8S1v7KxjA60MEWolcofEryDvaC3Op6M,2262
525
525
  ansible/plugins/filter/to_nice_yaml.yml,sha256=VZzJX6wEB690Zrd38_FOWwYYM3BaRgx50c1r10JNEuM,1589
526
526
  ansible/plugins/filter/to_uuid.yml,sha256=ApwjBOSjeHuL5p_zLuFKxhhbYN2ZR1IJ3795sSClwiA,785
527
- ansible/plugins/filter/to_yaml.yml,sha256=y_gaQx8eWMN0UfSEbNFYes_NxlRJHAZkkwZ1hWwaoWw,1668
527
+ ansible/plugins/filter/to_yaml.yml,sha256=ev8s6IfBDbMjyWP0v51_JvPAGIvnag7RNZD1SWgULDA,1668
528
528
  ansible/plugins/filter/type_debug.yml,sha256=HdkJX1D_pbuS4C3CDta05nUec9ZLLX3MSoPaLcNHetE,508
529
529
  ansible/plugins/filter/union.yml,sha256=5z3NJKSqJ9DO2ihpHA71PkI-eVH6o0UGPq3Oqbvq2Do,954
530
530
  ansible/plugins/filter/unique.yml,sha256=ZII1RymJplBWxzNOXmpDltqfAvhi8EEbLy0hIrNNzgo,839
@@ -569,7 +569,7 @@ ansible/plugins/lookup/pipe.py,sha256=0hw-psGncRbtV1PaBV8tOVS8KL7javc4sA7MI0rSI3
569
569
  ansible/plugins/lookup/random_choice.py,sha256=c7Cq2ufuDX1cOlMqvbjeoDT0B4r6jllprnl0FysUSgA,1574
570
570
  ansible/plugins/lookup/sequence.py,sha256=klnr8ewcq7gz5S_Z-CMSR8OsSR2KgLSUrhDQ4xRV1zU,9171
571
571
  ansible/plugins/lookup/subelements.py,sha256=VzmsVgB6VQFBx0zduPmnxpz0sB8MteIaZkR1Hk54J00,6325
572
- ansible/plugins/lookup/template.py,sha256=Ty81wK81c15jjknJuV6HICvwHE3vjs3Qs1kosN_kFyQ,6980
572
+ ansible/plugins/lookup/template.py,sha256=Zcx24htTXDMdgG7LZA6uIi7nv74WpjKxaAEAdDw3nTA,7039
573
573
  ansible/plugins/lookup/together.py,sha256=WHPggvxSXhQEqN0mbYLzEixazGrDkS6UALLVEiS7K9U,2163
574
574
  ansible/plugins/lookup/unvault.py,sha256=M9eHl4lFO2esDyeCxDiyRr1jU3RBdf1YYxPoNlWl8iw,1980
575
575
  ansible/plugins/lookup/url.py,sha256=O6hCWoLtN5_YzNhZak8gyy2jaqO9kQjBsc1hzClx6YQ,9014
@@ -580,7 +580,7 @@ ansible/plugins/shell/__init__.py,sha256=Rj-H2AhfBZAWZ_Hy8D-1ypvjXTMP3pTbByOYlPM
580
580
  ansible/plugins/shell/cmd.py,sha256=fswLtU2XVNb1T5tF0BIM9msViObs5dXzo9k6sNN4dao,2207
581
581
  ansible/plugins/shell/powershell.py,sha256=qnpEZ9uOJF_4gExheFCAYT_tSR_KQtQeilU1WKXJymA,11376
582
582
  ansible/plugins/shell/sh.py,sha256=1nhiMv0_c8zu2MaDHvOCr--dG8b-iUVEPPnpMh_Hx8I,3952
583
- ansible/plugins/strategy/__init__.py,sha256=nBznpxUAVE1LQVD7IvFRUq79UrdD66vyGm1dLMOJpp4,56264
583
+ ansible/plugins/strategy/__init__.py,sha256=wK-vhOG-rRpuqys881CTZHnW_Jqs4_yeckw3pRoH0zg,57085
584
584
  ansible/plugins/strategy/debug.py,sha256=GxUS0bSiaWInIK8zgB7rMREEqvgrZhVlFUzOCJtnjFo,1258
585
585
  ansible/plugins/strategy/free.py,sha256=eXAvxTFloyb5x6VYANXDMdloWUYxMhbPr1lyY6UPBps,15773
586
586
  ansible/plugins/strategy/host_pinned.py,sha256=3-q5l-tpheMlU-BXGm6ZQNgHvQv5IMvOCDZBLibl1L4,1959
@@ -590,8 +590,8 @@ ansible/plugins/test/__init__.py,sha256=6DY18LxzSdtO7-fDS6957bo61fg-xG3TDWvtFkhG
590
590
  ansible/plugins/test/abs.yml,sha256=-caY4vAMXbhukUTdMQvBa2WYvg6w1AWr8raEfAv0qa8,764
591
591
  ansible/plugins/test/all.yml,sha256=I6SNRRTszIMFEjZQ1cRe122QnmH3MvUX4VUpIQ5Sdoc,701
592
592
  ansible/plugins/test/any.yml,sha256=mLP-q-0d6kOv8c1kvXD1N_BwFbbY8vo0srU90WzdyOY,698
593
- ansible/plugins/test/change.yml,sha256=sEOUsbvLjdjn7MmKg39oBncR-JMiHys7YDvvQncBMz8,664
594
- ansible/plugins/test/changed.yml,sha256=sEOUsbvLjdjn7MmKg39oBncR-JMiHys7YDvvQncBMz8,664
593
+ ansible/plugins/test/change.yml,sha256=GKCtXvZHYs-axh78bMBz6uIMahu0NOotW2gUm2OyXAY,663
594
+ ansible/plugins/test/changed.yml,sha256=GKCtXvZHYs-axh78bMBz6uIMahu0NOotW2gUm2OyXAY,663
595
595
  ansible/plugins/test/contains.yml,sha256=nhDISkTAXWlraEy_Fb9GaPDzXh2qLx4U0QU4ESERVgU,1287
596
596
  ansible/plugins/test/core.py,sha256=ycFT5vFBgoWVad_PCagsUZF-38udyt158c1mrEqFKhU,9283
597
597
  ansible/plugins/test/directory.yml,sha256=xevVVMcUcpixt7uo6QEAZw_t8sgzqphOz9iGeP9gA3E,660
@@ -617,7 +617,7 @@ ansible/plugins/test/match.yml,sha256=Vv9PDKK29DUHQF_D2EHpVJZViMNxZeuTrb5_fzppdt
617
617
  ansible/plugins/test/mathstuff.py,sha256=-qFtm1QmLIwHUCBoGurJtJ5iZELpRkSwFTKHVhnqLyE,1561
618
618
  ansible/plugins/test/mount.yml,sha256=NiUTLxtX-dQaa4OITY3hDF3hWgTZvQBJeddG4xrrmzI,596
619
619
  ansible/plugins/test/nan.yml,sha256=cVZ2QTMKMGRzFGkR4HDSvWkRQVZNNGnGEYZU8alp6yk,584
620
- ansible/plugins/test/reachable.yml,sha256=bscAs-zpQCBJV_GvWcDjrSjX8_dI7UKFiLAdUSmi77k,693
620
+ ansible/plugins/test/reachable.yml,sha256=Y3aoKxA8AggXQ1kbwz2f-iPz4wOiIlvGafyj31z93TU,692
621
621
  ansible/plugins/test/regex.yml,sha256=JUwPU7JAjv-HPLkcpwGolxcROL4-550ISPGxW2gNtQw,1034
622
622
  ansible/plugins/test/same_file.yml,sha256=tMQgcJt2a7VnlgYa9SlPVxhpKRf7YAKnnTWGMHNJK2s,737
623
623
  ansible/plugins/test/search.yml,sha256=Ph7frcpsnIfYiRt8RQa75bSoDY9gaOz3Ac04hqHROgc,923
@@ -625,12 +625,12 @@ ansible/plugins/test/skip.yml,sha256=_7R75HD_0kfApp2vAlZ50CbTvYIlUYx9sWUtCq35qT0
625
625
  ansible/plugins/test/skipped.yml,sha256=_7R75HD_0kfApp2vAlZ50CbTvYIlUYx9sWUtCq35qT0,623
626
626
  ansible/plugins/test/started.yml,sha256=X2gvzAEC5RlVeVKiubKMSMokZeYai6VYSHyzWuTdln8,690
627
627
  ansible/plugins/test/subset.yml,sha256=L1sfICw51cRCNZ2gdHZRxDgGx3V_q6oE5dUMszEygik,750
628
- ansible/plugins/test/succeeded.yml,sha256=gxgD4YqPR1qXm4OiTXALuzsZH_ygcdZV4kt4XJ1Q-cM,692
629
- ansible/plugins/test/success.yml,sha256=gxgD4YqPR1qXm4OiTXALuzsZH_ygcdZV4kt4XJ1Q-cM,692
630
- ansible/plugins/test/successful.yml,sha256=gxgD4YqPR1qXm4OiTXALuzsZH_ygcdZV4kt4XJ1Q-cM,692
628
+ ansible/plugins/test/succeeded.yml,sha256=K5rQxq1i1TM47MsZ8pP_oDXKFqtte0-bsUbpKhMNaoI,691
629
+ ansible/plugins/test/success.yml,sha256=K5rQxq1i1TM47MsZ8pP_oDXKFqtte0-bsUbpKhMNaoI,691
630
+ ansible/plugins/test/successful.yml,sha256=K5rQxq1i1TM47MsZ8pP_oDXKFqtte0-bsUbpKhMNaoI,691
631
631
  ansible/plugins/test/superset.yml,sha256=8XGrAstolgW_pXvoo7ISz0DeRj_Zg7plWt3XNjrR4o0,754
632
632
  ansible/plugins/test/truthy.yml,sha256=dzWnHv8wHVwYoQZO-pxE0cYrEobjEOkt0pwoJ5lmTEw,789
633
- ansible/plugins/test/unreachable.yml,sha256=pOH3p4rKgXXjKfYGmWMgPNCV6WKw5ozrM2o__7ZT1dU,696
633
+ ansible/plugins/test/unreachable.yml,sha256=Dn6Wsp4hb86fnZ65VwG0PlOJF_sZBEo5aqc_uX8XjaU,695
634
634
  ansible/plugins/test/uri.py,sha256=GZDTKszB6cTufPwUePEyZxEwfULw1SB2gcMhFtbZlj8,1126
635
635
  ansible/plugins/test/uri.yml,sha256=57vC77V30dzyq7ezb486CzRTl8PNQ2bJzMELv6_htdU,1115
636
636
  ansible/plugins/test/url.yml,sha256=9dF6w4RZgEx6PQy4HJer11vsnVJkjw4fEKIel7WUoFk,934
@@ -640,7 +640,7 @@ ansible/plugins/test/version.yml,sha256=L10E0dA2Y_sRQpvhWzSoHFgtzLfHLp-bFgvaPxW9
640
640
  ansible/plugins/test/version_compare.yml,sha256=L10E0dA2Y_sRQpvhWzSoHFgtzLfHLp-bFgvaPxW9hgc,3283
641
641
  ansible/plugins/vars/__init__.py,sha256=EHGIwRJtDInKzn8NiqomHbbNLzOWnua6xAEiYsKjbmY,1359
642
642
  ansible/plugins/vars/host_group_vars.py,sha256=1BkdaSFFpNbDyx_iHIBXvD1mlDeZ5c-3QxMdfgXx2ck,4689
643
- ansible/template/__init__.py,sha256=y2ZjwhZR7ALR-6q0crvZ4iL8oh4MZ21gZ2ZHjKEgCXk,40454
643
+ ansible/template/__init__.py,sha256=Lqmg7ehyUC7C2HpJ1Cf7hkS0xFTYNpgnhm4mMPbpGKg,40778
644
644
  ansible/template/native_helpers.py,sha256=F0xI_VaIOmpQLv_k1aJvUDVaErKAwTyIRM7Hda5Rd0E,4378
645
645
  ansible/template/template.py,sha256=synOxn1MzR7aNcIUanEsrtasK-jFlzvyJdUcqBdidGw,1667
646
646
  ansible/template/vars.py,sha256=3_dLohGvZma3sMz6PUiWNxWfdDGXIcbDdHzidsX7z_U,2802
@@ -682,13 +682,13 @@ ansible/vars/hostvars.py,sha256=dg3jpVmNwSg8EJ4SIvYGT80uxMgRtrOW6vvtDfrQzDU,5152
682
682
  ansible/vars/manager.py,sha256=qsF6PgAYcon5n7HmXG56P4pmKLyrniuFpAtKWnNaFpw,38284
683
683
  ansible/vars/plugins.py,sha256=B7L3fXoSOoBZSXqJ2ulk0adx1g5SpAb8BxyLGPNA7d4,4695
684
684
  ansible/vars/reserved.py,sha256=FBD7n2dnA0CW4I0J1LtWwk2hQqvGW0KTRPcxaRtMKWo,2615
685
- ansible_core-2.15.1.data/scripts/ansible-test,sha256=CYIYL99IxWdVTtDIj3avilIJXhGAmtjuKPPWNuLWuc8,1690
685
+ ansible_core-2.15.2.data/scripts/ansible-test,sha256=CYIYL99IxWdVTtDIj3avilIJXhGAmtjuKPPWNuLWuc8,1690
686
686
  ansible_test/__init__.py,sha256=6e721yAyyyocRKzbCKtQXloAfFP7Aqv0L3zG70uh-4A,190
687
687
  ansible_test/_data/ansible.cfg,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
688
688
  ansible_test/_data/coveragerc,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
689
689
  ansible_test/_data/completion/docker.txt,sha256=Bz-6tKH6BLsq25v03e7DBGnqgSLad-KQsOwkJMfix0U,822
690
690
  ansible_test/_data/completion/network.txt,sha256=_-mi013-JeufshKMUmykkOmZPw1cVbakIMaAuweHet8,198
691
- ansible_test/_data/completion/remote.txt,sha256=q_sCM75PX_Q4lxz4SFRGQZwm885FehFitb9eROgGqcg,1044
691
+ ansible_test/_data/completion/remote.txt,sha256=q5HD3KFI2oHaAo6oobkuBeMAewg1vFm9WlMScOzLb7I,1161
692
692
  ansible_test/_data/completion/windows.txt,sha256=k02uwXJ2i7cVHZnXS4HRFlvK5QU5BzAV291Cw53FlXA,226
693
693
  ansible_test/_data/playbooks/posix_coverage_setup.yml,sha256=PgQNVzVTsNmfnu0sT2SAYiWtkMSOppfmh0oVmAsb7TQ,594
694
694
  ansible_test/_data/playbooks/posix_coverage_teardown.yml,sha256=xHci5QllwJymFtig-hsOXm-Wdrxz063JH14aIyRXhyc,212
@@ -732,7 +732,7 @@ ansible_test/_data/requirements/sanity.yamllint.in,sha256=ivPsPeZUDHOuLbd603ZxKC
732
732
  ansible_test/_data/requirements/sanity.yamllint.txt,sha256=t_5YBcbqw7-c3GCbTE3jh3e5M4YfRENpG0eFtJYpY-A,147
733
733
  ansible_test/_data/requirements/units.txt,sha256=ah91xwwRFeY_fpi0WdRGw9GqEiAjm9BbVbnwTrdzn2g,125
734
734
  ansible_test/_data/requirements/windows-integration.txt,sha256=jx9vvE8tX1-sColj5E2WuDs1sZvhuqUJnqBjheSbP4U,65
735
- ansible_test/_internal/__init__.py,sha256=DoqUWSZ7j4QZozMH5r739bWMUrstgJlsOJIUI0WeW68,2918
735
+ ansible_test/_internal/__init__.py,sha256=Ov_4Oh-B08xt4PU_7M_fMkmG9X9gnseBo78x0hmXZ98,3156
736
736
  ansible_test/_internal/ansible_util.py,sha256=umqdtrqg0C4T6EnoQ_tbAigVA6u5Y4qHq8-Iqxt9gDw,10271
737
737
  ansible_test/_internal/become.py,sha256=zvOlaWKA4L6Cp6Xe795FsTw9xlWUy5Q5TicOwHXjzaI,3071
738
738
  ansible_test/_internal/bootstrap.py,sha256=UbkB1ZJ-2bs7qtwRRBi5516IsBq0vZl-pUoyrgzdROQ,2471
@@ -742,10 +742,10 @@ ansible_test/_internal/completion.py,sha256=BJvhJ0d6PhBBn28YwZ63iGKtTh5TQw6R_uPN
742
742
  ansible_test/_internal/config.py,sha256=LJkfQ0d6EjEgRWoovdxQX1AK3TRSx-H_Cx1lneNPCEc,12524
743
743
  ansible_test/_internal/connections.py,sha256=-gK9FqvmpsjENdYNkvWgFgqYHJSS_F2XkvQzH2_s86E,7855
744
744
  ansible_test/_internal/constants.py,sha256=ON2eUuS1im4EzNrvfST5KiFUtun_GN8YgNjm06MzGG0,1969
745
- ansible_test/_internal/containers.py,sha256=iWwwC2LERnoYTnodqbydEZOl9hiWiFcbZhTq0INWcuU,35627
745
+ ansible_test/_internal/containers.py,sha256=YLRUYuLTUT4pSl7L9T_X1CI3lS53lBQk7lHQUwm5rX4,35635
746
746
  ansible_test/_internal/content_config.py,sha256=pkhIu5lg-o8oWc7RBzuniYE-mBPyjnf400vpaO0gr08,5778
747
747
  ansible_test/_internal/core_ci.py,sha256=qkOcmYldBC4EX3wvql5G29O8whPRzyTM00eUTRH-6e0,17594
748
- ansible_test/_internal/coverage_util.py,sha256=oZZRaPVchigwtTvObBmyBvazG823Gq2Up7WRRIEjGyU,9294
748
+ ansible_test/_internal/coverage_util.py,sha256=iw45rwz8Q5u37S4_dABNR0-Ybc5F8YRiEpUEKJiyjQ8,9302
749
749
  ansible_test/_internal/data.py,sha256=OFDpRa47yqBqQO1aSvTZVQQpScHvBHsr861586MQEUI,11184
750
750
  ansible_test/_internal/delegation.py,sha256=elCTCtsBtauVy0rE15BMC1EgUyfY5f8qusjWODiKKvw,13413
751
751
  ansible_test/_internal/diff.py,sha256=COo6OgC3zxwymhOTlMifLZsGc1RGL0iM_zFVyqFNK48,7300
@@ -762,9 +762,9 @@ ansible_test/_internal/io.py,sha256=e7ccixoPL5lrAPLUx50vOGYpcELWHhs0R3a5Sh6b5hs,
762
762
  ansible_test/_internal/junit_xml.py,sha256=zGOZeh7bKwASJ019TemgQtk-5j_eMC-exU6NKhSC7gI,8739
763
763
  ansible_test/_internal/locale_util.py,sha256=tjRbwKmgMQc1ysIhvP8yBhFcNA-2UCaWfQBDgrRFUxU,2161
764
764
  ansible_test/_internal/metadata.py,sha256=c9ThXPUlgeKYhaTUmfCSS4INRNQ1JhN2KEOVaX3m1Gk,4791
765
- ansible_test/_internal/payload.py,sha256=lOo69chCB2EEJPmFEUxhbm2lOiboA6I5QFqfNae7sDw,8004
766
- ansible_test/_internal/provisioning.py,sha256=qVUJq0_YvCS7a5UVd1s-eVwU924V5llHqQy-Yjy6C5k,7282
767
- ansible_test/_internal/pypi_proxy.py,sha256=9p9GDLbF6neOWPeAgZ_xEwlKJKWdZ5Xwcusn77QwM2Q,6022
765
+ ansible_test/_internal/payload.py,sha256=1Pw05OEHvP3LMQnoLXch8631c94YMklWlpDn0CvQECw,8012
766
+ ansible_test/_internal/provisioning.py,sha256=9Zl3xQqljx0MGDTp55Q4LZPWQ7Afj5K87cGsXzPGS5Y,7320
767
+ ansible_test/_internal/pypi_proxy.py,sha256=kVvqvLIxN-VolD1jG_EILwYy1bWoy766ZKVKEFlQgmA,6040
768
768
  ansible_test/_internal/python_requirements.py,sha256=xhT-hndjxz16gx4lPqg_brbn5J_lakjY87uvrXo4Vpo,20061
769
769
  ansible_test/_internal/ssh.py,sha256=2bS-DkcMJcBr3NExF2Y_htJVye_glKXir1NmLF05VR8,10662
770
770
  ansible_test/_internal/target.py,sha256=Whtb_n0jn4zbiMmX7je5jewgzsRczfXRm_ndYtjTSTQ,25320
@@ -772,7 +772,7 @@ ansible_test/_internal/test.py,sha256=znQmGjKACqDU8T0EAPqcv2qyy0J7M2w4OmyYhwHLqT
772
772
  ansible_test/_internal/thread.py,sha256=WQoZ2q2ljmEkKHRDkIqwxW7eZbkCKDrG3YZfcaxHzHw,2596
773
773
  ansible_test/_internal/timeout.py,sha256=hT-LirImhAh1iCGIh8JpmECXsiGu6Zetw8BWl1iBIC8,4050
774
774
  ansible_test/_internal/util.py,sha256=Mp9_uyY3aqEGJFq0POzvELMoh_IhyIxYuf-FiGBfZIM,37809
775
- ansible_test/_internal/util_common.py,sha256=PlXt5CVPd_MPK0sYo4pcr9VEuhKfbdstX9I01KSyJdc,16167
775
+ ansible_test/_internal/util_common.py,sha256=S_YMEZvGEqtzKvgZmxQrIT7P66KnOLKyAvC_s1QppEE,17291
776
776
  ansible_test/_internal/venv.py,sha256=DPHAt4tuoIdP7BOXa75-i4T7Paild8eGDsV2UUKOZ7U,9062
777
777
  ansible_test/_internal/ci/__init__.py,sha256=QOaC_8_wUzqFEbsFCXYAnElWoUo6gB40CXvP9RJ-Iyo,7738
778
778
  ansible_test/_internal/ci/azp.py,sha256=5ev2kSfqTHWVvluPbu7vV52gaXuBYt3mRGistKv4Kcs,10097
@@ -842,7 +842,7 @@ ansible_test/_internal/commands/integration/filters.py,sha256=OntBnxm9gnP57yFaiN
842
842
  ansible_test/_internal/commands/integration/network.py,sha256=TvZmcJ1JEZPytj4Eqb3n98zrhZdcTX8PjIshE94Qv7Q,2417
843
843
  ansible_test/_internal/commands/integration/posix.py,sha256=eyJg1tpmaVXl2wylN0gOqqLGF3RA1YZeKIZpQg59pM0,1444
844
844
  ansible_test/_internal/commands/integration/windows.py,sha256=L6IVdT_2l9Hp6u-b9PL6CVs3pIxhK4ZGmnCt8D7TsBg,2639
845
- ansible_test/_internal/commands/integration/cloud/__init__.py,sha256=XYvf6yYKYwJB2URQgqmhIsJqaKWyxP0FA1Qz0txGyAU,14493
845
+ ansible_test/_internal/commands/integration/cloud/__init__.py,sha256=bNHhSfgjhRsZn1FbJpFR24MXJzZNC7NsJe-dMgtF6rc,14501
846
846
  ansible_test/_internal/commands/integration/cloud/acme.py,sha256=OIiqJ3wZSbfxN3VHrREQilsqWsQJsx2M524SQp5NLjI,2235
847
847
  ansible_test/_internal/commands/integration/cloud/aws.py,sha256=JzZZK8MMtIXf3zpojh4a3XF11FaE0GC9CTvZP4UU8fM,4202
848
848
  ansible_test/_internal/commands/integration/cloud/azure.py,sha256=fYsv42elqyV-zYEvueeOc8fDNKXdKBvYDHiUBGl-ju0,5071
@@ -871,7 +871,7 @@ ansible_test/_internal/commands/sanity/pslint.py,sha256=lVgL6RrDolRgIOJ2NRr04k2K
871
871
  ansible_test/_internal/commands/sanity/pylint.py,sha256=8XxdckD4AVTkP8GamX6XaeGcMvYvf5yTgtUIN5d8aFk,10922
872
872
  ansible_test/_internal/commands/sanity/sanity_docs.py,sha256=0rbqhxKQXYuVzJ6x4V_ItH9tA15mT9gSYVgxNU3EhnQ,1605
873
873
  ansible_test/_internal/commands/sanity/shellcheck.py,sha256=CZHNN_2iNVE3iqf5SIDSH9b2hwF6aXtJ0H6MPCEJX4s,3070
874
- ansible_test/_internal/commands/sanity/validate_modules.py,sha256=65pu9jNB9qmcpa2LaDzWX7SIa_zI3Xu5LMiSn4PUsRo,7896
874
+ ansible_test/_internal/commands/sanity/validate_modules.py,sha256=D4qXBfkWQ5NJam6TN9HOi_NWXEDErBFXatWoP-OiQjo,7904
875
875
  ansible_test/_internal/commands/sanity/yamllint.py,sha256=rF_L-QVWLfQ5HiOf_Q-6AMdk7orOJN_Bu8XyMfobRQ8,3423
876
876
  ansible_test/_internal/commands/shell/__init__.py,sha256=70rahKppL1gi3I22YWZCkVKO9UF8Muryr0REiilb6C0,4371
877
877
  ansible_test/_internal/commands/units/__init__.py,sha256=eDwwBQ87zWaVLRQbQ7GBC8P8TUcu28bhIAZqIjDk1fY,12686
@@ -999,9 +999,9 @@ ansible_test/config/cloud-config-vultr.ini.template,sha256=XLKHk3lg_8ReQMdWfZzhh
999
999
  ansible_test/config/config.yml,sha256=wb3knoBmZewG3GWOMnRHoVPQWW4vPixKLPMNS6vJmTc,2620
1000
1000
  ansible_test/config/inventory.networking.template,sha256=bFNSk8zNQOaZ_twaflrY0XZ9mLwUbRLuNT0BdIFwvn4,1335
1001
1001
  ansible_test/config/inventory.winrm.template,sha256=1QU8W-GFLnYEw8yY9bVIvUAVvJYPM3hyoijf6-M7T00,1098
1002
- ansible_core-2.15.1.dist-info/COPYING,sha256=CuBIWlvTemPmNgNZZBfk6w5lMzT6bH-TLKOg6F1K8ic,35148
1003
- ansible_core-2.15.1.dist-info/METADATA,sha256=hGIm1Id7qcmxazXkudv3A-nyP7s2RpHR8yJxyuIVygY,7504
1004
- ansible_core-2.15.1.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
1005
- ansible_core-2.15.1.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
1006
- ansible_core-2.15.1.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1007
- ansible_core-2.15.1.dist-info/RECORD,,
1002
+ ansible_core-2.15.2.dist-info/COPYING,sha256=CuBIWlvTemPmNgNZZBfk6w5lMzT6bH-TLKOg6F1K8ic,35148
1003
+ ansible_core-2.15.2.dist-info/METADATA,sha256=CUJcd0bbk7iv5DQS-VziWVpirjJK2jDkXIp7V-utA5o,7504
1004
+ ansible_core-2.15.2.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
1005
+ ansible_core-2.15.2.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
1006
+ ansible_core-2.15.2.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1007
+ ansible_core-2.15.2.dist-info/RECORD,,
@@ -1,6 +1,7 @@
1
1
  alpine/3.17 python=3.10 become=doas_sudo provider=aws arch=x86_64
2
2
  alpine become=doas_sudo provider=aws arch=x86_64
3
- fedora/37 python=3.11 become=sudo provider=aws arch=x86_64
3
+ fedora/37 python=3.11 become=sudo provider=aws arch=x86_64 # untested in CI, known to occasionally hang during boot
4
+ fedora/38 python=3.11 become=sudo provider=aws arch=x86_64
4
5
  fedora become=sudo provider=aws arch=x86_64
5
6
  freebsd/12.4 python=3.9 python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
6
7
  freebsd/13.1 python=3.8,3.7,3.9,3.10 python_dir=/usr/local/bin become=su_sudo provider=aws arch=x86_64
@@ -43,6 +43,7 @@ from .data import (
43
43
 
44
44
  from .util_common import (
45
45
  CommonConfig,
46
+ ExitHandler,
46
47
  )
47
48
 
48
49
  from .cli import (
@@ -59,6 +60,12 @@ from .config import (
59
60
 
60
61
 
61
62
  def main(cli_args: t.Optional[list[str]] = None) -> None:
63
+ """Wrapper around the main program function to invoke cleanup functions at exit."""
64
+ with ExitHandler.context():
65
+ main_internal(cli_args)
66
+
67
+
68
+ def main_internal(cli_args: t.Optional[list[str]] = None) -> None:
62
69
  """Main program function."""
63
70
  try:
64
71
  os.chdir(data_context().content.root)
@@ -2,7 +2,6 @@
2
2
  from __future__ import annotations
3
3
 
4
4
  import abc
5
- import atexit
6
5
  import datetime
7
6
  import os
8
7
  import re
@@ -28,6 +27,7 @@ from ....util import (
28
27
  )
29
28
 
30
29
  from ....util_common import (
30
+ ExitHandler,
31
31
  ResultType,
32
32
  write_json_test_results,
33
33
  )
@@ -306,7 +306,7 @@ class CloudProvider(CloudBase):
306
306
  self.resource_prefix = self.ci_provider.generate_resource_prefix()
307
307
  self.resource_prefix = re.sub(r'[^a-zA-Z0-9]+', '-', self.resource_prefix)[:63].lower().rstrip('-')
308
308
 
309
- atexit.register(self.cleanup)
309
+ ExitHandler.register(self.cleanup)
310
310
 
311
311
  def cleanup(self) -> None:
312
312
  """Clean up the cloud resource and any temporary configuration files after tests complete."""
@@ -1,7 +1,6 @@
1
1
  """Sanity test using validate-modules."""
2
2
  from __future__ import annotations
3
3
 
4
- import atexit
5
4
  import collections
6
5
  import contextlib
7
6
  import json
@@ -38,6 +37,7 @@ from ...util import (
38
37
  )
39
38
 
40
39
  from ...util_common import (
40
+ ExitHandler,
41
41
  process_scoped_temporary_directory,
42
42
  run_command,
43
43
  ResultType,
@@ -242,7 +242,7 @@ class ValidateModulesTest(SanitySingleVersion):
242
242
  files = payload_config.files
243
243
  files.append((path, os.path.relpath(path, data_context().content.root)))
244
244
 
245
- atexit.register(cleanup)
245
+ ExitHandler.register(cleanup)
246
246
  data_context().register_payload_callback(git_callback)
247
247
 
248
248
  make_dirs(os.path.dirname(path))
@@ -1,7 +1,6 @@
1
1
  """High level functions for working with containers."""
2
2
  from __future__ import annotations
3
3
 
4
- import atexit
5
4
  import collections.abc as c
6
5
  import contextlib
7
6
  import enum
@@ -20,6 +19,7 @@ from .util import (
20
19
  )
21
20
 
22
21
  from .util_common import (
22
+ ExitHandler,
23
23
  named_temporary_file,
24
24
  )
25
25
 
@@ -225,7 +225,7 @@ def run_support_container(
225
225
  raise Exception(f'Container already defined: {name}')
226
226
 
227
227
  if not support_containers:
228
- atexit.register(cleanup_containers, args)
228
+ ExitHandler.register(cleanup_containers, args)
229
229
 
230
230
  support_containers[name] = descriptor
231
231
 
@@ -1,7 +1,6 @@
1
1
  """Utility code for facilitating collection of code coverage when running tests."""
2
2
  from __future__ import annotations
3
3
 
4
- import atexit
5
4
  import dataclasses
6
5
  import os
7
6
  import sqlite3
@@ -34,6 +33,7 @@ from .data import (
34
33
  )
35
34
 
36
35
  from .util_common import (
36
+ ExitHandler,
37
37
  intercept_python,
38
38
  ResultType,
39
39
  )
@@ -223,7 +223,7 @@ def get_coverage_config(args: TestConfig) -> str:
223
223
  temp_dir = '/tmp/coverage-temp-dir'
224
224
  else:
225
225
  temp_dir = tempfile.mkdtemp()
226
- atexit.register(lambda: remove_tree(temp_dir))
226
+ ExitHandler.register(lambda: remove_tree(temp_dir))
227
227
 
228
228
  path = os.path.join(temp_dir, COVERAGE_CONFIG_NAME)
229
229
 
@@ -1,7 +1,6 @@
1
1
  """Payload management for sending Ansible files and test content to other systems (VMs, containers)."""
2
2
  from __future__ import annotations
3
3
 
4
- import atexit
5
4
  import os
6
5
  import stat
7
6
  import tarfile
@@ -32,6 +31,7 @@ from .data import (
32
31
 
33
32
  from .util_common import (
34
33
  CommonConfig,
34
+ ExitHandler,
35
35
  )
36
36
 
37
37
  # improve performance by disabling uid/gid lookups
@@ -192,7 +192,7 @@ def create_temporary_bin_files(args: CommonConfig) -> tuple[tuple[str, str], ...
192
192
  temp_path = '/tmp/ansible-tmp-bin'
193
193
  else:
194
194
  temp_path = tempfile.mkdtemp(prefix='ansible', suffix='bin')
195
- atexit.register(remove_tree, temp_path)
195
+ ExitHandler.register(remove_tree, temp_path)
196
196
 
197
197
  for name, dest in ANSIBLE_BIN_SYMLINK_MAP.items():
198
198
  path = os.path.join(temp_path, name)
@@ -1,7 +1,6 @@
1
1
  """Provision hosts for running tests."""
2
2
  from __future__ import annotations
3
3
 
4
- import atexit
5
4
  import collections.abc as c
6
5
  import dataclasses
7
6
  import functools
@@ -27,6 +26,10 @@ from .util import (
27
26
  type_guard,
28
27
  )
29
28
 
29
+ from .util_common import (
30
+ ExitHandler,
31
+ )
32
+
30
33
  from .thread import (
31
34
  WrappedThread,
32
35
  )
@@ -124,7 +127,7 @@ def prepare_profiles(
124
127
 
125
128
  raise PrimeContainers()
126
129
 
127
- atexit.register(functools.partial(cleanup_profiles, host_state))
130
+ ExitHandler.register(functools.partial(cleanup_profiles, host_state))
128
131
 
129
132
  def provision(profile: HostProfile) -> None:
130
133
  """Provision the given profile."""
@@ -1,7 +1,6 @@
1
1
  """PyPI proxy management."""
2
2
  from __future__ import annotations
3
3
 
4
- import atexit
5
4
  import os
6
5
  import urllib.parse
7
6
 
@@ -23,6 +22,7 @@ from .util import (
23
22
  )
24
23
 
25
24
  from .util_common import (
25
+ ExitHandler,
26
26
  process_scoped_temporary_file,
27
27
  )
28
28
 
@@ -128,7 +128,7 @@ def configure_target_pypi_proxy(args: EnvironmentConfig, profile: HostProfile, p
128
128
  run_playbook(args, inventory_path, 'pypi_proxy_prepare.yml', capture=True, variables=dict(
129
129
  pypi_endpoint=pypi_endpoint, pypi_hostname=pypi_hostname, force=force))
130
130
 
131
- atexit.register(cleanup_pypi_proxy)
131
+ ExitHandler.register(cleanup_pypi_proxy)
132
132
 
133
133
 
134
134
  def configure_pypi_proxy_pip(args: EnvironmentConfig, profile: HostProfile, pypi_endpoint: str, pypi_hostname: str) -> None:
@@ -153,7 +153,7 @@ trusted-host = {1}
153
153
 
154
154
  if not args.explain:
155
155
  write_text_file(pip_conf_path, pip_conf, True)
156
- atexit.register(pip_conf_cleanup)
156
+ ExitHandler.register(pip_conf_cleanup)
157
157
 
158
158
 
159
159
  def configure_pypi_proxy_easy_install(args: EnvironmentConfig, profile: HostProfile, pypi_endpoint: str) -> None:
@@ -177,4 +177,4 @@ index_url = {0}
177
177
 
178
178
  if not args.explain:
179
179
  write_text_file(pydistutils_cfg_path, pydistutils_cfg, True)
180
- atexit.register(pydistutils_cfg_cleanup)
180
+ ExitHandler.register(pydistutils_cfg_cleanup)