ansible-core 2.16.5rc1__py3-none-any.whl → 2.17.0b1__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 (597) hide show
  1. ansible/__init__.py +1 -3
  2. ansible/__main__.py +1 -0
  3. ansible/_vendor/__init__.py +1 -2
  4. ansible/cli/__init__.py +7 -8
  5. ansible/cli/adhoc.py +1 -2
  6. ansible/cli/arguments/__init__.py +1 -2
  7. ansible/cli/arguments/option_helpers.py +1 -2
  8. ansible/cli/config.py +1 -2
  9. ansible/cli/console.py +1 -2
  10. ansible/cli/doc.py +320 -198
  11. ansible/cli/galaxy.py +9 -3
  12. ansible/cli/inventory.py +5 -27
  13. ansible/cli/playbook.py +1 -2
  14. ansible/cli/pull.py +4 -5
  15. ansible/cli/scripts/ansible_connection_cli_stub.py +1 -4
  16. ansible/cli/vault.py +1 -2
  17. ansible/collections/list.py +1 -0
  18. ansible/compat/__init__.py +1 -4
  19. ansible/compat/importlib_resources.py +1 -2
  20. ansible/compat/{selectors/__init__.py → selectors.py} +12 -12
  21. ansible/config/ansible_builtin_runtime.yml +2 -0
  22. ansible/config/base.yml +154 -149
  23. ansible/config/manager.py +32 -25
  24. ansible/constants.py +41 -2
  25. ansible/context.py +1 -4
  26. ansible/errors/__init__.py +1 -3
  27. ansible/errors/yaml_strings.py +1 -3
  28. ansible/executor/__init__.py +1 -3
  29. ansible/executor/discovery/python_target.py +1 -2
  30. ansible/executor/interpreter_discovery.py +9 -8
  31. ansible/executor/module_common.py +1 -3
  32. ansible/executor/play_iterator.py +1 -3
  33. ansible/executor/playbook_executor.py +1 -3
  34. ansible/executor/powershell/module_manifest.py +2 -3
  35. ansible/executor/process/__init__.py +1 -3
  36. ansible/executor/process/worker.py +1 -3
  37. ansible/executor/stats.py +1 -3
  38. ansible/executor/task_executor.py +10 -5
  39. ansible/executor/task_queue_manager.py +1 -3
  40. ansible/executor/task_result.py +2 -3
  41. ansible/galaxy/__init__.py +1 -2
  42. ansible/galaxy/api.py +10 -2
  43. ansible/galaxy/collection/__init__.py +38 -24
  44. ansible/galaxy/collection/concrete_artifact_manager.py +1 -2
  45. ansible/galaxy/collection/galaxy_api_proxy.py +1 -2
  46. ansible/galaxy/collection/gpg.py +4 -2
  47. ansible/galaxy/data/apb/meta/main.yml.j2 +0 -15
  48. ansible/galaxy/data/container/meta/main.yml.j2 +0 -18
  49. ansible/galaxy/data/default/role/meta/main.yml.j2 +0 -18
  50. ansible/galaxy/data/network/cliconf_plugins/example.py.j2 +1 -2
  51. ansible/galaxy/data/network/library/example_command.py.j2 +1 -2
  52. ansible/galaxy/data/network/library/example_config.py.j2 +1 -2
  53. ansible/galaxy/data/network/library/example_facts.py.j2 +1 -2
  54. ansible/galaxy/data/network/meta/main.yml.j2 +0 -15
  55. ansible/galaxy/data/network/module_utils/example.py.j2 +1 -2
  56. ansible/galaxy/data/network/netconf_plugins/example.py.j2 +1 -2
  57. ansible/galaxy/data/network/terminal_plugins/example.py.j2 +1 -2
  58. ansible/galaxy/dependency_resolution/__init__.py +1 -2
  59. ansible/galaxy/dependency_resolution/dataclasses.py +5 -6
  60. ansible/galaxy/dependency_resolution/errors.py +1 -2
  61. ansible/galaxy/dependency_resolution/providers.py +3 -4
  62. ansible/galaxy/dependency_resolution/reporters.py +2 -3
  63. ansible/galaxy/dependency_resolution/resolvers.py +1 -2
  64. ansible/galaxy/dependency_resolution/versioning.py +1 -2
  65. ansible/galaxy/role.py +2 -3
  66. ansible/galaxy/token.py +1 -2
  67. ansible/galaxy/user_agent.py +1 -2
  68. ansible/inventory/data.py +1 -2
  69. ansible/inventory/group.py +1 -2
  70. ansible/inventory/helpers.py +1 -2
  71. ansible/inventory/host.py +1 -3
  72. ansible/inventory/manager.py +1 -2
  73. ansible/module_utils/_text.py +1 -2
  74. ansible/module_utils/ansible_release.py +3 -5
  75. ansible/module_utils/api.py +1 -2
  76. ansible/module_utils/basic.py +113 -158
  77. ansible/module_utils/common/_collections_compat.py +1 -2
  78. ansible/module_utils/common/_utils.py +1 -3
  79. ansible/module_utils/common/arg_spec.py +1 -2
  80. ansible/module_utils/common/collections.py +1 -2
  81. ansible/module_utils/common/dict_transformations.py +1 -2
  82. ansible/module_utils/common/file.py +10 -5
  83. ansible/module_utils/common/json.py +1 -3
  84. ansible/module_utils/common/locale.py +1 -2
  85. ansible/module_utils/common/network.py +2 -3
  86. ansible/module_utils/common/parameters.py +9 -9
  87. ansible/module_utils/common/process.py +12 -5
  88. ansible/module_utils/common/respawn.py +2 -3
  89. ansible/module_utils/common/sys_info.py +1 -2
  90. ansible/module_utils/common/text/converters.py +1 -2
  91. ansible/module_utils/common/text/formatters.py +1 -2
  92. ansible/module_utils/common/validation.py +5 -6
  93. ansible/module_utils/common/warnings.py +1 -2
  94. ansible/module_utils/common/yaml.py +1 -2
  95. ansible/module_utils/compat/datetime.py +1 -3
  96. ansible/module_utils/compat/importlib.py +21 -13
  97. ansible/module_utils/compat/paramiko.py +1 -2
  98. ansible/module_utils/compat/selectors.py +10 -34
  99. ansible/module_utils/compat/selinux.py +1 -2
  100. ansible/module_utils/compat/typing.py +1 -2
  101. ansible/module_utils/compat/version.py +1 -2
  102. ansible/module_utils/connection.py +1 -2
  103. ansible/module_utils/csharp/Ansible.Basic.cs +20 -3
  104. ansible/module_utils/distro/__init__.py +2 -3
  105. ansible/module_utils/distro/_distro.py +230 -234
  106. ansible/module_utils/errors.py +1 -2
  107. ansible/module_utils/facts/__init__.py +1 -2
  108. ansible/module_utils/facts/ansible_collector.py +1 -2
  109. ansible/module_utils/facts/collector.py +1 -2
  110. ansible/module_utils/facts/compat.py +1 -2
  111. ansible/module_utils/facts/default_collectors.py +1 -2
  112. ansible/module_utils/facts/hardware/aix.py +1 -2
  113. ansible/module_utils/facts/hardware/base.py +1 -2
  114. ansible/module_utils/facts/hardware/darwin.py +1 -2
  115. ansible/module_utils/facts/hardware/dragonfly.py +1 -2
  116. ansible/module_utils/facts/hardware/freebsd.py +1 -2
  117. ansible/module_utils/facts/hardware/hpux.py +1 -2
  118. ansible/module_utils/facts/hardware/hurd.py +1 -2
  119. ansible/module_utils/facts/hardware/linux.py +8 -6
  120. ansible/module_utils/facts/hardware/netbsd.py +1 -2
  121. ansible/module_utils/facts/hardware/openbsd.py +1 -2
  122. ansible/module_utils/facts/hardware/sunos.py +2 -3
  123. ansible/module_utils/facts/namespace.py +1 -2
  124. ansible/module_utils/facts/network/aix.py +1 -2
  125. ansible/module_utils/facts/network/base.py +1 -2
  126. ansible/module_utils/facts/network/darwin.py +1 -2
  127. ansible/module_utils/facts/network/dragonfly.py +1 -2
  128. ansible/module_utils/facts/network/fc_wwn.py +1 -2
  129. ansible/module_utils/facts/network/freebsd.py +1 -2
  130. ansible/module_utils/facts/network/generic_bsd.py +1 -2
  131. ansible/module_utils/facts/network/hpux.py +1 -2
  132. ansible/module_utils/facts/network/hurd.py +1 -2
  133. ansible/module_utils/facts/network/iscsi.py +1 -2
  134. ansible/module_utils/facts/network/linux.py +1 -2
  135. ansible/module_utils/facts/network/netbsd.py +1 -2
  136. ansible/module_utils/facts/network/nvme.py +1 -2
  137. ansible/module_utils/facts/network/openbsd.py +1 -2
  138. ansible/module_utils/facts/network/sunos.py +1 -2
  139. ansible/module_utils/facts/other/facter.py +1 -2
  140. ansible/module_utils/facts/other/ohai.py +1 -2
  141. ansible/module_utils/facts/packages.py +1 -2
  142. ansible/module_utils/facts/sysctl.py +1 -2
  143. ansible/module_utils/facts/system/apparmor.py +1 -2
  144. ansible/module_utils/facts/system/caps.py +1 -2
  145. ansible/module_utils/facts/system/chroot.py +1 -2
  146. ansible/module_utils/facts/system/cmdline.py +1 -2
  147. ansible/module_utils/facts/system/date_time.py +1 -2
  148. ansible/module_utils/facts/system/distribution.py +4 -5
  149. ansible/module_utils/facts/system/dns.py +1 -2
  150. ansible/module_utils/facts/system/env.py +1 -2
  151. ansible/module_utils/facts/system/fips.py +1 -2
  152. ansible/module_utils/facts/system/loadavg.py +1 -2
  153. ansible/module_utils/facts/system/local.py +1 -2
  154. ansible/module_utils/facts/system/lsb.py +1 -2
  155. ansible/module_utils/facts/system/pkg_mgr.py +7 -30
  156. ansible/module_utils/facts/system/platform.py +1 -2
  157. ansible/module_utils/facts/system/python.py +1 -2
  158. ansible/module_utils/facts/system/selinux.py +1 -2
  159. ansible/module_utils/facts/system/service_mgr.py +1 -2
  160. ansible/module_utils/facts/system/ssh_pub_keys.py +1 -2
  161. ansible/module_utils/facts/system/user.py +1 -2
  162. ansible/module_utils/facts/timeout.py +1 -2
  163. ansible/module_utils/facts/utils.py +1 -2
  164. ansible/module_utils/facts/virtual/base.py +1 -2
  165. ansible/module_utils/facts/virtual/dragonfly.py +1 -2
  166. ansible/module_utils/facts/virtual/freebsd.py +1 -2
  167. ansible/module_utils/facts/virtual/hpux.py +1 -2
  168. ansible/module_utils/facts/virtual/linux.py +2 -3
  169. ansible/module_utils/facts/virtual/netbsd.py +1 -2
  170. ansible/module_utils/facts/virtual/openbsd.py +1 -2
  171. ansible/module_utils/facts/virtual/sunos.py +1 -2
  172. ansible/module_utils/facts/virtual/sysctl.py +1 -2
  173. ansible/module_utils/json_utils.py +1 -2
  174. ansible/module_utils/parsing/convert_bool.py +1 -2
  175. ansible/module_utils/powershell/Ansible.ModuleUtils.Legacy.psm1 +5 -2
  176. ansible/module_utils/powershell/Ansible.ModuleUtils.WebRequest.psm1 +1 -1
  177. ansible/module_utils/pycompat24.py +24 -4
  178. ansible/module_utils/service.py +31 -5
  179. ansible/module_utils/six/__init__.py +1 -1
  180. ansible/module_utils/splitter.py +1 -2
  181. ansible/module_utils/urls.py +335 -1052
  182. ansible/module_utils/yumdnf.py +13 -35
  183. ansible/modules/add_host.py +1 -2
  184. ansible/modules/apt.py +38 -22
  185. ansible/modules/apt_key.py +1 -2
  186. ansible/modules/apt_repository.py +18 -10
  187. ansible/modules/assemble.py +1 -2
  188. ansible/modules/assert.py +8 -4
  189. ansible/modules/async_status.py +17 -14
  190. ansible/modules/async_wrapper.py +11 -9
  191. ansible/modules/blockinfile.py +3 -4
  192. ansible/modules/command.py +1 -2
  193. ansible/modules/copy.py +4 -76
  194. ansible/modules/cron.py +3 -3
  195. ansible/modules/deb822_repository.py +5 -5
  196. ansible/modules/debconf.py +19 -8
  197. ansible/modules/debug.py +1 -2
  198. ansible/modules/dnf.py +63 -188
  199. ansible/modules/dnf5.py +57 -43
  200. ansible/modules/dpkg_selections.py +1 -2
  201. ansible/modules/expect.py +23 -15
  202. ansible/modules/fail.py +1 -2
  203. ansible/modules/fetch.py +1 -2
  204. ansible/modules/file.py +4 -3
  205. ansible/modules/find.py +25 -9
  206. ansible/modules/gather_facts.py +1 -2
  207. ansible/modules/get_url.py +2 -3
  208. ansible/modules/getent.py +2 -3
  209. ansible/modules/git.py +28 -17
  210. ansible/modules/group.py +1 -2
  211. ansible/modules/group_by.py +1 -2
  212. ansible/modules/hostname.py +2 -19
  213. ansible/modules/import_playbook.py +1 -2
  214. ansible/modules/import_role.py +9 -2
  215. ansible/modules/import_tasks.py +1 -2
  216. ansible/modules/include_role.py +1 -2
  217. ansible/modules/include_tasks.py +1 -2
  218. ansible/modules/include_vars.py +1 -2
  219. ansible/modules/iptables.py +38 -21
  220. ansible/modules/known_hosts.py +15 -8
  221. ansible/modules/lineinfile.py +1 -6
  222. ansible/modules/meta.py +3 -2
  223. ansible/modules/package.py +6 -5
  224. ansible/modules/package_facts.py +1 -2
  225. ansible/modules/pause.py +2 -3
  226. ansible/modules/ping.py +1 -2
  227. ansible/modules/pip.py +40 -20
  228. ansible/modules/raw.py +1 -2
  229. ansible/modules/reboot.py +1 -2
  230. ansible/modules/replace.py +7 -5
  231. ansible/modules/rpm_key.py +1 -2
  232. ansible/modules/script.py +1 -2
  233. ansible/modules/service.py +3 -21
  234. ansible/modules/service_facts.py +3 -12
  235. ansible/modules/set_fact.py +1 -2
  236. ansible/modules/set_stats.py +1 -2
  237. ansible/modules/setup.py +1 -2
  238. ansible/modules/shell.py +1 -2
  239. ansible/modules/slurp.py +1 -2
  240. ansible/modules/stat.py +1 -2
  241. ansible/modules/subversion.py +2 -3
  242. ansible/modules/systemd.py +12 -9
  243. ansible/modules/systemd_service.py +12 -9
  244. ansible/modules/sysvinit.py +7 -2
  245. ansible/modules/tempfile.py +7 -2
  246. ansible/modules/template.py +2 -3
  247. ansible/modules/unarchive.py +14 -4
  248. ansible/modules/uri.py +5 -8
  249. ansible/modules/user.py +11 -10
  250. ansible/modules/validate_argument_spec.py +15 -16
  251. ansible/modules/wait_for.py +1 -2
  252. ansible/modules/wait_for_connection.py +1 -2
  253. ansible/modules/yum_repository.py +2 -3
  254. ansible/parsing/__init__.py +1 -3
  255. ansible/parsing/ajson.py +1 -3
  256. ansible/parsing/dataloader.py +23 -12
  257. ansible/parsing/mod_args.py +14 -8
  258. ansible/parsing/plugin_docs.py +1 -2
  259. ansible/parsing/quoting.py +1 -3
  260. ansible/parsing/splitter.py +1 -3
  261. ansible/parsing/utils/__init__.py +1 -3
  262. ansible/parsing/utils/addresses.py +1 -3
  263. ansible/parsing/utils/jsonify.py +1 -3
  264. ansible/parsing/utils/yaml.py +1 -3
  265. ansible/parsing/vault/__init__.py +6 -8
  266. ansible/parsing/yaml/__init__.py +1 -3
  267. ansible/parsing/yaml/constructor.py +1 -3
  268. ansible/parsing/yaml/dumper.py +1 -3
  269. ansible/parsing/yaml/loader.py +1 -3
  270. ansible/parsing/yaml/objects.py +1 -3
  271. ansible/playbook/__init__.py +1 -3
  272. ansible/playbook/attribute.py +1 -3
  273. ansible/playbook/base.py +2 -3
  274. ansible/playbook/block.py +1 -3
  275. ansible/playbook/collectionsearch.py +1 -2
  276. ansible/playbook/conditional.py +1 -3
  277. ansible/playbook/delegatable.py +1 -0
  278. ansible/playbook/handler.py +2 -4
  279. ansible/playbook/handler_task_include.py +1 -3
  280. ansible/playbook/helpers.py +1 -4
  281. ansible/playbook/included_file.py +4 -4
  282. ansible/playbook/loop_control.py +1 -3
  283. ansible/playbook/notifiable.py +1 -0
  284. ansible/playbook/play.py +1 -3
  285. ansible/playbook/play_context.py +1 -3
  286. ansible/playbook/playbook_include.py +1 -3
  287. ansible/playbook/role/__init__.py +2 -4
  288. ansible/playbook/role/definition.py +1 -3
  289. ansible/playbook/role/include.py +1 -3
  290. ansible/playbook/role/metadata.py +1 -3
  291. ansible/playbook/role/requirement.py +1 -3
  292. ansible/playbook/role_include.py +2 -10
  293. ansible/playbook/taggable.py +1 -3
  294. ansible/playbook/task.py +2 -4
  295. ansible/playbook/task_include.py +1 -3
  296. ansible/plugins/__init__.py +4 -5
  297. ansible/plugins/action/__init__.py +20 -14
  298. ansible/plugins/action/add_host.py +2 -4
  299. ansible/plugins/action/assemble.py +2 -3
  300. ansible/plugins/action/assert.py +1 -2
  301. ansible/plugins/action/async_status.py +1 -2
  302. ansible/plugins/action/command.py +1 -2
  303. ansible/plugins/action/copy.py +12 -9
  304. ansible/plugins/action/debug.py +1 -2
  305. ansible/plugins/action/dnf.py +4 -4
  306. ansible/plugins/action/fail.py +1 -2
  307. ansible/plugins/action/fetch.py +6 -3
  308. ansible/plugins/action/gather_facts.py +3 -4
  309. ansible/plugins/action/group_by.py +1 -2
  310. ansible/plugins/action/include_vars.py +1 -2
  311. ansible/plugins/action/normal.py +1 -2
  312. ansible/plugins/action/package.py +36 -21
  313. ansible/plugins/action/pause.py +1 -2
  314. ansible/plugins/action/raw.py +2 -3
  315. ansible/plugins/action/reboot.py +30 -15
  316. ansible/plugins/action/script.py +3 -4
  317. ansible/plugins/action/service.py +1 -2
  318. ansible/plugins/action/set_fact.py +1 -2
  319. ansible/plugins/action/set_stats.py +1 -2
  320. ansible/plugins/action/shell.py +1 -2
  321. ansible/plugins/action/template.py +1 -2
  322. ansible/plugins/action/unarchive.py +1 -2
  323. ansible/plugins/action/uri.py +2 -3
  324. ansible/plugins/action/validate_argument_spec.py +1 -2
  325. ansible/plugins/action/wait_for_connection.py +2 -3
  326. ansible/plugins/become/__init__.py +1 -2
  327. ansible/plugins/become/runas.py +1 -2
  328. ansible/plugins/become/su.py +1 -2
  329. ansible/plugins/become/sudo.py +1 -2
  330. ansible/plugins/cache/__init__.py +3 -2
  331. ansible/plugins/cache/base.py +1 -2
  332. ansible/plugins/cache/jsonfile.py +1 -3
  333. ansible/plugins/cache/memory.py +1 -2
  334. ansible/plugins/callback/__init__.py +2 -4
  335. ansible/plugins/callback/default.py +2 -3
  336. ansible/plugins/callback/junit.py +1 -2
  337. ansible/plugins/callback/minimal.py +1 -3
  338. ansible/plugins/callback/oneline.py +1 -3
  339. ansible/plugins/callback/tree.py +1 -2
  340. ansible/plugins/cliconf/__init__.py +1 -2
  341. ansible/plugins/connection/__init__.py +4 -5
  342. ansible/plugins/connection/local.py +3 -4
  343. ansible/plugins/connection/paramiko_ssh.py +1 -2
  344. ansible/plugins/connection/psrp.py +1 -2
  345. ansible/plugins/connection/ssh.py +18 -54
  346. ansible/plugins/connection/winrm.py +17 -6
  347. ansible/plugins/doc_fragments/action_common_attributes.py +2 -3
  348. ansible/plugins/doc_fragments/action_core.py +3 -4
  349. ansible/plugins/doc_fragments/backup.py +1 -2
  350. ansible/plugins/doc_fragments/connection_pipelining.py +1 -2
  351. ansible/plugins/doc_fragments/constructed.py +1 -2
  352. ansible/plugins/doc_fragments/decrypt.py +2 -3
  353. ansible/plugins/doc_fragments/default_callback.py +1 -2
  354. ansible/plugins/doc_fragments/files.py +1 -2
  355. ansible/plugins/doc_fragments/inventory_cache.py +1 -2
  356. ansible/plugins/doc_fragments/result_format_callback.py +1 -2
  357. ansible/plugins/doc_fragments/return_common.py +1 -2
  358. ansible/plugins/doc_fragments/shell_common.py +1 -2
  359. ansible/plugins/doc_fragments/shell_windows.py +1 -2
  360. ansible/plugins/doc_fragments/template_common.py +1 -2
  361. ansible/plugins/doc_fragments/url.py +1 -2
  362. ansible/plugins/doc_fragments/url_windows.py +1 -2
  363. ansible/plugins/doc_fragments/validate.py +1 -2
  364. ansible/plugins/doc_fragments/vars_plugin_staging.py +1 -2
  365. ansible/plugins/filter/__init__.py +1 -2
  366. ansible/plugins/filter/b64decode.yml +8 -8
  367. ansible/plugins/filter/b64encode.yml +4 -4
  368. ansible/plugins/filter/comment.yml +1 -1
  369. ansible/plugins/filter/core.py +11 -9
  370. ansible/plugins/filter/encryption.py +1 -3
  371. ansible/plugins/filter/extract.yml +1 -1
  372. ansible/plugins/filter/from_yaml_all.yml +1 -1
  373. ansible/plugins/filter/human_readable.yml +3 -3
  374. ansible/plugins/filter/human_to_bytes.yml +2 -2
  375. ansible/plugins/filter/mandatory.yml +1 -1
  376. ansible/plugins/filter/mathstuff.py +2 -2
  377. ansible/plugins/filter/password_hash.yml +3 -2
  378. ansible/plugins/filter/regex_replace.yml +15 -0
  379. ansible/plugins/filter/regex_search.yml +12 -0
  380. ansible/plugins/filter/strftime.yml +2 -9
  381. ansible/plugins/filter/to_datetime.yml +17 -2
  382. ansible/plugins/filter/to_nice_json.yml +4 -0
  383. ansible/plugins/filter/union.yml +1 -1
  384. ansible/plugins/filter/urls.py +1 -2
  385. ansible/plugins/filter/urlsplit.py +1 -2
  386. ansible/plugins/filter/zip.yml +2 -2
  387. ansible/plugins/filter/zip_longest.yml +1 -1
  388. ansible/plugins/httpapi/__init__.py +1 -2
  389. ansible/plugins/inventory/__init__.py +2 -4
  390. ansible/plugins/inventory/advanced_host_list.py +1 -2
  391. ansible/plugins/inventory/auto.py +2 -3
  392. ansible/plugins/inventory/constructed.py +3 -2
  393. ansible/plugins/inventory/generator.py +1 -2
  394. ansible/plugins/inventory/host_list.py +1 -2
  395. ansible/plugins/inventory/ini.py +1 -2
  396. ansible/plugins/inventory/script.py +122 -3
  397. ansible/plugins/inventory/toml.py +1 -2
  398. ansible/plugins/inventory/yaml.py +3 -4
  399. ansible/plugins/list.py +2 -3
  400. ansible/plugins/loader.py +10 -11
  401. ansible/plugins/lookup/__init__.py +1 -3
  402. ansible/plugins/lookup/config.py +19 -15
  403. ansible/plugins/lookup/csvfile.py +16 -7
  404. ansible/plugins/lookup/dict.py +2 -3
  405. ansible/plugins/lookup/env.py +4 -4
  406. ansible/plugins/lookup/file.py +1 -2
  407. ansible/plugins/lookup/fileglob.py +1 -2
  408. ansible/plugins/lookup/first_found.py +8 -7
  409. ansible/plugins/lookup/indexed_items.py +1 -2
  410. ansible/plugins/lookup/ini.py +6 -3
  411. ansible/plugins/lookup/inventory_hostnames.py +1 -2
  412. ansible/plugins/lookup/items.py +1 -2
  413. ansible/plugins/lookup/lines.py +1 -2
  414. ansible/plugins/lookup/list.py +1 -3
  415. ansible/plugins/lookup/nested.py +1 -2
  416. ansible/plugins/lookup/password.py +16 -14
  417. ansible/plugins/lookup/pipe.py +1 -2
  418. ansible/plugins/lookup/random_choice.py +1 -2
  419. ansible/plugins/lookup/sequence.py +21 -52
  420. ansible/plugins/lookup/subelements.py +1 -2
  421. ansible/plugins/lookup/template.py +1 -2
  422. ansible/plugins/lookup/together.py +1 -2
  423. ansible/plugins/lookup/unvault.py +1 -2
  424. ansible/plugins/lookup/url.py +9 -3
  425. ansible/plugins/lookup/varnames.py +1 -2
  426. ansible/plugins/lookup/vars.py +1 -2
  427. ansible/plugins/netconf/__init__.py +1 -2
  428. ansible/plugins/shell/__init__.py +3 -4
  429. ansible/plugins/shell/cmd.py +1 -2
  430. ansible/plugins/shell/powershell.py +1 -2
  431. ansible/plugins/shell/sh.py +1 -2
  432. ansible/plugins/strategy/__init__.py +33 -21
  433. ansible/plugins/strategy/debug.py +1 -2
  434. ansible/plugins/strategy/free.py +18 -8
  435. ansible/plugins/strategy/host_pinned.py +1 -3
  436. ansible/plugins/strategy/linear.py +23 -23
  437. ansible/plugins/terminal/__init__.py +2 -3
  438. ansible/plugins/test/__init__.py +1 -2
  439. ansible/plugins/test/change.yml +1 -1
  440. ansible/plugins/test/changed.yml +1 -1
  441. ansible/plugins/test/contains.yml +1 -1
  442. ansible/plugins/test/core.py +2 -4
  443. ansible/plugins/test/exists.yml +1 -1
  444. ansible/plugins/test/failed.yml +1 -1
  445. ansible/plugins/test/failure.yml +1 -1
  446. ansible/plugins/test/files.py +1 -3
  447. ansible/plugins/test/finished.yml +3 -3
  448. ansible/plugins/test/issuperset.yml +1 -1
  449. ansible/plugins/test/match.yml +1 -1
  450. ansible/plugins/test/mathstuff.py +1 -2
  451. ansible/plugins/test/reachable.yml +1 -1
  452. ansible/plugins/test/regex.yml +1 -1
  453. ansible/plugins/test/search.yml +1 -1
  454. ansible/plugins/test/skip.yml +1 -1
  455. ansible/plugins/test/skipped.yml +1 -1
  456. ansible/plugins/test/started.yml +1 -1
  457. ansible/plugins/test/succeeded.yml +1 -1
  458. ansible/plugins/test/success.yml +1 -1
  459. ansible/plugins/test/successful.yml +1 -1
  460. ansible/plugins/test/superset.yml +1 -1
  461. ansible/plugins/test/unreachable.yml +1 -1
  462. ansible/plugins/test/uri.py +1 -3
  463. ansible/plugins/vars/__init__.py +1 -2
  464. ansible/plugins/vars/host_group_vars.py +2 -3
  465. ansible/release.py +3 -5
  466. ansible/template/__init__.py +14 -27
  467. ansible/template/native_helpers.py +1 -3
  468. ansible/template/template.py +1 -3
  469. ansible/template/vars.py +1 -0
  470. ansible/utils/__init__.py +1 -3
  471. ansible/utils/cmd_functions.py +1 -2
  472. ansible/utils/collection_loader/__init__.py +1 -2
  473. ansible/utils/collection_loader/_collection_config.py +1 -2
  474. ansible/utils/collection_loader/_collection_finder.py +1 -2
  475. ansible/utils/collection_loader/_collection_meta.py +1 -2
  476. ansible/utils/color.py +1 -2
  477. ansible/utils/context_objects.py +1 -4
  478. ansible/utils/display.py +88 -30
  479. ansible/utils/encrypt.py +4 -105
  480. ansible/utils/fqcn.py +1 -2
  481. ansible/utils/galaxy.py +1 -3
  482. ansible/utils/hashing.py +1 -3
  483. ansible/utils/helpers.py +1 -3
  484. ansible/utils/jsonrpc.py +1 -2
  485. ansible/utils/listify.py +1 -3
  486. ansible/utils/lock.py +1 -3
  487. ansible/utils/multiprocessing.py +1 -3
  488. ansible/utils/native_jinja.py +1 -3
  489. ansible/utils/path.py +1 -2
  490. ansible/utils/plugin_docs.py +7 -6
  491. ansible/utils/py3compat.py +17 -55
  492. ansible/utils/sentinel.py +1 -3
  493. ansible/utils/shlex.py +1 -3
  494. ansible/utils/singleton.py +1 -3
  495. ansible/utils/ssh_functions.py +1 -3
  496. ansible/utils/unicode.py +1 -3
  497. ansible/utils/unsafe_proxy.py +1 -2
  498. ansible/utils/vars.py +6 -8
  499. ansible/utils/version.py +1 -3
  500. ansible/vars/clean.py +1 -3
  501. ansible/vars/fact_cache.py +1 -2
  502. ansible/vars/hostvars.py +9 -29
  503. ansible/vars/manager.py +24 -6
  504. ansible/vars/reserved.py +1 -3
  505. {ansible_core-2.16.5rc1.data → ansible_core-2.17.0b1.data}/scripts/ansible-test +1 -2
  506. {ansible_core-2.16.5rc1.dist-info → ansible_core-2.17.0b1.dist-info}/METADATA +3 -3
  507. ansible_core-2.17.0b1.dist-info/RECORD +987 -0
  508. ansible_test/__init__.py +1 -2
  509. ansible_test/_data/completion/docker.txt +7 -9
  510. ansible_test/_data/completion/remote.txt +6 -7
  511. ansible_test/_data/requirements/ansible-test.txt +0 -2
  512. ansible_test/_data/requirements/constraints.txt +1 -6
  513. ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
  514. ansible_test/_data/requirements/sanity.changelog.txt +3 -3
  515. ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
  516. ansible_test/_data/requirements/sanity.mypy.txt +12 -12
  517. ansible_test/_data/requirements/sanity.pep8.txt +1 -1
  518. ansible_test/_data/requirements/sanity.pylint.txt +7 -7
  519. ansible_test/_data/requirements/sanity.runtime-metadata.txt +1 -1
  520. ansible_test/_data/requirements/sanity.validate-modules.txt +3 -3
  521. ansible_test/_data/requirements/sanity.yamllint.txt +2 -2
  522. ansible_test/_internal/bootstrap.py +2 -2
  523. ansible_test/_internal/classification/__init__.py +0 -5
  524. ansible_test/_internal/commands/integration/cloud/cs.py +1 -1
  525. ansible_test/_internal/commands/integration/cloud/nios.py +1 -1
  526. ansible_test/_internal/commands/sanity/__init__.py +1 -27
  527. ansible_test/_internal/commands/sanity/ansible_doc.py +1 -1
  528. ansible_test/_internal/commands/sanity/import.py +0 -18
  529. ansible_test/_internal/commands/sanity/mypy.py +7 -10
  530. ansible_test/_internal/commands/units/__init__.py +1 -1
  531. ansible_test/_internal/config.py +0 -1
  532. ansible_test/_internal/content_config.py +0 -5
  533. ansible_test/_internal/coverage_util.py +0 -1
  534. ansible_test/_internal/docker_util.py +1 -1
  535. ansible_test/_internal/host_profiles.py +5 -4
  536. ansible_test/_internal/python_requirements.py +1 -119
  537. ansible_test/_internal/ssh.py +1 -0
  538. ansible_test/_internal/util.py +1 -1
  539. ansible_test/_internal/util_common.py +1 -1
  540. ansible_test/_internal/venv.py +10 -108
  541. ansible_test/_util/__init__.py +1 -2
  542. ansible_test/_util/controller/sanity/mypy/ansible-core.ini +0 -6
  543. ansible_test/_util/controller/sanity/mypy/modules.ini +0 -6
  544. ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +0 -1
  545. ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +0 -1
  546. ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +0 -1
  547. ansible_test/_util/controller/sanity/pylint/config/collection.cfg +0 -1
  548. ansible_test/_util/controller/sanity/pylint/config/default.cfg +0 -1
  549. ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +1 -2
  550. ansible_test/_util/controller/sanity/shellcheck/exclude.txt +0 -1
  551. ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +31 -59
  552. ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +0 -7
  553. ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +10 -2
  554. ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -1
  555. ansible_test/_util/controller/sanity/yamllint/yamllinter.py +16 -4
  556. ansible_test/_util/target/__init__.py +1 -2
  557. ansible_test/_util/target/cli/ansible_test_cli_stub.py +1 -2
  558. ansible_test/_util/target/common/constants.py +1 -4
  559. ansible_test/_util/target/injector/python.py +4 -19
  560. ansible_test/_util/target/pytest/plugins/ansible_forked.py +2 -9
  561. ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +1 -5
  562. ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -2
  563. ansible_test/_util/target/sanity/compile/compile.py +3 -12
  564. ansible_test/_util/target/sanity/import/importer.py +1 -12
  565. ansible_test/_util/target/setup/bootstrap.sh +58 -105
  566. ansible_test/_util/target/setup/probe_cgroups.py +1 -2
  567. ansible_test/_util/target/setup/quiet_pip.py +1 -16
  568. ansible_test/_util/target/setup/requirements.py +9 -2
  569. ansible_test/_util/target/tools/virtualenvcheck.py +1 -2
  570. ansible_test/_util/target/tools/yamlcheck.py +1 -2
  571. ansible/module_utils/common/_json_compat.py +0 -16
  572. ansible/module_utils/compat/_selectors2.py +0 -655
  573. ansible/modules/yum.py +0 -1821
  574. ansible/plugins/action/yum.py +0 -111
  575. ansible_core-2.16.5rc1.dist-info/RECORD +0 -1009
  576. ansible_test/_util/controller/sanity/code-smell/future-import-boilerplate.json +0 -7
  577. ansible_test/_util/controller/sanity/code-smell/future-import-boilerplate.py +0 -46
  578. ansible_test/_util/controller/sanity/code-smell/metaclass-boilerplate.json +0 -7
  579. ansible_test/_util/controller/sanity/code-smell/metaclass-boilerplate.py +0 -44
  580. ansible_test/_util/controller/sanity/code-smell/no-basestring.json +0 -7
  581. ansible_test/_util/controller/sanity/code-smell/no-basestring.py +0 -21
  582. ansible_test/_util/controller/sanity/code-smell/no-dict-iteritems.json +0 -7
  583. ansible_test/_util/controller/sanity/code-smell/no-dict-iteritems.py +0 -21
  584. ansible_test/_util/controller/sanity/code-smell/no-dict-iterkeys.json +0 -7
  585. ansible_test/_util/controller/sanity/code-smell/no-dict-iterkeys.py +0 -21
  586. ansible_test/_util/controller/sanity/code-smell/no-dict-itervalues.json +0 -7
  587. ansible_test/_util/controller/sanity/code-smell/no-dict-itervalues.py +0 -21
  588. ansible_test/_util/controller/sanity/code-smell/no-main-display.json +0 -10
  589. ansible_test/_util/controller/sanity/code-smell/no-main-display.py +0 -21
  590. ansible_test/_util/controller/sanity/code-smell/no-unicode-literals.json +0 -7
  591. ansible_test/_util/controller/sanity/code-smell/no-unicode-literals.py +0 -21
  592. ansible_test/_util/controller/tools/sslcheck.py +0 -22
  593. ansible_test/_util/target/common/__init__.py +0 -2
  594. {ansible_core-2.16.5rc1.dist-info → ansible_core-2.17.0b1.dist-info}/COPYING +0 -0
  595. {ansible_core-2.16.5rc1.dist-info → ansible_core-2.17.0b1.dist-info}/WHEEL +0 -0
  596. {ansible_core-2.16.5rc1.dist-info → ansible_core-2.17.0b1.dist-info}/entry_points.txt +0 -0
  597. {ansible_core-2.16.5rc1.dist-info → ansible_core-2.17.0b1.dist-info}/top_level.txt +0 -0
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2013, Dag Wieers (@dagwieers) <dag@wieers.com>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = r'''
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2016, Ansible RedHat, Inc
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = r'''
ansible/modules/setup.py CHANGED
@@ -3,8 +3,7 @@
3
3
  # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = '''
ansible/modules/shell.py CHANGED
@@ -7,8 +7,7 @@
7
7
  # it runs the 'command' module with special arguments and it behaves differently.
8
8
  # See the command source and the comment "#USE_SHELL".
9
9
 
10
- from __future__ import absolute_import, division, print_function
11
- __metaclass__ = type
10
+ from __future__ import annotations
12
11
 
13
12
 
14
13
  DOCUMENTATION = r'''
ansible/modules/slurp.py CHANGED
@@ -3,8 +3,7 @@
3
3
  # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = r'''
ansible/modules/stat.py CHANGED
@@ -2,8 +2,7 @@
2
2
  # Copyright: (c) 2017, Ansible Project
3
3
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4
4
 
5
- from __future__ import absolute_import, division, print_function
6
- __metaclass__ = type
5
+ from __future__ import annotations
7
6
 
8
7
 
9
8
  DOCUMENTATION = r'''
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = '''
@@ -142,7 +141,7 @@ from ansible.module_utils.compat.version import LooseVersion
142
141
  class Subversion(object):
143
142
 
144
143
  # Example text matched by the regexp:
145
- # Révision : 1889134
144
+ # Révision : 1889134
146
145
  # 版本: 1889134
147
146
  # Revision: 1889134
148
147
  REVISION_RE = r'^\w+\s?:\s+\d+$'
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2016, Brian Coca <bcoca@ansible.com>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = '''
@@ -15,6 +14,8 @@ version_added: "2.2"
15
14
  short_description: Manage systemd units
16
15
  description:
17
16
  - Controls systemd units (services, timers, and so on) on remote hosts.
17
+ - M(ansible.builtin.systemd) is renamed to M(ansible.builtin.systemd_service) to better reflect the scope of the module.
18
+ M(ansible.builtin.systemd) is kept as an alias for backward compatibility.
18
19
  options:
19
20
  name:
20
21
  description:
@@ -28,11 +29,13 @@ options:
28
29
  - V(started)/V(stopped) are idempotent actions that will not run commands unless necessary.
29
30
  V(restarted) will always bounce the unit.
30
31
  V(reloaded) will always reload and if the service is not running at the moment of the reload, it is started.
32
+ - If set, requires O(name).
31
33
  type: str
32
34
  choices: [ reloaded, restarted, started, stopped ]
33
35
  enabled:
34
36
  description:
35
37
  - Whether the unit should start on boot. B(At least one of state and enabled are required.)
38
+ - If set, requires O(name).
36
39
  type: bool
37
40
  force:
38
41
  description:
@@ -41,7 +44,8 @@ options:
41
44
  version_added: 2.6
42
45
  masked:
43
46
  description:
44
- - Whether the unit should be masked or not, a masked unit is impossible to start.
47
+ - Whether the unit should be masked or not. A masked unit is impossible to start.
48
+ - If set, requires O(name).
45
49
  type: bool
46
50
  daemon_reload:
47
51
  description:
@@ -64,7 +68,7 @@ options:
64
68
  - "For systemd to work with 'user', the executing user must have its own instance of dbus started and accessible (systemd requirement)."
65
69
  - "The user dbus process is normally started during normal login, but not during the run of Ansible tasks.
66
70
  Otherwise you will probably get a 'Failed to connect to bus: no such file or directory' error."
67
- - The user must have access, normally given via setting the C(XDG_RUNTIME_DIR) variable, see example below.
71
+ - The user must have access, normally given via setting the C(XDG_RUNTIME_DIR) variable, see the example below.
68
72
 
69
73
  type: str
70
74
  choices: [ system, user, global ]
@@ -86,12 +90,11 @@ attributes:
86
90
  platform:
87
91
  platforms: posix
88
92
  notes:
89
- - Since 2.4, one of the following options is required O(state), O(enabled), O(masked), O(daemon_reload), (O(daemon_reexec) since 2.8),
90
- and all except O(daemon_reload) and (O(daemon_reexec) since 2.8) also require O(name).
93
+ - O(state), O(enabled), O(masked) requires O(name).
91
94
  - Before 2.4 you always required O(name).
92
- - Globs are not supported in name, i.e C(postgres*.service).
93
- - The service names might vary by specific OS/distribution
94
- - The order of execution when having multiple properties is to first enable/disable, then mask/unmask and then deal with service state.
95
+ - Globs are not supported in name, in other words, C(postgres*.service).
96
+ - The service names might vary by specific OS/distribution.
97
+ - The order of execution when having multiple properties is to first enable/disable, then mask/unmask and then deal with the service state.
95
98
  It has been reported that systemctl can behave differently depending on the order of operations if you do the same manually.
96
99
  requirements:
97
100
  - A system managed by systemd.
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2016, Brian Coca <bcoca@ansible.com>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = '''
@@ -15,6 +14,8 @@ version_added: "2.2"
15
14
  short_description: Manage systemd units
16
15
  description:
17
16
  - Controls systemd units (services, timers, and so on) on remote hosts.
17
+ - M(ansible.builtin.systemd) is renamed to M(ansible.builtin.systemd_service) to better reflect the scope of the module.
18
+ M(ansible.builtin.systemd) is kept as an alias for backward compatibility.
18
19
  options:
19
20
  name:
20
21
  description:
@@ -28,11 +29,13 @@ options:
28
29
  - V(started)/V(stopped) are idempotent actions that will not run commands unless necessary.
29
30
  V(restarted) will always bounce the unit.
30
31
  V(reloaded) will always reload and if the service is not running at the moment of the reload, it is started.
32
+ - If set, requires O(name).
31
33
  type: str
32
34
  choices: [ reloaded, restarted, started, stopped ]
33
35
  enabled:
34
36
  description:
35
37
  - Whether the unit should start on boot. B(At least one of state and enabled are required.)
38
+ - If set, requires O(name).
36
39
  type: bool
37
40
  force:
38
41
  description:
@@ -41,7 +44,8 @@ options:
41
44
  version_added: 2.6
42
45
  masked:
43
46
  description:
44
- - Whether the unit should be masked or not, a masked unit is impossible to start.
47
+ - Whether the unit should be masked or not. A masked unit is impossible to start.
48
+ - If set, requires O(name).
45
49
  type: bool
46
50
  daemon_reload:
47
51
  description:
@@ -64,7 +68,7 @@ options:
64
68
  - "For systemd to work with 'user', the executing user must have its own instance of dbus started and accessible (systemd requirement)."
65
69
  - "The user dbus process is normally started during normal login, but not during the run of Ansible tasks.
66
70
  Otherwise you will probably get a 'Failed to connect to bus: no such file or directory' error."
67
- - The user must have access, normally given via setting the C(XDG_RUNTIME_DIR) variable, see example below.
71
+ - The user must have access, normally given via setting the C(XDG_RUNTIME_DIR) variable, see the example below.
68
72
 
69
73
  type: str
70
74
  choices: [ system, user, global ]
@@ -86,12 +90,11 @@ attributes:
86
90
  platform:
87
91
  platforms: posix
88
92
  notes:
89
- - Since 2.4, one of the following options is required O(state), O(enabled), O(masked), O(daemon_reload), (O(daemon_reexec) since 2.8),
90
- and all except O(daemon_reload) and (O(daemon_reexec) since 2.8) also require O(name).
93
+ - O(state), O(enabled), O(masked) requires O(name).
91
94
  - Before 2.4 you always required O(name).
92
- - Globs are not supported in name, i.e C(postgres*.service).
93
- - The service names might vary by specific OS/distribution
94
- - The order of execution when having multiple properties is to first enable/disable, then mask/unmask and then deal with service state.
95
+ - Globs are not supported in name, in other words, C(postgres*.service).
96
+ - The service names might vary by specific OS/distribution.
97
+ - The order of execution when having multiple properties is to first enable/disable, then mask/unmask and then deal with the service state.
95
98
  It has been reported that systemctl can behave differently depending on the order of operations if you do the same manually.
96
99
  requirements:
97
100
  - A system managed by systemd.
@@ -4,8 +4,7 @@
4
4
  # (c) 2017 Ansible Project
5
5
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
6
6
 
7
- from __future__ import absolute_import, division, print_function
8
- __metaclass__ = type
7
+ from __future__ import annotations
9
8
 
10
9
 
11
10
  DOCUMENTATION = '''
@@ -87,6 +86,12 @@ EXAMPLES = '''
87
86
  state: started
88
87
  enabled: yes
89
88
 
89
+ - name: Sleep for 5 seconds between stop and start command of badly behaving service
90
+ ansible.builtin.sysvinit:
91
+ name: apache2
92
+ state: restarted
93
+ sleep: 5
94
+
90
95
  - name: Make sure apache2 is started on runlevels 3 and 5
91
96
  ansible.builtin.sysvinit:
92
97
  name: apache2
@@ -4,8 +4,7 @@
4
4
  # Copyright: (c) 2017, Ansible Project
5
5
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
6
6
 
7
- from __future__ import absolute_import, division, print_function
8
- __metaclass__ = type
7
+ from __future__ import annotations
9
8
 
10
9
 
11
10
  DOCUMENTATION = '''
@@ -68,6 +67,12 @@ EXAMPLES = """
68
67
  suffix: temp
69
68
  register: tempfile_1
70
69
 
70
+ - name: Create a temporary file with a specific prefix
71
+ ansible.builtin.tempfile:
72
+ state: file
73
+ suffix: txt
74
+ prefix: myfile_
75
+
71
76
  - name: Use the registered var and the file module to remove the temporary file
72
77
  ansible.builtin.file:
73
78
  path: "{{ tempfile_1.path }}"
@@ -5,8 +5,7 @@
5
5
 
6
6
  # This is a virtual module that is entirely implemented as an action plugin and runs on the controller
7
7
 
8
- from __future__ import absolute_import, division, print_function
9
- __metaclass__ = type
8
+ from __future__ import annotations
10
9
 
11
10
 
12
11
  DOCUMENTATION = r'''
@@ -86,7 +85,7 @@ EXAMPLES = r'''
86
85
  dest: /etc/named.conf
87
86
  group: named
88
87
  setype: named_conf_t
89
- mode: 0640
88
+ mode: '0640'
90
89
 
91
90
  - name: Create a DOS-style text file from a template
92
91
  ansible.builtin.template:
@@ -7,8 +7,7 @@
7
7
  # Copyright: (c) 2017, Ansible Project
8
8
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
9
9
 
10
- from __future__ import absolute_import, division, print_function
11
- __metaclass__ = type
10
+ from __future__ import annotations
12
11
 
13
12
 
14
13
  DOCUMENTATION = r'''
@@ -283,6 +282,7 @@ MISSING_FILE_RE = re.compile(r': Warning: Cannot stat: No such file or directory
283
282
  ZIP_FILE_MODE_RE = re.compile(r'([r-][w-][SsTtx-]){3}')
284
283
  INVALID_OWNER_RE = re.compile(r': Invalid owner')
285
284
  INVALID_GROUP_RE = re.compile(r': Invalid group')
285
+ SYMLINK_DIFF_RE = re.compile(r': Symlink differs$')
286
286
 
287
287
 
288
288
  def crc32(path, buffer_size):
@@ -500,7 +500,8 @@ class ZipArchive(object):
500
500
  continue
501
501
 
502
502
  # Check first and seventh field in order to skip header/footer
503
- if len(pcs[0]) != 7 and len(pcs[0]) != 10:
503
+ # 7 or 8 are FAT, 10 is normal unix perms
504
+ if len(pcs[0]) not in (7, 8, 10):
504
505
  continue
505
506
  if len(pcs[6]) != 15:
506
507
  continue
@@ -552,6 +553,12 @@ class ZipArchive(object):
552
553
  else:
553
554
  permstr = 'rw-rw-rw-'
554
555
  file_umask = umask
556
+ elif len(permstr) == 7:
557
+ if permstr == 'rwxa---':
558
+ permstr = 'rwxrwxrwx'
559
+ else:
560
+ permstr = 'rw-rw-rw-'
561
+ file_umask = umask
555
562
  elif 'bsd' in systemtype.lower():
556
563
  file_umask = umask
557
564
  else:
@@ -880,6 +887,8 @@ class TgzArchive(object):
880
887
  out += line + '\n'
881
888
  if INVALID_GROUP_RE.search(line):
882
889
  out += line + '\n'
890
+ if SYMLINK_DIFF_RE.search(line):
891
+ out += line + '\n'
883
892
  if out:
884
893
  unarchived = False
885
894
  return dict(unarchived=unarchived, rc=rc, out=out, err=err, cmd=cmd)
@@ -969,7 +978,8 @@ class TarZstdArchive(TgzArchive):
969
978
  class ZipZArchive(ZipArchive):
970
979
  def __init__(self, src, b_dest, file_args, module):
971
980
  super(ZipZArchive, self).__init__(src, b_dest, file_args, module)
972
- self.zipinfoflag = '-Z'
981
+ # NOTE: adds 'l', which is default on most linux but not all implementations
982
+ self.zipinfoflag = '-Zl'
973
983
  self.binaries = (
974
984
  ('unzip', 'cmd_path'),
975
985
  ('unzip', 'zipinfo_cmd_path'),
ansible/modules/uri.py CHANGED
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2013, Romeo Theriault <romeot () hawaii.edu>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = r'''
@@ -444,11 +443,10 @@ import json
444
443
  import os
445
444
  import re
446
445
  import shutil
447
- import sys
448
446
  import tempfile
449
447
 
450
448
  from ansible.module_utils.basic import AnsibleModule, sanitize_keys
451
- from ansible.module_utils.six import PY2, PY3, binary_type, iteritems, string_types
449
+ from ansible.module_utils.six import binary_type, iteritems, string_types
452
450
  from ansible.module_utils.six.moves.urllib.parse import urlencode, urlsplit
453
451
  from ansible.module_utils.common.text.converters import to_native, to_text
454
452
  from ansible.module_utils.compat.datetime import utcnow, utcfromtimestamp
@@ -586,7 +584,7 @@ def uri(module, url, dest, body, body_format, method, headers, socket_timeout, c
586
584
  method=method, timeout=socket_timeout, unix_socket=module.params['unix_socket'],
587
585
  ca_path=ca_path, unredirected_headers=unredirected_headers,
588
586
  use_proxy=module.params['use_proxy'], decompress=decompress,
589
- ciphers=ciphers, use_netrc=use_netrc, **kwargs)
587
+ ciphers=ciphers, use_netrc=use_netrc, force=module.params['force'], **kwargs)
590
588
 
591
589
  if src:
592
590
  # Try to close the open file handle
@@ -720,7 +718,7 @@ def main():
720
718
 
721
719
  if maybe_output:
722
720
  try:
723
- if PY3 and (r.fp is None or r.closed):
721
+ if r.fp is None or r.closed:
724
722
  raise TypeError
725
723
  content = r.read()
726
724
  except (AttributeError, TypeError):
@@ -771,8 +769,7 @@ def main():
771
769
  js = json.loads(u_content)
772
770
  uresp['json'] = js
773
771
  except Exception:
774
- if PY2:
775
- sys.exc_clear() # Avoid false positive traceback in fail_json() on Python 2
772
+ ...
776
773
  else:
777
774
  u_content = None
778
775
 
ansible/modules/user.py CHANGED
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2012, Stephen Fromm <sfromm@gmail.com>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = r'''
@@ -73,8 +72,8 @@ options:
73
72
  - Optionally set the user's shell.
74
73
  - On macOS, before Ansible 2.5, the default shell for non-system users was V(/usr/bin/false).
75
74
  Since Ansible 2.5, the default shell for non-system users on macOS is V(/bin/bash).
76
- - See notes for details on how other operating systems determine the default shell by
77
- the underlying tool.
75
+ - On other operating systems, the default shell is determined by the underlying tool
76
+ invoked by this module. See Notes for a per platform list of invoked tools.
78
77
  type: str
79
78
  home:
80
79
  description:
@@ -306,6 +305,11 @@ EXAMPLES = r'''
306
305
  uid: 1040
307
306
  group: admin
308
307
 
308
+ - name: Create a user 'johnd' with a home directory
309
+ ansible.builtin.user:
310
+ name: johnd
311
+ create_home: yes
312
+
309
313
  - name: Add the user 'james' with a bash shell, appending the group 'admins' and 'developers' to the user's groups
310
314
  ansible.builtin.user:
311
315
  name: james
@@ -632,6 +636,9 @@ class User(object):
632
636
  # sha512
633
637
  if fields[1] == '6' and len(fields[-1]) != 86:
634
638
  maybe_invalid = True
639
+ # yescrypt
640
+ if fields[1] == 'y' and len(fields[-1]) != 43:
641
+ maybe_invalid = True
635
642
  else:
636
643
  maybe_invalid = True
637
644
  if maybe_invalid:
@@ -1063,12 +1070,6 @@ class User(object):
1063
1070
  exists = True
1064
1071
  break
1065
1072
 
1066
- if not exists:
1067
- self.module.warn(
1068
- "'local: true' specified and user '{name}' was not found in {file}. "
1069
- "The local user account may already exist if the local account database exists "
1070
- "somewhere other than {file}.".format(file=self.PASSWORDFILE, name=self.name))
1071
-
1072
1073
  return exists
1073
1074
 
1074
1075
  else:
@@ -3,8 +3,7 @@
3
3
  # Copyright 2021 Red Hat
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = r'''
@@ -52,32 +51,32 @@ attributes:
52
51
  EXAMPLES = r'''
53
52
  - name: verify vars needed for this task file are present when included
54
53
  ansible.builtin.validate_argument_spec:
55
- argument_spec: '{{required_data}}'
54
+ argument_spec: '{{ required_data }}'
56
55
  vars:
57
56
  required_data:
58
- # unlike spec file, just put the options in directly
59
- stuff:
60
- description: stuff
61
- type: str
62
- choices: ['who', 'knows', 'what']
63
- default: what
64
- but:
65
- description: i guess we need one
66
- type: str
67
- required: true
57
+ # unlike spec file, just put the options in directly
58
+ stuff:
59
+ description: stuff
60
+ type: str
61
+ choices: ['who', 'knows', 'what']
62
+ default: what
63
+ but:
64
+ description: i guess we need one
65
+ type: str
66
+ required: true
68
67
 
69
68
 
70
69
  - name: verify vars needed for this task file are present when included, with spec from a spec file
71
70
  ansible.builtin.validate_argument_spec:
72
- argument_spec: "{{(lookup('ansible.builtin.file', 'myargspec.yml') | from_yaml )['specname']['options']}}"
71
+ argument_spec: "{{ (lookup('ansible.builtin.file', 'myargspec.yml') | from_yaml )['specname']['options'] }}"
73
72
 
74
73
 
75
74
  - name: verify vars needed for next include and not from inside it, also with params i'll only define there
76
75
  block:
77
76
  - ansible.builtin.validate_argument_spec:
78
- argument_spec: "{{lookup('ansible.builtin.file', 'nakedoptions.yml'}}"
77
+ argument_spec: "{{ lookup('ansible.builtin.file', 'nakedoptions.yml') }}"
79
78
  provided_arguments:
80
- but: "that i can define on the include itself, like in it's `vars:` keyword"
79
+ but: "that i can define on the include itself, like in it's `vars:` keyword"
81
80
 
82
81
  - name: the include itself
83
82
  vars:
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2012, Jeroen Hoekx <jeroen@hoekx.be>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = r'''
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2017, Dag Wieers (@dagwieers) <dag@wieers.com>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- from __future__ import absolute_import, division, print_function
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
 
10
9
  DOCUMENTATION = r'''
@@ -4,8 +4,7 @@
4
4
  #
5
5
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
6
6
 
7
- from __future__ import absolute_import, division, print_function
8
- __metaclass__ = type
7
+ from __future__ import annotations
9
8
 
10
9
 
11
10
  DOCUMENTATION = '''
@@ -67,7 +66,7 @@ options:
67
66
  type: str
68
67
  description:
69
68
  description:
70
- - A human readable string describing the repository. This option corresponds to the "name" property in the repo file.
69
+ - A human-readable string describing the repository. This option corresponds to the "name" property in the repo file.
71
70
  - This parameter is only required if O(state) is set to V(present).
72
71
  type: str
73
72
  enabled:
@@ -15,6 +15,4 @@
15
15
  # You should have received a copy of the GNU General Public License
16
16
  # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
17
17
 
18
- # Make coding more python3-ish
19
- from __future__ import (absolute_import, division, print_function)
20
- __metaclass__ = type
18
+ from __future__ import annotations
ansible/parsing/ajson.py CHANGED
@@ -1,9 +1,7 @@
1
1
  # Copyright: (c) 2018, Ansible Project
2
2
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
3
3
 
4
- # Make coding more python3-ish
5
- from __future__ import (absolute_import, division, print_function)
6
- __metaclass__ = type
4
+ from __future__ import annotations
7
5
 
8
6
  import json
9
7
 
@@ -2,9 +2,7 @@
2
2
  # Copyright: (c) 2017, Ansible Project
3
3
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4
4
 
5
- # Make coding more python3-ish
6
- from __future__ import (absolute_import, division, print_function)
7
- __metaclass__ = type
5
+ from __future__ import annotations
8
6
 
9
7
  import copy
10
8
  import os
@@ -79,30 +77,43 @@ class DataLoader:
79
77
  '''Backwards compat for now'''
80
78
  return from_yaml(data, file_name, show_content, self._vault.secrets, json_only=json_only)
81
79
 
82
- def load_from_file(self, file_name: str, cache: bool = True, unsafe: bool = False, json_only: bool = False) -> t.Any:
83
- ''' Loads data from a file, which can contain either JSON or YAML. '''
80
+ def load_from_file(self, file_name: str, cache: str = 'all', unsafe: bool = False, json_only: bool = False) -> t.Any:
81
+ '''
82
+ Loads data from a file, which can contain either JSON or YAML.
83
+
84
+ :param file_name: The name of the file to load data from.
85
+ :param cache: Options for caching: none|all|vaulted
86
+ :param unsafe: If True, returns the parsed data as-is without deep copying.
87
+ :param json_only: If True, only loads JSON data from the file.
88
+ :return: The loaded data, optionally deep-copied for safety.
89
+ '''
84
90
 
91
+ # Resolve the file name
85
92
  file_name = self.path_dwim(file_name)
93
+
94
+ # Log the file being loaded
86
95
  display.debug("Loading data from %s" % file_name)
87
96
 
88
- # if the file has already been read in and cached, we'll
89
- # return those results to avoid more file/vault operations
90
- if cache and file_name in self._FILE_CACHE:
97
+ # Check if the file has been cached and use the cached data if available
98
+ if cache != 'none' and file_name in self._FILE_CACHE:
91
99
  parsed_data = self._FILE_CACHE[file_name]
92
100
  else:
93
- # read the file contents and load the data structure from them
101
+ # Read the file contents and load the data structure from them
94
102
  (b_file_data, show_content) = self._get_file_contents(file_name)
95
103
 
96
104
  file_data = to_text(b_file_data, errors='surrogate_or_strict')
97
105
  parsed_data = self.load(data=file_data, file_name=file_name, show_content=show_content, json_only=json_only)
98
106
 
99
- # cache the file contents for next time
100
- self._FILE_CACHE[file_name] = parsed_data
107
+ # Cache the file contents for next time based on the cache option
108
+ if cache == 'all':
109
+ self._FILE_CACHE[file_name] = parsed_data
110
+ elif cache == 'vaulted' and not show_content:
111
+ self._FILE_CACHE[file_name] = parsed_data
101
112
 
113
+ # Return the parsed data, optionally deep-copied for safety
102
114
  if unsafe:
103
115
  return parsed_data
104
116
  else:
105
- # return a deep copy here, so the cache is not affected
106
117
  return copy.deepcopy(parsed_data)
107
118
 
108
119
  def path_exists(self, path: str) -> bool: