ansible-core 2.18.7__py3-none-any.whl → 2.19.0__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 (757) hide show
  1. ansible/_internal/__init__.py +53 -0
  2. ansible/_internal/_ansiballz/__init__.py +0 -0
  3. ansible/_internal/_ansiballz/_builder.py +101 -0
  4. ansible/_internal/_ansiballz/_wrapper.py +262 -0
  5. ansible/_internal/_collection_proxy.py +47 -0
  6. ansible/_internal/_datatag/__init__.py +0 -0
  7. ansible/_internal/_datatag/_tags.py +130 -0
  8. ansible/_internal/_datatag/_utils.py +19 -0
  9. ansible/_internal/_datatag/_wrappers.py +33 -0
  10. ansible/_internal/_errors/__init__.py +0 -0
  11. ansible/_internal/_errors/_alarm_timeout.py +66 -0
  12. ansible/_internal/_errors/_captured.py +123 -0
  13. ansible/_internal/_errors/_error_factory.py +89 -0
  14. ansible/_internal/_errors/_error_utils.py +240 -0
  15. ansible/_internal/_errors/_handler.py +91 -0
  16. ansible/_internal/_errors/_task_timeout.py +28 -0
  17. ansible/_internal/_event_formatting.py +127 -0
  18. ansible/_internal/_json/__init__.py +214 -0
  19. ansible/_internal/_json/_legacy_encoder.py +34 -0
  20. ansible/_internal/_json/_profiles/__init__.py +0 -0
  21. ansible/_internal/_json/_profiles/_cache_persistence.py +57 -0
  22. ansible/_internal/_json/_profiles/_inventory_legacy.py +40 -0
  23. ansible/_internal/_json/_profiles/_legacy.py +189 -0
  24. ansible/_internal/_locking.py +21 -0
  25. ansible/_internal/_plugins/__init__.py +0 -0
  26. ansible/_internal/_plugins/_cache.py +57 -0
  27. ansible/_internal/_ssh/__init__.py +0 -0
  28. ansible/_internal/_ssh/_agent_launch.py +91 -0
  29. ansible/_internal/_ssh/_ssh_agent.py +619 -0
  30. ansible/_internal/_task.py +78 -0
  31. ansible/_internal/_templating/__init__.py +12 -0
  32. ansible/_internal/_templating/_access.py +86 -0
  33. ansible/_internal/_templating/_chain_templar.py +63 -0
  34. ansible/_internal/_templating/_datatag.py +95 -0
  35. ansible/_internal/_templating/_engine.py +592 -0
  36. ansible/_internal/_templating/_errors.py +28 -0
  37. ansible/_internal/_templating/_jinja_bits.py +1106 -0
  38. ansible/_internal/_templating/_jinja_common.py +323 -0
  39. ansible/_internal/_templating/_jinja_patches.py +44 -0
  40. ansible/_internal/_templating/_jinja_plugins.py +375 -0
  41. ansible/_internal/_templating/_lazy_containers.py +633 -0
  42. ansible/_internal/_templating/_marker_behaviors.py +103 -0
  43. ansible/_internal/_templating/_template_vars.py +72 -0
  44. ansible/_internal/_templating/_transform.py +70 -0
  45. ansible/_internal/_templating/_utils.py +108 -0
  46. ansible/_internal/_testing.py +26 -0
  47. ansible/_internal/_wrapt.py +1052 -0
  48. ansible/_internal/_yaml/__init__.py +0 -0
  49. ansible/_internal/_yaml/_constructor.py +240 -0
  50. ansible/_internal/_yaml/_dumper.py +70 -0
  51. ansible/_internal/_yaml/_errors.py +166 -0
  52. ansible/_internal/_yaml/_loader.py +66 -0
  53. ansible/_internal/ansible_collections/ansible/_protomatter/README.md +11 -0
  54. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/action/debug.py +36 -0
  55. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/apply_trust.py +19 -0
  56. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/dump_object.py +27 -0
  57. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/finalize.py +16 -0
  58. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/origin.py +18 -0
  59. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.py +24 -0
  60. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.yml +33 -0
  61. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/tag_names.py +16 -0
  62. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/true_type.py +17 -0
  63. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/unmask.py +49 -0
  64. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.py +21 -0
  65. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.yml +2 -0
  66. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.py +15 -0
  67. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.yml +19 -0
  68. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.py +18 -0
  69. ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.yml +19 -0
  70. ansible/cli/__init__.py +93 -104
  71. ansible/cli/_ssh_askpass.py +54 -0
  72. ansible/cli/adhoc.py +20 -10
  73. ansible/cli/arguments/option_helpers.py +163 -10
  74. ansible/cli/config.py +43 -68
  75. ansible/cli/console.py +13 -11
  76. ansible/cli/doc.py +134 -77
  77. ansible/cli/galaxy.py +27 -20
  78. ansible/cli/inventory.py +28 -28
  79. ansible/cli/playbook.py +4 -12
  80. ansible/cli/pull.py +6 -3
  81. ansible/cli/scripts/ansible_connection_cli_stub.py +7 -7
  82. ansible/cli/vault.py +12 -11
  83. ansible/compat/__init__.py +2 -2
  84. ansible/compat/importlib_resources.py +9 -12
  85. ansible/config/base.yml +218 -133
  86. ansible/config/manager.py +220 -159
  87. ansible/constants.py +2 -65
  88. ansible/errors/__init__.py +350 -256
  89. ansible/executor/interpreter_discovery.py +28 -149
  90. ansible/executor/module_common.py +480 -514
  91. ansible/executor/play_iterator.py +22 -27
  92. ansible/executor/playbook_executor.py +11 -11
  93. ansible/executor/powershell/async_watchdog.ps1 +97 -102
  94. ansible/executor/powershell/async_wrapper.ps1 +204 -153
  95. ansible/executor/powershell/become_wrapper.ps1 +107 -144
  96. ansible/executor/powershell/bootstrap_wrapper.ps1 +46 -9
  97. ansible/executor/powershell/coverage_wrapper.ps1 +91 -135
  98. ansible/executor/powershell/exec_wrapper.ps1 +675 -196
  99. ansible/executor/powershell/module_manifest.py +469 -265
  100. ansible/executor/powershell/module_wrapper.ps1 +195 -186
  101. ansible/executor/powershell/powershell_expand_user.ps1 +20 -0
  102. ansible/executor/powershell/powershell_mkdtemp.ps1 +17 -0
  103. ansible/executor/powershell/psrp_fetch_file.ps1 +41 -0
  104. ansible/executor/powershell/psrp_put_file.ps1 +122 -0
  105. ansible/executor/powershell/winrm_fetch_file.ps1 +46 -0
  106. ansible/executor/powershell/winrm_put_file.ps1 +36 -0
  107. ansible/executor/process/worker.py +139 -149
  108. ansible/executor/stats.py +5 -5
  109. ansible/executor/task_executor.py +270 -297
  110. ansible/executor/task_queue_manager.py +135 -137
  111. ansible/executor/task_result.py +182 -79
  112. ansible/galaxy/__init__.py +2 -2
  113. ansible/galaxy/api.py +26 -25
  114. ansible/galaxy/collection/__init__.py +6 -14
  115. ansible/galaxy/collection/concrete_artifact_manager.py +12 -21
  116. ansible/galaxy/dependency_resolution/dataclasses.py +14 -4
  117. ansible/galaxy/dependency_resolution/providers.py +4 -4
  118. ansible/galaxy/dependency_resolution/reporters.py +81 -0
  119. ansible/galaxy/role.py +6 -10
  120. ansible/galaxy/token.py +28 -21
  121. ansible/inventory/data.py +47 -57
  122. ansible/inventory/group.py +50 -73
  123. ansible/inventory/helpers.py +9 -0
  124. ansible/inventory/host.py +37 -54
  125. ansible/inventory/manager.py +79 -34
  126. ansible/keyword_desc.yml +1 -1
  127. ansible/module_utils/_internal/__init__.py +55 -0
  128. ansible/module_utils/_internal/_ambient_context.py +58 -0
  129. ansible/module_utils/_internal/_ansiballz/__init__.py +0 -0
  130. ansible/module_utils/_internal/_ansiballz/_extensions/__init__.py +0 -0
  131. ansible/module_utils/_internal/_ansiballz/_extensions/_coverage.py +45 -0
  132. ansible/module_utils/_internal/_ansiballz/_extensions/_pydevd.py +62 -0
  133. ansible/module_utils/_internal/_ansiballz/_loader.py +81 -0
  134. ansible/module_utils/_internal/_ansiballz/_respawn.py +32 -0
  135. ansible/module_utils/_internal/_ansiballz/_respawn_wrapper.py +23 -0
  136. ansible/module_utils/_internal/_concurrent/_daemon_threading.py +1 -0
  137. ansible/module_utils/_internal/_dataclass_validation.py +217 -0
  138. ansible/module_utils/_internal/_datatag/__init__.py +961 -0
  139. ansible/module_utils/_internal/_datatag/_tags.py +16 -0
  140. ansible/module_utils/_internal/_debugging.py +31 -0
  141. ansible/module_utils/_internal/_deprecator.py +157 -0
  142. ansible/module_utils/_internal/_errors.py +101 -0
  143. ansible/module_utils/_internal/_event_utils.py +61 -0
  144. ansible/module_utils/_internal/_json/__init__.py +63 -0
  145. ansible/module_utils/_internal/_json/_legacy_encoder.py +26 -0
  146. ansible/module_utils/_internal/_json/_profiles/__init__.py +428 -0
  147. ansible/module_utils/_internal/_json/_profiles/_fallback_to_str.py +73 -0
  148. ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py +33 -0
  149. ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py +37 -0
  150. ansible/module_utils/_internal/_json/_profiles/_module_modern_c2m.py +35 -0
  151. ansible/module_utils/_internal/_json/_profiles/_module_modern_m2c.py +33 -0
  152. ansible/module_utils/_internal/_json/_profiles/_tagless.py +52 -0
  153. ansible/module_utils/_internal/_messages.py +130 -0
  154. ansible/module_utils/_internal/_patches/__init__.py +66 -0
  155. ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py +53 -0
  156. ansible/module_utils/_internal/_patches/_socket_patch.py +34 -0
  157. ansible/module_utils/_internal/_patches/_sys_intern_patch.py +34 -0
  158. ansible/module_utils/_internal/_plugin_info.py +38 -0
  159. ansible/module_utils/_internal/_stack.py +22 -0
  160. ansible/module_utils/_internal/_testing.py +0 -0
  161. ansible/module_utils/_internal/_text_utils.py +6 -0
  162. ansible/module_utils/_internal/_traceback.py +92 -0
  163. ansible/module_utils/_internal/_validation.py +14 -0
  164. ansible/module_utils/ansible_release.py +2 -2
  165. ansible/module_utils/api.py +1 -2
  166. ansible/module_utils/basic.py +303 -202
  167. ansible/module_utils/common/_utils.py +24 -28
  168. ansible/module_utils/common/arg_spec.py +8 -3
  169. ansible/module_utils/common/collections.py +7 -2
  170. ansible/module_utils/common/dict_transformations.py +2 -2
  171. ansible/module_utils/common/file.py +2 -2
  172. ansible/module_utils/common/json.py +90 -84
  173. ansible/module_utils/common/locale.py +2 -2
  174. ansible/module_utils/common/parameters.py +27 -24
  175. ansible/module_utils/common/process.py +2 -3
  176. ansible/module_utils/common/respawn.py +11 -33
  177. ansible/module_utils/common/sentinel.py +66 -0
  178. ansible/module_utils/common/sys_info.py +8 -8
  179. ansible/module_utils/common/text/converters.py +16 -37
  180. ansible/module_utils/common/validation.py +35 -24
  181. ansible/module_utils/common/warnings.py +143 -25
  182. ansible/module_utils/common/yaml.py +29 -3
  183. ansible/module_utils/compat/datetime.py +33 -21
  184. ansible/module_utils/compat/paramiko.py +21 -10
  185. ansible/module_utils/compat/typing.py +6 -5
  186. ansible/module_utils/connection.py +10 -13
  187. ansible/module_utils/csharp/Ansible.Basic.cs +15 -12
  188. ansible/module_utils/csharp/Ansible.Become.cs +1 -0
  189. ansible/module_utils/csharp/Ansible.Privilege.cs +2 -2
  190. ansible/module_utils/csharp/Ansible._Async.cs +517 -0
  191. ansible/module_utils/datatag.py +49 -0
  192. ansible/module_utils/distro/__init__.py +2 -2
  193. ansible/module_utils/facts/ansible_collector.py +4 -5
  194. ansible/module_utils/facts/collector.py +13 -14
  195. ansible/module_utils/facts/compat.py +4 -4
  196. ansible/module_utils/facts/default_collectors.py +1 -1
  197. ansible/module_utils/facts/hardware/aix.py +34 -0
  198. ansible/module_utils/facts/hardware/base.py +2 -2
  199. ansible/module_utils/facts/hardware/darwin.py +1 -3
  200. ansible/module_utils/facts/hardware/freebsd.py +2 -2
  201. ansible/module_utils/facts/hardware/linux.py +5 -5
  202. ansible/module_utils/facts/namespace.py +1 -1
  203. ansible/module_utils/facts/network/base.py +1 -1
  204. ansible/module_utils/facts/network/fc_wwn.py +1 -2
  205. ansible/module_utils/facts/network/iscsi.py +1 -2
  206. ansible/module_utils/facts/network/nvme.py +1 -2
  207. ansible/module_utils/facts/other/facter.py +2 -3
  208. ansible/module_utils/facts/other/ohai.py +2 -3
  209. ansible/module_utils/facts/sysctl.py +4 -6
  210. ansible/module_utils/facts/system/apparmor.py +1 -2
  211. ansible/module_utils/facts/system/caps.py +3 -3
  212. ansible/module_utils/facts/system/chroot.py +1 -2
  213. ansible/module_utils/facts/system/cmdline.py +1 -2
  214. ansible/module_utils/facts/system/date_time.py +5 -3
  215. ansible/module_utils/facts/system/distribution.py +27 -13
  216. ansible/module_utils/facts/system/dns.py +1 -1
  217. ansible/module_utils/facts/system/env.py +1 -2
  218. ansible/module_utils/facts/system/fips.py +7 -20
  219. ansible/module_utils/facts/system/loadavg.py +1 -2
  220. ansible/module_utils/facts/system/local.py +2 -3
  221. ansible/module_utils/facts/system/lsb.py +1 -2
  222. ansible/module_utils/facts/system/pkg_mgr.py +1 -2
  223. ansible/module_utils/facts/system/platform.py +1 -2
  224. ansible/module_utils/facts/system/python.py +1 -2
  225. ansible/module_utils/facts/system/selinux.py +1 -1
  226. ansible/module_utils/facts/system/service_mgr.py +1 -2
  227. ansible/module_utils/facts/system/ssh_pub_keys.py +1 -1
  228. ansible/module_utils/facts/system/systemd.py +1 -1
  229. ansible/module_utils/facts/system/user.py +1 -2
  230. ansible/module_utils/facts/utils.py +3 -3
  231. ansible/module_utils/facts/virtual/base.py +1 -1
  232. ansible/module_utils/facts/virtual/linux.py +3 -3
  233. ansible/module_utils/facts/virtual/sunos.py +3 -15
  234. ansible/module_utils/facts/virtual/sysctl.py +3 -16
  235. ansible/module_utils/json_utils.py +2 -2
  236. ansible/module_utils/parsing/convert_bool.py +7 -1
  237. ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1 +1 -1
  238. ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1 +1 -1
  239. ansible/module_utils/powershell/Ansible.ModuleUtils.CommandUtil.psm1 +1 -1
  240. ansible/module_utils/powershell/Ansible.ModuleUtils.WebRequest.psm1 +1 -1
  241. ansible/module_utils/service.py +21 -31
  242. ansible/module_utils/splitter.py +7 -7
  243. ansible/module_utils/testing.py +31 -0
  244. ansible/module_utils/urls.py +64 -35
  245. ansible/modules/add_host.py +4 -4
  246. ansible/modules/apt.py +69 -49
  247. ansible/modules/apt_key.py +19 -12
  248. ansible/modules/apt_repository.py +32 -51
  249. ansible/modules/assemble.py +16 -14
  250. ansible/modules/assert.py +4 -4
  251. ansible/modules/async_status.py +24 -24
  252. ansible/modules/async_wrapper.py +20 -25
  253. ansible/modules/blockinfile.py +6 -7
  254. ansible/modules/command.py +13 -20
  255. ansible/modules/copy.py +60 -147
  256. ansible/modules/cron.py +24 -21
  257. ansible/modules/deb822_repository.py +8 -9
  258. ansible/modules/debconf.py +5 -5
  259. ansible/modules/debug.py +4 -4
  260. ansible/modules/dnf.py +8 -8
  261. ansible/modules/dnf5.py +39 -13
  262. ansible/modules/dpkg_selections.py +4 -4
  263. ansible/modules/expect.py +13 -15
  264. ansible/modules/fail.py +4 -4
  265. ansible/modules/fetch.py +4 -4
  266. ansible/modules/file.py +184 -144
  267. ansible/modules/find.py +22 -20
  268. ansible/modules/gather_facts.py +3 -3
  269. ansible/modules/get_url.py +77 -54
  270. ansible/modules/getent.py +7 -9
  271. ansible/modules/git.py +38 -38
  272. ansible/modules/group.py +6 -6
  273. ansible/modules/group_by.py +4 -4
  274. ansible/modules/hostname.py +15 -32
  275. ansible/modules/import_playbook.py +6 -6
  276. ansible/modules/import_role.py +6 -6
  277. ansible/modules/import_tasks.py +6 -6
  278. ansible/modules/include_role.py +6 -6
  279. ansible/modules/include_tasks.py +6 -6
  280. ansible/modules/include_vars.py +6 -6
  281. ansible/modules/iptables.py +86 -73
  282. ansible/modules/known_hosts.py +22 -24
  283. ansible/modules/lineinfile.py +5 -5
  284. ansible/modules/meta.py +4 -4
  285. ansible/modules/mount_facts.py +2 -2
  286. ansible/modules/package.py +10 -4
  287. ansible/modules/package_facts.py +22 -10
  288. ansible/modules/pause.py +6 -6
  289. ansible/modules/ping.py +6 -6
  290. ansible/modules/pip.py +21 -26
  291. ansible/modules/raw.py +6 -6
  292. ansible/modules/reboot.py +6 -6
  293. ansible/modules/replace.py +10 -14
  294. ansible/modules/rpm_key.py +7 -8
  295. ansible/modules/script.py +4 -4
  296. ansible/modules/service.py +10 -17
  297. ansible/modules/service_facts.py +87 -10
  298. ansible/modules/set_fact.py +5 -5
  299. ansible/modules/set_stats.py +4 -4
  300. ansible/modules/setup.py +2 -2
  301. ansible/modules/shell.py +6 -6
  302. ansible/modules/slurp.py +16 -19
  303. ansible/modules/stat.py +15 -31
  304. ansible/modules/subversion.py +15 -15
  305. ansible/modules/systemd.py +7 -7
  306. ansible/modules/systemd_service.py +7 -7
  307. ansible/modules/sysvinit.py +9 -9
  308. ansible/modules/tempfile.py +5 -6
  309. ansible/modules/template.py +6 -6
  310. ansible/modules/unarchive.py +38 -17
  311. ansible/modules/uri.py +33 -26
  312. ansible/modules/user.py +45 -32
  313. ansible/modules/validate_argument_spec.py +10 -7
  314. ansible/modules/wait_for.py +70 -60
  315. ansible/modules/wait_for_connection.py +6 -6
  316. ansible/modules/yum_repository.py +10 -9
  317. ansible/parsing/ajson.py +17 -37
  318. ansible/parsing/dataloader.py +99 -54
  319. ansible/parsing/mod_args.py +62 -60
  320. ansible/parsing/plugin_docs.py +21 -86
  321. ansible/parsing/quoting.py +1 -1
  322. ansible/parsing/splitter.py +27 -12
  323. ansible/parsing/utils/addresses.py +24 -24
  324. ansible/parsing/utils/jsonify.py +5 -1
  325. ansible/parsing/utils/yaml.py +32 -61
  326. ansible/parsing/vault/__init__.py +327 -99
  327. ansible/parsing/yaml/__init__.py +0 -18
  328. ansible/parsing/yaml/dumper.py +6 -120
  329. ansible/parsing/yaml/loader.py +6 -39
  330. ansible/parsing/yaml/objects.py +43 -335
  331. ansible/playbook/__init__.py +1 -1
  332. ansible/playbook/attribute.py +8 -3
  333. ansible/playbook/base.py +187 -134
  334. ansible/playbook/block.py +26 -24
  335. ansible/playbook/collectionsearch.py +1 -15
  336. ansible/playbook/conditional.py +3 -77
  337. ansible/playbook/handler.py +8 -2
  338. ansible/playbook/helpers.py +41 -53
  339. ansible/playbook/included_file.py +32 -26
  340. ansible/playbook/loop_control.py +2 -2
  341. ansible/playbook/play.py +85 -44
  342. ansible/playbook/play_context.py +14 -17
  343. ansible/playbook/playbook_include.py +27 -62
  344. ansible/playbook/role/__init__.py +64 -49
  345. ansible/playbook/role/definition.py +15 -17
  346. ansible/playbook/role/include.py +2 -4
  347. ansible/playbook/role/metadata.py +10 -11
  348. ansible/playbook/role_include.py +3 -3
  349. ansible/playbook/taggable.py +28 -12
  350. ansible/playbook/task.py +192 -121
  351. ansible/playbook/task_include.py +5 -5
  352. ansible/plugins/__init__.py +58 -26
  353. ansible/plugins/action/__init__.py +188 -186
  354. ansible/plugins/action/add_host.py +2 -2
  355. ansible/plugins/action/assemble.py +11 -18
  356. ansible/plugins/action/assert.py +55 -67
  357. ansible/plugins/action/async_status.py +7 -2
  358. ansible/plugins/action/copy.py +14 -17
  359. ansible/plugins/action/debug.py +37 -31
  360. ansible/plugins/action/dnf.py +3 -4
  361. ansible/plugins/action/fail.py +1 -1
  362. ansible/plugins/action/fetch.py +7 -8
  363. ansible/plugins/action/gather_facts.py +13 -14
  364. ansible/plugins/action/group_by.py +1 -1
  365. ansible/plugins/action/include_vars.py +10 -11
  366. ansible/plugins/action/package.py +8 -14
  367. ansible/plugins/action/pause.py +2 -2
  368. ansible/plugins/action/script.py +27 -38
  369. ansible/plugins/action/service.py +9 -18
  370. ansible/plugins/action/set_fact.py +3 -12
  371. ansible/plugins/action/set_stats.py +3 -8
  372. ansible/plugins/action/template.py +47 -67
  373. ansible/plugins/action/unarchive.py +6 -16
  374. ansible/plugins/action/uri.py +9 -20
  375. ansible/plugins/action/validate_argument_spec.py +5 -5
  376. ansible/plugins/action/wait_for_connection.py +1 -1
  377. ansible/plugins/become/__init__.py +31 -8
  378. ansible/plugins/become/runas.py +71 -0
  379. ansible/plugins/become/su.py +13 -8
  380. ansible/plugins/become/sudo.py +19 -0
  381. ansible/plugins/cache/__init__.py +52 -63
  382. ansible/plugins/cache/base.py +8 -0
  383. ansible/plugins/cache/jsonfile.py +10 -16
  384. ansible/plugins/cache/memory.py +6 -12
  385. ansible/plugins/callback/__init__.py +294 -201
  386. ansible/plugins/callback/default.py +99 -95
  387. ansible/plugins/callback/junit.py +44 -43
  388. ansible/plugins/callback/minimal.py +28 -25
  389. ansible/plugins/callback/oneline.py +34 -21
  390. ansible/plugins/callback/tree.py +27 -16
  391. ansible/plugins/connection/__init__.py +47 -34
  392. ansible/plugins/connection/local.py +156 -60
  393. ansible/plugins/connection/paramiko_ssh.py +34 -24
  394. ansible/plugins/connection/psrp.py +76 -165
  395. ansible/plugins/connection/ssh.py +326 -86
  396. ansible/plugins/connection/winrm.py +62 -141
  397. ansible/plugins/doc_fragments/action_common_attributes.py +14 -14
  398. ansible/plugins/doc_fragments/action_core.py +6 -6
  399. ansible/plugins/doc_fragments/backup.py +2 -2
  400. ansible/plugins/doc_fragments/checksum_common.py +27 -0
  401. ansible/plugins/doc_fragments/constructed.py +8 -4
  402. ansible/plugins/doc_fragments/decrypt.py +2 -2
  403. ansible/plugins/doc_fragments/default_callback.py +2 -2
  404. ansible/plugins/doc_fragments/files.py +2 -2
  405. ansible/plugins/doc_fragments/inventory_cache.py +2 -2
  406. ansible/plugins/doc_fragments/result_format_callback.py +2 -2
  407. ansible/plugins/doc_fragments/return_common.py +2 -2
  408. ansible/plugins/doc_fragments/template_common.py +4 -4
  409. ansible/plugins/doc_fragments/url.py +17 -1
  410. ansible/plugins/doc_fragments/url_windows.py +2 -2
  411. ansible/plugins/doc_fragments/validate.py +2 -2
  412. ansible/plugins/doc_fragments/vars_plugin_staging.py +2 -2
  413. ansible/plugins/filter/__init__.py +6 -2
  414. ansible/plugins/filter/b64decode.yml +22 -0
  415. ansible/plugins/filter/b64encode.yml +22 -0
  416. ansible/plugins/filter/bool.yml +11 -4
  417. ansible/plugins/filter/core.py +245 -120
  418. ansible/plugins/filter/encryption.py +42 -34
  419. ansible/plugins/filter/flatten.yml +3 -2
  420. ansible/plugins/filter/human_to_bytes.yml +1 -1
  421. ansible/plugins/filter/mathstuff.py +30 -37
  422. ansible/plugins/filter/password_hash.yml +8 -0
  423. ansible/plugins/filter/pow.yml +1 -1
  424. ansible/plugins/filter/regex_search.yml +1 -4
  425. ansible/plugins/filter/root.yml +1 -1
  426. ansible/plugins/filter/split.yml +1 -1
  427. ansible/plugins/filter/strftime.yml +3 -3
  428. ansible/plugins/filter/to_nice_yaml.yml +0 -4
  429. ansible/plugins/filter/to_uuid.yml +1 -1
  430. ansible/plugins/filter/to_yaml.yml +0 -4
  431. ansible/plugins/filter/unvault.yml +1 -1
  432. ansible/plugins/filter/urls.py +1 -1
  433. ansible/plugins/filter/urlsplit.py +8 -9
  434. ansible/plugins/filter/vault.yml +14 -9
  435. ansible/plugins/filter/win_basename.yml +6 -1
  436. ansible/plugins/filter/win_dirname.yml +5 -0
  437. ansible/plugins/inventory/__init__.py +107 -86
  438. ansible/plugins/inventory/advanced_host_list.py +7 -5
  439. ansible/plugins/inventory/auto.py +11 -4
  440. ansible/plugins/inventory/constructed.py +21 -24
  441. ansible/plugins/inventory/generator.py +16 -11
  442. ansible/plugins/inventory/host_list.py +7 -5
  443. ansible/plugins/inventory/ini.py +78 -44
  444. ansible/plugins/inventory/script.py +190 -120
  445. ansible/plugins/inventory/toml.py +16 -126
  446. ansible/plugins/inventory/yaml.py +10 -8
  447. ansible/plugins/list.py +72 -19
  448. ansible/plugins/loader.py +383 -198
  449. ansible/plugins/lookup/__init__.py +21 -4
  450. ansible/plugins/lookup/config.py +21 -35
  451. ansible/plugins/lookup/csvfile.py +19 -73
  452. ansible/plugins/lookup/dict.py +1 -6
  453. ansible/plugins/lookup/env.py +12 -9
  454. ansible/plugins/lookup/file.py +5 -8
  455. ansible/plugins/lookup/first_found.py +87 -55
  456. ansible/plugins/lookup/indexed_items.py +1 -10
  457. ansible/plugins/lookup/ini.py +14 -13
  458. ansible/plugins/lookup/items.py +1 -1
  459. ansible/plugins/lookup/lines.py +8 -1
  460. ansible/plugins/lookup/list.py +1 -1
  461. ansible/plugins/lookup/nested.py +2 -18
  462. ansible/plugins/lookup/password.py +5 -5
  463. ansible/plugins/lookup/pipe.py +5 -7
  464. ansible/plugins/lookup/sequence.py +18 -8
  465. ansible/plugins/lookup/subelements.py +1 -4
  466. ansible/plugins/lookup/template.py +47 -36
  467. ansible/plugins/lookup/together.py +0 -12
  468. ansible/plugins/lookup/unvault.py +1 -5
  469. ansible/plugins/lookup/url.py +4 -10
  470. ansible/plugins/lookup/vars.py +16 -24
  471. ansible/plugins/shell/__init__.py +58 -4
  472. ansible/plugins/shell/cmd.py +2 -2
  473. ansible/plugins/shell/powershell.py +106 -31
  474. ansible/plugins/shell/sh.py +13 -7
  475. ansible/plugins/strategy/__init__.py +168 -193
  476. ansible/plugins/strategy/debug.py +2 -2
  477. ansible/plugins/strategy/free.py +16 -31
  478. ansible/plugins/strategy/host_pinned.py +2 -2
  479. ansible/plugins/strategy/linear.py +41 -41
  480. ansible/plugins/terminal/__init__.py +4 -4
  481. ansible/plugins/test/__init__.py +7 -2
  482. ansible/plugins/test/core.py +75 -35
  483. ansible/plugins/test/files.py +1 -1
  484. ansible/plugins/test/finished.yml +1 -1
  485. ansible/plugins/test/mathstuff.py +3 -3
  486. ansible/plugins/test/uri.py +5 -8
  487. ansible/plugins/vars/host_group_vars.py +7 -14
  488. ansible/release.py +2 -2
  489. ansible/template/__init__.py +353 -943
  490. ansible/utils/__init__.py +0 -18
  491. ansible/utils/collection_loader/__init__.py +54 -5
  492. ansible/utils/collection_loader/_collection_config.py +5 -6
  493. ansible/utils/collection_loader/_collection_finder.py +82 -96
  494. ansible/utils/collection_loader/_collection_meta.py +15 -8
  495. ansible/utils/display.py +485 -73
  496. ansible/utils/encrypt.py +27 -19
  497. ansible/utils/fqcn.py +2 -2
  498. ansible/utils/galaxy.py +2 -2
  499. ansible/utils/hashing.py +8 -10
  500. ansible/utils/helpers.py +2 -2
  501. ansible/utils/listify.py +10 -8
  502. ansible/utils/lock.py +2 -2
  503. ansible/utils/path.py +10 -12
  504. ansible/utils/plugin_docs.py +16 -14
  505. ansible/utils/py3compat.py +2 -7
  506. ansible/utils/sentinel.py +4 -62
  507. ansible/utils/singleton.py +2 -0
  508. ansible/utils/ssh_functions.py +6 -2
  509. ansible/utils/unsafe_proxy.py +23 -332
  510. ansible/utils/vars.py +55 -8
  511. ansible/utils/version.py +2 -2
  512. ansible/vars/clean.py +5 -5
  513. ansible/vars/hostvars.py +60 -90
  514. ansible/vars/manager.py +220 -285
  515. ansible/vars/plugins.py +4 -4
  516. ansible/vars/reserved.py +13 -12
  517. {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/METADATA +4 -3
  518. ansible_core-2.19.0.dist-info/RECORD +1097 -0
  519. ansible_core-2.19.0.dist-info/licenses/licenses/BSD-3-Clause.txt +28 -0
  520. ansible_test/_data/completion/docker.txt +7 -7
  521. ansible_test/_data/completion/remote.txt +6 -6
  522. ansible_test/_data/completion/windows.txt +1 -0
  523. ansible_test/_data/requirements/ansible.txt +2 -2
  524. ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
  525. ansible_test/_data/requirements/sanity.changelog.txt +2 -2
  526. ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
  527. ansible_test/_data/requirements/sanity.pep8.txt +1 -1
  528. ansible_test/_data/requirements/sanity.pylint.txt +5 -5
  529. ansible_test/_data/requirements/sanity.validate-modules.txt +2 -2
  530. ansible_test/_data/requirements/sanity.yamllint.txt +1 -1
  531. ansible_test/_data/requirements/units.txt +1 -0
  532. ansible_test/_internal/__init__.py +6 -0
  533. ansible_test/_internal/ansible_util.py +3 -1
  534. ansible_test/_internal/become.py +1 -0
  535. ansible_test/_internal/bootstrap.py +1 -0
  536. ansible_test/_internal/cache.py +1 -0
  537. ansible_test/_internal/cgroup.py +1 -0
  538. ansible_test/_internal/ci/__init__.py +1 -0
  539. ansible_test/_internal/ci/azp.py +1 -0
  540. ansible_test/_internal/ci/local.py +1 -0
  541. ansible_test/_internal/classification/__init__.py +1 -0
  542. ansible_test/_internal/classification/common.py +1 -0
  543. ansible_test/_internal/classification/csharp.py +1 -0
  544. ansible_test/_internal/classification/powershell.py +1 -0
  545. ansible_test/_internal/classification/python.py +1 -0
  546. ansible_test/_internal/cli/__init__.py +1 -0
  547. ansible_test/_internal/cli/actions.py +1 -0
  548. ansible_test/_internal/cli/argparsing/__init__.py +1 -0
  549. ansible_test/_internal/cli/argparsing/actions.py +1 -0
  550. ansible_test/_internal/cli/argparsing/argcompletion.py +1 -0
  551. ansible_test/_internal/cli/argparsing/parsers.py +1 -0
  552. ansible_test/_internal/cli/commands/__init__.py +11 -5
  553. ansible_test/_internal/cli/commands/coverage/__init__.py +1 -0
  554. ansible_test/_internal/cli/commands/coverage/analyze/__init__.py +1 -0
  555. ansible_test/_internal/cli/commands/coverage/analyze/targets/__init__.py +1 -0
  556. ansible_test/_internal/cli/commands/coverage/analyze/targets/combine.py +1 -0
  557. ansible_test/_internal/cli/commands/coverage/analyze/targets/expand.py +1 -0
  558. ansible_test/_internal/cli/commands/coverage/analyze/targets/filter.py +1 -0
  559. ansible_test/_internal/cli/commands/coverage/analyze/targets/generate.py +1 -0
  560. ansible_test/_internal/cli/commands/coverage/analyze/targets/missing.py +1 -0
  561. ansible_test/_internal/cli/commands/coverage/combine.py +1 -0
  562. ansible_test/_internal/cli/commands/coverage/erase.py +1 -0
  563. ansible_test/_internal/cli/commands/coverage/html.py +1 -0
  564. ansible_test/_internal/cli/commands/coverage/report.py +1 -0
  565. ansible_test/_internal/cli/commands/coverage/xml.py +1 -0
  566. ansible_test/_internal/cli/commands/env.py +1 -0
  567. ansible_test/_internal/cli/commands/integration/__init__.py +1 -0
  568. ansible_test/_internal/cli/commands/integration/network.py +1 -0
  569. ansible_test/_internal/cli/commands/integration/posix.py +1 -0
  570. ansible_test/_internal/cli/commands/integration/windows.py +1 -0
  571. ansible_test/_internal/cli/commands/sanity.py +9 -0
  572. ansible_test/_internal/cli/commands/shell.py +1 -0
  573. ansible_test/_internal/cli/commands/units.py +1 -0
  574. ansible_test/_internal/cli/compat.py +1 -0
  575. ansible_test/_internal/cli/completers.py +1 -0
  576. ansible_test/_internal/cli/converters.py +1 -0
  577. ansible_test/_internal/cli/environments.py +52 -5
  578. ansible_test/_internal/cli/epilog.py +1 -0
  579. ansible_test/_internal/cli/parsers/__init__.py +1 -0
  580. ansible_test/_internal/cli/parsers/base_argument_parsers.py +1 -0
  581. ansible_test/_internal/cli/parsers/helpers.py +1 -0
  582. ansible_test/_internal/cli/parsers/host_config_parsers.py +1 -0
  583. ansible_test/_internal/cli/parsers/key_value_parsers.py +1 -0
  584. ansible_test/_internal/cli/parsers/value_parsers.py +1 -0
  585. ansible_test/_internal/commands/__init__.py +1 -0
  586. ansible_test/_internal/commands/coverage/__init__.py +3 -2
  587. ansible_test/_internal/commands/coverage/analyze/__init__.py +1 -0
  588. ansible_test/_internal/commands/coverage/analyze/targets/__init__.py +1 -0
  589. ansible_test/_internal/commands/coverage/analyze/targets/combine.py +1 -0
  590. ansible_test/_internal/commands/coverage/analyze/targets/expand.py +1 -0
  591. ansible_test/_internal/commands/coverage/analyze/targets/filter.py +1 -0
  592. ansible_test/_internal/commands/coverage/analyze/targets/generate.py +1 -0
  593. ansible_test/_internal/commands/coverage/analyze/targets/missing.py +1 -0
  594. ansible_test/_internal/commands/coverage/combine.py +2 -1
  595. ansible_test/_internal/commands/coverage/erase.py +1 -0
  596. ansible_test/_internal/commands/coverage/html.py +1 -0
  597. ansible_test/_internal/commands/coverage/report.py +1 -0
  598. ansible_test/_internal/commands/coverage/xml.py +1 -0
  599. ansible_test/_internal/commands/env/__init__.py +2 -0
  600. ansible_test/_internal/commands/integration/__init__.py +22 -5
  601. ansible_test/_internal/commands/integration/cloud/__init__.py +1 -0
  602. ansible_test/_internal/commands/integration/cloud/acme.py +2 -1
  603. ansible_test/_internal/commands/integration/cloud/aws.py +1 -0
  604. ansible_test/_internal/commands/integration/cloud/azure.py +1 -0
  605. ansible_test/_internal/commands/integration/cloud/cs.py +1 -0
  606. ansible_test/_internal/commands/integration/cloud/digitalocean.py +1 -0
  607. ansible_test/_internal/commands/integration/cloud/galaxy.py +3 -2
  608. ansible_test/_internal/commands/integration/cloud/hcloud.py +1 -0
  609. ansible_test/_internal/commands/integration/cloud/httptester.py +3 -2
  610. ansible_test/_internal/commands/integration/cloud/nios.py +2 -1
  611. ansible_test/_internal/commands/integration/cloud/opennebula.py +1 -0
  612. ansible_test/_internal/commands/integration/cloud/openshift.py +1 -0
  613. ansible_test/_internal/commands/integration/cloud/scaleway.py +1 -0
  614. ansible_test/_internal/commands/integration/cloud/vcenter.py +1 -0
  615. ansible_test/_internal/commands/integration/cloud/vultr.py +1 -0
  616. ansible_test/_internal/commands/integration/coverage.py +8 -2
  617. ansible_test/_internal/commands/integration/filters.py +1 -0
  618. ansible_test/_internal/commands/integration/network.py +1 -0
  619. ansible_test/_internal/commands/integration/posix.py +1 -0
  620. ansible_test/_internal/commands/integration/windows.py +1 -0
  621. ansible_test/_internal/commands/sanity/__init__.py +19 -2
  622. ansible_test/_internal/commands/sanity/ansible_doc.py +1 -0
  623. ansible_test/_internal/commands/sanity/bin_symlinks.py +1 -0
  624. ansible_test/_internal/commands/sanity/compile.py +1 -0
  625. ansible_test/_internal/commands/sanity/ignores.py +1 -0
  626. ansible_test/_internal/commands/sanity/import.py +1 -0
  627. ansible_test/_internal/commands/sanity/integration_aliases.py +12 -0
  628. ansible_test/_internal/commands/sanity/pep8.py +1 -0
  629. ansible_test/_internal/commands/sanity/pslint.py +1 -0
  630. ansible_test/_internal/commands/sanity/pylint.py +25 -26
  631. ansible_test/_internal/commands/sanity/shellcheck.py +1 -0
  632. ansible_test/_internal/commands/sanity/validate_modules.py +1 -0
  633. ansible_test/_internal/commands/sanity/yamllint.py +1 -0
  634. ansible_test/_internal/commands/shell/__init__.py +44 -4
  635. ansible_test/_internal/commands/units/__init__.py +5 -1
  636. ansible_test/_internal/compat/__init__.py +1 -0
  637. ansible_test/_internal/compat/packaging.py +1 -0
  638. ansible_test/_internal/compat/yaml.py +1 -0
  639. ansible_test/_internal/completion.py +1 -0
  640. ansible_test/_internal/config.py +23 -13
  641. ansible_test/_internal/connections.py +1 -0
  642. ansible_test/_internal/constants.py +1 -0
  643. ansible_test/_internal/containers.py +1 -0
  644. ansible_test/_internal/content_config.py +1 -0
  645. ansible_test/_internal/core_ci.py +1 -0
  646. ansible_test/_internal/coverage_util.py +11 -10
  647. ansible_test/_internal/data.py +1 -0
  648. ansible_test/_internal/debugging.py +166 -0
  649. ansible_test/_internal/delegation.py +22 -13
  650. ansible_test/_internal/dev/__init__.py +1 -0
  651. ansible_test/_internal/dev/container_probe.py +1 -0
  652. ansible_test/_internal/diff.py +3 -2
  653. ansible_test/_internal/docker_util.py +2 -1
  654. ansible_test/_internal/encoding.py +1 -0
  655. ansible_test/_internal/executor.py +1 -0
  656. ansible_test/_internal/git.py +1 -0
  657. ansible_test/_internal/host_configs.py +1 -0
  658. ansible_test/_internal/host_profiles.py +260 -16
  659. ansible_test/_internal/http.py +1 -0
  660. ansible_test/_internal/init.py +1 -0
  661. ansible_test/_internal/inventory.py +39 -3
  662. ansible_test/_internal/io.py +1 -0
  663. ansible_test/_internal/metadata.py +95 -4
  664. ansible_test/_internal/payload.py +1 -0
  665. ansible_test/_internal/processes.py +80 -0
  666. ansible_test/_internal/provider/__init__.py +1 -0
  667. ansible_test/_internal/provider/layout/__init__.py +1 -0
  668. ansible_test/_internal/provider/layout/ansible.py +1 -0
  669. ansible_test/_internal/provider/layout/collection.py +1 -0
  670. ansible_test/_internal/provider/layout/unsupported.py +1 -0
  671. ansible_test/_internal/provider/source/__init__.py +1 -0
  672. ansible_test/_internal/provider/source/git.py +1 -0
  673. ansible_test/_internal/provider/source/installed.py +1 -0
  674. ansible_test/_internal/provider/source/unsupported.py +1 -0
  675. ansible_test/_internal/provider/source/unversioned.py +1 -0
  676. ansible_test/_internal/provisioning.py +11 -4
  677. ansible_test/_internal/pypi_proxy.py +6 -5
  678. ansible_test/_internal/python_requirements.py +28 -0
  679. ansible_test/_internal/ssh.py +2 -5
  680. ansible_test/_internal/target.py +9 -0
  681. ansible_test/_internal/test.py +3 -2
  682. ansible_test/_internal/thread.py +3 -1
  683. ansible_test/_internal/timeout.py +2 -1
  684. ansible_test/_internal/util.py +41 -12
  685. ansible_test/_internal/util_common.py +18 -5
  686. ansible_test/_internal/venv.py +1 -0
  687. ansible_test/_util/controller/sanity/code-smell/action-plugin-docs.py +1 -0
  688. ansible_test/_util/controller/sanity/code-smell/changelog/sphinx.py +1 -0
  689. ansible_test/_util/controller/sanity/code-smell/changelog.py +1 -0
  690. ansible_test/_util/controller/sanity/code-smell/empty-init.py +1 -0
  691. ansible_test/_util/controller/sanity/code-smell/line-endings.py +1 -0
  692. ansible_test/_util/controller/sanity/code-smell/no-assert.py +1 -0
  693. ansible_test/_util/controller/sanity/code-smell/no-get-exception.py +1 -0
  694. ansible_test/_util/controller/sanity/code-smell/no-illegal-filenames.py +1 -0
  695. ansible_test/_util/controller/sanity/code-smell/no-smart-quotes.py +1 -0
  696. ansible_test/_util/controller/sanity/code-smell/replace-urlopen.py +1 -0
  697. ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py +28 -1
  698. ansible_test/_util/controller/sanity/code-smell/shebang.py +1 -0
  699. ansible_test/_util/controller/sanity/code-smell/symlinks.py +1 -0
  700. ansible_test/_util/controller/sanity/code-smell/use-argspec-type-path.py +1 -0
  701. ansible_test/_util/controller/sanity/code-smell/use-compat-six.py +1 -0
  702. ansible_test/_util/controller/sanity/integration-aliases/yaml_to_json.py +2 -1
  703. ansible_test/_util/controller/sanity/pep8/current-ignore.txt +4 -0
  704. ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +8 -5
  705. ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +8 -5
  706. ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +8 -5
  707. ansible_test/_util/controller/sanity/pylint/config/collection.cfg +4 -5
  708. ansible_test/_util/controller/sanity/pylint/config/default.cfg +8 -7
  709. ansible_test/_util/controller/sanity/pylint/plugins/deprecated_calls.py +541 -0
  710. ansible_test/_util/controller/sanity/pylint/plugins/deprecated_comment.py +137 -0
  711. ansible_test/_util/controller/sanity/pylint/plugins/hide_unraisable.py +1 -0
  712. ansible_test/_util/controller/sanity/pylint/plugins/string_format.py +1 -8
  713. ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +1 -8
  714. ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +55 -28
  715. ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +12 -5
  716. ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +13 -2
  717. ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -0
  718. ansible_test/_util/controller/sanity/yamllint/yamllinter.py +35 -17
  719. ansible_test/_util/controller/tools/collection_detail.py +1 -0
  720. ansible_test/_util/controller/tools/yaml_to_json.py +2 -1
  721. ansible_test/_util/target/injector/python.py +8 -0
  722. ansible_test/_util/target/pytest/plugins/ansible_forked.py +6 -1
  723. ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +2 -1
  724. ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -0
  725. ansible_test/_util/target/sanity/compile/compile.py +1 -0
  726. ansible_test/_util/target/sanity/import/importer.py +15 -16
  727. ansible_test/_util/target/setup/bootstrap.sh +9 -20
  728. ansible_test/_util/target/setup/probe_cgroups.py +1 -0
  729. ansible_test/_util/target/setup/quiet_pip.py +1 -0
  730. ansible_test/_util/target/setup/requirements.py +38 -36
  731. ansible_test/_util/target/tools/virtualenvcheck.py +2 -1
  732. ansible_test/_util/target/tools/yamlcheck.py +2 -1
  733. ansible/compat/selectors.py +0 -32
  734. ansible/errors/yaml_strings.py +0 -138
  735. ansible/executor/action_write_locks.py +0 -44
  736. ansible/executor/discovery/python_target.py +0 -47
  737. ansible/executor/powershell/module_powershell_wrapper.ps1 +0 -86
  738. ansible/executor/powershell/module_script_wrapper.ps1 +0 -22
  739. ansible/module_utils/compat/importlib.py +0 -26
  740. ansible/module_utils/compat/selectors.py +0 -32
  741. ansible/module_utils/pycompat24.py +0 -73
  742. ansible/parsing/yaml/constructor.py +0 -178
  743. ansible/template/native_helpers.py +0 -251
  744. ansible/template/template.py +0 -43
  745. ansible/template/vars.py +0 -77
  746. ansible/utils/native_jinja.py +0 -11
  747. ansible/vars/fact_cache.py +0 -71
  748. ansible_core-2.18.7.dist-info/RECORD +0 -992
  749. ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +0 -411
  750. {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/WHEEL +0 -0
  751. {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/entry_points.txt +0 -0
  752. {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/COPYING +0 -0
  753. {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/Apache-License.txt +0 -0
  754. {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/MIT-license.txt +0 -0
  755. {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/PSF-license.txt +0 -0
  756. {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/simplified_bsd.txt +0 -0
  757. {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/top_level.txt +0 -0
ansible/modules/pip.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = '''
9
+ DOCUMENTATION = """
10
10
  ---
11
11
  module: pip
12
12
  short_description: Manages Python library dependencies
@@ -60,7 +60,7 @@ options:
60
60
  virtualenv_python:
61
61
  description:
62
62
  - The Python executable used for creating the virtual environment.
63
- For example V(python3.12), V(python2.7). When not specified, the
63
+ For example V(python3.13). When not specified, the
64
64
  Python version used to run the ansible module is used. This parameter
65
65
  should not be used when O(virtualenv_command) is using V(pyvenv) or
66
66
  the C(-m venv) module.
@@ -93,8 +93,8 @@ options:
93
93
  description:
94
94
  - The explicit executable or pathname for the C(pip) executable,
95
95
  if different from the Ansible Python interpreter. For
96
- example V(pip3.3), if there are both Python 2.7 and 3.3 installations
97
- in the system and you want to run pip for the Python 3.3 installation.
96
+ example V(pip3.13), if there are multiple Python installations
97
+ in the system and you want to run pip for the Python 3.13 installation.
98
98
  - Mutually exclusive with O(virtualenv) (added in 2.1).
99
99
  - Does not affect the Ansible Python interpreter.
100
100
  - The C(setuptools) package must be installed for both the Ansible Python interpreter
@@ -134,7 +134,7 @@ notes:
134
134
  the virtualenv needs to be created.
135
135
  - Although it executes using the Ansible Python interpreter, the pip module shells out to
136
136
  run the actual pip command, so it can use any pip version you specify with O(executable).
137
- By default, it uses the pip version for the Ansible Python interpreter. For example, pip3 on python 3, and pip2 or pip on python 2.
137
+ By default, it uses the pip version for the Ansible Python interpreter.
138
138
  - The interpreter used by Ansible
139
139
  (see R(ansible_python_interpreter, ansible_python_interpreter))
140
140
  requires the setuptools package, regardless of the version of pip set with
@@ -145,9 +145,9 @@ requirements:
145
145
  - setuptools or packaging
146
146
  author:
147
147
  - Matt Wright (@mattupstate)
148
- '''
148
+ """
149
149
 
150
- EXAMPLES = '''
150
+ EXAMPLES = """
151
151
  - name: Install bottle python package
152
152
  ansible.builtin.pip:
153
153
  name: bottle
@@ -197,11 +197,11 @@ EXAMPLES = '''
197
197
  virtualenv: /my_app/venv
198
198
  virtualenv_site_packages: yes
199
199
 
200
- - name: Install bottle into the specified (virtualenv), using Python 2.7
200
+ - name: Install bottle into the specified (virtualenv), using Python 3.13
201
201
  ansible.builtin.pip:
202
202
  name: bottle
203
203
  virtualenv: /my_app/venv
204
- virtualenv_command: virtualenv-2.7
204
+ virtualenv_command: virtualenv-3.13
205
205
 
206
206
  - name: Install bottle within a user home directory
207
207
  ansible.builtin.pip:
@@ -227,10 +227,10 @@ EXAMPLES = '''
227
227
  requirements: /my_app/requirements.txt
228
228
  extra_args: "--no-index --find-links=file:///my_downloaded_packages_dir"
229
229
 
230
- - name: Install bottle for Python 3.3 specifically, using the 'pip3.3' executable
230
+ - name: Install bottle for Python 3.13 specifically, using the 'pip3.13' executable
231
231
  ansible.builtin.pip:
232
232
  name: bottle
233
- executable: pip3.3
233
+ executable: pip3.13
234
234
 
235
235
  - name: Install bottle, forcing reinstallation if it's already installed
236
236
  ansible.builtin.pip:
@@ -262,9 +262,9 @@ EXAMPLES = '''
262
262
  vars:
263
263
  venv_dir: /tmp/pick-a-better-venv-path
264
264
  venv_python: "{{ venv_dir }}/bin/python"
265
- '''
265
+ """
266
266
 
267
- RETURN = '''
267
+ RETURN = """
268
268
  cmd:
269
269
  description: pip command used by the module
270
270
  returned: success
@@ -290,7 +290,7 @@ virtualenv:
290
290
  returned: success, if a virtualenv path was provided
291
291
  type: str
292
292
  sample: "/tmp/virtualenv"
293
- '''
293
+ """
294
294
 
295
295
  import argparse
296
296
  import os
@@ -299,7 +299,6 @@ import sys
299
299
  import tempfile
300
300
  import operator
301
301
  import shlex
302
- import traceback
303
302
 
304
303
  from ansible.module_utils.compat.version import LooseVersion
305
304
 
@@ -309,10 +308,10 @@ HAS_SETUPTOOLS = False
309
308
  try:
310
309
  from packaging.requirements import Requirement as parse_requirement
311
310
  HAS_PACKAGING = True
312
- except Exception:
311
+ except Exception as ex:
313
312
  # This is catching a generic Exception, due to packaging on EL7 raising a TypeError on import
314
313
  HAS_PACKAGING = False
315
- PACKAGING_IMP_ERR = traceback.format_exc()
314
+ PACKAGING_IMP_ERR = ex
316
315
  try:
317
316
  from pkg_resources import Requirement
318
317
  parse_requirement = Requirement.parse # type: ignore[misc,assignment]
@@ -417,7 +416,7 @@ def _get_cmd_options(module, cmd):
417
416
 
418
417
 
419
418
  def _get_packages(module, pip, chdir):
420
- '''Return results of pip command to get packages.'''
419
+ """Return results of pip command to get packages."""
421
420
  # Try 'pip list' command first.
422
421
  command = pip + ['list', '--format=freeze']
423
422
  locale = get_best_parsable_locale(module)
@@ -435,7 +434,7 @@ def _get_packages(module, pip, chdir):
435
434
 
436
435
 
437
436
  def _is_present(module, req, installed_pkgs, pkg_command):
438
- '''Return whether or not package is installed.'''
437
+ """Return whether or not package is installed."""
439
438
  for pkg in installed_pkgs:
440
439
  if '==' in pkg:
441
440
  pkg_name, pkg_version = pkg.split('==')
@@ -461,9 +460,7 @@ def _get_pip(module, env=None, executable=None):
461
460
  candidate_pip_basenames = (executable,)
462
461
  elif executable is None and env is None and _have_pip_module():
463
462
  # If no executable or virtualenv were specified, use the pip module for the current Python interpreter if available.
464
- # Use of `__main__` is required to support Python 2.6 since support for executing packages with `runpy` was added in Python 2.7.
465
- # Without it Python 2.6 gives the following error: pip is a package and cannot be directly executed
466
- pip = [sys.executable, '-m', 'pip.__main__']
463
+ pip = [sys.executable, '-m', 'pip']
467
464
 
468
465
  if pip is None:
469
466
  if env is None:
@@ -815,10 +812,8 @@ def main():
815
812
  elif requirements:
816
813
  cmd.extend(['-r', requirements])
817
814
  else:
818
- module.exit_json(
819
- changed=False,
820
- warnings=["No valid name or requirements file found."],
821
- )
815
+ module.warn("No valid name or requirements file found.")
816
+ module.exit_json(changed=False)
822
817
 
823
818
  if module.check_mode:
824
819
  if extra_args or requirements or state == 'latest' or not name:
ansible/modules/raw.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = r'''
9
+ DOCUMENTATION = r"""
10
10
  ---
11
11
  module: raw
12
12
  short_description: Executes a low-down and dirty command
@@ -70,11 +70,11 @@ seealso:
70
70
  author:
71
71
  - Ansible Core Team
72
72
  - Michael DeHaan
73
- '''
73
+ """
74
74
 
75
- EXAMPLES = r'''
76
- - name: Bootstrap a host without python2 installed
77
- ansible.builtin.raw: dnf install -y python2 python2-dnf libselinux-python
75
+ EXAMPLES = r"""
76
+ - name: Bootstrap a host without Python installed
77
+ ansible.builtin.raw: dnf install -y python3 python3-libdnf
78
78
 
79
79
  - name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)
80
80
  ansible.builtin.raw: cat < /tmp/*txt
@@ -86,4 +86,4 @@ EXAMPLES = r'''
86
86
 
87
87
  - name: List user accounts on a Windows system
88
88
  ansible.builtin.raw: Get-WmiObject -Class Win32_UserAccount
89
- '''
89
+ """
ansible/modules/reboot.py CHANGED
@@ -5,7 +5,7 @@
5
5
  from __future__ import annotations
6
6
 
7
7
 
8
- DOCUMENTATION = r'''
8
+ DOCUMENTATION = r"""
9
9
  module: reboot
10
10
  short_description: Reboot a machine
11
11
  notes:
@@ -100,9 +100,9 @@ seealso:
100
100
  author:
101
101
  - Matt Davis (@nitzmahone)
102
102
  - Sam Doran (@samdoran)
103
- '''
103
+ """
104
104
 
105
- EXAMPLES = r'''
105
+ EXAMPLES = r"""
106
106
  - name: Unconditionally reboot the machine with all defaults
107
107
  ansible.builtin.reboot:
108
108
 
@@ -124,9 +124,9 @@ EXAMPLES = r'''
124
124
  ansible.builtin.reboot:
125
125
  msg: "Rebooting machine in 5 seconds"
126
126
 
127
- '''
127
+ """
128
128
 
129
- RETURN = r'''
129
+ RETURN = r"""
130
130
  rebooted:
131
131
  description: true if the machine was rebooted
132
132
  returned: always
@@ -137,4 +137,4 @@ elapsed:
137
137
  returned: always
138
138
  type: int
139
139
  sample: 23
140
- '''
140
+ """
@@ -7,7 +7,7 @@
7
7
  from __future__ import annotations
8
8
 
9
9
 
10
- DOCUMENTATION = r'''
10
+ DOCUMENTATION = r"""
11
11
  ---
12
12
  module: replace
13
13
  author: Evan Kaufman (@EvanK)
@@ -106,9 +106,9 @@ notes:
106
106
  See U(https://github.com/ansible/ansible/issues/31354) for details.
107
107
  - Option O(ignore:follow) has been removed in Ansible 2.5, because this module modifies the contents of the file
108
108
  so O(ignore:follow=no) does not make sense.
109
- '''
109
+ """
110
110
 
111
- EXAMPLES = r'''
111
+ EXAMPLES = r"""
112
112
  - name: Replace old hostname with new hostname (requires Ansible >= 2.4)
113
113
  ansible.builtin.replace:
114
114
  path: /etc/hosts
@@ -175,14 +175,13 @@ EXAMPLES = r'''
175
175
  path: /etc/ssh/sshd_config
176
176
  regexp: '^(?P<dctv>ListenAddress[ ]+)(?P<host>[^\n]+)$'
177
177
  replace: '#\g<dctv>\g<host>\n\g<dctv>0.0.0.0'
178
- '''
178
+ """
179
179
 
180
- RETURN = r'''#'''
180
+ RETURN = r"""#"""
181
181
 
182
182
  import os
183
183
  import re
184
184
  import tempfile
185
- from traceback import format_exc
186
185
 
187
186
  from ansible.module_utils.common.text.converters import to_text, to_bytes
188
187
  from ansible.module_utils.basic import AnsibleModule
@@ -191,9 +190,8 @@ from ansible.module_utils.basic import AnsibleModule
191
190
  def write_changes(module, contents, path):
192
191
 
193
192
  tmpfd, tmpfile = tempfile.mkstemp(dir=module.tmpdir)
194
- f = os.fdopen(tmpfd, 'wb')
195
- f.write(contents)
196
- f.close()
193
+ with os.fdopen(tmpfd, 'wb') as f:
194
+ f.write(contents)
197
195
 
198
196
  validate = module.params.get('validate', None)
199
197
  valid = not validate
@@ -258,9 +256,8 @@ def main():
258
256
  try:
259
257
  with open(path, 'rb') as f:
260
258
  contents = to_text(f.read(), errors='surrogate_or_strict', encoding=encoding)
261
- except (OSError, IOError) as e:
262
- module.fail_json(msg='Unable to read the contents of %s: %s' % (path, to_text(e)),
263
- exception=format_exc())
259
+ except OSError as ex:
260
+ raise Exception(f"Unable to read the contents of {path!r}.") from ex
264
261
 
265
262
  pattern = u''
266
263
  if params['after'] and params['before']:
@@ -287,8 +284,7 @@ def main():
287
284
  try:
288
285
  result = re.subn(mre, params['replace'], section, 0)
289
286
  except re.error as e:
290
- module.fail_json(msg="Unable to process replace due to error: %s" % to_text(e),
291
- exception=format_exc())
287
+ module.fail_json(msg="Unable to process replace due to error: %s" % to_text(e))
292
288
 
293
289
  if result[1] > 0 and section != result[0]:
294
290
  if pattern:
@@ -8,7 +8,7 @@
8
8
  from __future__ import annotations
9
9
 
10
10
 
11
- DOCUMENTATION = '''
11
+ DOCUMENTATION = """
12
12
  ---
13
13
  module: rpm_key
14
14
  author:
@@ -52,9 +52,9 @@ attributes:
52
52
  support: none
53
53
  platform:
54
54
  platforms: rhel
55
- '''
55
+ """
56
56
 
57
- EXAMPLES = '''
57
+ EXAMPLES = """
58
58
  - name: Import a key from a url
59
59
  ansible.builtin.rpm_key:
60
60
  state: present
@@ -81,9 +81,9 @@ EXAMPLES = '''
81
81
  fingerprint:
82
82
  - EBC6 E12C 62B1 C734 026B 2122 A20E 5214 6B8D 79E6
83
83
  - 19B7 913E 6284 8E3F 4D78 D6B4 ECD9 1AB2 2EB6 8D86
84
- '''
84
+ """
85
85
 
86
- RETURN = r'''#'''
86
+ RETURN = r"""#"""
87
87
 
88
88
  import re
89
89
  import os.path
@@ -172,9 +172,8 @@ class RpmKey(object):
172
172
  self.module.fail_json(msg="Not a public key: %s" % url)
173
173
  tmpfd, tmpname = tempfile.mkstemp()
174
174
  self.module.add_cleanup_file(tmpname)
175
- tmpfile = os.fdopen(tmpfd, "w+b")
176
- tmpfile.write(key)
177
- tmpfile.close()
175
+ with os.fdopen(tmpfd, "w+b") as tmpfile:
176
+ tmpfile.write(key)
178
177
  return tmpname
179
178
 
180
179
  def normalize_keyid(self, keyid):
ansible/modules/script.py CHANGED
@@ -4,7 +4,7 @@
4
4
  from __future__ import annotations
5
5
 
6
6
 
7
- DOCUMENTATION = r'''
7
+ DOCUMENTATION = r"""
8
8
  ---
9
9
  module: script
10
10
  version_added: "0.9"
@@ -80,9 +80,9 @@ attributes:
80
80
  support: none
81
81
  vault:
82
82
  support: full
83
- '''
83
+ """
84
84
 
85
- EXAMPLES = r'''
85
+ EXAMPLES = r"""
86
86
  - name: Run a script with arguments (free form)
87
87
  ansible.builtin.script: /some/local/script.sh --some-argument 1234
88
88
 
@@ -112,4 +112,4 @@ EXAMPLES = r'''
112
112
 
113
113
  - name: Run a Powershell script on a Windows host
114
114
  script: subdirectories/under/path/with/your/playbook/script.ps1
115
- '''
115
+ """
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = r'''
9
+ DOCUMENTATION = r"""
10
10
  ---
11
11
  module: service
12
12
  version_added: "0.1"
@@ -114,9 +114,9 @@ seealso:
114
114
  author:
115
115
  - Ansible Core Team
116
116
  - Michael DeHaan
117
- '''
117
+ """
118
118
 
119
- EXAMPLES = r'''
119
+ EXAMPLES = r"""
120
120
  - name: Start service httpd, if not started
121
121
  ansible.builtin.service:
122
122
  name: httpd
@@ -153,9 +153,9 @@ EXAMPLES = r'''
153
153
  name: network
154
154
  state: restarted
155
155
  args: eth0
156
- '''
156
+ """
157
157
 
158
- RETURN = r'''#'''
158
+ RETURN = r"""#"""
159
159
 
160
160
  import glob
161
161
  import json
@@ -180,7 +180,7 @@ from ansible.module_utils.basic import AnsibleModule
180
180
  from ansible.module_utils.common.locale import get_best_parsable_locale
181
181
  from ansible.module_utils.common.sys_info import get_platform_subclass
182
182
  from ansible.module_utils.service import fail_if_missing, is_systemd_managed
183
- from ansible.module_utils.six import PY2, b
183
+ from ansible.module_utils.six import b
184
184
 
185
185
 
186
186
  class Service(object):
@@ -285,14 +285,8 @@ class Service(object):
285
285
  os._exit(0)
286
286
 
287
287
  # Start the command
288
- if PY2:
289
- # Python 2.6's shlex.split can't handle text strings correctly
290
- cmd = to_bytes(cmd, errors='surrogate_or_strict')
291
- cmd = shlex.split(cmd)
292
- else:
293
- # Python3.x shex.split text strings.
294
- cmd = to_text(cmd, errors='surrogate_or_strict')
295
- cmd = [to_bytes(c, errors='surrogate_or_strict') for c in shlex.split(cmd)]
288
+ cmd = to_text(cmd, errors='surrogate_or_strict')
289
+ cmd = [to_bytes(c, errors='surrogate_or_strict') for c in shlex.split(cmd)]
296
290
  # In either of the above cases, pass a list of byte strings to Popen
297
291
 
298
292
  # chkconfig localizes messages and we're screen scraping so make
@@ -695,9 +689,8 @@ class LinuxService(Service):
695
689
  #
696
690
  if self.enable_cmd.endswith("initctl"):
697
691
  def write_to_override_file(file_name, file_contents, ):
698
- override_file = open(file_name, 'w')
699
- override_file.write(file_contents)
700
- override_file.close()
692
+ with open(file_name, 'w') as override_file:
693
+ override_file.write(file_contents)
701
694
 
702
695
  initpath = '/etc/init'
703
696
  if self.upstart_version >= LooseVersion('0.6.7'):
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = r'''
9
+ DOCUMENTATION = r"""
10
10
  ---
11
11
  module: service_facts
12
12
  short_description: Return service state information as fact data
@@ -36,9 +36,9 @@ notes:
36
36
  - AIX SRC was added in version 2.11.
37
37
  author:
38
38
  - Adam Miller (@maxamillion)
39
- '''
39
+ """
40
40
 
41
- EXAMPLES = r'''
41
+ EXAMPLES = r"""
42
42
  - name: Populate service facts
43
43
  ansible.builtin.service_facts:
44
44
 
@@ -58,9 +58,9 @@ EXAMPLES = r'''
58
58
  name: ntpd.service
59
59
  when: ansible_facts['services']['ntpd.service']['status'] | default('not-found') != 'not-found'
60
60
 
61
- '''
61
+ """
62
62
 
63
- RETURN = r'''
63
+ RETURN = r"""
64
64
  ansible_facts:
65
65
  description: Facts to add to ansible_facts about the services on the system
66
66
  returned: always
@@ -99,12 +99,14 @@ ansible_facts:
99
99
  returned: always
100
100
  type: str
101
101
  sample: arp-ethers.service
102
- '''
102
+ """
103
103
 
104
104
 
105
105
  import os
106
106
  import platform
107
107
  import re
108
+ import sys
109
+
108
110
  from ansible.module_utils.basic import AnsibleModule
109
111
  from ansible.module_utils.common.locale import get_best_parsable_locale
110
112
  from ansible.module_utils.service import is_systemd_managed
@@ -209,8 +211,8 @@ class ServiceScanService(BaseService):
209
211
 
210
212
  def _list_openrc(self, services):
211
213
  all_services_runlevels = {}
212
- rc, stdout, stderr = self.module.run_command("%s -a -s -m 2>&1 | grep '^ ' | tr -d '[]'" % self.rc_status_path, use_unsafe_shell=True)
213
- rc_u, stdout_u, stderr_u = self.module.run_command("%s show -v 2>&1 | grep '|'" % self.rc_update_path, use_unsafe_shell=True)
214
+ dummy, stdout, dummy = self.module.run_command("%s -a -s -m 2>&1 | grep '^ ' | tr -d '[]'" % self.rc_status_path, use_unsafe_shell=True)
215
+ dummy, stdout_u, dummy = self.module.run_command("%s show -v 2>&1 | grep '|'" % self.rc_update_path, use_unsafe_shell=True)
214
216
  for line in stdout_u.split('\n'):
215
217
  line_data = line.split('|')
216
218
  if len(line_data) < 2:
@@ -226,6 +228,9 @@ class ServiceScanService(BaseService):
226
228
  if len(line_data) < 2:
227
229
  continue
228
230
  service_name = line_data[0]
231
+ # Skip lines which are not service names
232
+ if service_name == "*":
233
+ continue
229
234
  service_state = line_data[1]
230
235
  service_runlevels = all_services_runlevels[service_name]
231
236
  service_data = {"name": service_name, "runlevels": service_runlevels, "state": service_state, "source": "openrc"}
@@ -241,15 +246,17 @@ class ServiceScanService(BaseService):
241
246
  self.rc_status_path = self.module.get_bin_path("rc-status")
242
247
  self.rc_update_path = self.module.get_bin_path("rc-update")
243
248
 
244
- # TODO: review conditionals ... they should not be this 'exclusive'
245
249
  if self.service_path and self.chkconfig_path is None and self.rc_status_path is None:
246
250
  self._list_sysvinit(services)
251
+
252
+ # TODO: review conditionals ... they should not be this 'exclusive'
247
253
  if self.initctl_path and self.chkconfig_path is None:
248
254
  self._list_upstart(services)
249
255
  elif self.chkconfig_path:
250
256
  self._list_rh(services)
251
257
  elif self.rc_status_path is not None and self.rc_update_path is not None:
252
258
  self._list_openrc(services)
259
+
253
260
  return services
254
261
 
255
262
 
@@ -419,11 +426,81 @@ class OpenBSDScanService(BaseService):
419
426
  return services
420
427
 
421
428
 
429
+ class FreeBSDScanService(BaseService):
430
+
431
+ _pid_regex = r'.+ is running as pid (\d+)\.'
432
+
433
+ def get_info(self, service):
434
+
435
+ service_info = {'status': 'unknown'}
436
+ rc, stdout, stderr = self.module.run_command("%s %s describe" % (self.service, service))
437
+ if rc == 0:
438
+ service_info['description'] = stdout
439
+ rc, stdout, stderr = self.module.run_command("%s %s status" % (self.service, service))
440
+ if rc == 0:
441
+ service_info['status'] = 'running'
442
+ p = re.compile(r'^\s?%s is running as pid (\d+).' % service)
443
+ matches = p.match(stdout[0])
444
+ if matches:
445
+ # does not always get pid output
446
+ service_info['pid'] = matches[0]
447
+ else:
448
+ service_info['pid'] = 'N/A'
449
+ elif rc == 1:
450
+ if stdout and 'is not running' in stdout.splitlines()[0]:
451
+ service_info['status'] = 'stopped'
452
+ elif stderr and 'unknown directive' in stderr.splitlines()[0]:
453
+ service_info['status'] = 'unknown'
454
+ self.module.warn('Status query not supported for %s' % service)
455
+ else:
456
+ service_info['status'] = 'unknown'
457
+ out = stderr if stderr else stdout
458
+ self.module.warn('Could not retrieve status for %s: %s' % (service, out))
459
+ else:
460
+ out = stderr if stderr else stdout
461
+ self.module.warn("Failed to get info for %s, no system message (rc=%s): %s" % (service, rc, out))
462
+
463
+ return service_info
464
+
465
+ def get_enabled(self):
466
+
467
+ services = []
468
+ rc, stdout, stderr = self.module.run_command("%s -e" % (self.service))
469
+ if rc == 0:
470
+ for line in stdout.splitlines():
471
+ if line.startswith('/'):
472
+ services.append(os.path.basename(line))
473
+ elif stderr:
474
+ self.module.warn("Failed to get services: %s" % stderr)
475
+ elif stdout:
476
+ self.module.warn("Failed to get services: %s" % stdout)
477
+ else:
478
+ self.module.warn("Failed to get services, no system message: rc=%s" % rc)
479
+
480
+ return services
481
+
482
+ def gather_services(self):
483
+
484
+ services = {}
485
+ if sys.platform.startswith('freebsd'):
486
+ self.service = self.module.get_bin_path("service")
487
+ if self.service:
488
+ for svc in self.get_enabled():
489
+ services[svc] = self.get_info(svc)
490
+ return services
491
+
492
+
422
493
  def main():
423
494
  module = AnsibleModule(argument_spec=dict(), supports_check_mode=True)
424
495
  locale = get_best_parsable_locale(module)
425
496
  module.run_command_environ_update = dict(LANG=locale, LC_ALL=locale)
426
- service_modules = (ServiceScanService, SystemctlScanService, AIXScanService, OpenBSDScanService)
497
+
498
+ if sys.platform.startswith('freebsd'):
499
+ # frebsd is not compatible but will match other classes
500
+ service_modules = (FreeBSDScanService,)
501
+ else:
502
+ service_modules = (ServiceScanService, SystemctlScanService, AIXScanService, OpenBSDScanService)
503
+
427
504
  all_services = {}
428
505
  for svc_module in service_modules:
429
506
  svcmod = svc_module(module)
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = r'''
9
+ DOCUMENTATION = r"""
10
10
  ---
11
11
  module: set_fact
12
12
  short_description: Set host variable(s) and fact(s).
@@ -66,7 +66,7 @@ notes:
66
66
  - Because of the nature of tasks, set_fact will produce 'static' values for a variable.
67
67
  Unlike normal 'lazy' variables, the value gets evaluated and templated on assignment.
68
68
  - Some boolean values (yes, no, true, false) will always be converted to boolean type,
69
- unless C(DEFAULT_JINJA2_NATIVE) is enabled. This is done so the C(var=value) booleans,
69
+ This is done so the C(var=value) booleans,
70
70
  otherwise it would only be able to create strings, but it also prevents using those values to create YAML strings.
71
71
  Using the setting will restrict k=v to strings, but will allow you to specify string or boolean in YAML.
72
72
  - "To create lists/arrays or dictionary/hashes use YAML notation C(var: [val1, val2])."
@@ -77,9 +77,9 @@ seealso:
77
77
  description: More information related to variable precedence and which type of variable wins over others.
78
78
  author:
79
79
  - Dag Wieers (@dagwieers)
80
- '''
80
+ """
81
81
 
82
- EXAMPLES = r'''
82
+ EXAMPLES = r"""
83
83
  - name: Setting host facts using key=value pairs, this format can only create strings or booleans
84
84
  ansible.builtin.set_fact: one_fact="something" other_fact="{{ local_var }}"
85
85
 
@@ -116,4 +116,4 @@ EXAMPLES = r'''
116
116
  ansible.builtin.set_fact:
117
117
  two_dict: {'something': here2, 'other': somewhere}
118
118
  two_list: [1,2,3]
119
- '''
119
+ """
@@ -6,7 +6,7 @@
6
6
  from __future__ import annotations
7
7
 
8
8
 
9
- DOCUMENTATION = r'''
9
+ DOCUMENTATION = r"""
10
10
  ---
11
11
  module: set_stats
12
12
  short_description: Define and display stats for the current ansible run
@@ -56,9 +56,9 @@ notes:
56
56
  - In order for custom stats to be displayed, you must set C(show_custom_stats) in section C([defaults]) in C(ansible.cfg)
57
57
  or by defining environment variable C(ANSIBLE_SHOW_CUSTOM_STATS) to V(true). See the P(ansible.builtin.default#callback) callback plugin for details.
58
58
  version_added: "2.3"
59
- '''
59
+ """
60
60
 
61
- EXAMPLES = r'''
61
+ EXAMPLES = r"""
62
62
  - name: Aggregating packages_installed stat per host
63
63
  ansible.builtin.set_stats:
64
64
  data:
@@ -78,4 +78,4 @@ EXAMPLES = r'''
78
78
  data:
79
79
  the_answer: 42
80
80
  aggregate: no
81
- '''
81
+ """