ansible-core 2.16.6__py3-none-any.whl → 2.17.0rc1__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 (596) 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 +4 -6
  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 +33 -25
  24. ansible/constants.py +1 -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 +2 -4
  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 +2 -3
  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 +12 -15
  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 +3 -4
  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 +1 -2
  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 +2 -3
  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 +59 -186
  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 +18 -5
  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 +13 -3
  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 +1 -3
  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 +2 -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 -3
  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 +3 -4
  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 +17 -7
  435. ansible/plugins/strategy/host_pinned.py +1 -3
  436. ansible/plugins/strategy/linear.py +22 -22
  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 +24 -37
  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 +3 -7
  503. ansible/vars/manager.py +24 -6
  504. ansible/vars/reserved.py +1 -3
  505. {ansible_core-2.16.6.data → ansible_core-2.17.0rc1.data}/scripts/ansible-test +1 -2
  506. {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/METADATA +3 -3
  507. ansible_core-2.17.0rc1.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/import.py +0 -18
  528. ansible_test/_internal/commands/sanity/mypy.py +7 -10
  529. ansible_test/_internal/commands/units/__init__.py +1 -1
  530. ansible_test/_internal/config.py +0 -1
  531. ansible_test/_internal/content_config.py +0 -5
  532. ansible_test/_internal/coverage_util.py +0 -1
  533. ansible_test/_internal/docker_util.py +1 -1
  534. ansible_test/_internal/host_profiles.py +5 -4
  535. ansible_test/_internal/python_requirements.py +1 -119
  536. ansible_test/_internal/ssh.py +1 -0
  537. ansible_test/_internal/util.py +1 -1
  538. ansible_test/_internal/util_common.py +1 -1
  539. ansible_test/_internal/venv.py +10 -108
  540. ansible_test/_util/__init__.py +1 -2
  541. ansible_test/_util/controller/sanity/mypy/ansible-core.ini +0 -6
  542. ansible_test/_util/controller/sanity/mypy/modules.ini +0 -6
  543. ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +0 -1
  544. ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +0 -1
  545. ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +0 -1
  546. ansible_test/_util/controller/sanity/pylint/config/collection.cfg +0 -1
  547. ansible_test/_util/controller/sanity/pylint/config/default.cfg +0 -1
  548. ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +1 -2
  549. ansible_test/_util/controller/sanity/shellcheck/exclude.txt +0 -1
  550. ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +31 -59
  551. ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +0 -7
  552. ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +10 -2
  553. ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -1
  554. ansible_test/_util/controller/sanity/yamllint/yamllinter.py +16 -4
  555. ansible_test/_util/target/__init__.py +1 -2
  556. ansible_test/_util/target/cli/ansible_test_cli_stub.py +1 -2
  557. ansible_test/_util/target/common/constants.py +1 -4
  558. ansible_test/_util/target/injector/python.py +4 -19
  559. ansible_test/_util/target/pytest/plugins/ansible_forked.py +2 -9
  560. ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +1 -5
  561. ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -2
  562. ansible_test/_util/target/sanity/compile/compile.py +3 -12
  563. ansible_test/_util/target/sanity/import/importer.py +1 -12
  564. ansible_test/_util/target/setup/bootstrap.sh +49 -105
  565. ansible_test/_util/target/setup/probe_cgroups.py +1 -2
  566. ansible_test/_util/target/setup/quiet_pip.py +1 -16
  567. ansible_test/_util/target/setup/requirements.py +9 -2
  568. ansible_test/_util/target/tools/virtualenvcheck.py +1 -2
  569. ansible_test/_util/target/tools/yamlcheck.py +1 -2
  570. ansible/module_utils/common/_json_compat.py +0 -16
  571. ansible/module_utils/compat/_selectors2.py +0 -655
  572. ansible/modules/yum.py +0 -1821
  573. ansible/plugins/action/yum.py +0 -111
  574. ansible_core-2.16.6.dist-info/RECORD +0 -1009
  575. ansible_test/_util/controller/sanity/code-smell/future-import-boilerplate.json +0 -7
  576. ansible_test/_util/controller/sanity/code-smell/future-import-boilerplate.py +0 -46
  577. ansible_test/_util/controller/sanity/code-smell/metaclass-boilerplate.json +0 -7
  578. ansible_test/_util/controller/sanity/code-smell/metaclass-boilerplate.py +0 -44
  579. ansible_test/_util/controller/sanity/code-smell/no-basestring.json +0 -7
  580. ansible_test/_util/controller/sanity/code-smell/no-basestring.py +0 -21
  581. ansible_test/_util/controller/sanity/code-smell/no-dict-iteritems.json +0 -7
  582. ansible_test/_util/controller/sanity/code-smell/no-dict-iteritems.py +0 -21
  583. ansible_test/_util/controller/sanity/code-smell/no-dict-iterkeys.json +0 -7
  584. ansible_test/_util/controller/sanity/code-smell/no-dict-iterkeys.py +0 -21
  585. ansible_test/_util/controller/sanity/code-smell/no-dict-itervalues.json +0 -7
  586. ansible_test/_util/controller/sanity/code-smell/no-dict-itervalues.py +0 -21
  587. ansible_test/_util/controller/sanity/code-smell/no-main-display.json +0 -10
  588. ansible_test/_util/controller/sanity/code-smell/no-main-display.py +0 -21
  589. ansible_test/_util/controller/sanity/code-smell/no-unicode-literals.json +0 -7
  590. ansible_test/_util/controller/sanity/code-smell/no-unicode-literals.py +0 -21
  591. ansible_test/_util/controller/tools/sslcheck.py +0 -22
  592. ansible_test/_util/target/common/__init__.py +0 -2
  593. {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/COPYING +0 -0
  594. {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/WHEEL +0 -0
  595. {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/entry_points.txt +0 -0
  596. {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/top_level.txt +0 -0
ansible/modules/copy.py CHANGED
@@ -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 = r'''
@@ -96,7 +95,7 @@ options:
96
95
  - If V(true) it will search for O(src) on the managed (remote) node.
97
96
  - O(remote_src) supports recursive copying as of version 2.8.
98
97
  - O(remote_src) only works with O(mode=preserve) as of version 2.6.
99
- - Autodecryption of files does not work when O(remote_src=yes).
98
+ - Auto-decryption of files does not work when O(remote_src=yes).
100
99
  type: bool
101
100
  default: no
102
101
  version_added: '2.0'
@@ -273,7 +272,7 @@ mode:
273
272
  description: Permissions of the target, after execution.
274
273
  returned: success
275
274
  type: str
276
- sample: "0644"
275
+ sample: '0644'
277
276
  size:
278
277
  description: Size of the target, after execution.
279
278
  returned: success
@@ -291,7 +290,6 @@ import filecmp
291
290
  import grp
292
291
  import os
293
292
  import os.path
294
- import platform
295
293
  import pwd
296
294
  import shutil
297
295
  import stat
@@ -300,13 +298,6 @@ import traceback
300
298
 
301
299
  from ansible.module_utils.common.text.converters import to_bytes, to_native
302
300
  from ansible.module_utils.basic import AnsibleModule
303
- from ansible.module_utils.common.process import get_bin_path
304
- from ansible.module_utils.common.locale import get_best_parsable_locale
305
- from ansible.module_utils.six import PY3
306
-
307
-
308
- # The AnsibleModule object
309
- module = None
310
301
 
311
302
 
312
303
  class AnsibleModuleError(Exception):
@@ -314,21 +305,6 @@ class AnsibleModuleError(Exception):
314
305
  self.results = results
315
306
 
316
307
 
317
- # Once we get run_command moved into common, we can move this into a common/files module. We can't
318
- # until then because of the module.run_command() method. We may need to move it into
319
- # basic::AnsibleModule() until then but if so, make it a private function so that we don't have to
320
- # keep it for backwards compatibility later.
321
- def clear_facls(path):
322
- setfacl = get_bin_path('setfacl')
323
- # FIXME "setfacl -b" is available on Linux and FreeBSD. There is "setfacl -D e" on z/OS. Others?
324
- acl_command = [setfacl, '-b', path]
325
- b_acl_command = [to_bytes(x) for x in acl_command]
326
- locale = get_best_parsable_locale(module)
327
- rc, out, err = module.run_command(b_acl_command, environ_update=dict(LANG=locale, LC_ALL=locale, LC_MESSAGES=locale))
328
- if rc != 0:
329
- raise RuntimeError('Error running "{0}": stdout: "{1}"; stderr: "{2}"'.format(' '.join(b_acl_command), out, err))
330
-
331
-
332
308
  def split_pre_existing_dir(dirname):
333
309
  '''
334
310
  Return the first pre-existing directory and a list of the new directories that will be created.
@@ -529,8 +505,6 @@ def copy_common_dirs(src, dest, module):
529
505
 
530
506
  def main():
531
507
 
532
- global module
533
-
534
508
  module = AnsibleModule(
535
509
  # not checking because of daisy chain to file module
536
510
  argument_spec=dict(
@@ -705,54 +679,8 @@ def main():
705
679
  else:
706
680
  raise
707
681
 
708
- # might be needed below
709
- if PY3 and hasattr(os, 'listxattr'):
710
- try:
711
- src_has_acls = 'system.posix_acl_access' in os.listxattr(src)
712
- except Exception as e:
713
- # assume unwanted ACLs by default
714
- src_has_acls = True
715
-
716
682
  # at this point we should always have tmp file
717
- module.atomic_move(b_mysrc, dest, unsafe_writes=module.params['unsafe_writes'])
718
-
719
- if PY3 and hasattr(os, 'listxattr') and platform.system() == 'Linux' and not remote_src:
720
- # atomic_move used above to copy src into dest might, in some cases,
721
- # use shutil.copy2 which in turn uses shutil.copystat.
722
- # Since Python 3.3, shutil.copystat copies file extended attributes:
723
- # https://docs.python.org/3/library/shutil.html#shutil.copystat
724
- # os.listxattr (along with others) was added to handle the operation.
725
-
726
- # This means that on Python 3 we are copying the extended attributes which includes
727
- # the ACLs on some systems - further limited to Linux as the documentation above claims
728
- # that the extended attributes are copied only on Linux. Also, os.listxattr is only
729
- # available on Linux.
730
-
731
- # If not remote_src, then the file was copied from the controller. In that
732
- # case, any filesystem ACLs are artifacts of the copy rather than preservation
733
- # of existing attributes. Get rid of them:
734
-
735
- if src_has_acls:
736
- # FIXME If dest has any default ACLs, there are not applied to src now because
737
- # they were overridden by copystat. Should/can we do anything about this?
738
- # 'system.posix_acl_default' in os.listxattr(os.path.dirname(b_dest))
739
-
740
- try:
741
- clear_facls(dest)
742
- except ValueError as e:
743
- if 'setfacl' in to_native(e):
744
- # No setfacl so we're okay. The controller couldn't have set a facl
745
- # without the setfacl command
746
- pass
747
- else:
748
- raise
749
- except RuntimeError as e:
750
- # setfacl failed.
751
- if 'Operation not supported' in to_native(e):
752
- # The file system does not support ACLs.
753
- pass
754
- else:
755
- raise
683
+ module.atomic_move(b_mysrc, dest, unsafe_writes=module.params['unsafe_writes'], keep_dest_attrs=not remote_src)
756
684
 
757
685
  except (IOError, OSError):
758
686
  module.fail_json(msg="failed to copy: %s to %s" % (src, dest), traceback=traceback.format_exc())
ansible/modules/cron.py CHANGED
@@ -7,8 +7,7 @@
7
7
  # Copyright: (c) 2015, Luca Berruti <nadirio@gmail.com>
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'''
@@ -215,6 +214,7 @@ import sys
215
214
  import tempfile
216
215
 
217
216
  from ansible.module_utils.basic import AnsibleModule
217
+ from ansible.module_utils.common.file import S_IRWU_RWG_RWO
218
218
  from ansible.module_utils.common.text.converters import to_bytes, to_native
219
219
  from ansible.module_utils.six.moves import shlex_quote
220
220
 
@@ -308,7 +308,7 @@ class CronTab(object):
308
308
  fileh = open(self.b_cron_file, 'wb')
309
309
  else:
310
310
  filed, path = tempfile.mkstemp(prefix='crontab')
311
- os.chmod(path, int('0644', 8))
311
+ os.chmod(path, S_IRWU_RWG_RWO)
312
312
  fileh = os.fdopen(filed, 'wb')
313
313
 
314
314
  fileh.write(to_bytes(self.render()))
@@ -2,8 +2,7 @@
2
2
  # Copyright: Contributors to the 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
  author: 'Ansible Core Team (@ansible)'
@@ -237,6 +236,7 @@ import traceback
237
236
  from ansible.module_utils.basic import AnsibleModule
238
237
  from ansible.module_utils.basic import missing_required_lib
239
238
  from ansible.module_utils.common.collections import is_sequence
239
+ from ansible.module_utils.common.file import S_IRWXU_RXG_RXO, S_IRWU_RG_RO
240
240
  from ansible.module_utils.common.text.converters import to_bytes
241
241
  from ansible.module_utils.common.text.converters import to_native
242
242
  from ansible.module_utils.six import raise_from # type: ignore[attr-defined]
@@ -260,7 +260,7 @@ def ensure_keyrings_dir(module):
260
260
  changed = False
261
261
  if not os.path.isdir(KEYRINGS_DIR):
262
262
  if not module.check_mode:
263
- os.mkdir(KEYRINGS_DIR, 0o755)
263
+ os.mkdir(KEYRINGS_DIR, S_IRWXU_RXG_RXO)
264
264
  changed |= True
265
265
 
266
266
  changed |= module.set_fs_attributes_if_different(
@@ -354,7 +354,7 @@ def write_signed_by_key(module, v, slug):
354
354
  module.atomic_move(tmpfile, filename)
355
355
  changed |= True
356
356
 
357
- changed |= module.set_mode_if_different(filename, 0o0644, False)
357
+ changed |= module.set_mode_if_different(filename, S_IRWU_RG_RO, False)
358
358
 
359
359
  return changed, filename, None
360
360
 
@@ -501,7 +501,7 @@ def main():
501
501
 
502
502
  deb822 = Deb822()
503
503
  signed_by_filename = None
504
- for key, value in params.items():
504
+ for key, value in sorted(params.items()):
505
505
  if value is None:
506
506
  continue
507
507
 
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2014, Brian Coca <briancoca+ansible@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'''
@@ -71,12 +70,14 @@ options:
71
70
  - The type of the value supplied.
72
71
  - It is highly recommended to add C(no_log=True) to task while specifying O(vtype=password).
73
72
  - V(seen) was added in Ansible 2.2.
73
+ - After Ansible 2.17, user can specify C(value) as a list, if C(vtype) is set as V(multiselect).
74
74
  type: str
75
75
  choices: [ boolean, error, multiselect, note, password, seen, select, string, text, title ]
76
76
  value:
77
77
  description:
78
- - Value to set the configuration to.
79
- type: str
78
+ - Value to set the configuration to.
79
+ - After Ansible 2.17, C(value) is of type 'raw'.
80
+ type: raw
80
81
  aliases: [ answer ]
81
82
  unseen:
82
83
  description:
@@ -124,7 +125,7 @@ EXAMPLES = r'''
124
125
 
125
126
  RETURN = r'''#'''
126
127
 
127
- from ansible.module_utils.common.text.converters import to_text
128
+ from ansible.module_utils.common.text.converters import to_text, to_native
128
129
  from ansible.module_utils.basic import AnsibleModule
129
130
 
130
131
 
@@ -185,7 +186,7 @@ def main():
185
186
  name=dict(type='str', required=True, aliases=['pkg']),
186
187
  question=dict(type='str', aliases=['selection', 'setting']),
187
188
  vtype=dict(type='str', choices=['boolean', 'error', 'multiselect', 'note', 'password', 'seen', 'select', 'string', 'text', 'title']),
188
- value=dict(type='str', aliases=['answer']),
189
+ value=dict(type='raw', aliases=['answer']),
189
190
  unseen=dict(type='bool', default=False),
190
191
  ),
191
192
  required_together=(['question', 'vtype', 'value'],),
@@ -218,15 +219,25 @@ def main():
218
219
  if vtype == 'boolean':
219
220
  value = to_text(value).lower()
220
221
  existing = to_text(prev[question]).lower()
221
-
222
- if vtype == 'password':
222
+ elif vtype == 'password':
223
223
  existing = get_password_value(module, pkg, question, vtype)
224
+ elif vtype == 'multiselect' and isinstance(value, list):
225
+ try:
226
+ value = sorted(value)
227
+ except TypeError as exc:
228
+ module.fail_json(msg="Invalid value provided for 'multiselect': %s" % to_native(exc))
229
+ existing = sorted([i.strip() for i in existing.split(",")])
224
230
 
225
231
  if value != existing:
226
232
  changed = True
227
233
 
228
234
  if changed:
229
235
  if not module.check_mode:
236
+ if vtype == 'multiselect' and isinstance(value, list):
237
+ try:
238
+ value = ", ".join(value)
239
+ except TypeError as exc:
240
+ module.fail_json(msg="Invalid value provided for 'multiselect': %s" % to_native(exc))
230
241
  rc, msg, e = set_selection(module, pkg, question, vtype, value, unseen)
231
242
  if rc:
232
243
  module.fail_json(msg=e)
ansible/modules/debug.py CHANGED
@@ -3,8 +3,7 @@
3
3
  # Copyright: (c) 2012 Dag Wieers <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'''