ansible-core 2.18.7rc1__py3-none-any.whl → 2.19.0__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 (757) hide show
  1. ansible/_internal/__init__.py +53 -0
  2. ansible/_internal/_ansiballz/__init__.py +0 -0
  3. ansible/_internal/_ansiballz/_builder.py +101 -0
  4. ansible/_internal/_ansiballz/_wrapper.py +262 -0
  5. ansible/_internal/_collection_proxy.py +47 -0
  6. ansible/_internal/_datatag/__init__.py +0 -0
  7. ansible/_internal/_datatag/_tags.py +130 -0
  8. ansible/_internal/_datatag/_utils.py +19 -0
  9. ansible/_internal/_datatag/_wrappers.py +33 -0
  10. ansible/_internal/_errors/__init__.py +0 -0
  11. ansible/_internal/_errors/_alarm_timeout.py +66 -0
  12. ansible/_internal/_errors/_captured.py +123 -0
  13. ansible/_internal/_errors/_error_factory.py +89 -0
  14. ansible/_internal/_errors/_error_utils.py +240 -0
  15. ansible/_internal/_errors/_handler.py +91 -0
  16. ansible/_internal/_errors/_task_timeout.py +28 -0
  17. ansible/_internal/_event_formatting.py +127 -0
  18. ansible/_internal/_json/__init__.py +214 -0
  19. ansible/_internal/_json/_legacy_encoder.py +34 -0
  20. ansible/_internal/_json/_profiles/__init__.py +0 -0
  21. ansible/_internal/_json/_profiles/_cache_persistence.py +57 -0
  22. ansible/_internal/_json/_profiles/_inventory_legacy.py +40 -0
  23. ansible/_internal/_json/_profiles/_legacy.py +189 -0
  24. ansible/_internal/_locking.py +21 -0
  25. ansible/_internal/_plugins/__init__.py +0 -0
  26. ansible/_internal/_plugins/_cache.py +57 -0
  27. ansible/_internal/_ssh/__init__.py +0 -0
  28. ansible/_internal/_ssh/_agent_launch.py +91 -0
  29. ansible/_internal/_ssh/_ssh_agent.py +619 -0
  30. ansible/_internal/_task.py +78 -0
  31. ansible/_internal/_templating/__init__.py +12 -0
  32. ansible/_internal/_templating/_access.py +86 -0
  33. ansible/_internal/_templating/_chain_templar.py +63 -0
  34. ansible/_internal/_templating/_datatag.py +95 -0
  35. ansible/_internal/_templating/_engine.py +592 -0
  36. ansible/_internal/_templating/_errors.py +28 -0
  37. ansible/_internal/_templating/_jinja_bits.py +1106 -0
  38. ansible/_internal/_templating/_jinja_common.py +323 -0
  39. ansible/_internal/_templating/_jinja_patches.py +44 -0
  40. ansible/_internal/_templating/_jinja_plugins.py +375 -0
  41. ansible/_internal/_templating/_lazy_containers.py +633 -0
  42. ansible/_internal/_templating/_marker_behaviors.py +103 -0
  43. ansible/_internal/_templating/_template_vars.py +72 -0
  44. ansible/_internal/_templating/_transform.py +70 -0
  45. ansible/_internal/_templating/_utils.py +108 -0
  46. ansible/_internal/_testing.py +26 -0
  47. ansible/_internal/_wrapt.py +1052 -0
  48. ansible/_internal/_yaml/__init__.py +0 -0
  49. ansible/_internal/_yaml/_constructor.py +240 -0
  50. ansible/_internal/_yaml/_dumper.py +70 -0
  51. ansible/_internal/_yaml/_errors.py +166 -0
  52. ansible/_internal/_yaml/_loader.py +66 -0
  53. ansible/_internal/ansible_collections/ansible/_protomatter/README.md +11 -0
  54. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/action/debug.py +36 -0
  55. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/apply_trust.py +19 -0
  56. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/dump_object.py +27 -0
  57. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/finalize.py +16 -0
  58. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/origin.py +18 -0
  59. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.py +24 -0
  60. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.yml +33 -0
  61. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/tag_names.py +16 -0
  62. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/true_type.py +17 -0
  63. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/unmask.py +49 -0
  64. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.py +21 -0
  65. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.yml +2 -0
  66. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.py +15 -0
  67. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.yml +19 -0
  68. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.py +18 -0
  69. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.yml +19 -0
  70. ansible/cli/__init__.py +93 -104
  71. ansible/cli/_ssh_askpass.py +54 -0
  72. ansible/cli/adhoc.py +20 -10
  73. ansible/cli/arguments/option_helpers.py +163 -10
  74. ansible/cli/config.py +43 -68
  75. ansible/cli/console.py +13 -11
  76. ansible/cli/doc.py +134 -77
  77. ansible/cli/galaxy.py +27 -20
  78. ansible/cli/inventory.py +28 -28
  79. ansible/cli/playbook.py +4 -12
  80. ansible/cli/pull.py +6 -3
  81. ansible/cli/scripts/ansible_connection_cli_stub.py +7 -7
  82. ansible/cli/vault.py +12 -11
  83. ansible/compat/__init__.py +2 -2
  84. ansible/compat/importlib_resources.py +9 -12
  85. ansible/config/base.yml +218 -133
  86. ansible/config/manager.py +220 -159
  87. ansible/constants.py +2 -65
  88. ansible/errors/__init__.py +350 -256
  89. ansible/executor/interpreter_discovery.py +28 -149
  90. ansible/executor/module_common.py +480 -514
  91. ansible/executor/play_iterator.py +22 -27
  92. ansible/executor/playbook_executor.py +11 -11
  93. ansible/executor/powershell/async_watchdog.ps1 +97 -102
  94. ansible/executor/powershell/async_wrapper.ps1 +204 -153
  95. ansible/executor/powershell/become_wrapper.ps1 +107 -144
  96. ansible/executor/powershell/bootstrap_wrapper.ps1 +46 -9
  97. ansible/executor/powershell/coverage_wrapper.ps1 +91 -135
  98. ansible/executor/powershell/exec_wrapper.ps1 +675 -196
  99. ansible/executor/powershell/module_manifest.py +469 -265
  100. ansible/executor/powershell/module_wrapper.ps1 +195 -186
  101. ansible/executor/powershell/powershell_expand_user.ps1 +20 -0
  102. ansible/executor/powershell/powershell_mkdtemp.ps1 +17 -0
  103. ansible/executor/powershell/psrp_fetch_file.ps1 +41 -0
  104. ansible/executor/powershell/psrp_put_file.ps1 +122 -0
  105. ansible/executor/powershell/winrm_fetch_file.ps1 +46 -0
  106. ansible/executor/powershell/winrm_put_file.ps1 +36 -0
  107. ansible/executor/process/worker.py +139 -149
  108. ansible/executor/stats.py +5 -5
  109. ansible/executor/task_executor.py +270 -297
  110. ansible/executor/task_queue_manager.py +135 -137
  111. ansible/executor/task_result.py +182 -79
  112. ansible/galaxy/__init__.py +2 -2
  113. ansible/galaxy/api.py +26 -25
  114. ansible/galaxy/collection/__init__.py +6 -14
  115. ansible/galaxy/collection/concrete_artifact_manager.py +12 -21
  116. ansible/galaxy/dependency_resolution/dataclasses.py +14 -4
  117. ansible/galaxy/dependency_resolution/providers.py +4 -4
  118. ansible/galaxy/dependency_resolution/reporters.py +81 -0
  119. ansible/galaxy/role.py +6 -10
  120. ansible/galaxy/token.py +28 -21
  121. ansible/inventory/data.py +47 -57
  122. ansible/inventory/group.py +50 -73
  123. ansible/inventory/helpers.py +9 -0
  124. ansible/inventory/host.py +37 -54
  125. ansible/inventory/manager.py +79 -34
  126. ansible/keyword_desc.yml +1 -1
  127. ansible/module_utils/_internal/__init__.py +55 -0
  128. ansible/module_utils/_internal/_ambient_context.py +58 -0
  129. ansible/module_utils/_internal/_ansiballz/__init__.py +0 -0
  130. ansible/module_utils/_internal/_ansiballz/_extensions/__init__.py +0 -0
  131. ansible/module_utils/_internal/_ansiballz/_extensions/_coverage.py +45 -0
  132. ansible/module_utils/_internal/_ansiballz/_extensions/_pydevd.py +62 -0
  133. ansible/module_utils/_internal/_ansiballz/_loader.py +81 -0
  134. ansible/module_utils/_internal/_ansiballz/_respawn.py +32 -0
  135. ansible/module_utils/_internal/_ansiballz/_respawn_wrapper.py +23 -0
  136. ansible/module_utils/_internal/_concurrent/_daemon_threading.py +1 -0
  137. ansible/module_utils/_internal/_dataclass_validation.py +217 -0
  138. ansible/module_utils/_internal/_datatag/__init__.py +961 -0
  139. ansible/module_utils/_internal/_datatag/_tags.py +16 -0
  140. ansible/module_utils/_internal/_debugging.py +31 -0
  141. ansible/module_utils/_internal/_deprecator.py +157 -0
  142. ansible/module_utils/_internal/_errors.py +101 -0
  143. ansible/module_utils/_internal/_event_utils.py +61 -0
  144. ansible/module_utils/_internal/_json/__init__.py +63 -0
  145. ansible/module_utils/_internal/_json/_legacy_encoder.py +26 -0
  146. ansible/module_utils/_internal/_json/_profiles/__init__.py +428 -0
  147. ansible/module_utils/_internal/_json/_profiles/_fallback_to_str.py +73 -0
  148. ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py +33 -0
  149. ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py +37 -0
  150. ansible/module_utils/_internal/_json/_profiles/_module_modern_c2m.py +35 -0
  151. ansible/module_utils/_internal/_json/_profiles/_module_modern_m2c.py +33 -0
  152. ansible/module_utils/_internal/_json/_profiles/_tagless.py +52 -0
  153. ansible/module_utils/_internal/_messages.py +130 -0
  154. ansible/module_utils/_internal/_patches/__init__.py +66 -0
  155. ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py +53 -0
  156. ansible/module_utils/_internal/_patches/_socket_patch.py +34 -0
  157. ansible/module_utils/_internal/_patches/_sys_intern_patch.py +34 -0
  158. ansible/module_utils/_internal/_plugin_info.py +38 -0
  159. ansible/module_utils/_internal/_stack.py +22 -0
  160. ansible/module_utils/_internal/_testing.py +0 -0
  161. ansible/module_utils/_internal/_text_utils.py +6 -0
  162. ansible/module_utils/_internal/_traceback.py +92 -0
  163. ansible/module_utils/_internal/_validation.py +14 -0
  164. ansible/module_utils/ansible_release.py +2 -2
  165. ansible/module_utils/api.py +1 -2
  166. ansible/module_utils/basic.py +303 -202
  167. ansible/module_utils/common/_utils.py +24 -28
  168. ansible/module_utils/common/arg_spec.py +8 -3
  169. ansible/module_utils/common/collections.py +7 -2
  170. ansible/module_utils/common/dict_transformations.py +2 -2
  171. ansible/module_utils/common/file.py +2 -2
  172. ansible/module_utils/common/json.py +90 -84
  173. ansible/module_utils/common/locale.py +2 -2
  174. ansible/module_utils/common/parameters.py +27 -24
  175. ansible/module_utils/common/process.py +2 -3
  176. ansible/module_utils/common/respawn.py +11 -33
  177. ansible/module_utils/common/sentinel.py +66 -0
  178. ansible/module_utils/common/sys_info.py +8 -8
  179. ansible/module_utils/common/text/converters.py +16 -37
  180. ansible/module_utils/common/validation.py +35 -24
  181. ansible/module_utils/common/warnings.py +143 -25
  182. ansible/module_utils/common/yaml.py +29 -3
  183. ansible/module_utils/compat/datetime.py +33 -21
  184. ansible/module_utils/compat/paramiko.py +21 -10
  185. ansible/module_utils/compat/typing.py +6 -5
  186. ansible/module_utils/connection.py +10 -13
  187. ansible/module_utils/csharp/Ansible.Basic.cs +15 -12
  188. ansible/module_utils/csharp/Ansible.Become.cs +1 -0
  189. ansible/module_utils/csharp/Ansible.Privilege.cs +2 -2
  190. ansible/module_utils/csharp/Ansible._Async.cs +517 -0
  191. ansible/module_utils/datatag.py +49 -0
  192. ansible/module_utils/distro/__init__.py +2 -2
  193. ansible/module_utils/facts/ansible_collector.py +4 -5
  194. ansible/module_utils/facts/collector.py +13 -14
  195. ansible/module_utils/facts/compat.py +4 -4
  196. ansible/module_utils/facts/default_collectors.py +1 -1
  197. ansible/module_utils/facts/hardware/aix.py +34 -0
  198. ansible/module_utils/facts/hardware/base.py +2 -2
  199. ansible/module_utils/facts/hardware/darwin.py +1 -3
  200. ansible/module_utils/facts/hardware/freebsd.py +2 -2
  201. ansible/module_utils/facts/hardware/linux.py +5 -5
  202. ansible/module_utils/facts/namespace.py +1 -1
  203. ansible/module_utils/facts/network/base.py +1 -1
  204. ansible/module_utils/facts/network/fc_wwn.py +1 -2
  205. ansible/module_utils/facts/network/iscsi.py +1 -2
  206. ansible/module_utils/facts/network/nvme.py +1 -2
  207. ansible/module_utils/facts/other/facter.py +2 -3
  208. ansible/module_utils/facts/other/ohai.py +2 -3
  209. ansible/module_utils/facts/sysctl.py +4 -6
  210. ansible/module_utils/facts/system/apparmor.py +1 -2
  211. ansible/module_utils/facts/system/caps.py +3 -3
  212. ansible/module_utils/facts/system/chroot.py +1 -2
  213. ansible/module_utils/facts/system/cmdline.py +1 -2
  214. ansible/module_utils/facts/system/date_time.py +5 -3
  215. ansible/module_utils/facts/system/distribution.py +27 -13
  216. ansible/module_utils/facts/system/dns.py +1 -1
  217. ansible/module_utils/facts/system/env.py +1 -2
  218. ansible/module_utils/facts/system/fips.py +7 -20
  219. ansible/module_utils/facts/system/loadavg.py +1 -2
  220. ansible/module_utils/facts/system/local.py +2 -3
  221. ansible/module_utils/facts/system/lsb.py +1 -2
  222. ansible/module_utils/facts/system/pkg_mgr.py +1 -2
  223. ansible/module_utils/facts/system/platform.py +1 -2
  224. ansible/module_utils/facts/system/python.py +1 -2
  225. ansible/module_utils/facts/system/selinux.py +1 -1
  226. ansible/module_utils/facts/system/service_mgr.py +1 -2
  227. ansible/module_utils/facts/system/ssh_pub_keys.py +1 -1
  228. ansible/module_utils/facts/system/systemd.py +1 -1
  229. ansible/module_utils/facts/system/user.py +1 -2
  230. ansible/module_utils/facts/utils.py +3 -3
  231. ansible/module_utils/facts/virtual/base.py +1 -1
  232. ansible/module_utils/facts/virtual/linux.py +3 -3
  233. ansible/module_utils/facts/virtual/sunos.py +3 -15
  234. ansible/module_utils/facts/virtual/sysctl.py +3 -16
  235. ansible/module_utils/json_utils.py +2 -2
  236. ansible/module_utils/parsing/convert_bool.py +7 -1
  237. ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1 +1 -1
  238. ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1 +1 -1
  239. ansible/module_utils/powershell/Ansible.ModuleUtils.CommandUtil.psm1 +1 -1
  240. ansible/module_utils/powershell/Ansible.ModuleUtils.WebRequest.psm1 +1 -1
  241. ansible/module_utils/service.py +21 -31
  242. ansible/module_utils/splitter.py +7 -7
  243. ansible/module_utils/testing.py +31 -0
  244. ansible/module_utils/urls.py +64 -35
  245. ansible/modules/add_host.py +4 -4
  246. ansible/modules/apt.py +69 -49
  247. ansible/modules/apt_key.py +19 -12
  248. ansible/modules/apt_repository.py +32 -51
  249. ansible/modules/assemble.py +16 -14
  250. ansible/modules/assert.py +4 -4
  251. ansible/modules/async_status.py +24 -24
  252. ansible/modules/async_wrapper.py +20 -25
  253. ansible/modules/blockinfile.py +6 -7
  254. ansible/modules/command.py +13 -20
  255. ansible/modules/copy.py +60 -147
  256. ansible/modules/cron.py +24 -21
  257. ansible/modules/deb822_repository.py +8 -9
  258. ansible/modules/debconf.py +5 -5
  259. ansible/modules/debug.py +4 -4
  260. ansible/modules/dnf.py +8 -8
  261. ansible/modules/dnf5.py +39 -13
  262. ansible/modules/dpkg_selections.py +4 -4
  263. ansible/modules/expect.py +13 -15
  264. ansible/modules/fail.py +4 -4
  265. ansible/modules/fetch.py +4 -4
  266. ansible/modules/file.py +184 -144
  267. ansible/modules/find.py +22 -20
  268. ansible/modules/gather_facts.py +3 -3
  269. ansible/modules/get_url.py +77 -54
  270. ansible/modules/getent.py +7 -9
  271. ansible/modules/git.py +38 -38
  272. ansible/modules/group.py +6 -6
  273. ansible/modules/group_by.py +4 -4
  274. ansible/modules/hostname.py +15 -32
  275. ansible/modules/import_playbook.py +6 -6
  276. ansible/modules/import_role.py +6 -6
  277. ansible/modules/import_tasks.py +6 -6
  278. ansible/modules/include_role.py +6 -6
  279. ansible/modules/include_tasks.py +6 -6
  280. ansible/modules/include_vars.py +6 -6
  281. ansible/modules/iptables.py +86 -73
  282. ansible/modules/known_hosts.py +22 -24
  283. ansible/modules/lineinfile.py +5 -5
  284. ansible/modules/meta.py +4 -4
  285. ansible/modules/mount_facts.py +2 -2
  286. ansible/modules/package.py +10 -4
  287. ansible/modules/package_facts.py +22 -10
  288. ansible/modules/pause.py +6 -6
  289. ansible/modules/ping.py +6 -6
  290. ansible/modules/pip.py +21 -26
  291. ansible/modules/raw.py +6 -6
  292. ansible/modules/reboot.py +6 -6
  293. ansible/modules/replace.py +10 -14
  294. ansible/modules/rpm_key.py +7 -8
  295. ansible/modules/script.py +4 -4
  296. ansible/modules/service.py +10 -17
  297. ansible/modules/service_facts.py +87 -10
  298. ansible/modules/set_fact.py +5 -5
  299. ansible/modules/set_stats.py +4 -4
  300. ansible/modules/setup.py +2 -2
  301. ansible/modules/shell.py +6 -6
  302. ansible/modules/slurp.py +16 -19
  303. ansible/modules/stat.py +15 -31
  304. ansible/modules/subversion.py +15 -15
  305. ansible/modules/systemd.py +7 -7
  306. ansible/modules/systemd_service.py +7 -7
  307. ansible/modules/sysvinit.py +9 -9
  308. ansible/modules/tempfile.py +5 -6
  309. ansible/modules/template.py +6 -6
  310. ansible/modules/unarchive.py +38 -17
  311. ansible/modules/uri.py +33 -26
  312. ansible/modules/user.py +45 -32
  313. ansible/modules/validate_argument_spec.py +10 -7
  314. ansible/modules/wait_for.py +70 -60
  315. ansible/modules/wait_for_connection.py +6 -6
  316. ansible/modules/yum_repository.py +10 -9
  317. ansible/parsing/ajson.py +17 -37
  318. ansible/parsing/dataloader.py +99 -54
  319. ansible/parsing/mod_args.py +62 -60
  320. ansible/parsing/plugin_docs.py +21 -86
  321. ansible/parsing/quoting.py +1 -1
  322. ansible/parsing/splitter.py +27 -12
  323. ansible/parsing/utils/addresses.py +24 -24
  324. ansible/parsing/utils/jsonify.py +5 -1
  325. ansible/parsing/utils/yaml.py +32 -61
  326. ansible/parsing/vault/__init__.py +327 -99
  327. ansible/parsing/yaml/__init__.py +0 -18
  328. ansible/parsing/yaml/dumper.py +6 -120
  329. ansible/parsing/yaml/loader.py +6 -39
  330. ansible/parsing/yaml/objects.py +43 -335
  331. ansible/playbook/__init__.py +1 -1
  332. ansible/playbook/attribute.py +8 -3
  333. ansible/playbook/base.py +187 -134
  334. ansible/playbook/block.py +26 -24
  335. ansible/playbook/collectionsearch.py +1 -15
  336. ansible/playbook/conditional.py +3 -77
  337. ansible/playbook/handler.py +8 -2
  338. ansible/playbook/helpers.py +41 -53
  339. ansible/playbook/included_file.py +32 -26
  340. ansible/playbook/loop_control.py +2 -2
  341. ansible/playbook/play.py +85 -44
  342. ansible/playbook/play_context.py +14 -17
  343. ansible/playbook/playbook_include.py +27 -62
  344. ansible/playbook/role/__init__.py +64 -49
  345. ansible/playbook/role/definition.py +15 -17
  346. ansible/playbook/role/include.py +2 -4
  347. ansible/playbook/role/metadata.py +10 -11
  348. ansible/playbook/role_include.py +3 -3
  349. ansible/playbook/taggable.py +28 -12
  350. ansible/playbook/task.py +192 -121
  351. ansible/playbook/task_include.py +5 -5
  352. ansible/plugins/__init__.py +58 -26
  353. ansible/plugins/action/__init__.py +188 -186
  354. ansible/plugins/action/add_host.py +2 -2
  355. ansible/plugins/action/assemble.py +11 -18
  356. ansible/plugins/action/assert.py +55 -67
  357. ansible/plugins/action/async_status.py +7 -2
  358. ansible/plugins/action/copy.py +14 -17
  359. ansible/plugins/action/debug.py +37 -31
  360. ansible/plugins/action/dnf.py +3 -4
  361. ansible/plugins/action/fail.py +1 -1
  362. ansible/plugins/action/fetch.py +7 -8
  363. ansible/plugins/action/gather_facts.py +13 -14
  364. ansible/plugins/action/group_by.py +1 -1
  365. ansible/plugins/action/include_vars.py +10 -11
  366. ansible/plugins/action/package.py +8 -14
  367. ansible/plugins/action/pause.py +2 -2
  368. ansible/plugins/action/script.py +27 -38
  369. ansible/plugins/action/service.py +9 -18
  370. ansible/plugins/action/set_fact.py +3 -12
  371. ansible/plugins/action/set_stats.py +3 -8
  372. ansible/plugins/action/template.py +47 -67
  373. ansible/plugins/action/unarchive.py +6 -16
  374. ansible/plugins/action/uri.py +9 -20
  375. ansible/plugins/action/validate_argument_spec.py +5 -5
  376. ansible/plugins/action/wait_for_connection.py +1 -1
  377. ansible/plugins/become/__init__.py +31 -8
  378. ansible/plugins/become/runas.py +71 -0
  379. ansible/plugins/become/su.py +13 -8
  380. ansible/plugins/become/sudo.py +19 -0
  381. ansible/plugins/cache/__init__.py +52 -63
  382. ansible/plugins/cache/base.py +8 -0
  383. ansible/plugins/cache/jsonfile.py +10 -16
  384. ansible/plugins/cache/memory.py +6 -12
  385. ansible/plugins/callback/__init__.py +294 -201
  386. ansible/plugins/callback/default.py +99 -95
  387. ansible/plugins/callback/junit.py +44 -43
  388. ansible/plugins/callback/minimal.py +28 -25
  389. ansible/plugins/callback/oneline.py +34 -21
  390. ansible/plugins/callback/tree.py +27 -16
  391. ansible/plugins/connection/__init__.py +47 -34
  392. ansible/plugins/connection/local.py +156 -60
  393. ansible/plugins/connection/paramiko_ssh.py +34 -24
  394. ansible/plugins/connection/psrp.py +76 -165
  395. ansible/plugins/connection/ssh.py +326 -86
  396. ansible/plugins/connection/winrm.py +62 -141
  397. ansible/plugins/doc_fragments/action_common_attributes.py +14 -14
  398. ansible/plugins/doc_fragments/action_core.py +6 -6
  399. ansible/plugins/doc_fragments/backup.py +2 -2
  400. ansible/plugins/doc_fragments/checksum_common.py +27 -0
  401. ansible/plugins/doc_fragments/constructed.py +8 -4
  402. ansible/plugins/doc_fragments/decrypt.py +2 -2
  403. ansible/plugins/doc_fragments/default_callback.py +2 -2
  404. ansible/plugins/doc_fragments/files.py +2 -2
  405. ansible/plugins/doc_fragments/inventory_cache.py +2 -2
  406. ansible/plugins/doc_fragments/result_format_callback.py +2 -2
  407. ansible/plugins/doc_fragments/return_common.py +2 -2
  408. ansible/plugins/doc_fragments/template_common.py +4 -4
  409. ansible/plugins/doc_fragments/url.py +17 -1
  410. ansible/plugins/doc_fragments/url_windows.py +2 -2
  411. ansible/plugins/doc_fragments/validate.py +2 -2
  412. ansible/plugins/doc_fragments/vars_plugin_staging.py +2 -2
  413. ansible/plugins/filter/__init__.py +6 -2
  414. ansible/plugins/filter/b64decode.yml +22 -0
  415. ansible/plugins/filter/b64encode.yml +22 -0
  416. ansible/plugins/filter/bool.yml +11 -4
  417. ansible/plugins/filter/core.py +245 -120
  418. ansible/plugins/filter/encryption.py +42 -34
  419. ansible/plugins/filter/flatten.yml +3 -2
  420. ansible/plugins/filter/human_to_bytes.yml +1 -1
  421. ansible/plugins/filter/mathstuff.py +30 -37
  422. ansible/plugins/filter/password_hash.yml +8 -0
  423. ansible/plugins/filter/pow.yml +1 -1
  424. ansible/plugins/filter/regex_search.yml +1 -4
  425. ansible/plugins/filter/root.yml +1 -1
  426. ansible/plugins/filter/split.yml +1 -1
  427. ansible/plugins/filter/strftime.yml +3 -3
  428. ansible/plugins/filter/to_nice_yaml.yml +0 -4
  429. ansible/plugins/filter/to_uuid.yml +1 -1
  430. ansible/plugins/filter/to_yaml.yml +0 -4
  431. ansible/plugins/filter/unvault.yml +1 -1
  432. ansible/plugins/filter/urls.py +1 -1
  433. ansible/plugins/filter/urlsplit.py +8 -9
  434. ansible/plugins/filter/vault.yml +14 -9
  435. ansible/plugins/filter/win_basename.yml +6 -1
  436. ansible/plugins/filter/win_dirname.yml +5 -0
  437. ansible/plugins/inventory/__init__.py +107 -86
  438. ansible/plugins/inventory/advanced_host_list.py +7 -5
  439. ansible/plugins/inventory/auto.py +11 -4
  440. ansible/plugins/inventory/constructed.py +21 -24
  441. ansible/plugins/inventory/generator.py +16 -11
  442. ansible/plugins/inventory/host_list.py +7 -5
  443. ansible/plugins/inventory/ini.py +78 -44
  444. ansible/plugins/inventory/script.py +190 -120
  445. ansible/plugins/inventory/toml.py +16 -126
  446. ansible/plugins/inventory/yaml.py +10 -8
  447. ansible/plugins/list.py +72 -19
  448. ansible/plugins/loader.py +383 -198
  449. ansible/plugins/lookup/__init__.py +21 -4
  450. ansible/plugins/lookup/config.py +21 -35
  451. ansible/plugins/lookup/csvfile.py +19 -73
  452. ansible/plugins/lookup/dict.py +1 -6
  453. ansible/plugins/lookup/env.py +12 -9
  454. ansible/plugins/lookup/file.py +5 -8
  455. ansible/plugins/lookup/first_found.py +87 -55
  456. ansible/plugins/lookup/indexed_items.py +1 -10
  457. ansible/plugins/lookup/ini.py +14 -13
  458. ansible/plugins/lookup/items.py +1 -1
  459. ansible/plugins/lookup/lines.py +8 -1
  460. ansible/plugins/lookup/list.py +1 -1
  461. ansible/plugins/lookup/nested.py +2 -18
  462. ansible/plugins/lookup/password.py +5 -5
  463. ansible/plugins/lookup/pipe.py +5 -7
  464. ansible/plugins/lookup/sequence.py +18 -8
  465. ansible/plugins/lookup/subelements.py +1 -4
  466. ansible/plugins/lookup/template.py +47 -36
  467. ansible/plugins/lookup/together.py +0 -12
  468. ansible/plugins/lookup/unvault.py +1 -5
  469. ansible/plugins/lookup/url.py +4 -10
  470. ansible/plugins/lookup/vars.py +16 -24
  471. ansible/plugins/shell/__init__.py +58 -4
  472. ansible/plugins/shell/cmd.py +2 -2
  473. ansible/plugins/shell/powershell.py +106 -31
  474. ansible/plugins/shell/sh.py +13 -7
  475. ansible/plugins/strategy/__init__.py +168 -193
  476. ansible/plugins/strategy/debug.py +2 -2
  477. ansible/plugins/strategy/free.py +16 -31
  478. ansible/plugins/strategy/host_pinned.py +2 -2
  479. ansible/plugins/strategy/linear.py +41 -41
  480. ansible/plugins/terminal/__init__.py +4 -4
  481. ansible/plugins/test/__init__.py +7 -2
  482. ansible/plugins/test/core.py +75 -35
  483. ansible/plugins/test/files.py +1 -1
  484. ansible/plugins/test/finished.yml +1 -1
  485. ansible/plugins/test/mathstuff.py +3 -3
  486. ansible/plugins/test/uri.py +5 -8
  487. ansible/plugins/vars/host_group_vars.py +7 -14
  488. ansible/release.py +2 -2
  489. ansible/template/__init__.py +353 -943
  490. ansible/utils/__init__.py +0 -18
  491. ansible/utils/collection_loader/__init__.py +54 -5
  492. ansible/utils/collection_loader/_collection_config.py +5 -6
  493. ansible/utils/collection_loader/_collection_finder.py +82 -96
  494. ansible/utils/collection_loader/_collection_meta.py +15 -8
  495. ansible/utils/display.py +485 -73
  496. ansible/utils/encrypt.py +27 -19
  497. ansible/utils/fqcn.py +2 -2
  498. ansible/utils/galaxy.py +2 -2
  499. ansible/utils/hashing.py +8 -10
  500. ansible/utils/helpers.py +2 -2
  501. ansible/utils/listify.py +10 -8
  502. ansible/utils/lock.py +2 -2
  503. ansible/utils/path.py +10 -12
  504. ansible/utils/plugin_docs.py +16 -14
  505. ansible/utils/py3compat.py +2 -7
  506. ansible/utils/sentinel.py +4 -62
  507. ansible/utils/singleton.py +2 -0
  508. ansible/utils/ssh_functions.py +6 -2
  509. ansible/utils/unsafe_proxy.py +23 -332
  510. ansible/utils/vars.py +55 -8
  511. ansible/utils/version.py +2 -2
  512. ansible/vars/clean.py +5 -5
  513. ansible/vars/hostvars.py +60 -90
  514. ansible/vars/manager.py +220 -285
  515. ansible/vars/plugins.py +4 -4
  516. ansible/vars/reserved.py +13 -12
  517. {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/METADATA +4 -3
  518. ansible_core-2.19.0.dist-info/RECORD +1097 -0
  519. ansible_core-2.19.0.dist-info/licenses/licenses/BSD-3-Clause.txt +28 -0
  520. ansible_test/_data/completion/docker.txt +7 -7
  521. ansible_test/_data/completion/remote.txt +6 -6
  522. ansible_test/_data/completion/windows.txt +1 -0
  523. ansible_test/_data/requirements/ansible.txt +2 -2
  524. ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
  525. ansible_test/_data/requirements/sanity.changelog.txt +2 -2
  526. ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
  527. ansible_test/_data/requirements/sanity.pep8.txt +1 -1
  528. ansible_test/_data/requirements/sanity.pylint.txt +5 -5
  529. ansible_test/_data/requirements/sanity.validate-modules.txt +2 -2
  530. ansible_test/_data/requirements/sanity.yamllint.txt +1 -1
  531. ansible_test/_data/requirements/units.txt +1 -0
  532. ansible_test/_internal/__init__.py +6 -0
  533. ansible_test/_internal/ansible_util.py +3 -1
  534. ansible_test/_internal/become.py +1 -0
  535. ansible_test/_internal/bootstrap.py +1 -0
  536. ansible_test/_internal/cache.py +1 -0
  537. ansible_test/_internal/cgroup.py +1 -0
  538. ansible_test/_internal/ci/__init__.py +1 -0
  539. ansible_test/_internal/ci/azp.py +1 -0
  540. ansible_test/_internal/ci/local.py +1 -0
  541. ansible_test/_internal/classification/__init__.py +1 -0
  542. ansible_test/_internal/classification/common.py +1 -0
  543. ansible_test/_internal/classification/csharp.py +1 -0
  544. ansible_test/_internal/classification/powershell.py +1 -0
  545. ansible_test/_internal/classification/python.py +1 -0
  546. ansible_test/_internal/cli/__init__.py +1 -0
  547. ansible_test/_internal/cli/actions.py +1 -0
  548. ansible_test/_internal/cli/argparsing/__init__.py +1 -0
  549. ansible_test/_internal/cli/argparsing/actions.py +1 -0
  550. ansible_test/_internal/cli/argparsing/argcompletion.py +1 -0
  551. ansible_test/_internal/cli/argparsing/parsers.py +1 -0
  552. ansible_test/_internal/cli/commands/__init__.py +11 -5
  553. ansible_test/_internal/cli/commands/coverage/__init__.py +1 -0
  554. ansible_test/_internal/cli/commands/coverage/analyze/__init__.py +1 -0
  555. ansible_test/_internal/cli/commands/coverage/analyze/targets/__init__.py +1 -0
  556. ansible_test/_internal/cli/commands/coverage/analyze/targets/combine.py +1 -0
  557. ansible_test/_internal/cli/commands/coverage/analyze/targets/expand.py +1 -0
  558. ansible_test/_internal/cli/commands/coverage/analyze/targets/filter.py +1 -0
  559. ansible_test/_internal/cli/commands/coverage/analyze/targets/generate.py +1 -0
  560. ansible_test/_internal/cli/commands/coverage/analyze/targets/missing.py +1 -0
  561. ansible_test/_internal/cli/commands/coverage/combine.py +1 -0
  562. ansible_test/_internal/cli/commands/coverage/erase.py +1 -0
  563. ansible_test/_internal/cli/commands/coverage/html.py +1 -0
  564. ansible_test/_internal/cli/commands/coverage/report.py +1 -0
  565. ansible_test/_internal/cli/commands/coverage/xml.py +1 -0
  566. ansible_test/_internal/cli/commands/env.py +1 -0
  567. ansible_test/_internal/cli/commands/integration/__init__.py +1 -0
  568. ansible_test/_internal/cli/commands/integration/network.py +1 -0
  569. ansible_test/_internal/cli/commands/integration/posix.py +1 -0
  570. ansible_test/_internal/cli/commands/integration/windows.py +1 -0
  571. ansible_test/_internal/cli/commands/sanity.py +9 -0
  572. ansible_test/_internal/cli/commands/shell.py +1 -0
  573. ansible_test/_internal/cli/commands/units.py +1 -0
  574. ansible_test/_internal/cli/compat.py +1 -0
  575. ansible_test/_internal/cli/completers.py +1 -0
  576. ansible_test/_internal/cli/converters.py +1 -0
  577. ansible_test/_internal/cli/environments.py +52 -5
  578. ansible_test/_internal/cli/epilog.py +1 -0
  579. ansible_test/_internal/cli/parsers/__init__.py +1 -0
  580. ansible_test/_internal/cli/parsers/base_argument_parsers.py +1 -0
  581. ansible_test/_internal/cli/parsers/helpers.py +1 -0
  582. ansible_test/_internal/cli/parsers/host_config_parsers.py +1 -0
  583. ansible_test/_internal/cli/parsers/key_value_parsers.py +1 -0
  584. ansible_test/_internal/cli/parsers/value_parsers.py +1 -0
  585. ansible_test/_internal/commands/__init__.py +1 -0
  586. ansible_test/_internal/commands/coverage/__init__.py +3 -2
  587. ansible_test/_internal/commands/coverage/analyze/__init__.py +1 -0
  588. ansible_test/_internal/commands/coverage/analyze/targets/__init__.py +1 -0
  589. ansible_test/_internal/commands/coverage/analyze/targets/combine.py +1 -0
  590. ansible_test/_internal/commands/coverage/analyze/targets/expand.py +1 -0
  591. ansible_test/_internal/commands/coverage/analyze/targets/filter.py +1 -0
  592. ansible_test/_internal/commands/coverage/analyze/targets/generate.py +1 -0
  593. ansible_test/_internal/commands/coverage/analyze/targets/missing.py +1 -0
  594. ansible_test/_internal/commands/coverage/combine.py +2 -1
  595. ansible_test/_internal/commands/coverage/erase.py +1 -0
  596. ansible_test/_internal/commands/coverage/html.py +1 -0
  597. ansible_test/_internal/commands/coverage/report.py +1 -0
  598. ansible_test/_internal/commands/coverage/xml.py +1 -0
  599. ansible_test/_internal/commands/env/__init__.py +2 -0
  600. ansible_test/_internal/commands/integration/__init__.py +22 -5
  601. ansible_test/_internal/commands/integration/cloud/__init__.py +1 -0
  602. ansible_test/_internal/commands/integration/cloud/acme.py +2 -1
  603. ansible_test/_internal/commands/integration/cloud/aws.py +1 -0
  604. ansible_test/_internal/commands/integration/cloud/azure.py +1 -0
  605. ansible_test/_internal/commands/integration/cloud/cs.py +1 -0
  606. ansible_test/_internal/commands/integration/cloud/digitalocean.py +1 -0
  607. ansible_test/_internal/commands/integration/cloud/galaxy.py +3 -2
  608. ansible_test/_internal/commands/integration/cloud/hcloud.py +1 -0
  609. ansible_test/_internal/commands/integration/cloud/httptester.py +3 -2
  610. ansible_test/_internal/commands/integration/cloud/nios.py +2 -1
  611. ansible_test/_internal/commands/integration/cloud/opennebula.py +1 -0
  612. ansible_test/_internal/commands/integration/cloud/openshift.py +1 -0
  613. ansible_test/_internal/commands/integration/cloud/scaleway.py +1 -0
  614. ansible_test/_internal/commands/integration/cloud/vcenter.py +1 -0
  615. ansible_test/_internal/commands/integration/cloud/vultr.py +1 -0
  616. ansible_test/_internal/commands/integration/coverage.py +8 -2
  617. ansible_test/_internal/commands/integration/filters.py +1 -0
  618. ansible_test/_internal/commands/integration/network.py +1 -0
  619. ansible_test/_internal/commands/integration/posix.py +1 -0
  620. ansible_test/_internal/commands/integration/windows.py +1 -0
  621. ansible_test/_internal/commands/sanity/__init__.py +19 -2
  622. ansible_test/_internal/commands/sanity/ansible_doc.py +1 -0
  623. ansible_test/_internal/commands/sanity/bin_symlinks.py +1 -0
  624. ansible_test/_internal/commands/sanity/compile.py +1 -0
  625. ansible_test/_internal/commands/sanity/ignores.py +1 -0
  626. ansible_test/_internal/commands/sanity/import.py +1 -0
  627. ansible_test/_internal/commands/sanity/integration_aliases.py +12 -0
  628. ansible_test/_internal/commands/sanity/pep8.py +1 -0
  629. ansible_test/_internal/commands/sanity/pslint.py +1 -0
  630. ansible_test/_internal/commands/sanity/pylint.py +25 -26
  631. ansible_test/_internal/commands/sanity/shellcheck.py +1 -0
  632. ansible_test/_internal/commands/sanity/validate_modules.py +1 -0
  633. ansible_test/_internal/commands/sanity/yamllint.py +1 -0
  634. ansible_test/_internal/commands/shell/__init__.py +44 -4
  635. ansible_test/_internal/commands/units/__init__.py +5 -1
  636. ansible_test/_internal/compat/__init__.py +1 -0
  637. ansible_test/_internal/compat/packaging.py +1 -0
  638. ansible_test/_internal/compat/yaml.py +1 -0
  639. ansible_test/_internal/completion.py +1 -0
  640. ansible_test/_internal/config.py +23 -13
  641. ansible_test/_internal/connections.py +1 -0
  642. ansible_test/_internal/constants.py +1 -0
  643. ansible_test/_internal/containers.py +1 -0
  644. ansible_test/_internal/content_config.py +1 -0
  645. ansible_test/_internal/core_ci.py +1 -0
  646. ansible_test/_internal/coverage_util.py +11 -10
  647. ansible_test/_internal/data.py +1 -0
  648. ansible_test/_internal/debugging.py +166 -0
  649. ansible_test/_internal/delegation.py +22 -13
  650. ansible_test/_internal/dev/__init__.py +1 -0
  651. ansible_test/_internal/dev/container_probe.py +1 -0
  652. ansible_test/_internal/diff.py +3 -2
  653. ansible_test/_internal/docker_util.py +2 -1
  654. ansible_test/_internal/encoding.py +1 -0
  655. ansible_test/_internal/executor.py +1 -0
  656. ansible_test/_internal/git.py +1 -0
  657. ansible_test/_internal/host_configs.py +1 -0
  658. ansible_test/_internal/host_profiles.py +260 -16
  659. ansible_test/_internal/http.py +1 -0
  660. ansible_test/_internal/init.py +1 -0
  661. ansible_test/_internal/inventory.py +39 -3
  662. ansible_test/_internal/io.py +1 -0
  663. ansible_test/_internal/metadata.py +95 -4
  664. ansible_test/_internal/payload.py +1 -0
  665. ansible_test/_internal/processes.py +80 -0
  666. ansible_test/_internal/provider/__init__.py +1 -0
  667. ansible_test/_internal/provider/layout/__init__.py +1 -0
  668. ansible_test/_internal/provider/layout/ansible.py +1 -0
  669. ansible_test/_internal/provider/layout/collection.py +1 -0
  670. ansible_test/_internal/provider/layout/unsupported.py +1 -0
  671. ansible_test/_internal/provider/source/__init__.py +1 -0
  672. ansible_test/_internal/provider/source/git.py +1 -0
  673. ansible_test/_internal/provider/source/installed.py +1 -0
  674. ansible_test/_internal/provider/source/unsupported.py +1 -0
  675. ansible_test/_internal/provider/source/unversioned.py +1 -0
  676. ansible_test/_internal/provisioning.py +11 -4
  677. ansible_test/_internal/pypi_proxy.py +6 -5
  678. ansible_test/_internal/python_requirements.py +28 -0
  679. ansible_test/_internal/ssh.py +2 -5
  680. ansible_test/_internal/target.py +9 -0
  681. ansible_test/_internal/test.py +3 -2
  682. ansible_test/_internal/thread.py +3 -1
  683. ansible_test/_internal/timeout.py +2 -1
  684. ansible_test/_internal/util.py +41 -12
  685. ansible_test/_internal/util_common.py +18 -5
  686. ansible_test/_internal/venv.py +1 -0
  687. ansible_test/_util/controller/sanity/code-smell/action-plugin-docs.py +1 -0
  688. ansible_test/_util/controller/sanity/code-smell/changelog/sphinx.py +1 -0
  689. ansible_test/_util/controller/sanity/code-smell/changelog.py +1 -0
  690. ansible_test/_util/controller/sanity/code-smell/empty-init.py +1 -0
  691. ansible_test/_util/controller/sanity/code-smell/line-endings.py +1 -0
  692. ansible_test/_util/controller/sanity/code-smell/no-assert.py +1 -0
  693. ansible_test/_util/controller/sanity/code-smell/no-get-exception.py +1 -0
  694. ansible_test/_util/controller/sanity/code-smell/no-illegal-filenames.py +1 -0
  695. ansible_test/_util/controller/sanity/code-smell/no-smart-quotes.py +1 -0
  696. ansible_test/_util/controller/sanity/code-smell/replace-urlopen.py +1 -0
  697. ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py +28 -1
  698. ansible_test/_util/controller/sanity/code-smell/shebang.py +1 -0
  699. ansible_test/_util/controller/sanity/code-smell/symlinks.py +1 -0
  700. ansible_test/_util/controller/sanity/code-smell/use-argspec-type-path.py +1 -0
  701. ansible_test/_util/controller/sanity/code-smell/use-compat-six.py +1 -0
  702. ansible_test/_util/controller/sanity/integration-aliases/yaml_to_json.py +2 -1
  703. ansible_test/_util/controller/sanity/pep8/current-ignore.txt +4 -0
  704. ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +8 -5
  705. ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +8 -5
  706. ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +8 -5
  707. ansible_test/_util/controller/sanity/pylint/config/collection.cfg +4 -5
  708. ansible_test/_util/controller/sanity/pylint/config/default.cfg +8 -7
  709. ansible_test/_util/controller/sanity/pylint/plugins/deprecated_calls.py +541 -0
  710. ansible_test/_util/controller/sanity/pylint/plugins/deprecated_comment.py +137 -0
  711. ansible_test/_util/controller/sanity/pylint/plugins/hide_unraisable.py +1 -0
  712. ansible_test/_util/controller/sanity/pylint/plugins/string_format.py +1 -8
  713. ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +1 -8
  714. ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +55 -28
  715. ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +12 -5
  716. ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +13 -2
  717. ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -0
  718. ansible_test/_util/controller/sanity/yamllint/yamllinter.py +35 -17
  719. ansible_test/_util/controller/tools/collection_detail.py +1 -0
  720. ansible_test/_util/controller/tools/yaml_to_json.py +2 -1
  721. ansible_test/_util/target/injector/python.py +8 -0
  722. ansible_test/_util/target/pytest/plugins/ansible_forked.py +6 -1
  723. ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +2 -1
  724. ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -0
  725. ansible_test/_util/target/sanity/compile/compile.py +1 -0
  726. ansible_test/_util/target/sanity/import/importer.py +15 -16
  727. ansible_test/_util/target/setup/bootstrap.sh +9 -20
  728. ansible_test/_util/target/setup/probe_cgroups.py +1 -0
  729. ansible_test/_util/target/setup/quiet_pip.py +1 -0
  730. ansible_test/_util/target/setup/requirements.py +38 -36
  731. ansible_test/_util/target/tools/virtualenvcheck.py +2 -1
  732. ansible_test/_util/target/tools/yamlcheck.py +2 -1
  733. ansible/compat/selectors.py +0 -32
  734. ansible/errors/yaml_strings.py +0 -138
  735. ansible/executor/action_write_locks.py +0 -44
  736. ansible/executor/discovery/python_target.py +0 -47
  737. ansible/executor/powershell/module_powershell_wrapper.ps1 +0 -86
  738. ansible/executor/powershell/module_script_wrapper.ps1 +0 -22
  739. ansible/module_utils/compat/importlib.py +0 -26
  740. ansible/module_utils/compat/selectors.py +0 -32
  741. ansible/module_utils/pycompat24.py +0 -73
  742. ansible/parsing/yaml/constructor.py +0 -178
  743. ansible/template/native_helpers.py +0 -251
  744. ansible/template/template.py +0 -43
  745. ansible/template/vars.py +0 -77
  746. ansible/utils/native_jinja.py +0 -11
  747. ansible/vars/fact_cache.py +0 -71
  748. ansible_core-2.18.7rc1.dist-info/RECORD +0 -992
  749. ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +0 -411
  750. {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/WHEEL +0 -0
  751. {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/entry_points.txt +0 -0
  752. {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/COPYING +0 -0
  753. {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/Apache-License.txt +0 -0
  754. {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/MIT-license.txt +0 -0
  755. {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/PSF-license.txt +0 -0
  756. {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/simplified_bsd.txt +0 -0
  757. {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/top_level.txt +0 -0
ansible/cli/galaxy.py CHANGED
@@ -53,10 +53,12 @@ from ansible.module_utils.ansible_release import __version__ as ansible_version
53
53
  from ansible.module_utils.common.collections import is_iterable
54
54
  from ansible.module_utils.common.yaml import yaml_dump, yaml_load
55
55
  from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
56
+ from ansible._internal._datatag._tags import TrustedAsTemplate
56
57
  from ansible.module_utils import six
57
58
  from ansible.parsing.dataloader import DataLoader
58
59
  from ansible.playbook.role.requirement import RoleRequirement
59
- from ansible.template import Templar
60
+ from ansible._internal._templating._engine import TemplateEngine
61
+ from ansible.template import trust_as_template
60
62
  from ansible.utils.collection_loader import AnsibleCollectionConfig
61
63
  from ansible.utils.display import Display
62
64
  from ansible.utils.plugin_docs import get_versioned_doclink
@@ -177,11 +179,11 @@ class RoleDistributionServer:
177
179
 
178
180
 
179
181
  class GalaxyCLI(CLI):
180
- '''Command to manage Ansible roles and collections.
182
+ """Command to manage Ansible roles and collections.
181
183
 
182
184
  None of the CLI tools are designed to run concurrently with themselves.
183
185
  Use an external scheduler and/or locking to ensure there are no clashing operations.
184
- '''
186
+ """
185
187
 
186
188
  name = 'ansible-galaxy'
187
189
 
@@ -212,7 +214,7 @@ class GalaxyCLI(CLI):
212
214
  super(GalaxyCLI, self).__init__(args)
213
215
 
214
216
  def init_parser(self):
215
- ''' create an options parser for bin/ansible '''
217
+ """ create an options parser for bin/ansible """
216
218
 
217
219
  super(GalaxyCLI, self).init_parser(
218
220
  desc="Perform various Role and Collection related operations.",
@@ -639,6 +641,7 @@ class GalaxyCLI(CLI):
639
641
  # it doesn't need to be passed as kwarg to GalaxyApi, same for others we pop here
640
642
  auth_url = server_options.pop('auth_url')
641
643
  client_id = server_options.pop('client_id')
644
+ client_secret = server_options.pop('client_secret')
642
645
  token_val = server_options['token'] or NoTokenSentinel
643
646
  username = server_options['username']
644
647
  api_version = server_options.pop('api_version')
@@ -664,15 +667,17 @@ class GalaxyCLI(CLI):
664
667
  if username:
665
668
  server_options['token'] = BasicAuthToken(username, server_options['password'])
666
669
  else:
667
- if token_val:
668
- if auth_url:
669
- server_options['token'] = KeycloakToken(access_token=token_val,
670
- auth_url=auth_url,
671
- validate_certs=validate_certs,
672
- client_id=client_id)
673
- else:
674
- # The galaxy v1 / github / django / 'Token'
675
- server_options['token'] = GalaxyToken(token=token_val)
670
+ if auth_url:
671
+ server_options['token'] = KeycloakToken(
672
+ access_token=token_val,
673
+ auth_url=auth_url,
674
+ validate_certs=validate_certs,
675
+ client_id=client_id,
676
+ client_secret=client_secret,
677
+ )
678
+ elif token_val:
679
+ # The galaxy v1 / github / django / 'Token'
680
+ server_options['token'] = GalaxyToken(token=token_val)
676
681
 
677
682
  server_options.update(galaxy_options)
678
683
  config_servers.append(GalaxyAPI(
@@ -912,8 +917,8 @@ class GalaxyCLI(CLI):
912
917
 
913
918
  @staticmethod
914
919
  def _get_skeleton_galaxy_yml(template_path, inject_data):
915
- with open(to_bytes(template_path, errors='surrogate_or_strict'), 'rb') as template_obj:
916
- meta_template = to_text(template_obj.read(), errors='surrogate_or_strict')
920
+ with open(to_bytes(template_path, errors='surrogate_or_strict'), 'r') as template_obj:
921
+ meta_template = TrustedAsTemplate().tag(to_text(template_obj.read(), errors='surrogate_or_strict'))
917
922
 
918
923
  galaxy_meta = get_collections_galaxy_meta_info()
919
924
 
@@ -949,7 +954,7 @@ class GalaxyCLI(CLI):
949
954
  return textwrap.fill(v, width=117, initial_indent="# ", subsequent_indent="# ", break_on_hyphens=False)
950
955
 
951
956
  loader = DataLoader()
952
- templar = Templar(loader, variables={'required_config': required_config, 'optional_config': optional_config})
957
+ templar = TemplateEngine(loader, variables={'required_config': required_config, 'optional_config': optional_config})
953
958
  templar.environment.filters['comment_ify'] = comment_ify
954
959
 
955
960
  meta_value = templar.template(meta_template)
@@ -1151,7 +1156,7 @@ class GalaxyCLI(CLI):
1151
1156
 
1152
1157
  loader = DataLoader()
1153
1158
  inject_data.update(load_extra_vars(loader))
1154
- templar = Templar(loader, variables=inject_data)
1159
+ templar = TemplateEngine(loader, variables=inject_data)
1155
1160
 
1156
1161
  # create role directory
1157
1162
  if not os.path.exists(b_obj_path):
@@ -1193,7 +1198,7 @@ class GalaxyCLI(CLI):
1193
1198
  elif ext == ".j2" and not in_templates_dir:
1194
1199
  src_template = os.path.join(root, f)
1195
1200
  dest_file = os.path.join(obj_path, rel_root, filename)
1196
- template_data = to_text(loader._get_file_contents(src_template)[0], errors='surrogate_or_strict')
1201
+ template_data = trust_as_template(loader.get_text_file_contents(src_template))
1197
1202
  try:
1198
1203
  b_rendered = to_bytes(templar.template(template_data), errors='surrogate_or_strict')
1199
1204
  except AnsibleError as e:
@@ -1721,7 +1726,7 @@ class GalaxyCLI(CLI):
1721
1726
  publish_collection(collection_path, self.api, wait, timeout)
1722
1727
 
1723
1728
  def execute_search(self):
1724
- ''' searches for roles on the Ansible Galaxy server'''
1729
+ """ searches for roles on the Ansible Galaxy server"""
1725
1730
  page_size = 1000
1726
1731
  search = None
1727
1732
 
@@ -1761,6 +1766,8 @@ class GalaxyCLI(CLI):
1761
1766
 
1762
1767
  return 0
1763
1768
 
1769
+ _task_check_delay_sec = 10 # allows unit test override
1770
+
1764
1771
  def execute_import(self):
1765
1772
  """ used to import a role into Ansible Galaxy """
1766
1773
 
@@ -1814,7 +1821,7 @@ class GalaxyCLI(CLI):
1814
1821
  rc = ['SUCCESS', 'FAILED'].index(state)
1815
1822
  finished = True
1816
1823
  else:
1817
- time.sleep(10)
1824
+ time.sleep(self._task_check_delay_sec)
1818
1825
 
1819
1826
  return rc
1820
1827
 
ansible/cli/inventory.py CHANGED
@@ -9,15 +9,18 @@ from __future__ import annotations
9
9
  # ansible.cli needs to be imported first, to ensure the source bin/* scripts run that code first
10
10
  from ansible.cli import CLI
11
11
 
12
+ import json
12
13
  import sys
14
+ import typing as t
13
15
 
14
16
  import argparse
15
17
 
16
18
  from ansible import constants as C
17
19
  from ansible import context
18
20
  from ansible.cli.arguments import option_helpers as opt_help
19
- from ansible.errors import AnsibleError, AnsibleOptionsError
20
- from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
21
+ from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleRuntimeError
22
+ from ansible.module_utils.common.text.converters import to_bytes, to_text
23
+ from ansible._internal._json._profiles import _inventory_legacy
21
24
  from ansible.utils.vars import combine_vars
22
25
  from ansible.utils.display import Display
23
26
  from ansible.vars.plugins import get_vars_from_inventory_sources, get_vars_from_path
@@ -26,7 +29,7 @@ display = Display()
26
29
 
27
30
 
28
31
  class InventoryCLI(CLI):
29
- ''' used to display or dump the configured inventory as Ansible sees it '''
32
+ """ used to display or dump the configured inventory as Ansible sees it """
30
33
 
31
34
  name = 'ansible-inventory'
32
35
 
@@ -148,42 +151,24 @@ class InventoryCLI(CLI):
148
151
  try:
149
152
  with open(to_bytes(outfile), 'wb') as f:
150
153
  f.write(to_bytes(results))
151
- except (OSError, IOError) as e:
152
- raise AnsibleError('Unable to write to destination file (%s): %s' % (to_native(outfile), to_native(e)))
154
+ except OSError as ex:
155
+ raise AnsibleError(f'Unable to write to destination file {outfile!r}.') from ex
153
156
  sys.exit(0)
154
157
 
155
158
  sys.exit(1)
156
159
 
157
160
  @staticmethod
158
161
  def dump(stuff):
159
-
160
162
  if context.CLIARGS['yaml']:
161
163
  import yaml
164
+
162
165
  from ansible.parsing.yaml.dumper import AnsibleDumper
166
+
163
167
  results = to_text(yaml.dump(stuff, Dumper=AnsibleDumper, default_flow_style=False, allow_unicode=True))
164
168
  elif context.CLIARGS['toml']:
165
- from ansible.plugins.inventory.toml import toml_dumps
166
- try:
167
- results = toml_dumps(stuff)
168
- except TypeError as e:
169
- raise AnsibleError(
170
- 'The source inventory contains a value that cannot be represented in TOML: %s' % e
171
- )
172
- except KeyError as e:
173
- raise AnsibleError(
174
- 'The source inventory contains a non-string key (%s) which cannot be represented in TOML. '
175
- 'The specified key will need to be converted to a string. Be aware that if your playbooks '
176
- 'expect this key to be non-string, your playbooks will need to be modified to support this '
177
- 'change.' % e.args[0]
178
- )
169
+ results = toml_dumps(stuff)
179
170
  else:
180
- import json
181
- from ansible.parsing.ajson import AnsibleJSONEncoder
182
- try:
183
- results = json.dumps(stuff, cls=AnsibleJSONEncoder, sort_keys=True, indent=4, preprocess_unsafe=True, ensure_ascii=False)
184
- except TypeError as e:
185
- results = json.dumps(stuff, cls=AnsibleJSONEncoder, sort_keys=False, indent=4, preprocess_unsafe=True, ensure_ascii=False)
186
- display.warning("Could not sort JSON output due to issues while sorting keys: %s" % to_native(e))
171
+ results = json.dumps(stuff, cls=_inventory_legacy.Encoder, sort_keys=True, indent=4)
187
172
 
188
173
  return results
189
174
 
@@ -306,7 +291,11 @@ class InventoryCLI(CLI):
306
291
  results = format_group(top, frozenset(h.name for h in hosts))
307
292
 
308
293
  # populate meta
309
- results['_meta'] = {'hostvars': {}}
294
+ results['_meta'] = {
295
+ 'hostvars': {},
296
+ 'profile': _inventory_legacy.Encoder.profile_name,
297
+ }
298
+
310
299
  for host in hosts:
311
300
  hvars = self._get_host_variables(host)
312
301
  if hvars:
@@ -409,6 +398,17 @@ class InventoryCLI(CLI):
409
398
  return results
410
399
 
411
400
 
401
+ def toml_dumps(data: t.Any) -> str:
402
+ try:
403
+ from tomli_w import dumps as _tomli_w_dumps
404
+ except ImportError:
405
+ pass
406
+ else:
407
+ return _tomli_w_dumps(data)
408
+
409
+ raise AnsibleRuntimeError('The Python library "tomli-w" is required when using the TOML output format.')
410
+
411
+
412
412
  def main(args=None):
413
413
  InventoryCLI.cli_executor(args)
414
414
 
ansible/cli/playbook.py CHANGED
@@ -29,11 +29,13 @@ display = Display()
29
29
 
30
30
 
31
31
  class PlaybookCLI(CLI):
32
- ''' the tool to run *Ansible playbooks*, which are a configuration and multinode deployment system.
33
- See the project home page (https://docs.ansible.com) for more information. '''
32
+ """ the tool to run *Ansible playbooks*, which are a configuration and multinode deployment system.
33
+ See the project home page (https://docs.ansible.com) for more information. """
34
34
 
35
35
  name = 'ansible-playbook'
36
36
 
37
+ USES_CONNECTION = True
38
+
37
39
  def init_parser(self):
38
40
 
39
41
  # create parser for CLI options
@@ -143,10 +145,6 @@ class PlaybookCLI(CLI):
143
145
  # Fix this when we rewrite inventory by making localhost a real host (and thus show up in list_hosts())
144
146
  CLI.get_host_list(inventory, context.CLIARGS['subset'])
145
147
 
146
- # flush fact cache if requested
147
- if context.CLIARGS['flush_cache']:
148
- self._flush_cache(inventory, variable_manager)
149
-
150
148
  # create the playbook executor, which manages running the plays via a task queue manager
151
149
  pbex = PlaybookExecutor(playbooks=context.CLIARGS['args'], inventory=inventory,
152
150
  variable_manager=variable_manager, loader=loader,
@@ -228,12 +226,6 @@ class PlaybookCLI(CLI):
228
226
  else:
229
227
  return results
230
228
 
231
- @staticmethod
232
- def _flush_cache(inventory, variable_manager):
233
- for host in inventory.list_hosts():
234
- hostname = host.get_name()
235
- variable_manager.clear_facts(hostname)
236
-
237
229
 
238
230
  def main(args=None):
239
231
  PlaybookCLI.cli_executor(args)
ansible/cli/pull.py CHANGED
@@ -61,7 +61,7 @@ def safe_output_env(f):
61
61
 
62
62
 
63
63
  class PullCLI(CLI):
64
- ''' Used to pull a remote copy of ansible on each managed node,
64
+ """ Used to pull a remote copy of ansible on each managed node,
65
65
  each set to run via cron and update playbook source via a source repository.
66
66
  This inverts the default *push* architecture of ansible into a *pull* architecture,
67
67
  which has near-limitless scaling potential.
@@ -73,7 +73,7 @@ class PullCLI(CLI):
73
73
  This is useful both for extreme scale-out and periodic remediation.
74
74
  Usage of the 'fetch' module to retrieve logs from ansible-pull runs would be an
75
75
  excellent way to gather and analyze remote logs from ansible-pull.
76
- '''
76
+ """
77
77
 
78
78
  name = 'ansible-pull'
79
79
 
@@ -188,7 +188,7 @@ class PullCLI(CLI):
188
188
  return options
189
189
 
190
190
  def run(self):
191
- ''' use Runner lib to do SSH things '''
191
+ """ use Runner lib to do SSH things """
192
192
 
193
193
  super(PullCLI, self).run()
194
194
 
@@ -335,6 +335,9 @@ class PullCLI(CLI):
335
335
  if context.CLIARGS['diff']:
336
336
  cmd += ' -D'
337
337
 
338
+ if context.CLIARGS['flush_cache']:
339
+ cmd += ' --flush-cache'
340
+
338
341
  os.chdir(context.CLIARGS['dest'])
339
342
 
340
343
  # redo inventory options as new files might exist now
@@ -21,7 +21,7 @@ from ansible.cli.arguments import option_helpers as opt_help
21
21
  from ansible.module_utils.common.text.converters import to_bytes, to_text
22
22
  from ansible.module_utils.connection import Connection, ConnectionError, send_data, recv_data
23
23
  from ansible.module_utils.service import fork_process
24
- from ansible.parsing.ajson import AnsibleJSONEncoder, AnsibleJSONDecoder
24
+ from ansible.module_utils._internal._json._profiles import _tagless
25
25
  from ansible.playbook.play_context import PlayContext
26
26
  from ansible.plugins.loader import connection_loader, init_plugin_loader
27
27
  from ansible.utils.path import unfrackpath, makedirs_safe
@@ -57,10 +57,10 @@ def file_lock(lock_path):
57
57
 
58
58
 
59
59
  class ConnectionProcess(object):
60
- '''
60
+ """
61
61
  The connection process wraps around a Connection object that manages
62
62
  the connection to a remote device that persists over the playbook
63
- '''
63
+ """
64
64
  def __init__(self, fd, play_context, socket_path, original_path, task_uuid=None, ansible_playbook_pid=None):
65
65
  self.play_context = play_context
66
66
  self.socket_path = socket_path
@@ -110,7 +110,7 @@ class ConnectionProcess(object):
110
110
  result['exception'] = traceback.format_exc()
111
111
  finally:
112
112
  result['messages'] = messages
113
- self.fd.write(json.dumps(result, cls=AnsibleJSONEncoder))
113
+ self.fd.write(json.dumps(result, cls=_tagless.Encoder))
114
114
  self.fd.close()
115
115
 
116
116
  def run(self):
@@ -292,7 +292,7 @@ def main(args=None):
292
292
  else:
293
293
  os.close(w)
294
294
  rfd = os.fdopen(r, 'r')
295
- data = json.loads(rfd.read(), cls=AnsibleJSONDecoder)
295
+ data = json.loads(rfd.read(), cls=_tagless.Decoder)
296
296
  messages.extend(data.pop('messages'))
297
297
  result.update(data)
298
298
 
@@ -330,10 +330,10 @@ def main(args=None):
330
330
  sys.stdout = saved_stdout
331
331
  if 'exception' in result:
332
332
  rc = 1
333
- sys.stderr.write(json.dumps(result, cls=AnsibleJSONEncoder))
333
+ sys.stderr.write(json.dumps(result, cls=_tagless.Encoder))
334
334
  else:
335
335
  rc = 0
336
- sys.stdout.write(json.dumps(result, cls=AnsibleJSONEncoder))
336
+ sys.stdout.write(json.dumps(result, cls=_tagless.Encoder))
337
337
 
338
338
  sys.exit(rc)
339
339
 
ansible/cli/vault.py CHANGED
@@ -25,7 +25,7 @@ display = Display()
25
25
 
26
26
 
27
27
  class VaultCLI(CLI):
28
- ''' can encrypt any structured data file used by Ansible.
28
+ """ can encrypt any structured data file used by Ansible.
29
29
  This can include *group_vars/* or *host_vars/* inventory variables,
30
30
  variables loaded by *include_vars* or *vars_files*, or variable files
31
31
  passed on the ansible-playbook command line with *-e @file.yml* or *-e @file.json*.
@@ -33,7 +33,7 @@ class VaultCLI(CLI):
33
33
 
34
34
  Because Ansible tasks, handlers, and other objects are data, these can also be encrypted with vault.
35
35
  If you'd like to not expose what variables you are using, you can keep an individual task file entirely encrypted.
36
- '''
36
+ """
37
37
 
38
38
  name = 'ansible-vault'
39
39
 
@@ -84,7 +84,7 @@ class VaultCLI(CLI):
84
84
  create_parser.add_argument('--skip-tty-check', default=False, help='allows editor to be opened when no tty attached',
85
85
  dest='skip_tty_check', action='store_true')
86
86
 
87
- decrypt_parser = subparsers.add_parser('decrypt', help='Decrypt vault encrypted file', parents=[output, common])
87
+ decrypt_parser = subparsers.add_parser('decrypt', help='Decrypt vault encrypted file or string', parents=[output, common])
88
88
  decrypt_parser.set_defaults(func=self.execute_decrypt)
89
89
  decrypt_parser.add_argument('args', help='Filename', metavar='file_name', nargs='*')
90
90
 
@@ -228,6 +228,7 @@ class VaultCLI(CLI):
228
228
  vault_ids=new_vault_ids,
229
229
  vault_password_files=new_vault_password_files,
230
230
  ask_vault_pass=context.CLIARGS['ask_vault_pass'],
231
+ initialize_context=False,
231
232
  create_new_password=True)
232
233
 
233
234
  if not new_vault_secrets:
@@ -253,13 +254,13 @@ class VaultCLI(CLI):
253
254
  os.umask(old_umask)
254
255
 
255
256
  def execute_encrypt(self):
256
- ''' encrypt the supplied file using the provided vault secret '''
257
+ """ encrypt the supplied file using the provided vault secret """
257
258
 
258
259
  if not context.CLIARGS['args'] and sys.stdin.isatty():
259
260
  display.display("Reading plaintext input from stdin", stderr=True)
260
261
 
261
262
  for f in context.CLIARGS['args'] or ['-']:
262
- # Fixme: use the correct vau
263
+ # FIXME: use the correct vau
263
264
  self.editor.encrypt_file(f, self.encrypt_secret,
264
265
  vault_id=self.encrypt_vault_id,
265
266
  output_file=context.CLIARGS['output_file'])
@@ -287,7 +288,7 @@ class VaultCLI(CLI):
287
288
  return yaml_ciphertext
288
289
 
289
290
  def execute_encrypt_string(self):
290
- ''' encrypt the supplied string using the provided vault secret '''
291
+ """ encrypt the supplied string using the provided vault secret """
291
292
  b_plaintext = None
292
293
 
293
294
  # Holds tuples (the_text, the_source_of_the_string, the variable name if its provided).
@@ -432,7 +433,7 @@ class VaultCLI(CLI):
432
433
  return output
433
434
 
434
435
  def execute_decrypt(self):
435
- ''' decrypt the supplied file using the provided vault secret '''
436
+ """ decrypt the supplied file using the provided vault secret """
436
437
 
437
438
  if not context.CLIARGS['args'] and sys.stdin.isatty():
438
439
  display.display("Reading ciphertext input from stdin", stderr=True)
@@ -444,7 +445,7 @@ class VaultCLI(CLI):
444
445
  display.display("Decryption successful", stderr=True)
445
446
 
446
447
  def execute_create(self):
447
- ''' create and open a file in an editor that will be encrypted with the provided vault secret when closed'''
448
+ """ create and open a file in an editor that will be encrypted with the provided vault secret when closed"""
448
449
 
449
450
  if len(context.CLIARGS['args']) != 1:
450
451
  raise AnsibleOptionsError("ansible-vault create can take only one filename argument")
@@ -456,12 +457,12 @@ class VaultCLI(CLI):
456
457
  raise AnsibleOptionsError("not a tty, editor cannot be opened")
457
458
 
458
459
  def execute_edit(self):
459
- ''' open and decrypt an existing vaulted file in an editor, that will be encrypted again when closed'''
460
+ """ open and decrypt an existing vaulted file in an editor, that will be encrypted again when closed"""
460
461
  for f in context.CLIARGS['args']:
461
462
  self.editor.edit_file(f)
462
463
 
463
464
  def execute_view(self):
464
- ''' open, decrypt and view an existing vaulted file using a pager using the supplied vault secret '''
465
+ """ open, decrypt and view an existing vaulted file using a pager using the supplied vault secret """
465
466
 
466
467
  for f in context.CLIARGS['args']:
467
468
  # Note: vault should return byte strings because it could encrypt
@@ -473,7 +474,7 @@ class VaultCLI(CLI):
473
474
  self.pager(to_text(plaintext))
474
475
 
475
476
  def execute_rekey(self):
476
- ''' re-encrypt a vaulted file with a new secret, the previous secret is required '''
477
+ """ re-encrypt a vaulted file with a new secret, the previous secret is required """
477
478
  for f in context.CLIARGS['args']:
478
479
  # FIXME: plumb in vault_id, use the default new_vault_secret for now
479
480
  self.editor.rekey_file(f, self.new_encrypt_secret,
@@ -15,9 +15,9 @@
15
15
  # You should have received a copy of the GNU General Public License
16
16
  # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
17
17
 
18
- '''
18
+ """
19
19
  Compat library for ansible. This contains compatibility definitions for older python
20
20
  When we need to import a module differently depending on python version, do it
21
21
  here. Then in the code we can simply import from compat in order to get what we want.
22
- '''
22
+ """
23
23
  from __future__ import annotations
@@ -3,17 +3,14 @@
3
3
 
4
4
  from __future__ import annotations
5
5
 
6
- import sys
6
+ from ansible.utils.display import Display as _Display
7
7
 
8
- HAS_IMPORTLIB_RESOURCES = False
8
+ from importlib.resources import files # pylint: disable=unused-import
9
9
 
10
- if sys.version_info < (3, 10):
11
- try:
12
- from importlib_resources import files # type: ignore[import] # pylint: disable=unused-import
13
- except ImportError:
14
- files = None # type: ignore[assignment]
15
- else:
16
- HAS_IMPORTLIB_RESOURCES = True
17
- else:
18
- from importlib.resources import files
19
- HAS_IMPORTLIB_RESOURCES = True
10
+ HAS_IMPORTLIB_RESOURCES = True
11
+
12
+ _Display().deprecated(
13
+ msg="The `ansible.compat.importlib_resources` module is deprecated.",
14
+ help_text="Use `importlib.resources` from the Python standard library instead.",
15
+ version="2.23",
16
+ )