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
@@ -117,10 +117,6 @@ DOCUMENTATION = """
117
117
  - kerberos usage mode.
118
118
  - The managed option means Ansible will obtain kerberos ticket.
119
119
  - While the manual one means a ticket must already have been obtained by the user.
120
- - If having issues with Ansible freezing when trying to obtain the
121
- Kerberos ticket, you can either set this to V(manual) and obtain
122
- it outside Ansible or install C(pexpect) through pip and try
123
- again.
124
120
  choices: [managed, manual]
125
121
  vars:
126
122
  - name: ansible_winrm_kinit_mode
@@ -186,6 +182,7 @@ except ImportError:
186
182
  from ansible import constants as C
187
183
  from ansible.errors import AnsibleError, AnsibleConnectionFailure
188
184
  from ansible.errors import AnsibleFileNotFound
185
+ from ansible.executor.powershell.module_manifest import _bootstrap_powershell_script
189
186
  from ansible.module_utils.json_utils import _filter_non_json_lines
190
187
  from ansible.module_utils.parsing.convert_bool import boolean
191
188
  from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
@@ -223,19 +220,6 @@ except ImportError as e:
223
220
  HAS_XMLTODICT = False
224
221
  XMLTODICT_IMPORT_ERR = e
225
222
 
226
- HAS_PEXPECT = False
227
- try:
228
- import pexpect
229
- # echo was added in pexpect 3.3+ which is newer than the RHEL package
230
- # we can only use pexpect for kerb auth if echo is a valid kwarg
231
- # https://github.com/ansible/ansible/issues/43462
232
- if hasattr(pexpect, 'spawn'):
233
- argspec = getfullargspec(pexpect.spawn.__init__)
234
- if 'echo' in argspec.args:
235
- HAS_PEXPECT = True
236
- except ImportError as e:
237
- pass
238
-
239
223
  # used to try and parse the hostname and detect if IPv6 is being used
240
224
  try:
241
225
  import ipaddress
@@ -247,7 +231,7 @@ display = Display()
247
231
 
248
232
 
249
233
  class Connection(ConnectionBase):
250
- '''WinRM connections over HTTP/HTTPS.'''
234
+ """WinRM connections over HTTP/HTTPS."""
251
235
 
252
236
  transport = 'winrm'
253
237
  module_implementation_preferences = ('.ps1', '.exe', '')
@@ -350,6 +334,7 @@ class Connection(ConnectionBase):
350
334
  def _kerb_auth(self, principal: str, password: str) -> None:
351
335
  if password is None:
352
336
  password = ""
337
+ b_password = to_bytes(password, encoding='utf-8', errors='surrogate_or_strict')
353
338
 
354
339
  self._kerb_ccache = tempfile.NamedTemporaryFile()
355
340
  display.vvvvv("creating Kerberos CC at %s" % self._kerb_ccache.name)
@@ -376,60 +361,28 @@ class Connection(ConnectionBase):
376
361
 
377
362
  kinit_cmdline.append(principal)
378
363
 
379
- # pexpect runs the process in its own pty so it can correctly send
380
- # the password as input even on MacOS which blocks subprocess from
381
- # doing so. Unfortunately it is not available on the built in Python
382
- # so we can only use it if someone has installed it
383
- if HAS_PEXPECT:
384
- proc_mechanism = "pexpect"
385
- command = kinit_cmdline.pop(0)
386
- password = to_text(password, encoding='utf-8',
387
- errors='surrogate_or_strict')
388
-
389
- display.vvvv("calling kinit with pexpect for principal %s"
390
- % principal)
391
- try:
392
- child = pexpect.spawn(command, kinit_cmdline, timeout=60,
393
- env=krb5env, echo=False)
394
- except pexpect.ExceptionPexpect as err:
395
- err_msg = "Kerberos auth failure when calling kinit cmd " \
396
- "'%s': %s" % (command, to_native(err))
397
- raise AnsibleConnectionFailure(err_msg)
398
-
399
- try:
400
- child.expect(".*:")
401
- child.sendline(password)
402
- except OSError as err:
403
- # child exited before the pass was sent, Ansible will raise
404
- # error based on the rc below, just display the error here
405
- display.vvvv("kinit with pexpect raised OSError: %s"
406
- % to_native(err))
407
-
408
- # technically this is the stdout + stderr but to match the
409
- # subprocess error checking behaviour, we will call it stderr
410
- stderr = child.read()
411
- child.wait()
412
- rc = child.exitstatus
413
- else:
414
- proc_mechanism = "subprocess"
415
- b_password = to_bytes(password, encoding='utf-8',
416
- errors='surrogate_or_strict')
364
+ display.vvvv(f"calling kinit for principal {principal}")
417
365
 
418
- display.vvvv("calling kinit with subprocess for principal %s"
419
- % principal)
420
- try:
421
- p = subprocess.Popen(kinit_cmdline, stdin=subprocess.PIPE,
422
- stdout=subprocess.PIPE,
423
- stderr=subprocess.PIPE,
424
- env=krb5env)
366
+ # It is important to use start_new_session which spawns the process
367
+ # with setsid() to avoid it inheriting the current tty. On macOS it
368
+ # will force it to read from stdin rather than the tty.
369
+ try:
370
+ p = subprocess.Popen(
371
+ kinit_cmdline,
372
+ start_new_session=True,
373
+ stdin=subprocess.PIPE,
374
+ stdout=subprocess.PIPE,
375
+ stderr=subprocess.PIPE,
376
+ env=krb5env,
377
+ )
425
378
 
426
- except OSError as err:
427
- err_msg = "Kerberos auth failure when calling kinit cmd " \
428
- "'%s': %s" % (self._kinit_cmd, to_native(err))
429
- raise AnsibleConnectionFailure(err_msg)
379
+ except OSError as err:
380
+ err_msg = "Kerberos auth failure when calling kinit cmd " \
381
+ "'%s': %s" % (self._kinit_cmd, to_native(err))
382
+ raise AnsibleConnectionFailure(err_msg)
430
383
 
431
- stdout, stderr = p.communicate(b_password + b'\n')
432
- rc = p.returncode != 0
384
+ stdout, stderr = p.communicate(b_password + b'\n')
385
+ rc = p.returncode
433
386
 
434
387
  if rc != 0:
435
388
  # one last attempt at making sure the password does not exist
@@ -437,16 +390,15 @@ class Connection(ConnectionBase):
437
390
  exp_msg = to_native(stderr.strip())
438
391
  exp_msg = exp_msg.replace(to_native(password), "<redacted>")
439
392
 
440
- err_msg = "Kerberos auth failure for principal %s with %s: %s" \
441
- % (principal, proc_mechanism, exp_msg)
393
+ err_msg = f"Kerberos auth failure for principal {principal}: {exp_msg}"
442
394
  raise AnsibleConnectionFailure(err_msg)
443
395
 
444
396
  display.vvvvv("kinit succeeded for principal %s" % principal)
445
397
 
446
398
  def _winrm_connect(self) -> winrm.Protocol:
447
- '''
399
+ """
448
400
  Establish a WinRM connection over HTTP/HTTPS.
449
- '''
401
+ """
450
402
  display.vvv("ESTABLISH WINRM CONNECTION FOR USER: %s on PORT %s TO %s" %
451
403
  (self._winrm_user, self._winrm_port, self._winrm_host), host=self._winrm_host)
452
404
 
@@ -627,7 +579,7 @@ class Connection(ConnectionBase):
627
579
  def _winrm_exec(
628
580
  self,
629
581
  command: str,
630
- args: t.Iterable[bytes] = (),
582
+ args: t.Iterable[bytes | str] = (),
631
583
  from_exec: bool = False,
632
584
  stdin_iterator: t.Iterable[tuple[bytes, bool]] = None,
633
585
  ) -> tuple[int, bytes, bytes]:
@@ -652,9 +604,7 @@ class Connection(ConnectionBase):
652
604
  self._winrm_write_stdin(command_id, stdin_iterator)
653
605
 
654
606
  except Exception as ex:
655
- display.warning("ERROR DURING WINRM SEND INPUT - attempting to recover: %s %s"
656
- % (type(ex).__name__, to_text(ex)))
657
- display.debug(traceback.format_exc())
607
+ display.error_as_warning("ERROR DURING WINRM SEND INPUT. Attempting to recover.", ex)
658
608
  stdin_push_failed = True
659
609
 
660
610
  # Even on a failure above we try at least once to get the output
@@ -771,7 +721,16 @@ class Connection(ConnectionBase):
771
721
 
772
722
  def exec_command(self, cmd: str, in_data: bytes | None = None, sudoable: bool = True) -> tuple[int, bytes, bytes]:
773
723
  super(Connection, self).exec_command(cmd, in_data=in_data, sudoable=sudoable)
774
- cmd_parts = self._shell._encode_script(cmd, as_list=True, strict_mode=False, preserve_rc=False)
724
+
725
+ encoded_prefix = self._shell._encode_script('', as_list=False, strict_mode=False, preserve_rc=False)
726
+ if cmd.startswith(encoded_prefix) or cmd.startswith("type "):
727
+ # Avoid double encoding the script, the first means we are already
728
+ # running the standard PowerShell command, the latter is used for
729
+ # the no pipeline case where it uses type to pipe the script into
730
+ # powershell which is known to work without re-encoding as pwsh.
731
+ cmd_parts = cmd.split(" ")
732
+ else:
733
+ cmd_parts = self._shell._encode_script(cmd, as_list=True, strict_mode=False, preserve_rc=False)
775
734
 
776
735
  # TODO: display something meaningful here
777
736
  display.vvv("EXEC (via pipeline wrapper)")
@@ -784,7 +743,15 @@ class Connection(ConnectionBase):
784
743
  return self._winrm_exec(cmd_parts[0], cmd_parts[1:], from_exec=True, stdin_iterator=stdin_iterator)
785
744
 
786
745
  # FUTURE: determine buffer size at runtime via remote winrm config?
787
- def _put_file_stdin_iterator(self, in_path: str, out_path: str, buffer_size: int = 250000) -> t.Iterable[tuple[bytes, bool]]:
746
+ def _put_file_stdin_iterator(
747
+ self,
748
+ initial_stdin: bytes,
749
+ in_path: str,
750
+ out_path: str,
751
+ buffer_size: int = 250000,
752
+ ) -> t.Iterable[tuple[bytes, bool]]:
753
+ yield initial_stdin, False
754
+
788
755
  in_size = os.path.getsize(to_bytes(in_path, errors='surrogate_or_strict'))
789
756
  offset = 0
790
757
  with open(to_bytes(in_path, errors='surrogate_or_strict'), 'rb') as in_file:
@@ -806,40 +773,16 @@ class Connection(ConnectionBase):
806
773
  if not os.path.exists(to_bytes(in_path, errors='surrogate_or_strict')):
807
774
  raise AnsibleFileNotFound('file or module does not exist: "%s"' % to_native(in_path))
808
775
 
809
- script_template = u'''
810
- begin {{
811
- $path = '{0}'
812
-
813
- $DebugPreference = "Continue"
814
- $ErrorActionPreference = "Stop"
815
- Set-StrictMode -Version 2
816
-
817
- $fd = [System.IO.File]::Create($path)
818
-
819
- $sha1 = [System.Security.Cryptography.SHA1CryptoServiceProvider]::Create()
820
-
821
- $bytes = @() #initialize for empty file case
822
- }}
823
- process {{
824
- $bytes = [System.Convert]::FromBase64String($input)
825
- $sha1.TransformBlock($bytes, 0, $bytes.Length, $bytes, 0) | Out-Null
826
- $fd.Write($bytes, 0, $bytes.Length)
827
- }}
828
- end {{
829
- $sha1.TransformFinalBlock($bytes, 0, 0) | Out-Null
830
-
831
- $hash = [System.BitConverter]::ToString($sha1.Hash).Replace("-", "").ToLowerInvariant()
832
-
833
- $fd.Close()
834
-
835
- Write-Output "{{""sha1"":""$hash""}}"
836
- }}
837
- '''
838
-
839
- script = script_template.format(self._shell._escape(out_path))
840
- cmd_parts = self._shell._encode_script(script, as_list=True, strict_mode=False, preserve_rc=False)
776
+ copy_script, copy_script_stdin = _bootstrap_powershell_script('winrm_put_file.ps1', {
777
+ 'Path': out_path,
778
+ }, has_input=True)
779
+ cmd_parts = self._shell._encode_script(copy_script, as_list=True, strict_mode=False, preserve_rc=False)
841
780
 
842
- status_code, b_stdout, b_stderr = self._winrm_exec(cmd_parts[0], cmd_parts[1:], stdin_iterator=self._put_file_stdin_iterator(in_path, out_path))
781
+ status_code, b_stdout, b_stderr = self._winrm_exec(
782
+ cmd_parts[0],
783
+ cmd_parts[1:],
784
+ stdin_iterator=self._put_file_stdin_iterator(copy_script_stdin, in_path, out_path),
785
+ )
843
786
  stdout = to_text(b_stdout)
844
787
  stderr = to_text(b_stderr)
845
788
 
@@ -873,41 +816,19 @@ class Connection(ConnectionBase):
873
816
  offset = 0
874
817
  while True:
875
818
  try:
876
- script = '''
877
- $path = '%(path)s'
878
- If (Test-Path -LiteralPath $path -PathType Leaf)
879
- {
880
- $buffer_size = %(buffer_size)d
881
- $offset = %(offset)d
882
-
883
- $stream = New-Object -TypeName IO.FileStream($path, [IO.FileMode]::Open, [IO.FileAccess]::Read, [IO.FileShare]::ReadWrite)
884
- $stream.Seek($offset, [System.IO.SeekOrigin]::Begin) > $null
885
- $buffer = New-Object -TypeName byte[] $buffer_size
886
- $bytes_read = $stream.Read($buffer, 0, $buffer_size)
887
- if ($bytes_read -gt 0) {
888
- $bytes = $buffer[0..($bytes_read - 1)]
889
- [System.Convert]::ToBase64String($bytes)
890
- }
891
- $stream.Close() > $null
892
- }
893
- ElseIf (Test-Path -LiteralPath $path -PathType Container)
894
- {
895
- Write-Host "[DIR]";
896
- }
897
- Else
898
- {
899
- Write-Error "$path does not exist";
900
- Exit 1;
901
- }
902
- ''' % dict(buffer_size=buffer_size, path=self._shell._escape(in_path), offset=offset)
819
+ script, in_data = _bootstrap_powershell_script('winrm_fetch_file.ps1', {
820
+ 'Path': in_path,
821
+ 'BufferSize': buffer_size,
822
+ 'Offset': offset,
823
+ })
903
824
  display.vvvvv('WINRM FETCH "%s" to "%s" (offset=%d)' % (in_path, out_path, offset), host=self._winrm_host)
904
825
  cmd_parts = self._shell._encode_script(script, as_list=True, preserve_rc=False)
905
- status_code, b_stdout, b_stderr = self._winrm_exec(cmd_parts[0], cmd_parts[1:])
826
+ status_code, b_stdout, b_stderr = self._winrm_exec(cmd_parts[0], cmd_parts[1:], stdin_iterator=self._wrapper_payload_stream(in_data))
906
827
  stdout = to_text(b_stdout)
907
828
  stderr = to_text(b_stderr)
908
829
 
909
830
  if status_code != 0:
910
- raise IOError(stderr)
831
+ raise OSError(stderr)
911
832
  if stdout.strip() == '[DIR]':
912
833
  data = None
913
834
  else:
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  class ModuleDocFragment(object):
8
8
 
9
9
  # Standard documentation fragment
10
- DOCUMENTATION = r'''
10
+ DOCUMENTATION = r"""
11
11
  attributes:
12
12
  check_mode:
13
13
  description: Can run in check_mode and return changed status prediction without modifying target, if not supported the action will be skipped.
@@ -16,17 +16,17 @@ attributes:
16
16
  platform:
17
17
  description: Target OS/families that can be operated against
18
18
  support: N/A
19
- '''
19
+ """
20
20
 
21
- ACTIONGROUPS = r'''
21
+ ACTIONGROUPS = r"""
22
22
  attributes:
23
23
  action_group:
24
24
  description: Action is part of action_group(s), for convenient setting of module_defaults.
25
25
  support: N/A
26
26
  membership: []
27
- '''
27
+ """
28
28
 
29
- CONN = r'''
29
+ CONN = r"""
30
30
  attributes:
31
31
  become:
32
32
  description: Is usable alongside become keywords
@@ -34,23 +34,23 @@ attributes:
34
34
  description: Uses the target's configured connection information to execute code on it
35
35
  delegation:
36
36
  description: Can be used in conjunction with delegate_to and related keywords
37
- '''
37
+ """
38
38
 
39
- FACTS = r'''
39
+ FACTS = r"""
40
40
  attributes:
41
41
  facts:
42
42
  description: Action returns an C(ansible_facts) dictionary that will update existing host facts
43
- '''
43
+ """
44
44
 
45
- FILES = r'''
45
+ FILES = r"""
46
46
  attributes:
47
47
  safe_file_operations:
48
48
  description: Uses Ansible's strict file operation functions to ensure proper permissions and avoid data corruption
49
49
  vault:
50
50
  description: Can automatically decrypt Ansible vaulted files
51
- '''
51
+ """
52
52
 
53
- FLOW = r'''
53
+ FLOW = r"""
54
54
  attributes:
55
55
  action:
56
56
  description: Indicates this has a corresponding action plugin so some parts of the options can be executed on the controller
@@ -62,9 +62,9 @@ attributes:
62
62
  throttle and other loop considerations
63
63
  - Conditionals will work as if C(run_once) is being used, variables used will be from the first available host
64
64
  - This action will not work normally outside of lockstep strategies
65
- '''
66
- RAW = r'''
65
+ """
66
+ RAW = r"""
67
67
  attributes:
68
68
  raw:
69
69
  description: Indicates if an action takes a 'raw' or 'free form' string as an option and has it's own special parsing of it
70
- '''
70
+ """
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
  class ModuleDocFragment(object):
9
9
 
10
10
  # requires action_common
11
- DOCUMENTATION = r'''
11
+ DOCUMENTATION = r"""
12
12
  attributes:
13
13
  async:
14
14
  support: none
@@ -33,10 +33,10 @@ attributes:
33
33
  tags:
34
34
  description: Allows for the 'tags' keyword to control the selection of this action for execution
35
35
  support: full
36
- '''
36
+ """
37
37
 
38
38
  # also requires core above
39
- IMPORT = r'''
39
+ IMPORT = r"""
40
40
  attributes:
41
41
  action:
42
42
  details: While this action executes locally on the controller it is not governed by an action plugin
@@ -59,9 +59,9 @@ attributes:
59
59
  support: none
60
60
  until:
61
61
  support: none
62
- '''
62
+ """
63
63
  # also requires core above
64
- INCLUDE = r'''
64
+ INCLUDE = r"""
65
65
  attributes:
66
66
  action:
67
67
  details: While this action executes locally on the controller it is not governed by an action plugin
@@ -76,4 +76,4 @@ attributes:
76
76
  tags:
77
77
  details: Tags are interpreted by this action but are not automatically inherited by the include tasks, see C(apply)
78
78
  support: partial
79
- '''
79
+ """
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
  class ModuleDocFragment(object):
9
9
 
10
10
  # Standard documentation fragment
11
- DOCUMENTATION = r'''
11
+ DOCUMENTATION = r"""
12
12
  options:
13
13
  backup:
14
14
  description:
@@ -16,4 +16,4 @@ options:
16
16
  the original file back if you somehow clobbered it incorrectly.
17
17
  type: bool
18
18
  default: no
19
- '''
19
+ """
@@ -0,0 +1,27 @@
1
+ # Copyright (c) 2024 ShIRann Chen <shirannx@gmail.com>
2
+ # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
3
+ from __future__ import annotations
4
+
5
+
6
+ class ModuleDocFragment(object):
7
+
8
+ DOCUMENTATION = r"""
9
+ options:
10
+ checksum_algorithm:
11
+ description:
12
+ - Algorithm to determine checksum of file.
13
+ - Will throw an error if the host is unable to use specified algorithm.
14
+ - The remote host has to support the hashing method specified, V(md5)
15
+ can be unavailable if the host is FIPS-140 compliant.
16
+ - Availability might be restricted by the target system, for example FIPS systems won't allow md5 use
17
+ type: str
18
+ choices: [ md5, sha1, sha224, sha256, sha384, sha512 ]
19
+ default: sha1
20
+ aliases: [ checksum, checksum_algo ]
21
+ version_added: "2.0"
22
+ get_checksum:
23
+ description:
24
+ - Whether to return a checksum of the file.
25
+ type: bool
26
+ default: yes
27
+ """
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
 
8
8
  class ModuleDocFragment(object):
9
9
 
10
- DOCUMENTATION = r'''
10
+ DOCUMENTATION = r"""
11
11
  options:
12
12
  strict:
13
13
  description:
@@ -47,13 +47,13 @@ options:
47
47
  - The key from input dictionary used to generate groups.
48
48
  default_value:
49
49
  description:
50
- - The default value when the host variable's value is an empty string.
50
+ - The default value when the host variable's value is V(None) or an empty string.
51
51
  - This option is mutually exclusive with O(keyed_groups[].trailing_separator).
52
52
  type: str
53
53
  version_added: '2.12'
54
54
  trailing_separator:
55
55
  description:
56
- - Set this option to V(false) to omit the O(keyed_groups[].separator) after the host variable when the value is an empty string.
56
+ - Set this option to V(false) to omit the O(keyed_groups[].separator) after the host variable when the value is V(None) or an empty string.
57
57
  - This option is mutually exclusive with O(keyed_groups[].default_value).
58
58
  type: bool
59
59
  default: true
@@ -79,4 +79,8 @@ options:
79
79
  type: boolean
80
80
  default: True
81
81
  version_added: '2.11'
82
- '''
82
+ notes:
83
+ - Inventories are not finalized at this stage, so the auto populated C(all) and C(ungrouped) groups will
84
+ only reflect what previous inventory sources explicitly added to them.
85
+ - Runtime 'magic variables' are not available during inventory construction. For example, C(groups) and C(hostvars) do not exist yet.
86
+ """
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
  class ModuleDocFragment(object):
9
9
 
10
10
  # Standard files documentation fragment
11
- DOCUMENTATION = r'''
11
+ DOCUMENTATION = r"""
12
12
  options:
13
13
  decrypt:
14
14
  description:
@@ -16,4 +16,4 @@ options:
16
16
  type: bool
17
17
  default: yes
18
18
  version_added: '2.4'
19
- '''
19
+ """
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
 
8
8
  class ModuleDocFragment(object):
9
9
 
10
- DOCUMENTATION = r'''
10
+ DOCUMENTATION = r"""
11
11
  options:
12
12
  display_skipped_hosts:
13
13
  name: Show skipped hosts
@@ -89,4 +89,4 @@ class ModuleDocFragment(object):
89
89
  - key: show_task_path_on_failure
90
90
  section: defaults
91
91
  version_added: '2.11'
92
- '''
92
+ """
@@ -11,7 +11,7 @@ class ModuleDocFragment(object):
11
11
 
12
12
  # Note: mode is overridden by the copy and template modules so if you change the description
13
13
  # here, you should also change it there.
14
- DOCUMENTATION = r'''
14
+ DOCUMENTATION = r"""
15
15
  options:
16
16
  mode:
17
17
  description:
@@ -88,4 +88,4 @@ options:
88
88
  type: str
89
89
  aliases: [ attr ]
90
90
  version_added: '2.3'
91
- '''
91
+ """
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
  class ModuleDocFragment(object):
9
9
 
10
10
  # inventory cache
11
- DOCUMENTATION = r'''
11
+ DOCUMENTATION = r"""
12
12
  options:
13
13
  cache:
14
14
  description:
@@ -70,4 +70,4 @@ options:
70
70
  key: fact_caching_prefix
71
71
  - section: inventory
72
72
  key: cache_prefix
73
- '''
73
+ """
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
 
8
8
  class ModuleDocFragment(object):
9
9
 
10
- DOCUMENTATION = r'''
10
+ DOCUMENTATION = r"""
11
11
  options:
12
12
  result_format:
13
13
  name: Format of the task result
@@ -46,4 +46,4 @@ class ModuleDocFragment(object):
46
46
  - key: callback_format_pretty
47
47
  section: defaults
48
48
  version_added: '2.13'
49
- '''
49
+ """
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
 
8
8
  class ModuleDocFragment(object):
9
9
  # Standard documentation fragment
10
- RETURN = r'''
10
+ RETURN = r"""
11
11
  changed:
12
12
  description: Whether the module affected changes on the target.
13
13
  returned: always
@@ -38,4 +38,4 @@ exception:
38
38
  returned: on some errors
39
39
  type: str
40
40
  sample: Unknown error
41
- '''
41
+ """
@@ -9,11 +9,11 @@ from __future__ import annotations
9
9
  class ModuleDocFragment(object):
10
10
 
11
11
  # Standard template documentation fragment, use by template and win_template.
12
- DOCUMENTATION = r'''
12
+ DOCUMENTATION = r"""
13
13
  description:
14
- - Templates are processed by the L(Jinja2 templating language,http://jinja.pocoo.org/docs/).
14
+ - Templates are processed by the L(Jinja2 templating language,https://jinja.palletsprojects.com/en/stable/).
15
15
  - Documentation on the template formatting can be found in the
16
- L(Template Designer Documentation,http://jinja.pocoo.org/docs/templates/).
16
+ L(Template Designer Documentation,https://jinja.palletsprojects.com/en/stable/templates/).
17
17
  - Additional variables listed below can be used in templates.
18
18
  - C(ansible_managed) (configurable via the C(defaults) section of C(ansible.cfg)) contains a string which can be used to
19
19
  describe the template name, host, modification time of the template file and the owner uid.
@@ -117,4 +117,4 @@ notes:
117
117
  This is the best way to prevent evaluation of things that look like, but should not be Jinja2.
118
118
  - To find Byte Order Marks in files, use C(Format-Hex <file> -Count 16) on Windows, and use C(od -a -t x1 -N 16 <file>)
119
119
  on Linux.
120
- '''
120
+ """
@@ -8,7 +8,7 @@ from __future__ import annotations
8
8
  class ModuleDocFragment(object):
9
9
 
10
10
  # Standard files documentation fragment
11
- DOCUMENTATION = r'''
11
+ DOCUMENTATION = r"""
12
12
  options:
13
13
  url:
14
14
  description:
@@ -71,4 +71,20 @@ options:
71
71
  type: bool
72
72
  default: no
73
73
  version_added: '2.11'
74
+ """
75
+
76
+ URL_REDIRECT = r'''
77
+ options:
78
+ follow_redirects:
79
+ description:
80
+ - Whether or not the URI module should follow redirects.
81
+ type: str
82
+ default: safe
83
+ choices:
84
+ all: Will follow all redirects.
85
+ none: Will not follow any redirects.
86
+ safe: Only redirects doing GET or HEAD requests will be followed.
87
+ urllib2: Defer to urllib2 behavior (As of writing this follows HTTP redirects).
88
+ 'no': (DEPRECATED, removed in 2.22) alias of V(none).
89
+ 'yes': (DEPRECATED, removed in 2.22) alias of V(all).
74
90
  '''
@@ -9,7 +9,7 @@ from __future__ import annotations
9
9
  class ModuleDocFragment:
10
10
 
11
11
  # Common options for Ansible.ModuleUtils.WebRequest
12
- DOCUMENTATION = r'''
12
+ DOCUMENTATION = r"""
13
13
  options:
14
14
  method:
15
15
  description:
@@ -145,4 +145,4 @@ options:
145
145
  type: bool
146
146
  seealso:
147
147
  - module: community.windows.win_inet_proxy
148
- '''
148
+ """