ansible-core 2.16.5__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.5.data → ansible_core-2.17.0b1.data}/scripts/ansible-test +1 -2
  506. {ansible_core-2.16.5.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 +49 -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.5.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.5.dist-info → ansible_core-2.17.0b1.dist-info}/COPYING +0 -0
  595. {ansible_core-2.16.5.dist-info → ansible_core-2.17.0b1.dist-info}/WHEEL +0 -0
  596. {ansible_core-2.16.5.dist-info → ansible_core-2.17.0b1.dist-info}/entry_points.txt +0 -0
  597. {ansible_core-2.16.5.dist-info → ansible_core-2.17.0b1.dist-info}/top_level.txt +0 -0
@@ -14,8 +14,7 @@
14
14
  #
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
- from __future__ import (absolute_import, division, print_function)
18
- __metaclass__ = type
17
+ from __future__ import annotations
19
18
 
20
19
 
21
20
  from ansible.errors import AnsibleAction, AnsibleActionFail
@@ -15,8 +15,7 @@
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
- from __future__ import (absolute_import, division, print_function)
19
- __metaclass__ = type
18
+ from __future__ import annotations
20
19
 
21
20
  from ansible.errors import AnsibleActionFail
22
21
  from ansible.module_utils.six import string_types
@@ -15,8 +15,7 @@
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
- from __future__ import (absolute_import, division, print_function)
19
- __metaclass__ = type
18
+ from __future__ import annotations
20
19
 
21
20
  from ansible.module_utils.parsing.convert_bool import boolean
22
21
  from ansible.plugins.action import ActionBase
@@ -1,8 +1,7 @@
1
1
  # Copyright: (c) 2017, 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
- from __future__ import (absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
  from ansible.errors import AnsibleActionFail
8
7
  from ansible.plugins.action import ActionBase
@@ -2,8 +2,7 @@
2
2
  # Copyright: (c) 2018, 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
  import os
9
8
  import shutil
@@ -15,8 +15,7 @@
15
15
  #
16
16
  # You should have received a copy of the GNU General Public License
17
17
  # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
18
- from __future__ import (absolute_import, division, print_function)
19
- __metaclass__ = type
18
+ from __future__ import annotations
20
19
 
21
20
  import os
22
21
 
@@ -3,9 +3,7 @@
3
3
  # (c) 2018, Matt Martz <matt@sivel.net>
4
4
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
5
 
6
- # Make coding more python3-ish
7
- from __future__ import (absolute_import, division, print_function)
8
- __metaclass__ = type
6
+ from __future__ import annotations
9
7
 
10
8
  import os
11
9
 
@@ -22,6 +20,7 @@ class ActionModule(ActionBase):
22
20
 
23
21
  def run(self, tmp=None, task_vars=None):
24
22
  self._supports_async = True
23
+ self._supports_check_mode = False
25
24
 
26
25
  if task_vars is None:
27
26
  task_vars = dict()
@@ -1,8 +1,7 @@
1
1
  # Copyright 2021 Red Hat
2
2
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
3
3
 
4
- from __future__ import (absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
  from ansible.errors import AnsibleError
8
7
  from ansible.plugins.action import ActionBase
@@ -16,8 +16,7 @@
16
16
  # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
17
17
 
18
18
  # CI-required python3 boilerplate
19
- from __future__ import (absolute_import, division, print_function)
20
- __metaclass__ = type
19
+ from __future__ import annotations
21
20
 
22
21
  import time
23
22
  from datetime import datetime, timedelta, timezone
@@ -69,7 +68,7 @@ class ActionModule(ActionBase):
69
68
  sleep = int(self._task.args.get('sleep', self.DEFAULT_SLEEP))
70
69
  timeout = int(self._task.args.get('timeout', self.DEFAULT_TIMEOUT))
71
70
 
72
- if self._play_context.check_mode:
71
+ if self._task.check_mode:
73
72
  display.vvv("wait_for_connection: skipping for check_mode")
74
73
  return dict(skipped=True)
75
74
 
@@ -1,8 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Copyright: (c) 2018, Ansible Project
3
3
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4
- from __future__ import (absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
  import shlex
8
7
 
@@ -1,8 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Copyright: (c) 2018, Ansible Project
3
3
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4
- from __future__ import (absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
  DOCUMENTATION = """
8
7
  name: runas
@@ -1,8 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Copyright: (c) 2018, Ansible Project
3
3
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4
- from __future__ import (absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
  DOCUMENTATION = """
8
7
  name: su
@@ -1,8 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Copyright: (c) 2018, Ansible Project
3
3
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4
- from __future__ import (absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
  DOCUMENTATION = """
8
7
  name: sudo
@@ -15,8 +15,7 @@
15
15
  #
16
16
  # You should have received a copy of the GNU General Public License
17
17
  # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
18
- from __future__ import (absolute_import, division, print_function)
19
- __metaclass__ = type
18
+ from __future__ import annotations
20
19
 
21
20
  import copy
22
21
  import errno
@@ -29,6 +28,7 @@ from collections.abc import MutableMapping
29
28
 
30
29
  from ansible import constants as C
31
30
  from ansible.errors import AnsibleError
31
+ from ansible.module_utils.common.file import S_IRWU_RG_RO
32
32
  from ansible.module_utils.common.text.converters import to_bytes, to_text
33
33
  from ansible.plugins import AnsiblePlugin
34
34
  from ansible.plugins.loader import cache_loader
@@ -165,6 +165,7 @@ class BaseFileCacheModule(BaseCacheModule):
165
165
  display.warning("error in '%s' cache plugin while trying to write to '%s' : %s" % (self.plugin_name, tmpfile_path, to_bytes(e)))
166
166
  try:
167
167
  os.rename(tmpfile_path, cachefile)
168
+ os.chmod(cachefile, mode=S_IRWU_RG_RO)
168
169
  except (OSError, IOError) as e:
169
170
  display.warning("error in '%s' cache plugin while trying to move '%s' to '%s' : %s" % (self.plugin_name, tmpfile_path, cachefile, to_bytes(e)))
170
171
  finally:
@@ -14,8 +14,7 @@
14
14
  #
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
- from __future__ import (absolute_import, division, print_function)
18
- __metaclass__ = type
17
+ from __future__ import annotations
19
18
 
20
19
  # moved actual classes to __init__ kept here for backward compat with 3rd parties
21
20
  from ansible.plugins.cache import BaseCacheModule, BaseFileCacheModule # pylint: disable=unused-import
@@ -2,9 +2,7 @@
2
2
  # (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
  DOCUMENTATION = '''
10
8
  name: jsonfile
@@ -3,8 +3,7 @@
3
3
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4
4
 
5
5
 
6
- from __future__ import (absolute_import, division, print_function)
7
- __metaclass__ = type
6
+ from __future__ import annotations
8
7
 
9
8
  DOCUMENTATION = '''
10
9
  name: memory
@@ -15,9 +15,7 @@
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
21
19
 
22
20
  import difflib
23
21
  import json
@@ -169,7 +167,7 @@ class CallbackBase(AnsiblePlugin):
169
167
  _copy_result = deepcopy
170
168
 
171
169
  def set_option(self, k, v):
172
- self._plugin_options[k] = v
170
+ self._plugin_options[k] = C.config.get_config_value(k, plugin_type=self.plugin_type, plugin_name=self._load_name, direct={k: v})
173
171
 
174
172
  def get_option(self, k):
175
173
  return self._plugin_options[k]
@@ -2,8 +2,7 @@
2
2
  # (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
  DOCUMENTATION = '''
9
8
  name: default
@@ -166,7 +165,7 @@ class CallbackModule(CallbackBase):
166
165
  # args can be specified as no_log in several places: in the task or in
167
166
  # the argument spec. We can check whether the task is no_log but the
168
167
  # argument spec can't be because that is only run on the target
169
- # machine and we haven't run it thereyet at this time.
168
+ # machine and we haven't run it there yet at this time.
170
169
  #
171
170
  # So we give people a config option to affect display of the args so
172
171
  # that they can secure this if they feel that their stdout is insecure
@@ -2,8 +2,7 @@
2
2
  # (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
  DOCUMENTATION = '''
9
8
  name: junit
@@ -2,9 +2,7 @@
2
2
  # (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
  DOCUMENTATION = '''
10
8
  name: minimal
@@ -2,9 +2,7 @@
2
2
  # (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
  DOCUMENTATION = '''
10
8
  name: oneline
@@ -2,8 +2,7 @@
2
2
  # (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
  DOCUMENTATION = '''
9
8
  name: tree
@@ -16,8 +16,7 @@
16
16
  # You should have received a copy of the GNU General Public License
17
17
  # along with Ansible. If not, see <http://www.gnu.org/licenses/>.
18
18
  #
19
- from __future__ import (absolute_import, division, print_function)
20
- __metaclass__ = type
19
+ from __future__ import annotations
21
20
 
22
21
  from abc import abstractmethod
23
22
  from functools import wraps
@@ -2,8 +2,7 @@
2
2
  # (c) 2015 Toshio Kuratomi <tkuratomi@ansible.com>
3
3
  # (c) 2017, Peter Sprygada <psprygad@redhat.com>
4
4
  # (c) 2017 Ansible Project
5
- from __future__ import (annotations, absolute_import, division, print_function)
6
- __metaclass__ = type
5
+ from __future__ import annotations
7
6
 
8
7
  import collections.abc as c
9
8
  import fcntl
@@ -267,19 +266,19 @@ class ConnectionBase(AnsiblePlugin):
267
266
  # its my cousin ...
268
267
  value = self._shell._load_name
269
268
  else:
270
- # deal with generic options if the plugin supports em (for exmaple not all connections have a remote user)
269
+ # deal with generic options if the plugin supports em (for example not all connections have a remote user)
271
270
  options = C.config.get_plugin_options_from_var('connection', self._load_name, varname)
272
271
  if options:
273
272
  value = self.get_option(options[0]) # for these variables there should be only one option
274
273
  elif 'become' not in varname:
275
- # fallback to play_context, unles becoem related TODO: in the end should come from task/play and not pc
274
+ # fallback to play_context, unless become related TODO: in the end, should come from task/play and not pc
276
275
  for prop, var_list in C.MAGIC_VARIABLE_MAPPING.items():
277
276
  if varname in var_list:
278
277
  try:
279
278
  value = getattr(self._play_context, prop)
280
279
  break
281
280
  except AttributeError:
282
- # it was not defined, fine to ignore
281
+ # It was not defined; fine to ignore
283
282
  continue
284
283
 
285
284
  if value is not None:
@@ -2,8 +2,7 @@
2
2
  # (c) 2015, 2017 Toshio Kuratomi <tkuratomi@ansible.com>
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 (annotations, absolute_import, division, print_function)
6
- __metaclass__ = type
5
+ from __future__ import annotations
7
6
 
8
7
  DOCUMENTATION = '''
9
8
  name: local
@@ -22,13 +21,13 @@ import fcntl
22
21
  import getpass
23
22
  import os
24
23
  import pty
24
+ import selectors
25
25
  import shutil
26
26
  import subprocess
27
27
  import typing as t
28
28
 
29
29
  import ansible.constants as C
30
30
  from ansible.errors import AnsibleError, AnsibleFileNotFound
31
- from ansible.module_utils.compat import selectors
32
31
  from ansible.module_utils.six import text_type, binary_type
33
32
  from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
34
33
  from ansible.plugins.connection import ConnectionBase
@@ -90,7 +89,7 @@ class Connection(ConnectionBase):
90
89
  master = None
91
90
  stdin = subprocess.PIPE
92
91
  if sudoable and self.become and self.become.expect_prompt() and not self.get_option('pipelining'):
93
- # Create a pty if sudoable for privlege escalation that needs it.
92
+ # Create a pty if sudoable for privilege escalation that needs it.
94
93
  # Falls back to using a standard pipe if this fails, which may
95
94
  # cause the command to fail in certain situations where we are escalating
96
95
  # privileges or the command otherwise needs a pty.
@@ -1,8 +1,7 @@
1
1
  # (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
2
2
  # (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
- from __future__ import (annotations, absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
  DOCUMENTATION = """
8
7
  author: Ansible Core Team
@@ -1,8 +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
- from __future__ import (annotations, absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
  DOCUMENTATION = """
8
7
  author: Ansible Core Team
@@ -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 (annotations, absolute_import, division, print_function)
8
- __metaclass__ = type
7
+ from __future__ import annotations
9
8
 
10
9
  DOCUMENTATION = '''
11
10
  name: ssh
@@ -20,6 +19,8 @@ DOCUMENTATION = '''
20
19
  - connection_pipelining
21
20
  version_added: historical
22
21
  notes:
22
+ - This plugin is mostly a wrapper to the ``ssh`` CLI utility and the exact behavior of the options depends on this tool.
23
+ This means that the documentation provided here is subject to be overridden by the CLI tool itself.
23
24
  - Many options default to V(None) here but that only means we do not override the SSH tool's defaults and/or configuration.
24
25
  For example, if you specify the port in this plugin it will override any C(Port) entry in your C(.ssh/config).
25
26
  - The ssh CLI tool uses return code 255 as a 'connection error', this can conflict with commands/tools that
@@ -36,7 +37,7 @@ DOCUMENTATION = '''
36
37
  - name: delegated_vars['ansible_host']
37
38
  - name: delegated_vars['ansible_ssh_host']
38
39
  host_key_checking:
39
- description: Determines if SSH should check host keys.
40
+ description: Determines if SSH should reject or not a connection after checking host keys.
40
41
  default: True
41
42
  type: boolean
42
43
  ini:
@@ -304,12 +305,13 @@ DOCUMENTATION = '''
304
305
  - name: ansible_sftp_batch_mode
305
306
  version_added: '2.7'
306
307
  ssh_transfer_method:
307
- description:
308
- - "Preferred method to use when transferring files over ssh"
309
- - Setting to 'smart' (default) will try them in order, until one succeeds or they all fail
310
- - For OpenSSH >=9.0 you must add an additional option to enable scp (scp_extra_args="-O")
311
- - Using 'piped' creates an ssh pipe with C(dd) on either side to copy the data
312
- choices: ['sftp', 'scp', 'piped', 'smart']
308
+ description: Preferred method to use when transferring files over ssh
309
+ choices:
310
+ sftp: This is the most reliable way to copy things with SSH.
311
+ scp: Deprecated in OpenSSH. For OpenSSH >=9.0 you must add an additional option to enable scp C(scp_extra_args="-O").
312
+ piped: Creates an SSH pipe with C(dd) on either side to copy the data.
313
+ smart: Tries each method in order (sftp > scp > piped), until one succeeds or they all fail.
314
+ default: smart
313
315
  type: string
314
316
  env: [{name: ANSIBLE_SSH_TRANSFER_METHOD}]
315
317
  ini:
@@ -317,24 +319,6 @@ DOCUMENTATION = '''
317
319
  vars:
318
320
  - name: ansible_ssh_transfer_method
319
321
  version_added: '2.12'
320
- scp_if_ssh:
321
- deprecated:
322
- why: In favor of the O(ssh_transfer_method) option.
323
- version: "2.17"
324
- alternatives: O(ssh_transfer_method)
325
- default: smart
326
- description:
327
- - "Preferred method to use when transferring files over SSH."
328
- - When set to V(smart), Ansible will try them until one succeeds or they all fail.
329
- - If set to V(True), it will force 'scp', if V(False) it will use 'sftp'.
330
- - For OpenSSH >=9.0 you must add an additional option to enable scp (C(scp_extra_args="-O"))
331
- - This setting will overridden by O(ssh_transfer_method) if set.
332
- env: [{name: ANSIBLE_SCP_IF_SSH}]
333
- ini:
334
- - {key: scp_if_ssh, section: ssh_connection}
335
- vars:
336
- - name: ansible_scp_if_ssh
337
- version_added: '2.7'
338
322
  use_tty:
339
323
  version_added: '2.5'
340
324
  default: true
@@ -389,6 +373,7 @@ import io
389
373
  import os
390
374
  import pty
391
375
  import re
376
+ import selectors
392
377
  import shlex
393
378
  import subprocess
394
379
  import time
@@ -401,11 +386,8 @@ from ansible.errors import (
401
386
  AnsibleError,
402
387
  AnsibleFileNotFound,
403
388
  )
404
- from ansible.errors import AnsibleOptionsError
405
- from ansible.module_utils.compat import selectors
406
389
  from ansible.module_utils.six import PY3, text_type, binary_type
407
390
  from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
408
- from ansible.module_utils.parsing.convert_bool import BOOLEANS, boolean
409
391
  from ansible.plugins.connection import ConnectionBase, BUFSIZE
410
392
  from ansible.plugins.shell.powershell import _parse_clixml
411
393
  from ansible.utils.display import Display
@@ -746,8 +728,8 @@ class Connection(ConnectionBase):
746
728
  self._add_args(b_command, b_args, u'disable batch mode for sshpass')
747
729
  b_command += [b'-b', b'-']
748
730
 
749
- if display.verbosity > 3:
750
- b_command.append(b'-vvv')
731
+ if display.verbosity:
732
+ b_command.append(b'-' + (b'v' * display.verbosity))
751
733
 
752
734
  # Next, we add ssh_args
753
735
  ssh_args = self.get_option('ssh_args')
@@ -1240,31 +1222,13 @@ class Connection(ConnectionBase):
1240
1222
  # Transfer methods to try
1241
1223
  methods = []
1242
1224
 
1243
- # Use the transfer_method option if set, otherwise use scp_if_ssh
1225
+ # Use the transfer_method option if set
1244
1226
  ssh_transfer_method = self.get_option('ssh_transfer_method')
1245
- scp_if_ssh = self.get_option('scp_if_ssh')
1246
- if ssh_transfer_method is None and scp_if_ssh == 'smart':
1247
- ssh_transfer_method = 'smart'
1248
1227
 
1249
- if ssh_transfer_method is not None:
1250
- if ssh_transfer_method == 'smart':
1251
- methods = smart_methods
1252
- else:
1253
- methods = [ssh_transfer_method]
1228
+ if ssh_transfer_method == 'smart':
1229
+ methods = smart_methods
1254
1230
  else:
1255
- # since this can be a non-bool now, we need to handle it correctly
1256
- if not isinstance(scp_if_ssh, bool):
1257
- scp_if_ssh = scp_if_ssh.lower()
1258
- if scp_if_ssh in BOOLEANS:
1259
- scp_if_ssh = boolean(scp_if_ssh, strict=False)
1260
- elif scp_if_ssh != 'smart':
1261
- raise AnsibleOptionsError('scp_if_ssh needs to be one of [smart|True|False]')
1262
- if scp_if_ssh == 'smart':
1263
- methods = smart_methods
1264
- elif scp_if_ssh is True:
1265
- methods = ['scp']
1266
- else:
1267
- methods = ['sftp']
1231
+ methods = [ssh_transfer_method]
1268
1232
 
1269
1233
  for method in methods:
1270
1234
  returncode = stdout = stderr = None
@@ -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 (annotations, absolute_import, division, print_function)
6
- __metaclass__ = type
5
+ from __future__ import annotations
7
6
 
8
7
  DOCUMENTATION = """
9
8
  author: Ansible Core Team
@@ -148,8 +147,8 @@ DOCUMENTATION = """
148
147
  seconds higher than the WS-Man operation timeout, thus make the connection more
149
148
  robust on networks with long latency and/or many hops between server and client
150
149
  network wise.
151
- - Setting the difference bewteen the operation and the read timeout to 10 seconds
152
- alligns it to the defaults used in the winrm-module and the PSRP-module which also
150
+ - Setting the difference between the operation and the read timeout to 10 seconds
151
+ aligns it to the defaults used in the winrm-module and the PSRP-module which also
153
152
  uses 10 seconds (30 seconds for read timeout and 20 seconds for operation timeout)
154
153
  - Corresponds to the C(operation_timeout_sec) and
155
154
  C(read_timeout_sec) args in pywinrm so avoid setting these vars
@@ -199,7 +198,7 @@ from ansible.utils.display import Display
199
198
 
200
199
  try:
201
200
  import winrm
202
- from winrm.exceptions import WinRMError, WinRMOperationTimeoutError
201
+ from winrm.exceptions import WinRMError, WinRMOperationTimeoutError, WinRMTransportError
203
202
  from winrm.protocol import Protocol
204
203
  import requests.exceptions
205
204
  HAS_WINRM = True
@@ -684,7 +683,19 @@ class Connection(ConnectionBase):
684
683
  raise AnsibleConnectionFailure('winrm connection error: %s' % to_native(exc))
685
684
  finally:
686
685
  if command_id:
687
- self.protocol.cleanup_command(self.shell_id, command_id)
686
+ # Due to a bug in how pywinrm works with message encryption we
687
+ # ignore a 400 error which can occur when a task timeout is
688
+ # set and the code tries to clean up the command. This happens
689
+ # as the cleanup msg is sent over a new socket but still uses
690
+ # the already encrypted payload bound to the other socket
691
+ # causing the server to reply with 400 Bad Request.
692
+ try:
693
+ self.protocol.cleanup_command(self.shell_id, command_id)
694
+ except WinRMTransportError as e:
695
+ if e.code != 400:
696
+ raise
697
+
698
+ display.warning("Failed to cleanup running WinRM command, resources might still be in use on the target server")
688
699
 
689
700
  def _connect(self) -> Connection:
690
701
 
@@ -1,8 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Copyright: Ansible Project
3
3
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4
- from __future__ import (absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
 
8
7
  class ModuleDocFragment(object):
@@ -11,7 +10,7 @@ class ModuleDocFragment(object):
11
10
  DOCUMENTATION = r'''
12
11
  attributes:
13
12
  check_mode:
14
- description: Can run in check_mode and return changed status prediction without modifying target
13
+ description: Can run in check_mode and return changed status prediction without modifying target, if not supported the action will be skipped.
15
14
  diff_mode:
16
15
  description: Will return details on what has changed (or possibly needs changing in check_mode), when in diff mode
17
16
  platform:
@@ -1,11 +1,10 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  # Copyright: (c) , Ansible Project
3
3
  # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
4
- from __future__ import (absolute_import, division, print_function)
5
- __metaclass__ = type
4
+ from __future__ import annotations
6
5
 
7
6
 
8
- # WARNING: this is mostly here as a convinence for documenting core behaviours, no plugin outside of ansible-core should use this file
7
+ # WARNING: this is mostly here as a convenience for documenting core behaviours, no plugin outside of ansible-core should use this file
9
8
  class ModuleDocFragment(object):
10
9
 
11
10
  # requires action_common
@@ -29,7 +28,7 @@ attributes:
29
28
  support: full
30
29
  platforms: all
31
30
  until:
32
- description: Denotes if this action objeys until/retry/poll keywords
31
+ description: Denotes if this action obeys until/retry/poll keywords
33
32
  support: full
34
33
  tags:
35
34
  description: Allows for the 'tags' keyword to control the selection of this action for execution