ansible-core 2.18.5rc1__py3-none-any.whl → 2.19.0b2__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.
Files changed (710) hide show
  1. ansible/_internal/__init__.py +53 -0
  2. ansible/_internal/_ansiballz.py +265 -0
  3. ansible/_internal/_collection_proxy.py +47 -0
  4. ansible/_internal/_datatag/__init__.py +0 -0
  5. ansible/_internal/_datatag/_tags.py +130 -0
  6. ansible/_internal/_datatag/_utils.py +19 -0
  7. ansible/_internal/_datatag/_wrappers.py +33 -0
  8. ansible/_internal/_errors/__init__.py +0 -0
  9. ansible/_internal/_errors/_captured.py +128 -0
  10. ansible/_internal/_errors/_handler.py +91 -0
  11. ansible/_internal/_errors/_utils.py +310 -0
  12. ansible/_internal/_json/__init__.py +203 -0
  13. ansible/_internal/_json/_legacy_encoder.py +34 -0
  14. ansible/_internal/_json/_profiles/__init__.py +0 -0
  15. ansible/_internal/_json/_profiles/_cache_persistence.py +55 -0
  16. ansible/_internal/_json/_profiles/_inventory_legacy.py +40 -0
  17. ansible/_internal/_json/_profiles/_legacy.py +197 -0
  18. ansible/_internal/_locking.py +21 -0
  19. ansible/_internal/_plugins/__init__.py +0 -0
  20. ansible/_internal/_plugins/_cache.py +57 -0
  21. ansible/_internal/_task.py +78 -0
  22. ansible/_internal/_templating/__init__.py +10 -0
  23. ansible/_internal/_templating/_access.py +86 -0
  24. ansible/_internal/_templating/_chain_templar.py +63 -0
  25. ansible/_internal/_templating/_datatag.py +95 -0
  26. ansible/_internal/_templating/_engine.py +588 -0
  27. ansible/_internal/_templating/_errors.py +28 -0
  28. ansible/_internal/_templating/_jinja_bits.py +1066 -0
  29. ansible/_internal/_templating/_jinja_common.py +332 -0
  30. ansible/_internal/_templating/_jinja_patches.py +44 -0
  31. ansible/_internal/_templating/_jinja_plugins.py +345 -0
  32. ansible/_internal/_templating/_lazy_containers.py +633 -0
  33. ansible/_internal/_templating/_marker_behaviors.py +103 -0
  34. ansible/_internal/_templating/_transform.py +63 -0
  35. ansible/_internal/_templating/_utils.py +107 -0
  36. ansible/_internal/_wrapt.py +1052 -0
  37. ansible/_internal/_yaml/__init__.py +0 -0
  38. ansible/_internal/_yaml/_constructor.py +240 -0
  39. ansible/_internal/_yaml/_dumper.py +62 -0
  40. ansible/_internal/_yaml/_errors.py +166 -0
  41. ansible/_internal/_yaml/_loader.py +66 -0
  42. ansible/_internal/ansible_collections/ansible/_protomatter/README.md +11 -0
  43. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/action/debug.py +36 -0
  44. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/apply_trust.py +19 -0
  45. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/dump_object.py +18 -0
  46. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/finalize.py +16 -0
  47. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/origin.py +18 -0
  48. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.py +24 -0
  49. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.yml +33 -0
  50. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/tag_names.py +16 -0
  51. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/true_type.py +17 -0
  52. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/unmask.py +49 -0
  53. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.py +21 -0
  54. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.yml +2 -0
  55. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.py +15 -0
  56. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.yml +19 -0
  57. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.py +18 -0
  58. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.yml +19 -0
  59. ansible/cli/__init__.py +159 -89
  60. ansible/cli/_ssh_askpass.py +47 -0
  61. ansible/cli/adhoc.py +14 -7
  62. ansible/cli/arguments/option_helpers.py +154 -7
  63. ansible/cli/config.py +43 -68
  64. ansible/cli/console.py +10 -8
  65. ansible/cli/doc.py +62 -53
  66. ansible/cli/galaxy.py +27 -20
  67. ansible/cli/inventory.py +28 -26
  68. ansible/cli/playbook.py +4 -12
  69. ansible/cli/pull.py +51 -11
  70. ansible/cli/scripts/ansible_connection_cli_stub.py +7 -7
  71. ansible/cli/vault.py +12 -11
  72. ansible/compat/__init__.py +2 -2
  73. ansible/config/base.yml +166 -112
  74. ansible/config/manager.py +52 -49
  75. ansible/constants.py +3 -4
  76. ansible/errors/__init__.py +277 -235
  77. ansible/executor/interpreter_discovery.py +28 -149
  78. ansible/executor/module_common.py +426 -493
  79. ansible/executor/play_iterator.py +22 -27
  80. ansible/executor/playbook_executor.py +11 -11
  81. ansible/executor/powershell/async_watchdog.ps1 +97 -102
  82. ansible/executor/powershell/async_wrapper.ps1 +202 -151
  83. ansible/executor/powershell/become_wrapper.ps1 +89 -144
  84. ansible/executor/powershell/bootstrap_wrapper.ps1 +24 -9
  85. ansible/executor/powershell/coverage_wrapper.ps1 +82 -135
  86. ansible/executor/powershell/exec_wrapper.ps1 +462 -196
  87. ansible/executor/powershell/module_manifest.py +417 -265
  88. ansible/executor/powershell/module_wrapper.ps1 +169 -186
  89. ansible/executor/powershell/psrp_fetch_file.ps1 +41 -0
  90. ansible/executor/powershell/psrp_put_file.ps1 +122 -0
  91. ansible/executor/powershell/winrm_fetch_file.ps1 +46 -0
  92. ansible/executor/powershell/winrm_put_file.ps1 +36 -0
  93. ansible/executor/process/worker.py +161 -96
  94. ansible/executor/stats.py +5 -5
  95. ansible/executor/task_executor.py +268 -258
  96. ansible/executor/task_queue_manager.py +124 -90
  97. ansible/executor/task_result.py +183 -78
  98. ansible/galaxy/__init__.py +2 -2
  99. ansible/galaxy/api.py +22 -18
  100. ansible/galaxy/collection/__init__.py +1 -1
  101. ansible/galaxy/collection/concrete_artifact_manager.py +8 -11
  102. ansible/galaxy/dependency_resolution/dataclasses.py +14 -4
  103. ansible/galaxy/dependency_resolution/providers.py +1 -1
  104. ansible/galaxy/dependency_resolution/reporters.py +81 -0
  105. ansible/galaxy/role.py +4 -8
  106. ansible/galaxy/token.py +28 -21
  107. ansible/inventory/data.py +47 -57
  108. ansible/inventory/group.py +44 -72
  109. ansible/inventory/helpers.py +9 -0
  110. ansible/inventory/host.py +32 -54
  111. ansible/inventory/manager.py +78 -34
  112. ansible/keyword_desc.yml +1 -1
  113. ansible/module_utils/_internal/__init__.py +55 -0
  114. ansible/module_utils/_internal/_ambient_context.py +58 -0
  115. ansible/module_utils/_internal/_ansiballz.py +133 -0
  116. ansible/module_utils/_internal/_concurrent/_daemon_threading.py +1 -0
  117. ansible/module_utils/_internal/_dataclass_annotation_patch.py +64 -0
  118. ansible/module_utils/_internal/_dataclass_validation.py +217 -0
  119. ansible/module_utils/_internal/_datatag/__init__.py +928 -0
  120. ansible/module_utils/_internal/_datatag/_tags.py +38 -0
  121. ansible/module_utils/_internal/_debugging.py +31 -0
  122. ansible/module_utils/_internal/_errors.py +30 -0
  123. ansible/module_utils/_internal/_json/__init__.py +63 -0
  124. ansible/module_utils/_internal/_json/_legacy_encoder.py +26 -0
  125. ansible/module_utils/_internal/_json/_profiles/__init__.py +410 -0
  126. ansible/module_utils/_internal/_json/_profiles/_fallback_to_str.py +73 -0
  127. ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py +31 -0
  128. ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py +35 -0
  129. ansible/module_utils/_internal/_json/_profiles/_module_modern_c2m.py +35 -0
  130. ansible/module_utils/_internal/_json/_profiles/_module_modern_m2c.py +33 -0
  131. ansible/module_utils/_internal/_json/_profiles/_tagless.py +50 -0
  132. ansible/module_utils/_internal/_patches/__init__.py +66 -0
  133. ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py +55 -0
  134. ansible/module_utils/_internal/_patches/_socket_patch.py +34 -0
  135. ansible/module_utils/_internal/_patches/_sys_intern_patch.py +34 -0
  136. ansible/module_utils/_internal/_plugin_exec_context.py +49 -0
  137. ansible/module_utils/_internal/_testing.py +0 -0
  138. ansible/module_utils/_internal/_traceback.py +89 -0
  139. ansible/module_utils/ansible_release.py +2 -2
  140. ansible/module_utils/api.py +1 -2
  141. ansible/module_utils/basic.py +152 -120
  142. ansible/module_utils/common/_utils.py +24 -28
  143. ansible/module_utils/common/collections.py +1 -2
  144. ansible/module_utils/common/dict_transformations.py +2 -2
  145. ansible/module_utils/common/file.py +2 -2
  146. ansible/module_utils/common/json.py +90 -84
  147. ansible/module_utils/common/locale.py +2 -2
  148. ansible/module_utils/common/messages.py +108 -0
  149. ansible/module_utils/common/parameters.py +27 -24
  150. ansible/module_utils/common/process.py +2 -2
  151. ansible/module_utils/common/respawn.py +41 -19
  152. ansible/module_utils/common/sentinel.py +66 -0
  153. ansible/module_utils/common/sys_info.py +8 -8
  154. ansible/module_utils/common/text/converters.py +16 -37
  155. ansible/module_utils/common/validation.py +35 -24
  156. ansible/module_utils/common/warnings.py +86 -25
  157. ansible/module_utils/common/yaml.py +29 -3
  158. ansible/module_utils/compat/datetime.py +33 -21
  159. ansible/module_utils/compat/paramiko.py +21 -10
  160. ansible/module_utils/compat/typing.py +6 -5
  161. ansible/module_utils/connection.py +2 -2
  162. ansible/module_utils/csharp/Ansible.Basic.cs +14 -11
  163. ansible/module_utils/csharp/Ansible.Become.cs +1 -0
  164. ansible/module_utils/csharp/Ansible._Async.cs +517 -0
  165. ansible/module_utils/datatag.py +46 -0
  166. ansible/module_utils/distro/__init__.py +2 -2
  167. ansible/module_utils/facts/ansible_collector.py +4 -5
  168. ansible/module_utils/facts/collector.py +13 -14
  169. ansible/module_utils/facts/compat.py +4 -4
  170. ansible/module_utils/facts/default_collectors.py +1 -1
  171. ansible/module_utils/facts/hardware/aix.py +34 -0
  172. ansible/module_utils/facts/hardware/base.py +1 -1
  173. ansible/module_utils/facts/hardware/darwin.py +1 -3
  174. ansible/module_utils/facts/hardware/freebsd.py +2 -2
  175. ansible/module_utils/facts/hardware/linux.py +4 -4
  176. ansible/module_utils/facts/namespace.py +1 -1
  177. ansible/module_utils/facts/network/base.py +1 -1
  178. ansible/module_utils/facts/network/fc_wwn.py +1 -2
  179. ansible/module_utils/facts/network/iscsi.py +1 -2
  180. ansible/module_utils/facts/network/nvme.py +1 -2
  181. ansible/module_utils/facts/other/facter.py +1 -2
  182. ansible/module_utils/facts/other/ohai.py +2 -3
  183. ansible/module_utils/facts/system/apparmor.py +1 -2
  184. ansible/module_utils/facts/system/caps.py +1 -1
  185. ansible/module_utils/facts/system/chroot.py +1 -2
  186. ansible/module_utils/facts/system/cmdline.py +1 -2
  187. ansible/module_utils/facts/system/date_time.py +5 -3
  188. ansible/module_utils/facts/system/distribution.py +9 -8
  189. ansible/module_utils/facts/system/dns.py +1 -1
  190. ansible/module_utils/facts/system/env.py +1 -2
  191. ansible/module_utils/facts/system/fips.py +7 -20
  192. ansible/module_utils/facts/system/loadavg.py +1 -2
  193. ansible/module_utils/facts/system/local.py +1 -2
  194. ansible/module_utils/facts/system/lsb.py +1 -2
  195. ansible/module_utils/facts/system/pkg_mgr.py +1 -2
  196. ansible/module_utils/facts/system/platform.py +1 -2
  197. ansible/module_utils/facts/system/python.py +1 -2
  198. ansible/module_utils/facts/system/selinux.py +1 -1
  199. ansible/module_utils/facts/system/service_mgr.py +1 -2
  200. ansible/module_utils/facts/system/ssh_pub_keys.py +1 -1
  201. ansible/module_utils/facts/system/systemd.py +1 -1
  202. ansible/module_utils/facts/system/user.py +1 -2
  203. ansible/module_utils/facts/utils.py +3 -3
  204. ansible/module_utils/facts/virtual/base.py +1 -1
  205. ansible/module_utils/facts/virtual/sunos.py +3 -15
  206. ansible/module_utils/facts/virtual/sysctl.py +3 -16
  207. ansible/module_utils/json_utils.py +2 -2
  208. ansible/module_utils/parsing/convert_bool.py +1 -1
  209. ansible/module_utils/service.py +18 -21
  210. ansible/module_utils/splitter.py +7 -7
  211. ansible/module_utils/testing.py +31 -0
  212. ansible/module_utils/urls.py +60 -31
  213. ansible/modules/add_host.py +4 -4
  214. ansible/modules/apt.py +60 -46
  215. ansible/modules/apt_key.py +19 -12
  216. ansible/modules/apt_repository.py +19 -16
  217. ansible/modules/assemble.py +6 -6
  218. ansible/modules/assert.py +4 -4
  219. ansible/modules/async_status.py +10 -12
  220. ansible/modules/async_wrapper.py +8 -3
  221. ansible/modules/blockinfile.py +6 -7
  222. ansible/modules/command.py +10 -17
  223. ansible/modules/copy.py +57 -144
  224. ansible/modules/cron.py +20 -15
  225. ansible/modules/deb822_repository.py +8 -9
  226. ansible/modules/debconf.py +5 -5
  227. ansible/modules/debug.py +4 -4
  228. ansible/modules/dnf.py +8 -8
  229. ansible/modules/dnf5.py +39 -13
  230. ansible/modules/dpkg_selections.py +4 -4
  231. ansible/modules/expect.py +8 -10
  232. ansible/modules/fail.py +4 -4
  233. ansible/modules/fetch.py +4 -4
  234. ansible/modules/file.py +174 -133
  235. ansible/modules/find.py +19 -17
  236. ansible/modules/gather_facts.py +3 -3
  237. ansible/modules/get_url.py +59 -53
  238. ansible/modules/getent.py +7 -9
  239. ansible/modules/git.py +28 -25
  240. ansible/modules/group.py +6 -6
  241. ansible/modules/group_by.py +4 -4
  242. ansible/modules/hostname.py +13 -29
  243. ansible/modules/import_playbook.py +6 -6
  244. ansible/modules/import_role.py +6 -6
  245. ansible/modules/import_tasks.py +6 -6
  246. ansible/modules/include_role.py +6 -6
  247. ansible/modules/include_tasks.py +6 -6
  248. ansible/modules/include_vars.py +6 -6
  249. ansible/modules/iptables.py +86 -73
  250. ansible/modules/known_hosts.py +10 -10
  251. ansible/modules/lineinfile.py +5 -5
  252. ansible/modules/meta.py +4 -4
  253. ansible/modules/mount_facts.py +2 -2
  254. ansible/modules/package.py +4 -4
  255. ansible/modules/package_facts.py +22 -10
  256. ansible/modules/pause.py +6 -6
  257. ansible/modules/ping.py +6 -6
  258. ansible/modules/pip.py +10 -11
  259. ansible/modules/raw.py +4 -4
  260. ansible/modules/reboot.py +6 -6
  261. ansible/modules/replace.py +9 -13
  262. ansible/modules/rpm_key.py +7 -8
  263. ansible/modules/script.py +4 -4
  264. ansible/modules/service.py +7 -8
  265. ansible/modules/service_facts.py +87 -10
  266. ansible/modules/set_fact.py +5 -5
  267. ansible/modules/set_stats.py +4 -4
  268. ansible/modules/setup.py +2 -2
  269. ansible/modules/shell.py +6 -6
  270. ansible/modules/slurp.py +6 -6
  271. ansible/modules/stat.py +9 -23
  272. ansible/modules/subversion.py +15 -15
  273. ansible/modules/systemd.py +6 -6
  274. ansible/modules/systemd_service.py +6 -6
  275. ansible/modules/sysvinit.py +6 -6
  276. ansible/modules/tempfile.py +5 -6
  277. ansible/modules/template.py +6 -6
  278. ansible/modules/unarchive.py +32 -11
  279. ansible/modules/uri.py +33 -26
  280. ansible/modules/user.py +53 -34
  281. ansible/modules/validate_argument_spec.py +10 -7
  282. ansible/modules/wait_for.py +32 -27
  283. ansible/modules/wait_for_connection.py +6 -6
  284. ansible/modules/yum_repository.py +6 -6
  285. ansible/parsing/ajson.py +14 -32
  286. ansible/parsing/dataloader.py +99 -54
  287. ansible/parsing/mod_args.py +28 -44
  288. ansible/parsing/plugin_docs.py +21 -86
  289. ansible/parsing/quoting.py +1 -1
  290. ansible/parsing/splitter.py +27 -12
  291. ansible/parsing/utils/addresses.py +24 -24
  292. ansible/parsing/utils/jsonify.py +5 -1
  293. ansible/parsing/utils/yaml.py +32 -61
  294. ansible/parsing/vault/__init__.py +319 -87
  295. ansible/parsing/yaml/__init__.py +0 -18
  296. ansible/parsing/yaml/dumper.py +6 -120
  297. ansible/parsing/yaml/loader.py +6 -39
  298. ansible/parsing/yaml/objects.py +43 -335
  299. ansible/playbook/__init__.py +1 -1
  300. ansible/playbook/attribute.py +8 -3
  301. ansible/playbook/base.py +182 -132
  302. ansible/playbook/block.py +26 -24
  303. ansible/playbook/collectionsearch.py +1 -15
  304. ansible/playbook/conditional.py +3 -77
  305. ansible/playbook/handler.py +8 -2
  306. ansible/playbook/helpers.py +41 -53
  307. ansible/playbook/included_file.py +31 -27
  308. ansible/playbook/loop_control.py +2 -2
  309. ansible/playbook/play.py +85 -44
  310. ansible/playbook/play_context.py +12 -17
  311. ansible/playbook/playbook_include.py +14 -15
  312. ansible/playbook/role/__init__.py +24 -26
  313. ansible/playbook/role/definition.py +15 -17
  314. ansible/playbook/role/include.py +2 -4
  315. ansible/playbook/role/metadata.py +10 -11
  316. ansible/playbook/role_include.py +3 -3
  317. ansible/playbook/taggable.py +13 -8
  318. ansible/playbook/task.py +188 -118
  319. ansible/playbook/task_include.py +5 -5
  320. ansible/plugins/__init__.py +68 -21
  321. ansible/plugins/action/__init__.py +209 -176
  322. ansible/plugins/action/add_host.py +1 -1
  323. ansible/plugins/action/assemble.py +1 -1
  324. ansible/plugins/action/assert.py +54 -66
  325. ansible/plugins/action/copy.py +7 -11
  326. ansible/plugins/action/debug.py +37 -31
  327. ansible/plugins/action/dnf.py +3 -4
  328. ansible/plugins/action/fail.py +1 -1
  329. ansible/plugins/action/fetch.py +4 -5
  330. ansible/plugins/action/gather_facts.py +7 -6
  331. ansible/plugins/action/group_by.py +1 -1
  332. ansible/plugins/action/include_vars.py +10 -11
  333. ansible/plugins/action/package.py +3 -6
  334. ansible/plugins/action/pause.py +2 -2
  335. ansible/plugins/action/script.py +15 -8
  336. ansible/plugins/action/service.py +6 -11
  337. ansible/plugins/action/set_fact.py +3 -12
  338. ansible/plugins/action/set_stats.py +3 -8
  339. ansible/plugins/action/template.py +35 -59
  340. ansible/plugins/action/unarchive.py +1 -1
  341. ansible/plugins/action/validate_argument_spec.py +5 -5
  342. ansible/plugins/action/wait_for_connection.py +1 -1
  343. ansible/plugins/become/__init__.py +31 -8
  344. ansible/plugins/become/runas.py +71 -0
  345. ansible/plugins/become/su.py +13 -8
  346. ansible/plugins/become/sudo.py +19 -0
  347. ansible/plugins/cache/__init__.py +35 -44
  348. ansible/plugins/cache/base.py +8 -0
  349. ansible/plugins/cache/jsonfile.py +10 -16
  350. ansible/plugins/cache/memory.py +6 -12
  351. ansible/plugins/callback/__init__.py +284 -179
  352. ansible/plugins/callback/default.py +99 -92
  353. ansible/plugins/callback/junit.py +44 -39
  354. ansible/plugins/callback/minimal.py +28 -25
  355. ansible/plugins/callback/oneline.py +28 -21
  356. ansible/plugins/callback/tree.py +16 -11
  357. ansible/plugins/connection/__init__.py +47 -34
  358. ansible/plugins/connection/local.py +150 -54
  359. ansible/plugins/connection/paramiko_ssh.py +21 -18
  360. ansible/plugins/connection/psrp.py +76 -165
  361. ansible/plugins/connection/ssh.py +301 -78
  362. ansible/plugins/connection/winrm.py +58 -140
  363. ansible/plugins/doc_fragments/action_common_attributes.py +14 -14
  364. ansible/plugins/doc_fragments/action_core.py +6 -6
  365. ansible/plugins/doc_fragments/backup.py +2 -2
  366. ansible/plugins/doc_fragments/checksum_common.py +27 -0
  367. ansible/plugins/doc_fragments/constructed.py +6 -2
  368. ansible/plugins/doc_fragments/decrypt.py +2 -2
  369. ansible/plugins/doc_fragments/default_callback.py +2 -2
  370. ansible/plugins/doc_fragments/files.py +2 -2
  371. ansible/plugins/doc_fragments/inventory_cache.py +2 -2
  372. ansible/plugins/doc_fragments/result_format_callback.py +2 -2
  373. ansible/plugins/doc_fragments/return_common.py +2 -2
  374. ansible/plugins/doc_fragments/template_common.py +4 -4
  375. ansible/plugins/doc_fragments/url.py +17 -1
  376. ansible/plugins/doc_fragments/url_windows.py +2 -2
  377. ansible/plugins/doc_fragments/validate.py +2 -2
  378. ansible/plugins/doc_fragments/vars_plugin_staging.py +2 -2
  379. ansible/plugins/filter/__init__.py +6 -2
  380. ansible/plugins/filter/b64decode.yml +22 -0
  381. ansible/plugins/filter/b64encode.yml +22 -0
  382. ansible/plugins/filter/bool.yml +11 -4
  383. ansible/plugins/filter/core.py +225 -108
  384. ansible/plugins/filter/encryption.py +32 -32
  385. ansible/plugins/filter/flatten.yml +3 -2
  386. ansible/plugins/filter/human_to_bytes.yml +1 -1
  387. ansible/plugins/filter/mathstuff.py +30 -37
  388. ansible/plugins/filter/password_hash.yml +8 -0
  389. ansible/plugins/filter/regex_search.yml +1 -4
  390. ansible/plugins/filter/split.yml +1 -1
  391. ansible/plugins/filter/to_nice_yaml.yml +0 -4
  392. ansible/plugins/filter/to_yaml.yml +0 -4
  393. ansible/plugins/filter/unvault.yml +1 -1
  394. ansible/plugins/filter/urls.py +1 -1
  395. ansible/plugins/filter/urlsplit.py +8 -9
  396. ansible/plugins/filter/vault.yml +14 -9
  397. ansible/plugins/filter/win_basename.yml +6 -1
  398. ansible/plugins/filter/win_dirname.yml +5 -0
  399. ansible/plugins/inventory/__init__.py +97 -77
  400. ansible/plugins/inventory/advanced_host_list.py +7 -5
  401. ansible/plugins/inventory/auto.py +11 -4
  402. ansible/plugins/inventory/constructed.py +21 -24
  403. ansible/plugins/inventory/generator.py +16 -11
  404. ansible/plugins/inventory/host_list.py +7 -5
  405. ansible/plugins/inventory/ini.py +78 -44
  406. ansible/plugins/inventory/script.py +189 -119
  407. ansible/plugins/inventory/toml.py +16 -126
  408. ansible/plugins/inventory/yaml.py +10 -8
  409. ansible/plugins/list.py +3 -3
  410. ansible/plugins/loader.py +197 -82
  411. ansible/plugins/lookup/__init__.py +21 -4
  412. ansible/plugins/lookup/config.py +21 -35
  413. ansible/plugins/lookup/csvfile.py +3 -2
  414. ansible/plugins/lookup/dict.py +1 -6
  415. ansible/plugins/lookup/env.py +12 -9
  416. ansible/plugins/lookup/file.py +5 -8
  417. ansible/plugins/lookup/first_found.py +86 -55
  418. ansible/plugins/lookup/indexed_items.py +1 -10
  419. ansible/plugins/lookup/ini.py +14 -13
  420. ansible/plugins/lookup/items.py +1 -1
  421. ansible/plugins/lookup/lines.py +8 -1
  422. ansible/plugins/lookup/list.py +1 -1
  423. ansible/plugins/lookup/nested.py +2 -18
  424. ansible/plugins/lookup/password.py +5 -5
  425. ansible/plugins/lookup/pipe.py +5 -7
  426. ansible/plugins/lookup/sequence.py +18 -8
  427. ansible/plugins/lookup/subelements.py +1 -4
  428. ansible/plugins/lookup/template.py +42 -36
  429. ansible/plugins/lookup/together.py +0 -12
  430. ansible/plugins/lookup/unvault.py +1 -5
  431. ansible/plugins/lookup/url.py +2 -8
  432. ansible/plugins/lookup/vars.py +16 -24
  433. ansible/plugins/shell/__init__.py +2 -2
  434. ansible/plugins/shell/cmd.py +2 -2
  435. ansible/plugins/shell/powershell.py +39 -22
  436. ansible/plugins/shell/sh.py +3 -2
  437. ansible/plugins/strategy/__init__.py +159 -184
  438. ansible/plugins/strategy/debug.py +2 -2
  439. ansible/plugins/strategy/free.py +16 -31
  440. ansible/plugins/strategy/host_pinned.py +2 -2
  441. ansible/plugins/strategy/linear.py +41 -41
  442. ansible/plugins/terminal/__init__.py +4 -4
  443. ansible/plugins/test/__init__.py +7 -2
  444. ansible/plugins/test/core.py +55 -21
  445. ansible/plugins/test/files.py +1 -1
  446. ansible/plugins/test/mathstuff.py +3 -3
  447. ansible/plugins/test/uri.py +3 -3
  448. ansible/plugins/vars/host_group_vars.py +7 -14
  449. ansible/release.py +2 -2
  450. ansible/template/__init__.py +370 -944
  451. ansible/utils/__init__.py +0 -18
  452. ansible/utils/_ssh_agent.py +657 -0
  453. ansible/utils/collection_loader/__init__.py +52 -5
  454. ansible/utils/collection_loader/_collection_config.py +5 -6
  455. ansible/utils/collection_loader/_collection_finder.py +79 -93
  456. ansible/utils/collection_loader/_collection_meta.py +13 -8
  457. ansible/utils/display.py +433 -63
  458. ansible/utils/encrypt.py +27 -19
  459. ansible/utils/fqcn.py +2 -2
  460. ansible/utils/hashing.py +2 -2
  461. ansible/utils/helpers.py +2 -2
  462. ansible/utils/listify.py +8 -8
  463. ansible/utils/lock.py +2 -2
  464. ansible/utils/path.py +4 -4
  465. ansible/utils/plugin_docs.py +14 -13
  466. ansible/utils/sentinel.py +4 -62
  467. ansible/utils/singleton.py +2 -0
  468. ansible/utils/ssh_functions.py +1 -1
  469. ansible/utils/unsafe_proxy.py +23 -332
  470. ansible/utils/vars.py +51 -8
  471. ansible/utils/version.py +2 -2
  472. ansible/vars/clean.py +5 -5
  473. ansible/vars/hostvars.py +60 -90
  474. ansible/vars/manager.py +206 -282
  475. ansible/vars/reserved.py +8 -9
  476. ansible_core-2.19.0b2.dist-info/BSD-3-Clause.txt +28 -0
  477. {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/METADATA +5 -4
  478. ansible_core-2.19.0b2.dist-info/RECORD +1072 -0
  479. {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/WHEEL +1 -1
  480. ansible_test/_data/completion/docker.txt +7 -7
  481. ansible_test/_data/completion/remote.txt +6 -6
  482. ansible_test/_data/completion/windows.txt +1 -0
  483. ansible_test/_data/requirements/ansible.txt +2 -2
  484. ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
  485. ansible_test/_data/requirements/sanity.changelog.txt +1 -1
  486. ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
  487. ansible_test/_data/requirements/sanity.pylint.txt +4 -4
  488. ansible_test/_data/requirements/sanity.validate-modules.txt +2 -2
  489. ansible_test/_data/requirements/sanity.yamllint.txt +1 -1
  490. ansible_test/_data/requirements/units.txt +1 -0
  491. ansible_test/_internal/__init__.py +1 -0
  492. ansible_test/_internal/ansible_util.py +2 -0
  493. ansible_test/_internal/become.py +1 -0
  494. ansible_test/_internal/bootstrap.py +1 -0
  495. ansible_test/_internal/cache.py +1 -0
  496. ansible_test/_internal/cgroup.py +1 -0
  497. ansible_test/_internal/ci/__init__.py +1 -0
  498. ansible_test/_internal/ci/azp.py +1 -0
  499. ansible_test/_internal/ci/local.py +1 -0
  500. ansible_test/_internal/classification/__init__.py +1 -0
  501. ansible_test/_internal/classification/common.py +1 -0
  502. ansible_test/_internal/classification/csharp.py +1 -0
  503. ansible_test/_internal/classification/powershell.py +1 -0
  504. ansible_test/_internal/classification/python.py +1 -0
  505. ansible_test/_internal/cli/__init__.py +1 -0
  506. ansible_test/_internal/cli/actions.py +1 -0
  507. ansible_test/_internal/cli/argparsing/__init__.py +1 -0
  508. ansible_test/_internal/cli/argparsing/actions.py +1 -0
  509. ansible_test/_internal/cli/argparsing/argcompletion.py +1 -0
  510. ansible_test/_internal/cli/argparsing/parsers.py +1 -0
  511. ansible_test/_internal/cli/commands/__init__.py +11 -0
  512. ansible_test/_internal/cli/commands/coverage/__init__.py +1 -0
  513. ansible_test/_internal/cli/commands/coverage/analyze/__init__.py +1 -0
  514. ansible_test/_internal/cli/commands/coverage/analyze/targets/__init__.py +1 -0
  515. ansible_test/_internal/cli/commands/coverage/analyze/targets/combine.py +1 -0
  516. ansible_test/_internal/cli/commands/coverage/analyze/targets/expand.py +1 -0
  517. ansible_test/_internal/cli/commands/coverage/analyze/targets/filter.py +1 -0
  518. ansible_test/_internal/cli/commands/coverage/analyze/targets/generate.py +1 -0
  519. ansible_test/_internal/cli/commands/coverage/analyze/targets/missing.py +1 -0
  520. ansible_test/_internal/cli/commands/coverage/combine.py +1 -0
  521. ansible_test/_internal/cli/commands/coverage/erase.py +1 -0
  522. ansible_test/_internal/cli/commands/coverage/html.py +1 -0
  523. ansible_test/_internal/cli/commands/coverage/report.py +1 -0
  524. ansible_test/_internal/cli/commands/coverage/xml.py +1 -0
  525. ansible_test/_internal/cli/commands/env.py +1 -0
  526. ansible_test/_internal/cli/commands/integration/__init__.py +1 -0
  527. ansible_test/_internal/cli/commands/integration/network.py +1 -0
  528. ansible_test/_internal/cli/commands/integration/posix.py +1 -0
  529. ansible_test/_internal/cli/commands/integration/windows.py +1 -0
  530. ansible_test/_internal/cli/commands/sanity.py +9 -0
  531. ansible_test/_internal/cli/commands/shell.py +1 -0
  532. ansible_test/_internal/cli/commands/units.py +1 -0
  533. ansible_test/_internal/cli/compat.py +1 -0
  534. ansible_test/_internal/cli/completers.py +1 -0
  535. ansible_test/_internal/cli/converters.py +1 -0
  536. ansible_test/_internal/cli/environments.py +1 -0
  537. ansible_test/_internal/cli/epilog.py +1 -0
  538. ansible_test/_internal/cli/parsers/__init__.py +1 -0
  539. ansible_test/_internal/cli/parsers/base_argument_parsers.py +1 -0
  540. ansible_test/_internal/cli/parsers/helpers.py +1 -0
  541. ansible_test/_internal/cli/parsers/host_config_parsers.py +1 -0
  542. ansible_test/_internal/cli/parsers/key_value_parsers.py +1 -0
  543. ansible_test/_internal/cli/parsers/value_parsers.py +1 -0
  544. ansible_test/_internal/commands/__init__.py +1 -0
  545. ansible_test/_internal/commands/coverage/__init__.py +2 -1
  546. ansible_test/_internal/commands/coverage/analyze/__init__.py +1 -0
  547. ansible_test/_internal/commands/coverage/analyze/targets/__init__.py +1 -0
  548. ansible_test/_internal/commands/coverage/analyze/targets/combine.py +1 -0
  549. ansible_test/_internal/commands/coverage/analyze/targets/expand.py +1 -0
  550. ansible_test/_internal/commands/coverage/analyze/targets/filter.py +1 -0
  551. ansible_test/_internal/commands/coverage/analyze/targets/generate.py +1 -0
  552. ansible_test/_internal/commands/coverage/analyze/targets/missing.py +1 -0
  553. ansible_test/_internal/commands/coverage/combine.py +2 -1
  554. ansible_test/_internal/commands/coverage/erase.py +1 -0
  555. ansible_test/_internal/commands/coverage/html.py +1 -0
  556. ansible_test/_internal/commands/coverage/report.py +1 -0
  557. ansible_test/_internal/commands/coverage/xml.py +1 -0
  558. ansible_test/_internal/commands/env/__init__.py +2 -0
  559. ansible_test/_internal/commands/integration/__init__.py +4 -0
  560. ansible_test/_internal/commands/integration/cloud/__init__.py +1 -0
  561. ansible_test/_internal/commands/integration/cloud/acme.py +2 -1
  562. ansible_test/_internal/commands/integration/cloud/aws.py +1 -0
  563. ansible_test/_internal/commands/integration/cloud/azure.py +1 -0
  564. ansible_test/_internal/commands/integration/cloud/cs.py +1 -0
  565. ansible_test/_internal/commands/integration/cloud/digitalocean.py +1 -0
  566. ansible_test/_internal/commands/integration/cloud/galaxy.py +3 -2
  567. ansible_test/_internal/commands/integration/cloud/hcloud.py +1 -0
  568. ansible_test/_internal/commands/integration/cloud/httptester.py +2 -1
  569. ansible_test/_internal/commands/integration/cloud/nios.py +2 -1
  570. ansible_test/_internal/commands/integration/cloud/opennebula.py +1 -0
  571. ansible_test/_internal/commands/integration/cloud/openshift.py +1 -0
  572. ansible_test/_internal/commands/integration/cloud/scaleway.py +1 -0
  573. ansible_test/_internal/commands/integration/cloud/vcenter.py +1 -0
  574. ansible_test/_internal/commands/integration/cloud/vultr.py +1 -0
  575. ansible_test/_internal/commands/integration/coverage.py +1 -0
  576. ansible_test/_internal/commands/integration/filters.py +1 -0
  577. ansible_test/_internal/commands/integration/network.py +1 -0
  578. ansible_test/_internal/commands/integration/posix.py +1 -0
  579. ansible_test/_internal/commands/integration/windows.py +1 -0
  580. ansible_test/_internal/commands/sanity/__init__.py +16 -1
  581. ansible_test/_internal/commands/sanity/ansible_doc.py +1 -0
  582. ansible_test/_internal/commands/sanity/bin_symlinks.py +1 -0
  583. ansible_test/_internal/commands/sanity/compile.py +1 -0
  584. ansible_test/_internal/commands/sanity/ignores.py +1 -0
  585. ansible_test/_internal/commands/sanity/import.py +1 -0
  586. ansible_test/_internal/commands/sanity/integration_aliases.py +1 -0
  587. ansible_test/_internal/commands/sanity/pep8.py +1 -0
  588. ansible_test/_internal/commands/sanity/pslint.py +1 -0
  589. ansible_test/_internal/commands/sanity/pylint.py +24 -26
  590. ansible_test/_internal/commands/sanity/shellcheck.py +1 -0
  591. ansible_test/_internal/commands/sanity/validate_modules.py +1 -0
  592. ansible_test/_internal/commands/sanity/yamllint.py +1 -0
  593. ansible_test/_internal/commands/shell/__init__.py +1 -0
  594. ansible_test/_internal/commands/units/__init__.py +1 -0
  595. ansible_test/_internal/compat/__init__.py +1 -0
  596. ansible_test/_internal/compat/packaging.py +1 -0
  597. ansible_test/_internal/compat/yaml.py +1 -0
  598. ansible_test/_internal/completion.py +1 -0
  599. ansible_test/_internal/config.py +2 -0
  600. ansible_test/_internal/connections.py +1 -0
  601. ansible_test/_internal/constants.py +1 -0
  602. ansible_test/_internal/containers.py +1 -0
  603. ansible_test/_internal/content_config.py +1 -0
  604. ansible_test/_internal/core_ci.py +1 -0
  605. ansible_test/_internal/coverage_util.py +11 -10
  606. ansible_test/_internal/data.py +1 -0
  607. ansible_test/_internal/delegation.py +1 -0
  608. ansible_test/_internal/dev/__init__.py +1 -0
  609. ansible_test/_internal/dev/container_probe.py +1 -0
  610. ansible_test/_internal/diff.py +3 -2
  611. ansible_test/_internal/docker_util.py +2 -1
  612. ansible_test/_internal/encoding.py +1 -0
  613. ansible_test/_internal/executor.py +1 -0
  614. ansible_test/_internal/git.py +1 -0
  615. ansible_test/_internal/host_configs.py +1 -0
  616. ansible_test/_internal/host_profiles.py +1 -0
  617. ansible_test/_internal/http.py +1 -0
  618. ansible_test/_internal/init.py +1 -0
  619. ansible_test/_internal/inventory.py +35 -3
  620. ansible_test/_internal/io.py +1 -0
  621. ansible_test/_internal/metadata.py +1 -0
  622. ansible_test/_internal/payload.py +1 -0
  623. ansible_test/_internal/provider/__init__.py +1 -0
  624. ansible_test/_internal/provider/layout/__init__.py +1 -0
  625. ansible_test/_internal/provider/layout/ansible.py +1 -0
  626. ansible_test/_internal/provider/layout/collection.py +1 -0
  627. ansible_test/_internal/provider/layout/unsupported.py +1 -0
  628. ansible_test/_internal/provider/source/__init__.py +1 -0
  629. ansible_test/_internal/provider/source/git.py +1 -0
  630. ansible_test/_internal/provider/source/installed.py +1 -0
  631. ansible_test/_internal/provider/source/unsupported.py +1 -0
  632. ansible_test/_internal/provider/source/unversioned.py +1 -0
  633. ansible_test/_internal/provisioning.py +1 -0
  634. ansible_test/_internal/pypi_proxy.py +6 -5
  635. ansible_test/_internal/python_requirements.py +1 -0
  636. ansible_test/_internal/ssh.py +1 -0
  637. ansible_test/_internal/target.py +1 -0
  638. ansible_test/_internal/test.py +3 -2
  639. ansible_test/_internal/thread.py +1 -0
  640. ansible_test/_internal/timeout.py +1 -0
  641. ansible_test/_internal/util.py +1 -0
  642. ansible_test/_internal/util_common.py +5 -2
  643. ansible_test/_internal/venv.py +1 -0
  644. ansible_test/_util/controller/sanity/code-smell/action-plugin-docs.py +1 -0
  645. ansible_test/_util/controller/sanity/code-smell/changelog/sphinx.py +1 -0
  646. ansible_test/_util/controller/sanity/code-smell/changelog.py +1 -0
  647. ansible_test/_util/controller/sanity/code-smell/empty-init.py +1 -0
  648. ansible_test/_util/controller/sanity/code-smell/line-endings.py +1 -0
  649. ansible_test/_util/controller/sanity/code-smell/no-assert.py +1 -0
  650. ansible_test/_util/controller/sanity/code-smell/no-get-exception.py +1 -0
  651. ansible_test/_util/controller/sanity/code-smell/no-illegal-filenames.py +1 -0
  652. ansible_test/_util/controller/sanity/code-smell/no-smart-quotes.py +1 -0
  653. ansible_test/_util/controller/sanity/code-smell/replace-urlopen.py +1 -0
  654. ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py +28 -1
  655. ansible_test/_util/controller/sanity/code-smell/shebang.py +1 -0
  656. ansible_test/_util/controller/sanity/code-smell/symlinks.py +1 -0
  657. ansible_test/_util/controller/sanity/code-smell/use-argspec-type-path.py +1 -0
  658. ansible_test/_util/controller/sanity/code-smell/use-compat-six.py +1 -0
  659. ansible_test/_util/controller/sanity/integration-aliases/yaml_to_json.py +2 -1
  660. ansible_test/_util/controller/sanity/pep8/current-ignore.txt +4 -0
  661. ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +7 -5
  662. ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +7 -5
  663. ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +7 -5
  664. ansible_test/_util/controller/sanity/pylint/config/collection.cfg +3 -5
  665. ansible_test/_util/controller/sanity/pylint/config/default.cfg +7 -7
  666. ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +1 -13
  667. ansible_test/_util/controller/sanity/pylint/plugins/hide_unraisable.py +1 -0
  668. ansible_test/_util/controller/sanity/pylint/plugins/string_format.py +1 -8
  669. ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +1 -8
  670. ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +55 -28
  671. ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +12 -5
  672. ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +13 -2
  673. ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -0
  674. ansible_test/_util/controller/sanity/yamllint/yamllinter.py +35 -17
  675. ansible_test/_util/controller/tools/collection_detail.py +1 -0
  676. ansible_test/_util/controller/tools/yaml_to_json.py +2 -1
  677. ansible_test/_util/target/pytest/plugins/ansible_forked.py +6 -1
  678. ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +2 -1
  679. ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -0
  680. ansible_test/_util/target/sanity/compile/compile.py +1 -0
  681. ansible_test/_util/target/sanity/import/importer.py +15 -16
  682. ansible_test/_util/target/setup/bootstrap.sh +9 -20
  683. ansible_test/_util/target/setup/probe_cgroups.py +1 -0
  684. ansible_test/_util/target/setup/quiet_pip.py +1 -0
  685. ansible_test/_util/target/setup/requirements.py +35 -27
  686. ansible_test/_util/target/tools/virtualenvcheck.py +2 -1
  687. ansible_test/_util/target/tools/yamlcheck.py +2 -1
  688. ansible/compat/selectors.py +0 -32
  689. ansible/errors/yaml_strings.py +0 -138
  690. ansible/executor/action_write_locks.py +0 -44
  691. ansible/executor/discovery/python_target.py +0 -47
  692. ansible/executor/powershell/module_powershell_wrapper.ps1 +0 -86
  693. ansible/executor/powershell/module_script_wrapper.ps1 +0 -22
  694. ansible/module_utils/compat/importlib.py +0 -26
  695. ansible/module_utils/compat/selectors.py +0 -32
  696. ansible/module_utils/pycompat24.py +0 -73
  697. ansible/parsing/yaml/constructor.py +0 -178
  698. ansible/template/native_helpers.py +0 -251
  699. ansible/template/template.py +0 -43
  700. ansible/template/vars.py +0 -77
  701. ansible/utils/native_jinja.py +0 -11
  702. ansible/vars/fact_cache.py +0 -71
  703. ansible_core-2.18.5rc1.dist-info/RECORD +0 -992
  704. {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/Apache-License.txt +0 -0
  705. {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/COPYING +0 -0
  706. {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/MIT-license.txt +0 -0
  707. {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/PSF-license.txt +0 -0
  708. {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/entry_points.txt +0 -0
  709. {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/simplified_bsd.txt +0 -0
  710. {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/top_level.txt +0 -0
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = r'''
9
+ DOCUMENTATION = r"""
10
10
  ---
11
11
  module: set_fact
12
12
  short_description: Set host variable(s) and fact(s).
@@ -66,7 +66,7 @@ notes:
66
66
  - Because of the nature of tasks, set_fact will produce 'static' values for a variable.
67
67
  Unlike normal 'lazy' variables, the value gets evaluated and templated on assignment.
68
68
  - Some boolean values (yes, no, true, false) will always be converted to boolean type,
69
- unless C(DEFAULT_JINJA2_NATIVE) is enabled. This is done so the C(var=value) booleans,
69
+ This is done so the C(var=value) booleans,
70
70
  otherwise it would only be able to create strings, but it also prevents using those values to create YAML strings.
71
71
  Using the setting will restrict k=v to strings, but will allow you to specify string or boolean in YAML.
72
72
  - "To create lists/arrays or dictionary/hashes use YAML notation C(var: [val1, val2])."
@@ -77,9 +77,9 @@ seealso:
77
77
  description: More information related to variable precedence and which type of variable wins over others.
78
78
  author:
79
79
  - Dag Wieers (@dagwieers)
80
- '''
80
+ """
81
81
 
82
- EXAMPLES = r'''
82
+ EXAMPLES = r"""
83
83
  - name: Setting host facts using key=value pairs, this format can only create strings or booleans
84
84
  ansible.builtin.set_fact: one_fact="something" other_fact="{{ local_var }}"
85
85
 
@@ -116,4 +116,4 @@ EXAMPLES = r'''
116
116
  ansible.builtin.set_fact:
117
117
  two_dict: {'something': here2, 'other': somewhere}
118
118
  two_list: [1,2,3]
119
- '''
119
+ """
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = r'''
9
+ DOCUMENTATION = r"""
10
10
  ---
11
11
  module: set_stats
12
12
  short_description: Define and display stats for the current ansible run
@@ -56,9 +56,9 @@ notes:
56
56
  - In order for custom stats to be displayed, you must set C(show_custom_stats) in section C([defaults]) in C(ansible.cfg)
57
57
  or by defining environment variable C(ANSIBLE_SHOW_CUSTOM_STATS) to V(true). See the P(ansible.builtin.default#callback) callback plugin for details.
58
58
  version_added: "2.3"
59
- '''
59
+ """
60
60
 
61
- EXAMPLES = r'''
61
+ EXAMPLES = r"""
62
62
  - name: Aggregating packages_installed stat per host
63
63
  ansible.builtin.set_stats:
64
64
  data:
@@ -78,4 +78,4 @@ EXAMPLES = r'''
78
78
  data:
79
79
  the_answer: 42
80
80
  aggregate: no
81
- '''
81
+ """
ansible/modules/setup.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = '''
9
+ DOCUMENTATION = """
10
10
  ---
11
11
  module: setup
12
12
  version_added: historical
@@ -110,7 +110,7 @@ notes:
110
110
  author:
111
111
  - "Ansible Core Team"
112
112
  - "Michael DeHaan"
113
- '''
113
+ """
114
114
 
115
115
  EXAMPLES = r"""
116
116
  # Display facts from all hosts and store them indexed by `hostname` at `/tmp/facts`.
ansible/modules/shell.py CHANGED
@@ -10,7 +10,7 @@
10
10
  from __future__ import annotations
11
11
 
12
12
 
13
- DOCUMENTATION = r'''
13
+ DOCUMENTATION = r"""
14
14
  ---
15
15
  module: shell
16
16
  short_description: Execute shell commands on targets
@@ -99,9 +99,9 @@ seealso:
99
99
  author:
100
100
  - Ansible Core Team
101
101
  - Michael DeHaan
102
- '''
102
+ """
103
103
 
104
- EXAMPLES = r'''
104
+ EXAMPLES = r"""
105
105
  - name: Execute the command in remote shell; stdout goes to the specified file on the remote
106
106
  ansible.builtin.shell: somescript.sh >> somelog.txt
107
107
 
@@ -150,9 +150,9 @@ EXAMPLES = r'''
150
150
  args:
151
151
  executable: /usr/bin/expect
152
152
  delegate_to: localhost
153
- '''
153
+ """
154
154
 
155
- RETURN = r'''
155
+ RETURN = r"""
156
156
  msg:
157
157
  description: changed
158
158
  returned: always
@@ -203,4 +203,4 @@ stderr_lines:
203
203
  returned: always
204
204
  type: list
205
205
  sample: [u'ls cannot access foo: No such file or directory', u'ls …']
206
- '''
206
+ """
ansible/modules/slurp.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = r'''
9
+ DOCUMENTATION = r"""
10
10
  ---
11
11
  module: slurp
12
12
  version_added: historical
@@ -39,9 +39,9 @@ seealso:
39
39
  author:
40
40
  - Ansible Core Team
41
41
  - Michael DeHaan (@mpdehaan)
42
- '''
42
+ """
43
43
 
44
- EXAMPLES = r'''
44
+ EXAMPLES = r"""
45
45
  - name: Find out what the remote machine's mounts are
46
46
  ansible.builtin.slurp:
47
47
  src: /proc/mounts
@@ -61,9 +61,9 @@ EXAMPLES = r'''
61
61
  # }
62
62
  # $ echo MjE3OQo= | base64 -d
63
63
  # 2179
64
- '''
64
+ """
65
65
 
66
- RETURN = r'''
66
+ RETURN = r"""
67
67
  content:
68
68
  description: Encoded file content
69
69
  returned: success
@@ -79,7 +79,7 @@ source:
79
79
  returned: success
80
80
  type: str
81
81
  sample: "/var/run/sshd.pid"
82
- '''
82
+ """
83
83
 
84
84
  import base64
85
85
  import errno
ansible/modules/stat.py CHANGED
@@ -5,7 +5,7 @@
5
5
  from __future__ import annotations
6
6
 
7
7
 
8
- DOCUMENTATION = r'''
8
+ DOCUMENTATION = r"""
9
9
  ---
10
10
  module: stat
11
11
  version_added: "1.3"
@@ -25,23 +25,6 @@ options:
25
25
  - Whether to follow symlinks.
26
26
  type: bool
27
27
  default: no
28
- get_checksum:
29
- description:
30
- - Whether to return a checksum of the file.
31
- type: bool
32
- default: yes
33
- version_added: "1.8"
34
- checksum_algorithm:
35
- description:
36
- - Algorithm to determine checksum of file.
37
- - Will throw an error if the host is unable to use specified algorithm.
38
- - The remote host has to support the hashing method specified, V(md5)
39
- can be unavailable if the host is FIPS-140 compliant.
40
- type: str
41
- choices: [ md5, sha1, sha224, sha256, sha384, sha512 ]
42
- default: sha1
43
- aliases: [ checksum, checksum_algo ]
44
- version_added: "2.0"
45
28
  get_mime:
46
29
  description:
47
30
  - Use file magic and return data about the nature of the file. This uses
@@ -59,8 +42,11 @@ options:
59
42
  default: yes
60
43
  aliases: [ attr, attributes ]
61
44
  version_added: "2.3"
45
+ get_checksum:
46
+ version_added: "1.8"
62
47
  extends_documentation_fragment:
63
48
  - action_common_attributes
49
+ - checksum_common
64
50
  attributes:
65
51
  check_mode:
66
52
  support: full
@@ -72,9 +58,9 @@ seealso:
72
58
  - module: ansible.builtin.file
73
59
  - module: ansible.windows.win_stat
74
60
  author: Bruce Pennypacker (@bpennypacker)
75
- '''
61
+ """
76
62
 
77
- EXAMPLES = r'''
63
+ EXAMPLES = r"""
78
64
  # Obtain the stats of /etc/foo.conf, and check that the file still belongs
79
65
  # to 'root'. Fail otherwise.
80
66
  - name: Get stats of a file
@@ -137,9 +123,9 @@ EXAMPLES = r'''
137
123
  ansible.builtin.stat:
138
124
  path: /path/to/something
139
125
  checksum_algorithm: sha256
140
- '''
126
+ """
141
127
 
142
- RETURN = r'''
128
+ RETURN = r"""
143
129
  stat:
144
130
  description: Dictionary containing all the stat data, some platforms might add additional fields.
145
131
  returned: success
@@ -366,7 +352,7 @@ stat:
366
352
  type: str
367
353
  sample: "381700746"
368
354
  version_added: 2.3
369
- '''
355
+ """
370
356
 
371
357
  import errno
372
358
  import grp
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = '''
9
+ DOCUMENTATION = """
10
10
  ---
11
11
  module: subversion
12
12
  short_description: Deploys a subversion repository
@@ -106,9 +106,9 @@ notes:
106
106
 
107
107
  requirements:
108
108
  - subversion (the command line tool with C(svn) entrypoint)
109
- '''
109
+ """
110
110
 
111
- EXAMPLES = '''
111
+ EXAMPLES = """
112
112
  - name: Checkout subversion repository to specified folder
113
113
  ansible.builtin.subversion:
114
114
  repo: svn+ssh://an.example.org/path/to/repo
@@ -126,9 +126,9 @@ EXAMPLES = '''
126
126
  dest: /src/checkout
127
127
  checkout: no
128
128
  update: no
129
- '''
129
+ """
130
130
 
131
- RETURN = r'''#'''
131
+ RETURN = r"""#"""
132
132
 
133
133
  import os
134
134
  import re
@@ -161,7 +161,7 @@ class Subversion(object):
161
161
  return LooseVersion(version) >= LooseVersion('1.10.0')
162
162
 
163
163
  def _exec(self, args, check_rc=True):
164
- '''Execute a subversion command, and return output. If check_rc is False, returns the return code instead of the output.'''
164
+ """Execute a subversion command, and return output. If check_rc is False, returns the return code instead of the output."""
165
165
  bits = [
166
166
  self.svn_path,
167
167
  '--non-interactive',
@@ -189,12 +189,12 @@ class Subversion(object):
189
189
  return rc
190
190
 
191
191
  def is_svn_repo(self):
192
- '''Checks if path is a SVN Repo.'''
192
+ """Checks if path is a SVN Repo."""
193
193
  rc = self._exec(["info", self.dest], check_rc=False)
194
194
  return rc == 0
195
195
 
196
196
  def checkout(self, force=False):
197
- '''Creates new svn working directory if it does not already exist.'''
197
+ """Creates new svn working directory if it does not already exist."""
198
198
  cmd = ["checkout"]
199
199
  if force:
200
200
  cmd.append("--force")
@@ -202,7 +202,7 @@ class Subversion(object):
202
202
  self._exec(cmd)
203
203
 
204
204
  def export(self, force=False):
205
- '''Export svn repo to directory'''
205
+ """Export svn repo to directory"""
206
206
  cmd = ["export"]
207
207
  if force:
208
208
  cmd.append("--force")
@@ -211,7 +211,7 @@ class Subversion(object):
211
211
  self._exec(cmd)
212
212
 
213
213
  def switch(self):
214
- '''Change working directory's repo.'''
214
+ """Change working directory's repo."""
215
215
  # switch to ensure we are pointing at correct repo.
216
216
  # it also updates!
217
217
  output = self._exec(["switch", "--revision", self.revision, self.repo, self.dest])
@@ -221,7 +221,7 @@ class Subversion(object):
221
221
  return False
222
222
 
223
223
  def update(self):
224
- '''Update existing svn working directory.'''
224
+ """Update existing svn working directory."""
225
225
  output = self._exec(["update", "-r", self.revision, self.dest])
226
226
 
227
227
  for line in output:
@@ -230,7 +230,7 @@ class Subversion(object):
230
230
  return False
231
231
 
232
232
  def revert(self):
233
- '''Revert svn working directory.'''
233
+ """Revert svn working directory."""
234
234
  output = self._exec(["revert", "-R", self.dest])
235
235
  for line in output:
236
236
  if re.search(r'^Reverted ', line) is None:
@@ -238,7 +238,7 @@ class Subversion(object):
238
238
  return False
239
239
 
240
240
  def get_revision(self):
241
- '''Revision and URL of subversion working directory.'''
241
+ """Revision and URL of subversion working directory."""
242
242
  text = '\n'.join(self._exec(["info", self.dest]))
243
243
  rev = re.search(self.REVISION_RE, text, re.MULTILINE)
244
244
  if rev:
@@ -255,7 +255,7 @@ class Subversion(object):
255
255
  return rev, url
256
256
 
257
257
  def get_remote_revision(self):
258
- '''Revision and URL of subversion working directory.'''
258
+ """Revision and URL of subversion working directory."""
259
259
  text = '\n'.join(self._exec(["info", self.repo]))
260
260
  rev = re.search(self.REVISION_RE, text, re.MULTILINE)
261
261
  if rev:
@@ -265,7 +265,7 @@ class Subversion(object):
265
265
  return rev
266
266
 
267
267
  def has_local_mods(self):
268
- '''True if revisioned files have been added or modified. Unrevisioned files are ignored.'''
268
+ """True if revisioned files have been added or modified. Unrevisioned files are ignored."""
269
269
  lines = self._exec(["status", "--quiet", "--ignore-externals", self.dest])
270
270
  # The --quiet option will return only modified files.
271
271
  # Match only revisioned files, i.e. ignore status '?'.
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = '''
9
+ DOCUMENTATION = """
10
10
  module: systemd_service
11
11
  author:
12
12
  - Ansible Core Team
@@ -98,9 +98,9 @@ notes:
98
98
  It has been reported that C(systemctl) can behave differently depending on the order of operations if you do the same manually.
99
99
  requirements:
100
100
  - A system managed by systemd.
101
- '''
101
+ """
102
102
 
103
- EXAMPLES = '''
103
+ EXAMPLES = """
104
104
  - name: Make sure a service unit is running
105
105
  ansible.builtin.systemd_service:
106
106
  state: started
@@ -149,9 +149,9 @@ EXAMPLES = '''
149
149
  scope: user
150
150
  environment:
151
151
  XDG_RUNTIME_DIR: "/run/user/{{ myuid }}"
152
- '''
152
+ """
153
153
 
154
- RETURN = '''
154
+ RETURN = """
155
155
  status:
156
156
  description: A dictionary with the key=value pairs returned from C(systemctl show).
157
157
  returned: success
@@ -279,7 +279,7 @@ status:
279
279
  "WatchdogTimestampMonotonic": "0",
280
280
  "WatchdogUSec": "0",
281
281
  }
282
- ''' # NOQA
282
+ """ # NOQA
283
283
 
284
284
  import os
285
285
 
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = '''
9
+ DOCUMENTATION = """
10
10
  module: systemd_service
11
11
  author:
12
12
  - Ansible Core Team
@@ -98,9 +98,9 @@ notes:
98
98
  It has been reported that C(systemctl) can behave differently depending on the order of operations if you do the same manually.
99
99
  requirements:
100
100
  - A system managed by systemd.
101
- '''
101
+ """
102
102
 
103
- EXAMPLES = '''
103
+ EXAMPLES = """
104
104
  - name: Make sure a service unit is running
105
105
  ansible.builtin.systemd_service:
106
106
  state: started
@@ -149,9 +149,9 @@ EXAMPLES = '''
149
149
  scope: user
150
150
  environment:
151
151
  XDG_RUNTIME_DIR: "/run/user/{{ myuid }}"
152
- '''
152
+ """
153
153
 
154
- RETURN = '''
154
+ RETURN = """
155
155
  status:
156
156
  description: A dictionary with the key=value pairs returned from C(systemctl show).
157
157
  returned: success
@@ -279,7 +279,7 @@ status:
279
279
  "WatchdogTimestampMonotonic": "0",
280
280
  "WatchdogUSec": "0",
281
281
  }
282
- ''' # NOQA
282
+ """ # NOQA
283
283
 
284
284
  import os
285
285
 
@@ -7,7 +7,7 @@
7
7
  from __future__ import annotations
8
8
 
9
9
 
10
- DOCUMENTATION = '''
10
+ DOCUMENTATION = """
11
11
  module: sysvinit
12
12
  author:
13
13
  - "Ansible Core Team"
@@ -77,9 +77,9 @@ notes:
77
77
  - The service names might vary by specific OS/distribution.
78
78
  requirements:
79
79
  - That the service managed has a corresponding init script.
80
- '''
80
+ """
81
81
 
82
- EXAMPLES = '''
82
+ EXAMPLES = """
83
83
  - name: Make sure apache2 is started
84
84
  ansible.builtin.sysvinit:
85
85
  name: apache2
@@ -100,9 +100,9 @@ EXAMPLES = '''
100
100
  runlevels:
101
101
  - 3
102
102
  - 5
103
- '''
103
+ """
104
104
 
105
- RETURN = r'''
105
+ RETURN = r"""
106
106
  results:
107
107
  description: results from actions taken
108
108
  returned: always
@@ -131,7 +131,7 @@ results:
131
131
  "stdout": "Stopping web server: apache2.\n"
132
132
  }
133
133
  }
134
- '''
134
+ """
135
135
 
136
136
  import re
137
137
  from time import sleep
@@ -7,7 +7,7 @@
7
7
  from __future__ import annotations
8
8
 
9
9
 
10
- DOCUMENTATION = '''
10
+ DOCUMENTATION = """
11
11
  ---
12
12
  module: tempfile
13
13
  version_added: "2.3"
@@ -53,7 +53,7 @@ seealso:
53
53
  - module: ansible.windows.win_tempfile
54
54
  author:
55
55
  - Krzysztof Magosa (@krzysztof-magosa)
56
- '''
56
+ """
57
57
 
58
58
  EXAMPLES = """
59
59
  - name: Create temporary build directory
@@ -80,17 +80,16 @@ EXAMPLES = """
80
80
  when: tempfile_1.path is defined
81
81
  """
82
82
 
83
- RETURN = '''
83
+ RETURN = """
84
84
  path:
85
85
  description: Path to created file or directory.
86
86
  returned: success
87
87
  type: str
88
88
  sample: "/tmp/ansible.bMlvdk"
89
- '''
89
+ """
90
90
 
91
91
  from os import close
92
92
  from tempfile import mkstemp, mkdtemp
93
- from traceback import format_exc
94
93
 
95
94
  from ansible.module_utils.basic import AnsibleModule
96
95
  from ansible.module_utils.common.text.converters import to_native
@@ -123,7 +122,7 @@ def main():
123
122
 
124
123
  module.exit_json(changed=True, path=path)
125
124
  except Exception as e:
126
- module.fail_json(msg=to_native(e), exception=format_exc())
125
+ module.fail_json(msg=to_native(e))
127
126
 
128
127
 
129
128
  if __name__ == '__main__':
@@ -8,7 +8,7 @@
8
8
  from __future__ import annotations
9
9
 
10
10
 
11
- DOCUMENTATION = r'''
11
+ DOCUMENTATION = r"""
12
12
  ---
13
13
  module: template
14
14
  version_added: historical
@@ -60,9 +60,9 @@ attributes:
60
60
  support: full
61
61
  vault:
62
62
  support: full
63
- '''
63
+ """
64
64
 
65
- EXAMPLES = r'''
65
+ EXAMPLES = r"""
66
66
  - name: Template a file to /etc/file.conf
67
67
  ansible.builtin.template:
68
68
  src: /mytemplates/foo.j2
@@ -108,9 +108,9 @@ EXAMPLES = r'''
108
108
  mode: '0600'
109
109
  validate: /usr/sbin/sshd -t -f %s
110
110
  backup: yes
111
- '''
111
+ """
112
112
 
113
- RETURN = r'''
113
+ RETURN = r"""
114
114
  dest:
115
115
  description: Destination file/path, equal to the value passed to I(dest).
116
116
  returned: success
@@ -161,4 +161,4 @@ src:
161
161
  returned: changed
162
162
  type: str
163
163
  sample: /home/httpd/.ansible/tmp/ansible-tmp-1423796390.97-147729857856000/source
164
- '''
164
+ """
@@ -10,7 +10,7 @@
10
10
  from __future__ import annotations
11
11
 
12
12
 
13
- DOCUMENTATION = r'''
13
+ DOCUMENTATION = r"""
14
14
  ---
15
15
  module: unarchive
16
16
  version_added: '1.4'
@@ -150,9 +150,9 @@ seealso:
150
150
  - module: community.general.iso_extract
151
151
  - module: community.windows.win_unzip
152
152
  author: Michael DeHaan
153
- '''
153
+ """
154
154
 
155
- EXAMPLES = r'''
155
+ EXAMPLES = r"""
156
156
  - name: Extract foo.tgz into /var/lib/foo
157
157
  ansible.builtin.unarchive:
158
158
  src: foo.tgz
@@ -177,9 +177,9 @@ EXAMPLES = r'''
177
177
  extra_opts:
178
178
  - --transform
179
179
  - s/^xxx/yyy/
180
- '''
180
+ """
181
181
 
182
- RETURN = r'''
182
+ RETURN = r"""
183
183
  dest:
184
184
  description: Path to the destination directory.
185
185
  returned: always
@@ -237,10 +237,11 @@ uid:
237
237
  returned: always
238
238
  type: int
239
239
  sample: 1000
240
- '''
240
+ """
241
241
 
242
242
  import binascii
243
243
  import codecs
244
+ import ctypes
244
245
  import fnmatch
245
246
  import grp
246
247
  import os
@@ -249,7 +250,6 @@ import pwd
249
250
  import re
250
251
  import stat
251
252
  import time
252
- import traceback
253
253
  from functools import partial
254
254
  from zipfile import ZipFile
255
255
 
@@ -262,6 +262,13 @@ from ansible.module_utils.urls import fetch_file
262
262
  from shlex import quote
263
263
  from zipfile import BadZipFile
264
264
 
265
+ try:
266
+ from functools import cache
267
+ except ImportError:
268
+ # Python < 3.9
269
+ from functools import lru_cache
270
+ cache = lru_cache(maxsize=None)
271
+
265
272
  # String from tar that shows the tar contents are different from the
266
273
  # filesystem
267
274
  OWNER_DIFF_RE = re.compile(r': Uid differs$')
@@ -279,8 +286,20 @@ CONTENT_DIFF_RE = re.compile(r': Contents differ$')
279
286
  SIZE_DIFF_RE = re.compile(r': Size differs$')
280
287
 
281
288
 
289
+ @cache
290
+ def _y2038_impacted():
291
+ """Determine if the system has 64-bit time_t."""
292
+ if hasattr(ctypes, "c_time_t"): # Python >= 3.12
293
+ return ctypes.sizeof(ctypes.c_time_t) < 8
294
+ try:
295
+ time.gmtime(2**31)
296
+ except OverflowError:
297
+ return True
298
+ return False
299
+
300
+
282
301
  def crc32(path, buffer_size):
283
- ''' Return a CRC32 checksum of a file '''
302
+ """ Return a CRC32 checksum of a file """
284
303
 
285
304
  crc = binascii.crc32(b'')
286
305
  with open(path, 'rb') as f:
@@ -290,7 +309,7 @@ def crc32(path, buffer_size):
290
309
 
291
310
 
292
311
  def shell_escape(string):
293
- ''' Quote meta-characters in the args for the unix shell '''
312
+ """ Quote meta-characters in the args for the unix shell """
294
313
  return re.sub(r'([^A-Za-z0-9_])', r'\\\1', string)
295
314
 
296
315
 
@@ -321,7 +340,7 @@ class ZipArchive(object):
321
340
  )
322
341
 
323
342
  def _permstr_to_octal(self, modestr, umask):
324
- ''' Convert a Unix permission string (rw-r--r--) into a mode (0644) '''
343
+ """ Convert a Unix permission string (rw-r--r--) into a mode (0644) """
325
344
  revstr = modestr[::-1]
326
345
  mode = 0
327
346
  for j in range(0, 3):
@@ -414,6 +433,8 @@ class ZipArchive(object):
414
433
  try:
415
434
  if int(match.groups()[0]) < 1980:
416
435
  date_time = epoch_date_time
436
+ elif int(match.groups()[0]) >= 2038 and _y2038_impacted():
437
+ date_time = (2038, 1, 1, 0, 0, 0, 0, 0, 0)
417
438
  elif int(match.groups()[0]) > 2107:
418
439
  date_time = (2107, 12, 31, 23, 59, 59, 0, 0, 0)
419
440
  else:
@@ -676,7 +697,7 @@ class ZipArchive(object):
676
697
  try:
677
698
  mode = AnsibleModule._symbolic_mode_to_octal(st, self.file_args['mode'])
678
699
  except ValueError as e:
679
- self.module.fail_json(path=path, msg="%s" % to_native(e), exception=traceback.format_exc())
700
+ self.module.fail_json(path=path, msg="%s" % to_native(e))
680
701
  # Only special files require no umask-handling
681
702
  elif ztype == '?':
682
703
  mode = self._permstr_to_octal(permstr, 0)