ansible-core 2.18.7rc1__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.
- ansible/_internal/__init__.py +53 -0
- ansible/_internal/_ansiballz/__init__.py +0 -0
- ansible/_internal/_ansiballz/_builder.py +101 -0
- ansible/_internal/_ansiballz/_wrapper.py +262 -0
- ansible/_internal/_collection_proxy.py +47 -0
- ansible/_internal/_datatag/__init__.py +0 -0
- ansible/_internal/_datatag/_tags.py +130 -0
- ansible/_internal/_datatag/_utils.py +19 -0
- ansible/_internal/_datatag/_wrappers.py +33 -0
- ansible/_internal/_errors/__init__.py +0 -0
- ansible/_internal/_errors/_alarm_timeout.py +66 -0
- ansible/_internal/_errors/_captured.py +123 -0
- ansible/_internal/_errors/_error_factory.py +89 -0
- ansible/_internal/_errors/_error_utils.py +240 -0
- ansible/_internal/_errors/_handler.py +91 -0
- ansible/_internal/_errors/_task_timeout.py +28 -0
- ansible/_internal/_event_formatting.py +127 -0
- ansible/_internal/_json/__init__.py +214 -0
- ansible/_internal/_json/_legacy_encoder.py +34 -0
- ansible/_internal/_json/_profiles/__init__.py +0 -0
- ansible/_internal/_json/_profiles/_cache_persistence.py +57 -0
- ansible/_internal/_json/_profiles/_inventory_legacy.py +40 -0
- ansible/_internal/_json/_profiles/_legacy.py +189 -0
- ansible/_internal/_locking.py +21 -0
- ansible/_internal/_plugins/__init__.py +0 -0
- ansible/_internal/_plugins/_cache.py +57 -0
- ansible/_internal/_ssh/__init__.py +0 -0
- ansible/_internal/_ssh/_agent_launch.py +91 -0
- ansible/_internal/_ssh/_ssh_agent.py +619 -0
- ansible/_internal/_task.py +78 -0
- ansible/_internal/_templating/__init__.py +12 -0
- ansible/_internal/_templating/_access.py +86 -0
- ansible/_internal/_templating/_chain_templar.py +63 -0
- ansible/_internal/_templating/_datatag.py +95 -0
- ansible/_internal/_templating/_engine.py +592 -0
- ansible/_internal/_templating/_errors.py +28 -0
- ansible/_internal/_templating/_jinja_bits.py +1106 -0
- ansible/_internal/_templating/_jinja_common.py +323 -0
- ansible/_internal/_templating/_jinja_patches.py +44 -0
- ansible/_internal/_templating/_jinja_plugins.py +375 -0
- ansible/_internal/_templating/_lazy_containers.py +633 -0
- ansible/_internal/_templating/_marker_behaviors.py +103 -0
- ansible/_internal/_templating/_template_vars.py +72 -0
- ansible/_internal/_templating/_transform.py +70 -0
- ansible/_internal/_templating/_utils.py +108 -0
- ansible/_internal/_testing.py +26 -0
- ansible/_internal/_wrapt.py +1052 -0
- ansible/_internal/_yaml/__init__.py +0 -0
- ansible/_internal/_yaml/_constructor.py +240 -0
- ansible/_internal/_yaml/_dumper.py +70 -0
- ansible/_internal/_yaml/_errors.py +166 -0
- ansible/_internal/_yaml/_loader.py +66 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/README.md +11 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/action/debug.py +36 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/apply_trust.py +19 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/dump_object.py +27 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/finalize.py +16 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/origin.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.py +24 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.yml +33 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/tag_names.py +16 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/true_type.py +17 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/unmask.py +49 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.py +21 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.yml +2 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.py +15 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.yml +19 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.yml +19 -0
- ansible/cli/__init__.py +93 -104
- ansible/cli/_ssh_askpass.py +54 -0
- ansible/cli/adhoc.py +20 -10
- ansible/cli/arguments/option_helpers.py +163 -10
- ansible/cli/config.py +43 -68
- ansible/cli/console.py +13 -11
- ansible/cli/doc.py +134 -77
- ansible/cli/galaxy.py +27 -20
- ansible/cli/inventory.py +28 -28
- ansible/cli/playbook.py +4 -12
- ansible/cli/pull.py +6 -3
- ansible/cli/scripts/ansible_connection_cli_stub.py +7 -7
- ansible/cli/vault.py +12 -11
- ansible/compat/__init__.py +2 -2
- ansible/compat/importlib_resources.py +9 -12
- ansible/config/base.yml +218 -133
- ansible/config/manager.py +220 -159
- ansible/constants.py +2 -65
- ansible/errors/__init__.py +350 -256
- ansible/executor/interpreter_discovery.py +28 -149
- ansible/executor/module_common.py +480 -514
- ansible/executor/play_iterator.py +22 -27
- ansible/executor/playbook_executor.py +11 -11
- ansible/executor/powershell/async_watchdog.ps1 +97 -102
- ansible/executor/powershell/async_wrapper.ps1 +204 -153
- ansible/executor/powershell/become_wrapper.ps1 +107 -144
- ansible/executor/powershell/bootstrap_wrapper.ps1 +46 -9
- ansible/executor/powershell/coverage_wrapper.ps1 +91 -135
- ansible/executor/powershell/exec_wrapper.ps1 +675 -196
- ansible/executor/powershell/module_manifest.py +469 -265
- ansible/executor/powershell/module_wrapper.ps1 +195 -186
- ansible/executor/powershell/powershell_expand_user.ps1 +20 -0
- ansible/executor/powershell/powershell_mkdtemp.ps1 +17 -0
- ansible/executor/powershell/psrp_fetch_file.ps1 +41 -0
- ansible/executor/powershell/psrp_put_file.ps1 +122 -0
- ansible/executor/powershell/winrm_fetch_file.ps1 +46 -0
- ansible/executor/powershell/winrm_put_file.ps1 +36 -0
- ansible/executor/process/worker.py +139 -149
- ansible/executor/stats.py +5 -5
- ansible/executor/task_executor.py +270 -297
- ansible/executor/task_queue_manager.py +135 -137
- ansible/executor/task_result.py +182 -79
- ansible/galaxy/__init__.py +2 -2
- ansible/galaxy/api.py +26 -25
- ansible/galaxy/collection/__init__.py +6 -14
- ansible/galaxy/collection/concrete_artifact_manager.py +12 -21
- ansible/galaxy/dependency_resolution/dataclasses.py +14 -4
- ansible/galaxy/dependency_resolution/providers.py +4 -4
- ansible/galaxy/dependency_resolution/reporters.py +81 -0
- ansible/galaxy/role.py +6 -10
- ansible/galaxy/token.py +28 -21
- ansible/inventory/data.py +47 -57
- ansible/inventory/group.py +50 -73
- ansible/inventory/helpers.py +9 -0
- ansible/inventory/host.py +37 -54
- ansible/inventory/manager.py +79 -34
- ansible/keyword_desc.yml +1 -1
- ansible/module_utils/_internal/__init__.py +55 -0
- ansible/module_utils/_internal/_ambient_context.py +58 -0
- ansible/module_utils/_internal/_ansiballz/__init__.py +0 -0
- ansible/module_utils/_internal/_ansiballz/_extensions/__init__.py +0 -0
- ansible/module_utils/_internal/_ansiballz/_extensions/_coverage.py +45 -0
- ansible/module_utils/_internal/_ansiballz/_extensions/_pydevd.py +62 -0
- ansible/module_utils/_internal/_ansiballz/_loader.py +81 -0
- ansible/module_utils/_internal/_ansiballz/_respawn.py +32 -0
- ansible/module_utils/_internal/_ansiballz/_respawn_wrapper.py +23 -0
- ansible/module_utils/_internal/_concurrent/_daemon_threading.py +1 -0
- ansible/module_utils/_internal/_dataclass_validation.py +217 -0
- ansible/module_utils/_internal/_datatag/__init__.py +961 -0
- ansible/module_utils/_internal/_datatag/_tags.py +16 -0
- ansible/module_utils/_internal/_debugging.py +31 -0
- ansible/module_utils/_internal/_deprecator.py +157 -0
- ansible/module_utils/_internal/_errors.py +101 -0
- ansible/module_utils/_internal/_event_utils.py +61 -0
- ansible/module_utils/_internal/_json/__init__.py +63 -0
- ansible/module_utils/_internal/_json/_legacy_encoder.py +26 -0
- ansible/module_utils/_internal/_json/_profiles/__init__.py +428 -0
- ansible/module_utils/_internal/_json/_profiles/_fallback_to_str.py +73 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py +33 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py +37 -0
- ansible/module_utils/_internal/_json/_profiles/_module_modern_c2m.py +35 -0
- ansible/module_utils/_internal/_json/_profiles/_module_modern_m2c.py +33 -0
- ansible/module_utils/_internal/_json/_profiles/_tagless.py +52 -0
- ansible/module_utils/_internal/_messages.py +130 -0
- ansible/module_utils/_internal/_patches/__init__.py +66 -0
- ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py +53 -0
- ansible/module_utils/_internal/_patches/_socket_patch.py +34 -0
- ansible/module_utils/_internal/_patches/_sys_intern_patch.py +34 -0
- ansible/module_utils/_internal/_plugin_info.py +38 -0
- ansible/module_utils/_internal/_stack.py +22 -0
- ansible/module_utils/_internal/_testing.py +0 -0
- ansible/module_utils/_internal/_text_utils.py +6 -0
- ansible/module_utils/_internal/_traceback.py +92 -0
- ansible/module_utils/_internal/_validation.py +14 -0
- ansible/module_utils/ansible_release.py +2 -2
- ansible/module_utils/api.py +1 -2
- ansible/module_utils/basic.py +303 -202
- ansible/module_utils/common/_utils.py +24 -28
- ansible/module_utils/common/arg_spec.py +8 -3
- ansible/module_utils/common/collections.py +7 -2
- ansible/module_utils/common/dict_transformations.py +2 -2
- ansible/module_utils/common/file.py +2 -2
- ansible/module_utils/common/json.py +90 -84
- ansible/module_utils/common/locale.py +2 -2
- ansible/module_utils/common/parameters.py +27 -24
- ansible/module_utils/common/process.py +2 -3
- ansible/module_utils/common/respawn.py +11 -33
- ansible/module_utils/common/sentinel.py +66 -0
- ansible/module_utils/common/sys_info.py +8 -8
- ansible/module_utils/common/text/converters.py +16 -37
- ansible/module_utils/common/validation.py +35 -24
- ansible/module_utils/common/warnings.py +143 -25
- ansible/module_utils/common/yaml.py +29 -3
- ansible/module_utils/compat/datetime.py +33 -21
- ansible/module_utils/compat/paramiko.py +21 -10
- ansible/module_utils/compat/typing.py +6 -5
- ansible/module_utils/connection.py +10 -13
- ansible/module_utils/csharp/Ansible.Basic.cs +15 -12
- ansible/module_utils/csharp/Ansible.Become.cs +1 -0
- ansible/module_utils/csharp/Ansible.Privilege.cs +2 -2
- ansible/module_utils/csharp/Ansible._Async.cs +517 -0
- ansible/module_utils/datatag.py +49 -0
- ansible/module_utils/distro/__init__.py +2 -2
- ansible/module_utils/facts/ansible_collector.py +4 -5
- ansible/module_utils/facts/collector.py +13 -14
- ansible/module_utils/facts/compat.py +4 -4
- ansible/module_utils/facts/default_collectors.py +1 -1
- ansible/module_utils/facts/hardware/aix.py +34 -0
- ansible/module_utils/facts/hardware/base.py +2 -2
- ansible/module_utils/facts/hardware/darwin.py +1 -3
- ansible/module_utils/facts/hardware/freebsd.py +2 -2
- ansible/module_utils/facts/hardware/linux.py +5 -5
- ansible/module_utils/facts/namespace.py +1 -1
- ansible/module_utils/facts/network/base.py +1 -1
- ansible/module_utils/facts/network/fc_wwn.py +1 -2
- ansible/module_utils/facts/network/iscsi.py +1 -2
- ansible/module_utils/facts/network/nvme.py +1 -2
- ansible/module_utils/facts/other/facter.py +2 -3
- ansible/module_utils/facts/other/ohai.py +2 -3
- ansible/module_utils/facts/sysctl.py +4 -6
- ansible/module_utils/facts/system/apparmor.py +1 -2
- ansible/module_utils/facts/system/caps.py +3 -3
- ansible/module_utils/facts/system/chroot.py +1 -2
- ansible/module_utils/facts/system/cmdline.py +1 -2
- ansible/module_utils/facts/system/date_time.py +5 -3
- ansible/module_utils/facts/system/distribution.py +27 -13
- ansible/module_utils/facts/system/dns.py +1 -1
- ansible/module_utils/facts/system/env.py +1 -2
- ansible/module_utils/facts/system/fips.py +7 -20
- ansible/module_utils/facts/system/loadavg.py +1 -2
- ansible/module_utils/facts/system/local.py +2 -3
- ansible/module_utils/facts/system/lsb.py +1 -2
- ansible/module_utils/facts/system/pkg_mgr.py +1 -2
- ansible/module_utils/facts/system/platform.py +1 -2
- ansible/module_utils/facts/system/python.py +1 -2
- ansible/module_utils/facts/system/selinux.py +1 -1
- ansible/module_utils/facts/system/service_mgr.py +1 -2
- ansible/module_utils/facts/system/ssh_pub_keys.py +1 -1
- ansible/module_utils/facts/system/systemd.py +1 -1
- ansible/module_utils/facts/system/user.py +1 -2
- ansible/module_utils/facts/utils.py +3 -3
- ansible/module_utils/facts/virtual/base.py +1 -1
- ansible/module_utils/facts/virtual/linux.py +3 -3
- ansible/module_utils/facts/virtual/sunos.py +3 -15
- ansible/module_utils/facts/virtual/sysctl.py +3 -16
- ansible/module_utils/json_utils.py +2 -2
- ansible/module_utils/parsing/convert_bool.py +7 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1 +1 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1 +1 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.CommandUtil.psm1 +1 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.WebRequest.psm1 +1 -1
- ansible/module_utils/service.py +21 -31
- ansible/module_utils/splitter.py +7 -7
- ansible/module_utils/testing.py +31 -0
- ansible/module_utils/urls.py +64 -35
- ansible/modules/add_host.py +4 -4
- ansible/modules/apt.py +69 -49
- ansible/modules/apt_key.py +19 -12
- ansible/modules/apt_repository.py +32 -51
- ansible/modules/assemble.py +16 -14
- ansible/modules/assert.py +4 -4
- ansible/modules/async_status.py +24 -24
- ansible/modules/async_wrapper.py +20 -25
- ansible/modules/blockinfile.py +6 -7
- ansible/modules/command.py +13 -20
- ansible/modules/copy.py +60 -147
- ansible/modules/cron.py +24 -21
- ansible/modules/deb822_repository.py +8 -9
- ansible/modules/debconf.py +5 -5
- ansible/modules/debug.py +4 -4
- ansible/modules/dnf.py +8 -8
- ansible/modules/dnf5.py +39 -13
- ansible/modules/dpkg_selections.py +4 -4
- ansible/modules/expect.py +13 -15
- ansible/modules/fail.py +4 -4
- ansible/modules/fetch.py +4 -4
- ansible/modules/file.py +184 -144
- ansible/modules/find.py +22 -20
- ansible/modules/gather_facts.py +3 -3
- ansible/modules/get_url.py +77 -54
- ansible/modules/getent.py +7 -9
- ansible/modules/git.py +38 -38
- ansible/modules/group.py +6 -6
- ansible/modules/group_by.py +4 -4
- ansible/modules/hostname.py +15 -32
- ansible/modules/import_playbook.py +6 -6
- ansible/modules/import_role.py +6 -6
- ansible/modules/import_tasks.py +6 -6
- ansible/modules/include_role.py +6 -6
- ansible/modules/include_tasks.py +6 -6
- ansible/modules/include_vars.py +6 -6
- ansible/modules/iptables.py +86 -73
- ansible/modules/known_hosts.py +22 -24
- ansible/modules/lineinfile.py +5 -5
- ansible/modules/meta.py +4 -4
- ansible/modules/mount_facts.py +2 -2
- ansible/modules/package.py +10 -4
- ansible/modules/package_facts.py +22 -10
- ansible/modules/pause.py +6 -6
- ansible/modules/ping.py +6 -6
- ansible/modules/pip.py +21 -26
- ansible/modules/raw.py +6 -6
- ansible/modules/reboot.py +6 -6
- ansible/modules/replace.py +10 -14
- ansible/modules/rpm_key.py +7 -8
- ansible/modules/script.py +4 -4
- ansible/modules/service.py +10 -17
- ansible/modules/service_facts.py +87 -10
- ansible/modules/set_fact.py +5 -5
- ansible/modules/set_stats.py +4 -4
- ansible/modules/setup.py +2 -2
- ansible/modules/shell.py +6 -6
- ansible/modules/slurp.py +16 -19
- ansible/modules/stat.py +15 -31
- ansible/modules/subversion.py +15 -15
- ansible/modules/systemd.py +7 -7
- ansible/modules/systemd_service.py +7 -7
- ansible/modules/sysvinit.py +9 -9
- ansible/modules/tempfile.py +5 -6
- ansible/modules/template.py +6 -6
- ansible/modules/unarchive.py +38 -17
- ansible/modules/uri.py +33 -26
- ansible/modules/user.py +45 -32
- ansible/modules/validate_argument_spec.py +10 -7
- ansible/modules/wait_for.py +70 -60
- ansible/modules/wait_for_connection.py +6 -6
- ansible/modules/yum_repository.py +10 -9
- ansible/parsing/ajson.py +17 -37
- ansible/parsing/dataloader.py +99 -54
- ansible/parsing/mod_args.py +62 -60
- ansible/parsing/plugin_docs.py +21 -86
- ansible/parsing/quoting.py +1 -1
- ansible/parsing/splitter.py +27 -12
- ansible/parsing/utils/addresses.py +24 -24
- ansible/parsing/utils/jsonify.py +5 -1
- ansible/parsing/utils/yaml.py +32 -61
- ansible/parsing/vault/__init__.py +327 -99
- ansible/parsing/yaml/__init__.py +0 -18
- ansible/parsing/yaml/dumper.py +6 -120
- ansible/parsing/yaml/loader.py +6 -39
- ansible/parsing/yaml/objects.py +43 -335
- ansible/playbook/__init__.py +1 -1
- ansible/playbook/attribute.py +8 -3
- ansible/playbook/base.py +187 -134
- ansible/playbook/block.py +26 -24
- ansible/playbook/collectionsearch.py +1 -15
- ansible/playbook/conditional.py +3 -77
- ansible/playbook/handler.py +8 -2
- ansible/playbook/helpers.py +41 -53
- ansible/playbook/included_file.py +32 -26
- ansible/playbook/loop_control.py +2 -2
- ansible/playbook/play.py +85 -44
- ansible/playbook/play_context.py +14 -17
- ansible/playbook/playbook_include.py +27 -62
- ansible/playbook/role/__init__.py +64 -49
- ansible/playbook/role/definition.py +15 -17
- ansible/playbook/role/include.py +2 -4
- ansible/playbook/role/metadata.py +10 -11
- ansible/playbook/role_include.py +3 -3
- ansible/playbook/taggable.py +28 -12
- ansible/playbook/task.py +192 -121
- ansible/playbook/task_include.py +5 -5
- ansible/plugins/__init__.py +58 -26
- ansible/plugins/action/__init__.py +188 -186
- ansible/plugins/action/add_host.py +2 -2
- ansible/plugins/action/assemble.py +11 -18
- ansible/plugins/action/assert.py +55 -67
- ansible/plugins/action/async_status.py +7 -2
- ansible/plugins/action/copy.py +14 -17
- ansible/plugins/action/debug.py +37 -31
- ansible/plugins/action/dnf.py +3 -4
- ansible/plugins/action/fail.py +1 -1
- ansible/plugins/action/fetch.py +7 -8
- ansible/plugins/action/gather_facts.py +13 -14
- ansible/plugins/action/group_by.py +1 -1
- ansible/plugins/action/include_vars.py +10 -11
- ansible/plugins/action/package.py +8 -14
- ansible/plugins/action/pause.py +2 -2
- ansible/plugins/action/script.py +27 -38
- ansible/plugins/action/service.py +9 -18
- ansible/plugins/action/set_fact.py +3 -12
- ansible/plugins/action/set_stats.py +3 -8
- ansible/plugins/action/template.py +47 -67
- ansible/plugins/action/unarchive.py +6 -16
- ansible/plugins/action/uri.py +9 -20
- ansible/plugins/action/validate_argument_spec.py +5 -5
- ansible/plugins/action/wait_for_connection.py +1 -1
- ansible/plugins/become/__init__.py +31 -8
- ansible/plugins/become/runas.py +71 -0
- ansible/plugins/become/su.py +13 -8
- ansible/plugins/become/sudo.py +19 -0
- ansible/plugins/cache/__init__.py +52 -63
- ansible/plugins/cache/base.py +8 -0
- ansible/plugins/cache/jsonfile.py +10 -16
- ansible/plugins/cache/memory.py +6 -12
- ansible/plugins/callback/__init__.py +294 -201
- ansible/plugins/callback/default.py +99 -95
- ansible/plugins/callback/junit.py +44 -43
- ansible/plugins/callback/minimal.py +28 -25
- ansible/plugins/callback/oneline.py +34 -21
- ansible/plugins/callback/tree.py +27 -16
- ansible/plugins/connection/__init__.py +47 -34
- ansible/plugins/connection/local.py +156 -60
- ansible/plugins/connection/paramiko_ssh.py +34 -24
- ansible/plugins/connection/psrp.py +76 -165
- ansible/plugins/connection/ssh.py +326 -86
- ansible/plugins/connection/winrm.py +62 -141
- ansible/plugins/doc_fragments/action_common_attributes.py +14 -14
- ansible/plugins/doc_fragments/action_core.py +6 -6
- ansible/plugins/doc_fragments/backup.py +2 -2
- ansible/plugins/doc_fragments/checksum_common.py +27 -0
- ansible/plugins/doc_fragments/constructed.py +8 -4
- ansible/plugins/doc_fragments/decrypt.py +2 -2
- ansible/plugins/doc_fragments/default_callback.py +2 -2
- ansible/plugins/doc_fragments/files.py +2 -2
- ansible/plugins/doc_fragments/inventory_cache.py +2 -2
- ansible/plugins/doc_fragments/result_format_callback.py +2 -2
- ansible/plugins/doc_fragments/return_common.py +2 -2
- ansible/plugins/doc_fragments/template_common.py +4 -4
- ansible/plugins/doc_fragments/url.py +17 -1
- ansible/plugins/doc_fragments/url_windows.py +2 -2
- ansible/plugins/doc_fragments/validate.py +2 -2
- ansible/plugins/doc_fragments/vars_plugin_staging.py +2 -2
- ansible/plugins/filter/__init__.py +6 -2
- ansible/plugins/filter/b64decode.yml +22 -0
- ansible/plugins/filter/b64encode.yml +22 -0
- ansible/plugins/filter/bool.yml +11 -4
- ansible/plugins/filter/core.py +245 -120
- ansible/plugins/filter/encryption.py +42 -34
- ansible/plugins/filter/flatten.yml +3 -2
- ansible/plugins/filter/human_to_bytes.yml +1 -1
- ansible/plugins/filter/mathstuff.py +30 -37
- ansible/plugins/filter/password_hash.yml +8 -0
- ansible/plugins/filter/pow.yml +1 -1
- ansible/plugins/filter/regex_search.yml +1 -4
- ansible/plugins/filter/root.yml +1 -1
- ansible/plugins/filter/split.yml +1 -1
- ansible/plugins/filter/strftime.yml +3 -3
- ansible/plugins/filter/to_nice_yaml.yml +0 -4
- ansible/plugins/filter/to_uuid.yml +1 -1
- ansible/plugins/filter/to_yaml.yml +0 -4
- ansible/plugins/filter/unvault.yml +1 -1
- ansible/plugins/filter/urls.py +1 -1
- ansible/plugins/filter/urlsplit.py +8 -9
- ansible/plugins/filter/vault.yml +14 -9
- ansible/plugins/filter/win_basename.yml +6 -1
- ansible/plugins/filter/win_dirname.yml +5 -0
- ansible/plugins/inventory/__init__.py +107 -86
- ansible/plugins/inventory/advanced_host_list.py +7 -5
- ansible/plugins/inventory/auto.py +11 -4
- ansible/plugins/inventory/constructed.py +21 -24
- ansible/plugins/inventory/generator.py +16 -11
- ansible/plugins/inventory/host_list.py +7 -5
- ansible/plugins/inventory/ini.py +78 -44
- ansible/plugins/inventory/script.py +190 -120
- ansible/plugins/inventory/toml.py +16 -126
- ansible/plugins/inventory/yaml.py +10 -8
- ansible/plugins/list.py +72 -19
- ansible/plugins/loader.py +383 -198
- ansible/plugins/lookup/__init__.py +21 -4
- ansible/plugins/lookup/config.py +21 -35
- ansible/plugins/lookup/csvfile.py +19 -73
- ansible/plugins/lookup/dict.py +1 -6
- ansible/plugins/lookup/env.py +12 -9
- ansible/plugins/lookup/file.py +5 -8
- ansible/plugins/lookup/first_found.py +87 -55
- ansible/plugins/lookup/indexed_items.py +1 -10
- ansible/plugins/lookup/ini.py +14 -13
- ansible/plugins/lookup/items.py +1 -1
- ansible/plugins/lookup/lines.py +8 -1
- ansible/plugins/lookup/list.py +1 -1
- ansible/plugins/lookup/nested.py +2 -18
- ansible/plugins/lookup/password.py +5 -5
- ansible/plugins/lookup/pipe.py +5 -7
- ansible/plugins/lookup/sequence.py +18 -8
- ansible/plugins/lookup/subelements.py +1 -4
- ansible/plugins/lookup/template.py +47 -36
- ansible/plugins/lookup/together.py +0 -12
- ansible/plugins/lookup/unvault.py +1 -5
- ansible/plugins/lookup/url.py +4 -10
- ansible/plugins/lookup/vars.py +16 -24
- ansible/plugins/shell/__init__.py +58 -4
- ansible/plugins/shell/cmd.py +2 -2
- ansible/plugins/shell/powershell.py +106 -31
- ansible/plugins/shell/sh.py +13 -7
- ansible/plugins/strategy/__init__.py +168 -193
- ansible/plugins/strategy/debug.py +2 -2
- ansible/plugins/strategy/free.py +16 -31
- ansible/plugins/strategy/host_pinned.py +2 -2
- ansible/plugins/strategy/linear.py +41 -41
- ansible/plugins/terminal/__init__.py +4 -4
- ansible/plugins/test/__init__.py +7 -2
- ansible/plugins/test/core.py +75 -35
- ansible/plugins/test/files.py +1 -1
- ansible/plugins/test/finished.yml +1 -1
- ansible/plugins/test/mathstuff.py +3 -3
- ansible/plugins/test/uri.py +5 -8
- ansible/plugins/vars/host_group_vars.py +7 -14
- ansible/release.py +2 -2
- ansible/template/__init__.py +353 -943
- ansible/utils/__init__.py +0 -18
- ansible/utils/collection_loader/__init__.py +54 -5
- ansible/utils/collection_loader/_collection_config.py +5 -6
- ansible/utils/collection_loader/_collection_finder.py +82 -96
- ansible/utils/collection_loader/_collection_meta.py +15 -8
- ansible/utils/display.py +485 -73
- ansible/utils/encrypt.py +27 -19
- ansible/utils/fqcn.py +2 -2
- ansible/utils/galaxy.py +2 -2
- ansible/utils/hashing.py +8 -10
- ansible/utils/helpers.py +2 -2
- ansible/utils/listify.py +10 -8
- ansible/utils/lock.py +2 -2
- ansible/utils/path.py +10 -12
- ansible/utils/plugin_docs.py +16 -14
- ansible/utils/py3compat.py +2 -7
- ansible/utils/sentinel.py +4 -62
- ansible/utils/singleton.py +2 -0
- ansible/utils/ssh_functions.py +6 -2
- ansible/utils/unsafe_proxy.py +23 -332
- ansible/utils/vars.py +55 -8
- ansible/utils/version.py +2 -2
- ansible/vars/clean.py +5 -5
- ansible/vars/hostvars.py +60 -90
- ansible/vars/manager.py +220 -285
- ansible/vars/plugins.py +4 -4
- ansible/vars/reserved.py +13 -12
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/METADATA +4 -3
- ansible_core-2.19.0.dist-info/RECORD +1097 -0
- ansible_core-2.19.0.dist-info/licenses/licenses/BSD-3-Clause.txt +28 -0
- ansible_test/_data/completion/docker.txt +7 -7
- ansible_test/_data/completion/remote.txt +6 -6
- ansible_test/_data/completion/windows.txt +1 -0
- ansible_test/_data/requirements/ansible.txt +2 -2
- ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
- ansible_test/_data/requirements/sanity.changelog.txt +2 -2
- ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
- ansible_test/_data/requirements/sanity.pep8.txt +1 -1
- ansible_test/_data/requirements/sanity.pylint.txt +5 -5
- ansible_test/_data/requirements/sanity.validate-modules.txt +2 -2
- ansible_test/_data/requirements/sanity.yamllint.txt +1 -1
- ansible_test/_data/requirements/units.txt +1 -0
- ansible_test/_internal/__init__.py +6 -0
- ansible_test/_internal/ansible_util.py +3 -1
- ansible_test/_internal/become.py +1 -0
- ansible_test/_internal/bootstrap.py +1 -0
- ansible_test/_internal/cache.py +1 -0
- ansible_test/_internal/cgroup.py +1 -0
- ansible_test/_internal/ci/__init__.py +1 -0
- ansible_test/_internal/ci/azp.py +1 -0
- ansible_test/_internal/ci/local.py +1 -0
- ansible_test/_internal/classification/__init__.py +1 -0
- ansible_test/_internal/classification/common.py +1 -0
- ansible_test/_internal/classification/csharp.py +1 -0
- ansible_test/_internal/classification/powershell.py +1 -0
- ansible_test/_internal/classification/python.py +1 -0
- ansible_test/_internal/cli/__init__.py +1 -0
- ansible_test/_internal/cli/actions.py +1 -0
- ansible_test/_internal/cli/argparsing/__init__.py +1 -0
- ansible_test/_internal/cli/argparsing/actions.py +1 -0
- ansible_test/_internal/cli/argparsing/argcompletion.py +1 -0
- ansible_test/_internal/cli/argparsing/parsers.py +1 -0
- ansible_test/_internal/cli/commands/__init__.py +11 -5
- ansible_test/_internal/cli/commands/coverage/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/combine.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/expand.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/filter.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/generate.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/missing.py +1 -0
- ansible_test/_internal/cli/commands/coverage/combine.py +1 -0
- ansible_test/_internal/cli/commands/coverage/erase.py +1 -0
- ansible_test/_internal/cli/commands/coverage/html.py +1 -0
- ansible_test/_internal/cli/commands/coverage/report.py +1 -0
- ansible_test/_internal/cli/commands/coverage/xml.py +1 -0
- ansible_test/_internal/cli/commands/env.py +1 -0
- ansible_test/_internal/cli/commands/integration/__init__.py +1 -0
- ansible_test/_internal/cli/commands/integration/network.py +1 -0
- ansible_test/_internal/cli/commands/integration/posix.py +1 -0
- ansible_test/_internal/cli/commands/integration/windows.py +1 -0
- ansible_test/_internal/cli/commands/sanity.py +9 -0
- ansible_test/_internal/cli/commands/shell.py +1 -0
- ansible_test/_internal/cli/commands/units.py +1 -0
- ansible_test/_internal/cli/compat.py +1 -0
- ansible_test/_internal/cli/completers.py +1 -0
- ansible_test/_internal/cli/converters.py +1 -0
- ansible_test/_internal/cli/environments.py +52 -5
- ansible_test/_internal/cli/epilog.py +1 -0
- ansible_test/_internal/cli/parsers/__init__.py +1 -0
- ansible_test/_internal/cli/parsers/base_argument_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/helpers.py +1 -0
- ansible_test/_internal/cli/parsers/host_config_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/key_value_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/value_parsers.py +1 -0
- ansible_test/_internal/commands/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/__init__.py +3 -2
- ansible_test/_internal/commands/coverage/analyze/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/combine.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/expand.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/filter.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/generate.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/missing.py +1 -0
- ansible_test/_internal/commands/coverage/combine.py +2 -1
- ansible_test/_internal/commands/coverage/erase.py +1 -0
- ansible_test/_internal/commands/coverage/html.py +1 -0
- ansible_test/_internal/commands/coverage/report.py +1 -0
- ansible_test/_internal/commands/coverage/xml.py +1 -0
- ansible_test/_internal/commands/env/__init__.py +2 -0
- ansible_test/_internal/commands/integration/__init__.py +22 -5
- ansible_test/_internal/commands/integration/cloud/__init__.py +1 -0
- ansible_test/_internal/commands/integration/cloud/acme.py +2 -1
- ansible_test/_internal/commands/integration/cloud/aws.py +1 -0
- ansible_test/_internal/commands/integration/cloud/azure.py +1 -0
- ansible_test/_internal/commands/integration/cloud/cs.py +1 -0
- ansible_test/_internal/commands/integration/cloud/digitalocean.py +1 -0
- ansible_test/_internal/commands/integration/cloud/galaxy.py +3 -2
- ansible_test/_internal/commands/integration/cloud/hcloud.py +1 -0
- ansible_test/_internal/commands/integration/cloud/httptester.py +3 -2
- ansible_test/_internal/commands/integration/cloud/nios.py +2 -1
- ansible_test/_internal/commands/integration/cloud/opennebula.py +1 -0
- ansible_test/_internal/commands/integration/cloud/openshift.py +1 -0
- ansible_test/_internal/commands/integration/cloud/scaleway.py +1 -0
- ansible_test/_internal/commands/integration/cloud/vcenter.py +1 -0
- ansible_test/_internal/commands/integration/cloud/vultr.py +1 -0
- ansible_test/_internal/commands/integration/coverage.py +8 -2
- ansible_test/_internal/commands/integration/filters.py +1 -0
- ansible_test/_internal/commands/integration/network.py +1 -0
- ansible_test/_internal/commands/integration/posix.py +1 -0
- ansible_test/_internal/commands/integration/windows.py +1 -0
- ansible_test/_internal/commands/sanity/__init__.py +19 -2
- ansible_test/_internal/commands/sanity/ansible_doc.py +1 -0
- ansible_test/_internal/commands/sanity/bin_symlinks.py +1 -0
- ansible_test/_internal/commands/sanity/compile.py +1 -0
- ansible_test/_internal/commands/sanity/ignores.py +1 -0
- ansible_test/_internal/commands/sanity/import.py +1 -0
- ansible_test/_internal/commands/sanity/integration_aliases.py +12 -0
- ansible_test/_internal/commands/sanity/pep8.py +1 -0
- ansible_test/_internal/commands/sanity/pslint.py +1 -0
- ansible_test/_internal/commands/sanity/pylint.py +25 -26
- ansible_test/_internal/commands/sanity/shellcheck.py +1 -0
- ansible_test/_internal/commands/sanity/validate_modules.py +1 -0
- ansible_test/_internal/commands/sanity/yamllint.py +1 -0
- ansible_test/_internal/commands/shell/__init__.py +44 -4
- ansible_test/_internal/commands/units/__init__.py +5 -1
- ansible_test/_internal/compat/__init__.py +1 -0
- ansible_test/_internal/compat/packaging.py +1 -0
- ansible_test/_internal/compat/yaml.py +1 -0
- ansible_test/_internal/completion.py +1 -0
- ansible_test/_internal/config.py +23 -13
- ansible_test/_internal/connections.py +1 -0
- ansible_test/_internal/constants.py +1 -0
- ansible_test/_internal/containers.py +1 -0
- ansible_test/_internal/content_config.py +1 -0
- ansible_test/_internal/core_ci.py +1 -0
- ansible_test/_internal/coverage_util.py +11 -10
- ansible_test/_internal/data.py +1 -0
- ansible_test/_internal/debugging.py +166 -0
- ansible_test/_internal/delegation.py +22 -13
- ansible_test/_internal/dev/__init__.py +1 -0
- ansible_test/_internal/dev/container_probe.py +1 -0
- ansible_test/_internal/diff.py +3 -2
- ansible_test/_internal/docker_util.py +2 -1
- ansible_test/_internal/encoding.py +1 -0
- ansible_test/_internal/executor.py +1 -0
- ansible_test/_internal/git.py +1 -0
- ansible_test/_internal/host_configs.py +1 -0
- ansible_test/_internal/host_profiles.py +260 -16
- ansible_test/_internal/http.py +1 -0
- ansible_test/_internal/init.py +1 -0
- ansible_test/_internal/inventory.py +39 -3
- ansible_test/_internal/io.py +1 -0
- ansible_test/_internal/metadata.py +95 -4
- ansible_test/_internal/payload.py +1 -0
- ansible_test/_internal/processes.py +80 -0
- ansible_test/_internal/provider/__init__.py +1 -0
- ansible_test/_internal/provider/layout/__init__.py +1 -0
- ansible_test/_internal/provider/layout/ansible.py +1 -0
- ansible_test/_internal/provider/layout/collection.py +1 -0
- ansible_test/_internal/provider/layout/unsupported.py +1 -0
- ansible_test/_internal/provider/source/__init__.py +1 -0
- ansible_test/_internal/provider/source/git.py +1 -0
- ansible_test/_internal/provider/source/installed.py +1 -0
- ansible_test/_internal/provider/source/unsupported.py +1 -0
- ansible_test/_internal/provider/source/unversioned.py +1 -0
- ansible_test/_internal/provisioning.py +11 -4
- ansible_test/_internal/pypi_proxy.py +6 -5
- ansible_test/_internal/python_requirements.py +28 -0
- ansible_test/_internal/ssh.py +2 -5
- ansible_test/_internal/target.py +9 -0
- ansible_test/_internal/test.py +3 -2
- ansible_test/_internal/thread.py +3 -1
- ansible_test/_internal/timeout.py +2 -1
- ansible_test/_internal/util.py +41 -12
- ansible_test/_internal/util_common.py +18 -5
- ansible_test/_internal/venv.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/action-plugin-docs.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/changelog/sphinx.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/changelog.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/empty-init.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/line-endings.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-assert.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-get-exception.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-illegal-filenames.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-smart-quotes.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/replace-urlopen.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py +28 -1
- ansible_test/_util/controller/sanity/code-smell/shebang.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/symlinks.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/use-argspec-type-path.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/use-compat-six.py +1 -0
- ansible_test/_util/controller/sanity/integration-aliases/yaml_to_json.py +2 -1
- ansible_test/_util/controller/sanity/pep8/current-ignore.txt +4 -0
- ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +8 -5
- ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +8 -5
- ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +8 -5
- ansible_test/_util/controller/sanity/pylint/config/collection.cfg +4 -5
- ansible_test/_util/controller/sanity/pylint/config/default.cfg +8 -7
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated_calls.py +541 -0
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated_comment.py +137 -0
- ansible_test/_util/controller/sanity/pylint/plugins/hide_unraisable.py +1 -0
- ansible_test/_util/controller/sanity/pylint/plugins/string_format.py +1 -8
- ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +1 -8
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +55 -28
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +12 -5
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +13 -2
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -0
- ansible_test/_util/controller/sanity/yamllint/yamllinter.py +35 -17
- ansible_test/_util/controller/tools/collection_detail.py +1 -0
- ansible_test/_util/controller/tools/yaml_to_json.py +2 -1
- ansible_test/_util/target/injector/python.py +8 -0
- ansible_test/_util/target/pytest/plugins/ansible_forked.py +6 -1
- ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +2 -1
- ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -0
- ansible_test/_util/target/sanity/compile/compile.py +1 -0
- ansible_test/_util/target/sanity/import/importer.py +15 -16
- ansible_test/_util/target/setup/bootstrap.sh +9 -20
- ansible_test/_util/target/setup/probe_cgroups.py +1 -0
- ansible_test/_util/target/setup/quiet_pip.py +1 -0
- ansible_test/_util/target/setup/requirements.py +38 -36
- ansible_test/_util/target/tools/virtualenvcheck.py +2 -1
- ansible_test/_util/target/tools/yamlcheck.py +2 -1
- ansible/compat/selectors.py +0 -32
- ansible/errors/yaml_strings.py +0 -138
- ansible/executor/action_write_locks.py +0 -44
- ansible/executor/discovery/python_target.py +0 -47
- ansible/executor/powershell/module_powershell_wrapper.ps1 +0 -86
- ansible/executor/powershell/module_script_wrapper.ps1 +0 -22
- ansible/module_utils/compat/importlib.py +0 -26
- ansible/module_utils/compat/selectors.py +0 -32
- ansible/module_utils/pycompat24.py +0 -73
- ansible/parsing/yaml/constructor.py +0 -178
- ansible/template/native_helpers.py +0 -251
- ansible/template/template.py +0 -43
- ansible/template/vars.py +0 -77
- ansible/utils/native_jinja.py +0 -11
- ansible/vars/fact_cache.py +0 -71
- ansible_core-2.18.7rc1.dist-info/RECORD +0 -992
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +0 -411
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/WHEEL +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/COPYING +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/Apache-License.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/MIT-license.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/PSF-license.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/simplified_bsd.txt +0 -0
- {ansible_core-2.18.7rc1.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.
|
|
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.
|
|
97
|
-
in the system and you want to run pip for the Python 3.
|
|
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.
|
|
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
|
|
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-
|
|
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.
|
|
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.
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
|
819
|
-
|
|
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
|
|
77
|
-
ansible.builtin.raw: dnf install -y
|
|
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
|
+
"""
|
ansible/modules/replace.py
CHANGED
|
@@ -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
|
-
|
|
195
|
-
|
|
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
|
|
262
|
-
|
|
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:
|
ansible/modules/rpm_key.py
CHANGED
|
@@ -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
|
-
|
|
176
|
-
|
|
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
|
+
"""
|
ansible/modules/service.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: 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
|
|
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
|
-
|
|
289
|
-
|
|
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
|
-
|
|
699
|
-
|
|
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'):
|
ansible/modules/service_facts.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: 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
|
-
|
|
213
|
-
|
|
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
|
-
|
|
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)
|
ansible/modules/set_fact.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: 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
|
-
|
|
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
|
+
"""
|
ansible/modules/set_stats.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: 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
|
+
"""
|