ansible-core 2.15.0__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 (61) hide show
  1. ansible/config/manager.py +1 -1
  2. ansible/galaxy/collection/__init__.py +17 -30
  3. ansible/galaxy/collection/concrete_artifact_manager.py +12 -6
  4. ansible/galaxy/dependency_resolution/dataclasses.py +6 -3
  5. ansible/module_utils/ansible_release.py +1 -1
  6. ansible/modules/apt_key.py +8 -5
  7. ansible/modules/apt_repository.py +2 -0
  8. ansible/modules/deb822_repository.py +1 -1
  9. ansible/modules/dnf5.py +8 -8
  10. ansible/modules/find.py +3 -0
  11. ansible/modules/uri.py +9 -1
  12. ansible/modules/validate_argument_spec.py +1 -1
  13. ansible/plugins/action/template.py +26 -15
  14. ansible/plugins/connection/paramiko_ssh.py +8 -0
  15. ansible/plugins/connection/psrp.py +3 -3
  16. ansible/plugins/connection/ssh.py +19 -2
  17. ansible/plugins/filter/comment.yml +1 -1
  18. ansible/plugins/filter/split.yml +1 -1
  19. ansible/plugins/filter/to_yaml.yml +1 -1
  20. ansible/plugins/lookup/template.py +11 -6
  21. ansible/plugins/strategy/__init__.py +20 -12
  22. ansible/plugins/test/change.yml +1 -1
  23. ansible/plugins/test/changed.yml +1 -1
  24. ansible/plugins/test/reachable.yml +1 -1
  25. ansible/plugins/test/succeeded.yml +1 -1
  26. ansible/plugins/test/success.yml +1 -1
  27. ansible/plugins/test/successful.yml +1 -1
  28. ansible/plugins/test/unreachable.yml +1 -1
  29. ansible/release.py +1 -1
  30. ansible/template/__init__.py +42 -28
  31. ansible/utils/_junit_xml.py +5 -1
  32. {ansible_core-2.15.0.dist-info → ansible_core-2.15.2.dist-info}/METADATA +1 -1
  33. {ansible_core-2.15.0.dist-info → ansible_core-2.15.2.dist-info}/RECORD +61 -61
  34. ansible_test/_data/completion/remote.txt +2 -1
  35. ansible_test/_internal/__init__.py +11 -0
  36. ansible_test/_internal/cli/commands/env.py +1 -1
  37. ansible_test/_internal/commands/env/__init__.py +14 -17
  38. ansible_test/_internal/commands/integration/__init__.py +1 -1
  39. ansible_test/_internal/commands/integration/cloud/__init__.py +3 -3
  40. ansible_test/_internal/commands/sanity/pylint.py +4 -4
  41. ansible_test/_internal/commands/sanity/validate_modules.py +2 -2
  42. ansible_test/_internal/containers.py +2 -2
  43. ansible_test/_internal/coverage_util.py +2 -2
  44. ansible_test/_internal/data.py +2 -7
  45. ansible_test/_internal/git.py +1 -1
  46. ansible_test/_internal/junit_xml.py +5 -1
  47. ansible_test/_internal/payload.py +2 -2
  48. ansible_test/_internal/provider/layout/__init__.py +1 -1
  49. ansible_test/_internal/provider/layout/ansible.py +15 -0
  50. ansible_test/_internal/provider/layout/collection.py +9 -1
  51. ansible_test/_internal/provisioning.py +5 -2
  52. ansible_test/_internal/pypi_proxy.py +4 -4
  53. ansible_test/_internal/test.py +3 -5
  54. ansible_test/_internal/timeout.py +56 -19
  55. ansible_test/_internal/util.py +4 -0
  56. ansible_test/_internal/util_common.py +38 -6
  57. {ansible_core-2.15.0.data → ansible_core-2.15.2.data}/scripts/ansible-test +0 -0
  58. {ansible_core-2.15.0.dist-info → ansible_core-2.15.2.dist-info}/COPYING +0 -0
  59. {ansible_core-2.15.0.dist-info → ansible_core-2.15.2.dist-info}/WHEEL +0 -0
  60. {ansible_core-2.15.0.dist-info → ansible_core-2.15.2.dist-info}/entry_points.txt +0 -0
  61. {ansible_core-2.15.0.dist-info → ansible_core-2.15.2.dist-info}/top_level.txt +0 -0
@@ -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=KMPh7DVO8DQUSVhWd7Loi7uAPf10zO5kCR8qLRhhPLI,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,8 +60,8 @@ 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=zcao4Nz-Jiw8qk-f8lWAHBLR8DTlNpez_DkA5aR5Omw,77683
64
- ansible/galaxy/collection/concrete_artifact_manager.py,sha256=Zw59WkR7kHaN1GnJDmzfiTSH31eZ4dEBhyzeOrvT5zs,28978
63
+ ansible/galaxy/collection/__init__.py,sha256=U5_Gn33Fz2Ope0448KnGlh1rSArK3vU2LSryri8Ptlg,77327
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
67
67
  ansible/galaxy/data/collections_galaxy_meta.yml,sha256=UNkGJWZEWSRbyiPbpoqLQdBR4DbAg9DeIB38HSZycoI,4018
@@ -126,7 +126,7 @@ ansible/galaxy/data/network/tests/inventory,sha256=4CIzgZsaCYREEFSRkYE_fMe6Ng8hK
126
126
  ansible/galaxy/data/network/tests/test.yml.j2,sha256=rjvtKhlkGT_CI_dgBLHX14eI41S6jFPypqESN8Uztgg,199
127
127
  ansible/galaxy/data/network/vars/main.yml.j2,sha256=3qtsgmeZTZ37OdmQNpmI9R6XxOEzJcOhjjGQYGFb85w,36
128
128
  ansible/galaxy/dependency_resolution/__init__.py,sha256=HDqJKqsDP4UHTCnoGq6c3rGpVwOI2DdYaH-4s7tkL0A,2196
129
- ansible/galaxy/dependency_resolution/dataclasses.py,sha256=tY6NZa2P4pBdOp147K1zKNeRwTEjYXnx8ktnJgz4J1E,23060
129
+ ansible/galaxy/dependency_resolution/dataclasses.py,sha256=rXH4jZR-jFi8k6tU6zFLkYHihArlbG4lb8W1OYbjd28,23160
130
130
  ansible/galaxy/dependency_resolution/errors.py,sha256=3YatCcrKVHeXTkMQBEFnTEHZBUTpd9ySEJ4r-3MbEak,750
131
131
  ansible/galaxy/dependency_resolution/providers.py,sha256=Yp3aHWquVkvdPz0tzv3Mgo-OQKqqfs-f39Fkwp4kmuU,23781
132
132
  ansible/galaxy/dependency_resolution/reporters.py,sha256=q-jyfsRu5qve8nikZ0_cBQar3dOX4_WMSAUXZd9xlqg,687
@@ -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=KMPh7DVO8DQUSVhWd7Loi7uAPf10zO5kCR8qLRhhPLI,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
@@ -288,17 +288,17 @@ ansible/modules/blockinfile.py,sha256=qRyiTfdts2IMB8Ok-gbqZTnWtB7nAJwco1itZ-8s3f
288
288
  ansible/modules/command.py,sha256=41v2nsbFThyC6hO3joPHFAMbPm4CilrJbROeh-8chlk,13132
289
289
  ansible/modules/copy.py,sha256=B4VOn6qWGpxVT74U5FMnTKLULDwWn6DfwrAzfWAy3zk,35467
290
290
  ansible/modules/cron.py,sha256=87f4scGzqT1GK-joX2ToHSQTG006EFd0kHyln4oh1Ak,26181
291
- ansible/modules/deb822_repository.py,sha256=9XBk-w4zFTXi2A3hkivEMTbUnZSKqCmxh2wp0699vYY,15611
291
+ ansible/modules/deb822_repository.py,sha256=uVmdJId_qMFJLpFpcgDkDUsl7hZmS7UxhLVkotkVWAg,15641
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=GtxhQjis7vPm498rg_injGjxCVR108MiC3eGxHc1cvc,25599
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
@@ -341,9 +341,9 @@ ansible/modules/sysvinit.py,sha256=xFhfQLwTdcbV7xVdlItHeLFDdU0t3rjiWoY1qocCIs0,1
341
341
  ansible/modules/tempfile.py,sha256=D4l0CHjp9AIC0o1BBDvw8UWQkWpilnc9VdmxNChxq6E,3502
342
342
  ansible/modules/template.py,sha256=k0h7j9n9v2efC0f1boCsTq2NwgTLkFuQxgxmUgq4nZE,3171
343
343
  ansible/modules/unarchive.py,sha256=kO7V_VBll7n__wQum3BepmBHgQzdbfU0CB0_sf9v49E,44322
344
- ansible/modules/uri.py,sha256=sAd97sgFRTJ17XDwDZIvPQr2cMFiOGHipafZIDhsxCg,28191
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,12 +640,12 @@ 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=dLyOw-0Na2TlpDFRSfVUYLS4Zdl8mJOZalcjWp3AXZM,40509
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
647
647
  ansible/utils/__init__.py,sha256=1lMXN1i2fFqslda4BmeI5tpYMFP95D5Wpr1AjDJi-SQ,833
648
- ansible/utils/_junit_xml.py,sha256=xgmGwrwuE9wNbRKHEt3w1KP9TkV88Q1xtfM7mQIRag8,8526
648
+ ansible/utils/_junit_xml.py,sha256=zGOZeh7bKwASJ019TemgQtk-5j_eMC-exU6NKhSC7gI,8739
649
649
  ansible/utils/cmd_functions.py,sha256=rh7_j2C93vVt-nueP9L2Ouz3Y_QAEQ7kI4dZTu2S6M4,2216
650
650
  ansible/utils/color.py,sha256=sBoONbLleSeCVPJMzyP4pvwSs1tKiSYwpCmAUq1Tzy0,4110
651
651
  ansible/utils/context_objects.py,sha256=1-j7SRLgVJU3J5b2PkXMcXS391z435SsKsYIU1m0eCw,3119
@@ -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.0.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=2NSfRQkauL2NqZdConiedfoLX_pJon7Ggose-om3RBM,2802
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,37 +742,37 @@ 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
749
- ansible_test/_internal/data.py,sha256=mVAQbB_XflgT_aMGEPljEbx78VkxWc0qgwzzgHVKAwU,11542
748
+ ansible_test/_internal/coverage_util.py,sha256=iw45rwz8Q5u37S4_dABNR0-Ybc5F8YRiEpUEKJiyjQ8,9302
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
752
752
  ansible_test/_internal/docker_util.py,sha256=LF4RrClcsDhg3UqrqgOztbeB_oWcsf1nc3W4DFacans,37675
753
753
  ansible_test/_internal/encoding.py,sha256=E61EfXbQw0uQoFhbN3SYx3Oy_1tAMCPAAvY9hkEcSSo,1367
754
754
  ansible_test/_internal/executor.py,sha256=KW5yI-f-giErQ077MTj707fTtFkf_Kr8IV_Nr36NNmc,2959
755
- ansible_test/_internal/git.py,sha256=l4RrpcFLx6sRsUrFzmb_jTE1ZkXtcQHFa7AtlWB5jA4,4374
755
+ ansible_test/_internal/git.py,sha256=njtciWq2DlzZ1DAkQi08HRRP-TgH0mgeGZsWcsJGctI,4366
756
756
  ansible_test/_internal/host_configs.py,sha256=0S6EfSE2QMkOi4-ySxM6A4hlGxfb3aSjJKUHOC4wiwM,18283
757
757
  ansible_test/_internal/host_profiles.py,sha256=V--balOIOZLoC1cGKEC8k7vHAnko7MuLxIhDMNnUbug,65198
758
758
  ansible_test/_internal/http.py,sha256=g3oZ3LVjcXUw2NwGrXTjBR6dJ6nz9UM-CXDaqZ-8DP8,4113
759
759
  ansible_test/_internal/init.py,sha256=f2ZN7F-FyjMgN73SUgxwbVtWNhkJv7BIlZ-q4ALHyjM,505
760
760
  ansible_test/_internal/inventory.py,sha256=c79s-xc1uv2nD7rPISv0JKkKspY-X2-kHoozF2R4e1Q,5408
761
761
  ansible_test/_internal/io.py,sha256=e7ccixoPL5lrAPLUx50vOGYpcELWHhs0R3a5Sh6b5hs,2807
762
- ansible_test/_internal/junit_xml.py,sha256=xgmGwrwuE9wNbRKHEt3w1KP9TkV88Q1xtfM7mQIRag8,8526
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
771
- ansible_test/_internal/test.py,sha256=DraKP8-qGTATurNNeirYzWrWSMSy2x9i221x-XnR6YA,14496
771
+ ansible_test/_internal/test.py,sha256=znQmGjKACqDU8T0EAPqcv2qyy0J7M2w4OmyYhwHLqT0,14515
772
772
  ansible_test/_internal/thread.py,sha256=WQoZ2q2ljmEkKHRDkIqwxW7eZbkCKDrG3YZfcaxHzHw,2596
773
- ansible_test/_internal/timeout.py,sha256=asQDESVpIT6ZEl5bRwwvLLJrVZsD-5H4myqQLDOX5O0,2466
774
- ansible_test/_internal/util.py,sha256=agLntzNJrSua3tUeTWo1r2u-3LLRhXgkvD8SFYbXMik,37693
775
- ansible_test/_internal/util_common.py,sha256=PlXt5CVPd_MPK0sYo4pcr9VEuhKfbdstX9I01KSyJdc,16167
773
+ ansible_test/_internal/timeout.py,sha256=hT-LirImhAh1iCGIh8JpmECXsiGu6Zetw8BWl1iBIC8,4050
774
+ ansible_test/_internal/util.py,sha256=Mp9_uyY3aqEGJFq0POzvELMoh_IhyIxYuf-FiGBfZIM,37809
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
@@ -794,7 +794,7 @@ ansible_test/_internal/cli/argparsing/actions.py,sha256=VplAf5K9G-loJmLXMAZwbRbI
794
794
  ansible_test/_internal/cli/argparsing/argcompletion.py,sha256=zOZtYVDkqWIdbmuASkyJuMUKrFh4w3MJzYS2O9DoIQA,5166
795
795
  ansible_test/_internal/cli/argparsing/parsers.py,sha256=i7bEPWy7q2mcgiBb3sZ0EN5wQ0G5SetOMQKsOMSsw4M,21490
796
796
  ansible_test/_internal/cli/commands/__init__.py,sha256=d8FNvVbSVR2JlnyDUxnS-lZDIQqbdEEPU0cqJA9663Q,5436
797
- ansible_test/_internal/cli/commands/env.py,sha256=-3zKICX4STeo_lObMh6EmvBy3s2ORL53idmLKN2vCHk,1397
797
+ ansible_test/_internal/cli/commands/env.py,sha256=apc4ctiVsfIjR-8ll5lrPsvBkGutw5M9kszRVpAJAwY,1399
798
798
  ansible_test/_internal/cli/commands/sanity.py,sha256=aXFLAUR-ZmgvlCQFw01JGmIS7bKNFbX1sqtKC7bOX0E,2409
799
799
  ansible_test/_internal/cli/commands/shell.py,sha256=DeYU2DcNhkJj7In_04GEcMVD3EFBRDtegdQbRY9l9rY,1268
800
800
  ansible_test/_internal/cli/commands/units.py,sha256=h15bxiaJ_Vy54dc66Agc4UsXD-gCss0vg-b0TRyLTG0,1406
@@ -835,14 +835,14 @@ ansible_test/_internal/commands/coverage/analyze/targets/expand.py,sha256=_lgYLm
835
835
  ansible_test/_internal/commands/coverage/analyze/targets/filter.py,sha256=aR_r1as2ma4Vucpm9j9fgwKZr6CmGhNL6w338DW1nzA,3958
836
836
  ansible_test/_internal/commands/coverage/analyze/targets/generate.py,sha256=UFy_ON7kXyVm7XH_g9vpooudKDnpA8sGZl5ab_bx0GM,4972
837
837
  ansible_test/_internal/commands/coverage/analyze/targets/missing.py,sha256=iqntMFk1nwhxxKgABtHTGLHJPJYMeMEa80Ey5dvBkCc,3894
838
- ansible_test/_internal/commands/env/__init__.py,sha256=NagiZDWufrt3owd3oOV2ke9A8aE2E67fVFSbPLXzqVk,5242
839
- ansible_test/_internal/commands/integration/__init__.py,sha256=SC4weQOsoz0US0AmhH3mM6RR8GZ02RYM6MyQGDGVpsE,36854
838
+ ansible_test/_internal/commands/env/__init__.py,sha256=ZJZlU1ufO_8R6tufyQXttI072YLQgy1VlwgN-ceOzP4,5165
839
+ ansible_test/_internal/commands/integration/__init__.py,sha256=CB2v0kQqNfSaSuXXwM9Rq9oNewkFiJRh5mEZJUjugpQ,36888
840
840
  ansible_test/_internal/commands/integration/coverage.py,sha256=BAdVMGPTP-QKys6uecxEWM7Ipr-TpVbrlP3vpLxjVMc,15578
841
841
  ansible_test/_internal/commands/integration/filters.py,sha256=OntBnxm9gnP57yFaiN49Wtk0wA4LJ0jKBY4e4vc0fko,12168
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=7rnRbjJYTu6zcZ8ieB0Vmeaw5xCbOvsMBl-W-eTfu38,14459
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
@@ -868,10 +868,10 @@ ansible_test/_internal/commands/sanity/import.py,sha256=C7GCC2AFmjZ96rllGCcZIxiy
868
868
  ansible_test/_internal/commands/sanity/mypy.py,sha256=d3K3mPO38sxAkvRm3DkR59TL3Aj57dQZp7JRsY_lDXI,10737
869
869
  ansible_test/_internal/commands/sanity/pep8.py,sha256=SSulTIljaSu_exl93ZklKyuhbKS-zf18SKu23k3VJhA,3125
870
870
  ansible_test/_internal/commands/sanity/pslint.py,sha256=lVgL6RrDolRgIOJ2NRr04k2KVwMddZz1M7I-6h57vII,3210
871
- ansible_test/_internal/commands/sanity/pylint.py,sha256=8wfWW_htzTs6e1WYc7Z0-ThFmI3XvPo147zxqVVbE4w,10838
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
@@ -881,9 +881,9 @@ ansible_test/_internal/compat/yaml.py,sha256=rPJT-lEzu-zY3hOPtXiY4SLqGaCuWR-0G3y
881
881
  ansible_test/_internal/dev/__init__.py,sha256=wUzKrVA5k8r6W3k9kaGg-c8k84avPlmC49ux4oHSnu8,138
882
882
  ansible_test/_internal/dev/container_probe.py,sha256=HQwqiKwn4LEZhzchsGu1PGgGDv5Jb0P2iXwSDp5tIBI,7819
883
883
  ansible_test/_internal/provider/__init__.py,sha256=GYJAiW8sj-6IrKxiQQxCFVZ8Wu4R9okpR4ej4IM0T_s,2246
884
- ansible_test/_internal/provider/layout/__init__.py,sha256=g2N1Fe--FMf_Q7nl05yx2k0RA6dEu1Q3KGZVE_nsMDc,7589
885
- ansible_test/_internal/provider/layout/ansible.py,sha256=yA4mZUw0dAd6C3-tEwSFaSMw3wo_OVhcaRgnlQWKyBk,1564
886
- ansible_test/_internal/provider/layout/collection.py,sha256=HIlZSnQlfoeCoet1SX3A06EPOAhoLUnL-YHIGUJBdE8,5843
884
+ ansible_test/_internal/provider/layout/__init__.py,sha256=yV3tTECAb-5iOquwKSdUl_AquOhUq1pNWnq898Y-qWc,7601
885
+ ansible_test/_internal/provider/layout/ansible.py,sha256=QPFZiZTJAvKfAJ_ouKI6N5n4AOoL0-aw9FvdX-HLUVc,1969
886
+ ansible_test/_internal/provider/layout/collection.py,sha256=0fTr6jLOXp4Nt-S6X3EiwHZwuaMJqCgX_mkF-uR2dHI,6130
887
887
  ansible_test/_internal/provider/layout/unsupported.py,sha256=VDD7tNkEQA0VBDHHtUCLXeufocPymxxCYTQKCO5Bkow,1240
888
888
  ansible_test/_internal/provider/source/__init__.py,sha256=H7blyEyZ_qEeo9z4QvuHBlM4H2i33EK9EL6eiX6mIHQ,359
889
889
  ansible_test/_internal/provider/source/git.py,sha256=yt9hlX0zdvVlKJJAGJz9eoDBwTr5tsjIoklu_dPud3Y,2540
@@ -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.0.dist-info/COPYING,sha256=CuBIWlvTemPmNgNZZBfk6w5lMzT6bH-TLKOg6F1K8ic,35148
1003
- ansible_core-2.15.0.dist-info/METADATA,sha256=_4sl4uDJ035DVPB09FSGMGTFe2zVle2KUPzfMRHm7Ig,7504
1004
- ansible_core-2.15.0.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
1005
- ansible_core-2.15.0.dist-info/entry_points.txt,sha256=0mpmsrIhODChxKl3eS-NcVQCaMetBn8KdPLtVxQgR64,453
1006
- ansible_core-2.15.0.dist-info/top_level.txt,sha256=IFbRLjAvih1DYzJWg3_F6t4sCzEMxRO7TOMNs6GkYHo,21
1007
- ansible_core-2.15.0.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
@@ -18,6 +18,7 @@ from .constants import (
18
18
  from .util import (
19
19
  ApplicationError,
20
20
  HostConnectionError,
21
+ TimeoutExpiredError,
21
22
  display,
22
23
  report_locale,
23
24
  )
@@ -42,6 +43,7 @@ from .data import (
42
43
 
43
44
  from .util_common import (
44
45
  CommonConfig,
46
+ ExitHandler,
45
47
  )
46
48
 
47
49
  from .cli import (
@@ -58,6 +60,12 @@ from .config import (
58
60
 
59
61
 
60
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:
61
69
  """Main program function."""
62
70
  try:
63
71
  os.chdir(data_context().content.root)
@@ -109,6 +117,9 @@ def main(cli_args: t.Optional[list[str]] = None) -> None:
109
117
  except ApplicationError as ex:
110
118
  display.fatal('%s' % ex)
111
119
  sys.exit(1)
120
+ except TimeoutExpiredError as ex:
121
+ display.fatal('%s' % ex)
122
+ sys.exit(1)
112
123
  except KeyboardInterrupt:
113
124
  sys.exit(2)
114
125
  except BrokenPipeError:
@@ -55,7 +55,7 @@ def do_env(
55
55
 
56
56
  env.add_argument(
57
57
  '--timeout',
58
- type=int,
58
+ type=float,
59
59
  metavar='MINUTES',
60
60
  help='timeout for future ansible-test commands (0 clears)',
61
61
  )
@@ -42,16 +42,20 @@ from ...ci import (
42
42
  get_ci_provider,
43
43
  )
44
44
 
45
+ from ...timeout import (
46
+ TimeoutDetail,
47
+ )
48
+
45
49
 
46
50
  class EnvConfig(CommonConfig):
47
51
  """Configuration for the `env` command."""
48
52
  def __init__(self, args: t.Any) -> None:
49
53
  super().__init__(args, 'env')
50
54
 
51
- self.show = args.show
52
- self.dump = args.dump
53
- self.timeout = args.timeout
54
- self.list_files = args.list_files
55
+ self.show: bool = args.show
56
+ self.dump: bool = args.dump
57
+ self.timeout: int | float | None = args.timeout
58
+ self.list_files: bool = args.list_files
55
59
 
56
60
  if not self.show and not self.dump and self.timeout is None and not self.list_files:
57
61
  # default to --show if no options were given
@@ -85,7 +89,7 @@ def show_dump_env(args: EnvConfig) -> None:
85
89
  ),
86
90
  git=get_ci_provider().get_git_details(args),
87
91
  platform=dict(
88
- datetime=datetime.datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%SZ'),
92
+ datetime=datetime.datetime.now(tz=datetime.timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ'),
89
93
  platform=platform.platform(),
90
94
  uname=platform.uname(),
91
95
  ),
@@ -124,25 +128,18 @@ def set_timeout(args: EnvConfig) -> None:
124
128
  if args.timeout is None:
125
129
  return
126
130
 
127
- if args.timeout:
128
- deadline = (datetime.datetime.utcnow() + datetime.timedelta(minutes=args.timeout)).strftime('%Y-%m-%dT%H:%M:%SZ')
131
+ timeout = TimeoutDetail.create(args.timeout)
129
132
 
130
- display.info('Setting a %d minute test timeout which will end at: %s' % (args.timeout, deadline), verbosity=1)
133
+ if timeout:
134
+ display.info(f'Setting a {timeout.duration} minute test timeout which will end at: {timeout.deadline}', verbosity=1)
131
135
  else:
132
- deadline = None
133
-
134
136
  display.info('Clearing existing test timeout.', verbosity=1)
135
137
 
136
138
  if args.explain:
137
139
  return
138
140
 
139
- if deadline:
140
- data = dict(
141
- duration=args.timeout,
142
- deadline=deadline,
143
- )
144
-
145
- write_json_file(TIMEOUT_PATH, data)
141
+ if timeout:
142
+ write_json_file(TIMEOUT_PATH, timeout.to_dict())
146
143
  elif os.path.exists(TIMEOUT_PATH):
147
144
  os.remove(TIMEOUT_PATH)
148
145
 
@@ -566,7 +566,7 @@ def command_integration_filtered(
566
566
  coverage_manager.teardown()
567
567
 
568
568
  result_name = '%s-%s.json' % (
569
- args.command, re.sub(r'[^0-9]', '-', str(datetime.datetime.utcnow().replace(microsecond=0))))
569
+ args.command, re.sub(r'[^0-9]', '-', str(datetime.datetime.now(tz=datetime.timezone.utc).replace(microsecond=0, tzinfo=None))))
570
570
 
571
571
  data = dict(
572
572
  targets=results,
@@ -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
  )
@@ -170,7 +170,7 @@ def cloud_init(args: IntegrationConfig, targets: tuple[IntegrationTarget, ...])
170
170
 
171
171
  if not args.explain and results:
172
172
  result_name = '%s-%s.json' % (
173
- args.command, re.sub(r'[^0-9]', '-', str(datetime.datetime.utcnow().replace(microsecond=0))))
173
+ args.command, re.sub(r'[^0-9]', '-', str(datetime.datetime.now(tz=datetime.timezone.utc).replace(microsecond=0, tzinfo=None))))
174
174
 
175
175
  data = dict(
176
176
  clouds=results,
@@ -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."""
@@ -156,19 +156,19 @@ class PylintTest(SanitySingleVersion):
156
156
  except CollectionDetailError as ex:
157
157
  display.warning('Skipping pylint collection version checks since collection detail loading failed: %s' % ex.reason)
158
158
 
159
- test_start = datetime.datetime.utcnow()
159
+ test_start = datetime.datetime.now(tz=datetime.timezone.utc)
160
160
 
161
161
  for context, context_paths in sorted(contexts):
162
162
  if not context_paths:
163
163
  continue
164
164
 
165
- context_start = datetime.datetime.utcnow()
165
+ context_start = datetime.datetime.now(tz=datetime.timezone.utc)
166
166
  messages += self.pylint(args, context, context_paths, plugin_dir, plugin_names, python, collection_detail)
167
- context_end = datetime.datetime.utcnow()
167
+ context_end = datetime.datetime.now(tz=datetime.timezone.utc)
168
168
 
169
169
  context_times.append('%s: %d (%s)' % (context, len(context_paths), context_end - context_start))
170
170
 
171
- test_end = datetime.datetime.utcnow()
171
+ test_end = datetime.datetime.now(tz=datetime.timezone.utc)
172
172
 
173
173
  for context_time in context_times:
174
174
  display.info(context_time, verbosity=4)
@@ -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