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
@@ -2,6 +2,16 @@
2
2
 
3
3
  set -eu
4
4
 
5
+ remove_externally_managed_marker()
6
+ {
7
+ "${python_interpreter}" -c '
8
+ import pathlib
9
+ import sysconfig
10
+ path = pathlib.Path(sysconfig.get_path("stdlib")) / "EXTERNALLY-MANAGED"
11
+ path.unlink(missing_ok=True)
12
+ '
13
+ }
14
+
5
15
  install_ssh_keys()
6
16
  {
7
17
  if [ ! -f "${ssh_private_key_path}" ]; then
@@ -49,9 +59,6 @@ customize_bashrc()
49
59
  install_pip() {
50
60
  if ! "${python_interpreter}" -m pip.__main__ --version --disable-pip-version-check 2>/dev/null; then
51
61
  case "${python_version}" in
52
- "2.7")
53
- pip_bootstrap_url="https://ci-files.testing.ansible.com/ansible-test/get-pip-20.3.4.py"
54
- ;;
55
62
  *)
56
63
  pip_bootstrap_url="https://ci-files.testing.ansible.com/ansible-test/get-pip-23.1.2.py"
57
64
  ;;
@@ -68,18 +75,6 @@ install_pip() {
68
75
  fi
69
76
  }
70
77
 
71
- pip_install() {
72
- pip_packages="$1"
73
-
74
- while true; do
75
- # shellcheck disable=SC2086
76
- "${python_interpreter}" -m pip install --disable-pip-version-check ${pip_packages} \
77
- && break
78
- echo "Failed to install packages. Sleeping before trying again..."
79
- sleep 10
80
- done
81
- }
82
-
83
78
  bootstrap_remote_alpine()
84
79
  {
85
80
  py_pkg_prefix="py3"
@@ -168,19 +163,39 @@ bootstrap_remote_freebsd()
168
163
  jinja2_pkg="py${python_package_version}-jinja2"
169
164
  cryptography_pkg="py${python_package_version}-cryptography"
170
165
  pyyaml_pkg="py${python_package_version}-yaml"
166
+ packaging_pkg="py${python_package_version}-packaging"
171
167
 
172
168
  # Declare platform/python version combinations which do not have supporting OS packages available.
173
169
  # For these combinations ansible-test will use pip to install the requirements instead.
174
170
  case "${platform_version}/${python_version}" in
171
+ 13.3/3.9)
172
+ # defaults above 'just work'TM
173
+ ;;
174
+ 13.3/3.11)
175
+ jinja2_pkg="" # not available
176
+ cryptography_pkg="" # not available
177
+ pyyaml_pkg="" # not available
178
+ ;;
179
+ 14.0/3.9)
180
+ # defaults above 'just work'TM
181
+ ;;
182
+ 14.0/3.11)
183
+ cryptography_pkg="" # not available
184
+ jinja2_pkg="" # not available
185
+ pyyaml_pkg="" # not available
186
+ ;;
175
187
  *)
188
+ # just assume nothing is available
176
189
  jinja2_pkg="" # not available
177
190
  cryptography_pkg="" # not available
178
191
  pyyaml_pkg="" # not available
192
+ packaging_pkg="" # not available
179
193
  ;;
180
194
  esac
181
195
 
182
196
  packages="
183
197
  ${packages}
198
+ ${packaging_pkg}
184
199
  libyaml
185
200
  ${pyyaml_pkg}
186
201
  ${jinja2_pkg}
@@ -242,79 +257,6 @@ bootstrap_remote_macos()
242
257
  echo 'PATH="/usr/local/bin:$PATH"' > /etc/zshenv
243
258
  }
244
259
 
245
- bootstrap_remote_rhel_7()
246
- {
247
- packages="
248
- gcc
249
- python-devel
250
- python-virtualenv
251
- "
252
-
253
- while true; do
254
- # shellcheck disable=SC2086
255
- yum install -q -y ${packages} \
256
- && break
257
- echo "Failed to install packages. Sleeping before trying again..."
258
- sleep 10
259
- done
260
-
261
- install_pip
262
-
263
- bootstrap_remote_rhel_pinned_pip_packages
264
- }
265
-
266
- bootstrap_remote_rhel_8()
267
- {
268
- if [ "${python_version}" = "3.6" ]; then
269
- py_pkg_prefix="python3"
270
- else
271
- py_pkg_prefix="python${python_version}"
272
- fi
273
-
274
- packages="
275
- gcc
276
- ${py_pkg_prefix}-devel
277
- "
278
-
279
- # pip isn't included in the Python devel package under Python 3.11
280
- if [ "${python_version}" != "3.6" ]; then
281
- packages="
282
- ${packages}
283
- ${py_pkg_prefix}-pip
284
- "
285
- fi
286
-
287
- # Jinja2 is not installed with an OS package since the provided version is too old.
288
- # Instead, ansible-test will install it using pip.
289
- if [ "${controller}" ]; then
290
- packages="
291
- ${packages}
292
- ${py_pkg_prefix}-cryptography
293
- "
294
- fi
295
-
296
- # Python 3.11 isn't a module like the earlier versions
297
- if [ "${python_version}" = "3.6" ]; then
298
- while true; do
299
- # shellcheck disable=SC2086
300
- yum module install -q -y "python${python_package_version}" \
301
- && break
302
- echo "Failed to install packages. Sleeping before trying again..."
303
- sleep 10
304
- done
305
- fi
306
-
307
- while true; do
308
- # shellcheck disable=SC2086
309
- yum install -q -y ${packages} \
310
- && break
311
- echo "Failed to install packages. Sleeping before trying again..."
312
- sleep 10
313
- done
314
-
315
- bootstrap_remote_rhel_pinned_pip_packages
316
- }
317
-
318
260
  bootstrap_remote_rhel_9()
319
261
  {
320
262
  if [ "${python_version}" = "3.9" ]; then
@@ -360,23 +302,10 @@ bootstrap_remote_rhel_9()
360
302
  bootstrap_remote_rhel()
361
303
  {
362
304
  case "${platform_version}" in
363
- 7.*) bootstrap_remote_rhel_7 ;;
364
- 8.*) bootstrap_remote_rhel_8 ;;
365
305
  9.*) bootstrap_remote_rhel_9 ;;
366
306
  esac
367
307
  }
368
308
 
369
- bootstrap_remote_rhel_pinned_pip_packages()
370
- {
371
- # pin packaging and pyparsing to match the downstream vendored versions
372
- pip_packages="
373
- packaging==20.4
374
- pyparsing==2.4.7
375
- "
376
-
377
- pip_install "${pip_packages}"
378
- }
379
-
380
309
  bootstrap_remote_ubuntu()
381
310
  {
382
311
  py_pkg_prefix="python3"
@@ -430,14 +359,27 @@ bootstrap_docker()
430
359
  {
431
360
  # Required for newer mysql-server packages to install/upgrade on Ubuntu 16.04.
432
361
  rm -f /usr/sbin/policy-rc.d
362
+
363
+ for key_value in ${python_interpreters}; do
364
+ IFS=':' read -r python_version python_interpreter << EOF
365
+ ${key_value}
366
+ EOF
367
+
368
+ echo "Bootstrapping Python ${python_version} at: ${python_interpreter}"
369
+
370
+ remove_externally_managed_marker
371
+ done
433
372
  }
434
373
 
435
374
  bootstrap_remote()
436
375
  {
437
- for python_version in ${python_versions}; do
438
- echo "Bootstrapping Python ${python_version}"
376
+ for key_value in ${python_interpreters}; do
377
+ IFS=':' read -r python_version python_interpreter << EOF
378
+ ${key_value}
379
+ EOF
380
+
381
+ echo "Bootstrapping Python ${python_version} at: ${python_interpreter}"
439
382
 
440
- python_interpreter="python${python_version}"
441
383
  python_package_version="$(echo "${python_version}" | tr -d '.')"
442
384
 
443
385
  case "${platform}" in
@@ -448,6 +390,8 @@ bootstrap_remote()
448
390
  "rhel") bootstrap_remote_rhel ;;
449
391
  "ubuntu") bootstrap_remote_ubuntu ;;
450
392
  esac
393
+
394
+ remove_externally_managed_marker
451
395
  done
452
396
  }
453
397
 
@@ -474,7 +418,7 @@ bootstrap_type=#{bootstrap_type}
474
418
  controller=#{controller}
475
419
  platform=#{platform}
476
420
  platform_version=#{platform_version}
477
- python_versions=#{python_versions}
421
+ python_interpreters=#{python_interpreters}
478
422
  ssh_key_type=#{ssh_key_type}
479
423
  ssh_private_key=#{ssh_private_key}
480
424
  ssh_public_key=#{ssh_public_key}
@@ -1,6 +1,5 @@
1
1
  """A tool for probing cgroups to determine write access."""
2
- from __future__ import (absolute_import, division, print_function)
3
- __metaclass__ = type
2
+ from __future__ import annotations
4
3
 
5
4
  import json
6
5
  import os
@@ -1,20 +1,17 @@
1
1
  """Custom entry-point for pip that filters out unwanted logging and warnings."""
2
- from __future__ import (absolute_import, division, print_function)
3
- __metaclass__ = type
2
+ from __future__ import annotations
4
3
 
5
4
  import logging
6
5
  import os
7
6
  import re
8
7
  import runpy
9
8
  import sys
10
- import warnings
11
9
 
12
10
  BUILTIN_FILTERER_FILTER = logging.Filterer.filter
13
11
 
14
12
  LOGGING_MESSAGE_FILTER = re.compile("^("
15
13
  ".*Running pip install with root privileges is generally not a good idea.*|" # custom Fedora patch [1]
16
14
  ".*Running pip as the 'root' user can result in broken permissions .*|" # pip 21.1
17
- "DEPRECATION: Python 2.7 will reach the end of its life .*|" # pip 19.2.3
18
15
  "Ignoring .*: markers .* don't match your environment|"
19
16
  "Looking in indexes: .*|" # pypi-test-container
20
17
  "Requirement already satisfied.*"
@@ -22,13 +19,6 @@ LOGGING_MESSAGE_FILTER = re.compile("^("
22
19
 
23
20
  # [1] https://src.fedoraproject.org/rpms/python-pip/blob/f34/f/emit-a-warning-when-running-with-root-privileges.patch
24
21
 
25
- WARNING_MESSAGE_FILTERS = (
26
- # DEPRECATION: Python 2.7 reached the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 is no longer maintained.
27
- # pip 21.0 will drop support for Python 2.7 in January 2021.
28
- # More details about Python 2 support in pip, can be found at https://pip.pypa.io/en/latest/development/release-process/#python-2-support
29
- 'DEPRECATION: Python 2.7 reached the end of its life ',
30
- )
31
-
32
22
 
33
23
  def custom_filterer_filter(self, record):
34
24
  """Globally omit logging of unwanted messages."""
@@ -44,11 +34,6 @@ def main():
44
34
  # It also avoids problems with loss of color output and mixing up the order of stdout/stderr messages.
45
35
  logging.Filterer.filter = custom_filterer_filter
46
36
 
47
- for message_filter in WARNING_MESSAGE_FILTERS:
48
- # Setting filterwarnings in code is necessary because of the following:
49
- # Python 2.7 cannot use the -W option to match warning text after a colon. This makes it impossible to match specific warning messages.
50
- warnings.filterwarnings('ignore', message_filter)
51
-
52
37
  get_pip = os.environ.get('GET_PIP')
53
38
 
54
39
  try:
@@ -1,6 +1,5 @@
1
1
  """A tool for installing test requirements on the controller and target host."""
2
- from __future__ import (absolute_import, division, print_function)
3
- __metaclass__ = type
2
+ from __future__ import annotations
4
3
 
5
4
  # pylint: disable=wrong-import-position
6
5
 
@@ -250,6 +249,14 @@ def common_pip_environment(): # type: () -> t.Dict[str, str]
250
249
  """Return common environment variables used to run pip."""
251
250
  env = os.environ.copy()
252
251
 
252
+ # When ansible-test installs requirements outside a virtual environment, it does so under one of two conditions:
253
+ # 1) The environment is an ephemeral one provisioned by ansible-test.
254
+ # 2) The user has provided the `--requirements` option to force installation of requirements.
255
+ # It seems reasonable to bypass PEP 668 checks in both of these cases.
256
+ # Doing so with an environment variable allows it to work under any version of pip which supports it, without breaking older versions.
257
+ # NOTE: pip version 23.0 enforces PEP 668 but does not support the override, in which case upgrading pip is required.
258
+ env.update(PIP_BREAK_SYSTEM_PACKAGES='1')
259
+
253
260
  return env
254
261
 
255
262
 
@@ -1,6 +1,5 @@
1
1
  """Detect the real python interpreter when running in a virtual environment created by the 'virtualenv' module."""
2
- from __future__ import (absolute_import, division, print_function)
3
- __metaclass__ = type
2
+ from __future__ import annotations
4
3
 
5
4
  import json
6
5
 
@@ -1,6 +1,5 @@
1
1
  """Show availability of PyYAML and libyaml support."""
2
- from __future__ import (absolute_import, division, print_function)
3
- __metaclass__ = type
2
+ from __future__ import annotations
4
3
 
5
4
  import json
6
5
 
@@ -1,16 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- # Copyright (c) 2019 Ansible Project
3
- # Simplified BSD License (see licenses/simplified_bsd.txt or https://opensource.org/licenses/BSD-2-Clause)
4
-
5
- from __future__ import absolute_import, division, print_function
6
- __metaclass__ = type
7
-
8
- import types
9
- import json
10
-
11
- # Detect the python-json library which is incompatible
12
- try:
13
- if not isinstance(json.loads, types.FunctionType) or not isinstance(json.dumps, types.FunctionType):
14
- raise ImportError('json.loads or json.dumps were not found in the imported json library.')
15
- except AttributeError:
16
- raise ImportError('python-json was detected, which is incompatible.')