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.
- 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.7.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.7.dist-info/RECORD +0 -992
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +0 -411
- {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/WHEEL +0 -0
- {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/COPYING +0 -0
- {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/Apache-License.txt +0 -0
- {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/MIT-license.txt +0 -0
- {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/PSF-license.txt +0 -0
- {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/simplified_bsd.txt +0 -0
- {ansible_core-2.18.7.dist-info → ansible_core-2.19.0.dist-info}/top_level.txt +0 -0
ansible/modules/iptables.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: iptables
|
|
13
13
|
short_description: Modify iptables rules
|
|
@@ -67,7 +67,7 @@ options:
|
|
|
67
67
|
description:
|
|
68
68
|
- Which version of the IP protocol this rule should apply to.
|
|
69
69
|
type: str
|
|
70
|
-
choices: [ ipv4, ipv6 ]
|
|
70
|
+
choices: [ ipv4, ipv6, both ]
|
|
71
71
|
default: ipv4
|
|
72
72
|
chain:
|
|
73
73
|
description:
|
|
@@ -394,9 +394,9 @@ options:
|
|
|
394
394
|
type: bool
|
|
395
395
|
default: false
|
|
396
396
|
version_added: "2.15"
|
|
397
|
-
|
|
397
|
+
"""
|
|
398
398
|
|
|
399
|
-
EXAMPLES = r
|
|
399
|
+
EXAMPLES = r"""
|
|
400
400
|
- name: Block specific IP
|
|
401
401
|
ansible.builtin.iptables:
|
|
402
402
|
chain: INPUT
|
|
@@ -543,7 +543,7 @@ EXAMPLES = r'''
|
|
|
543
543
|
- "443"
|
|
544
544
|
- "8081:8083"
|
|
545
545
|
jump: ACCEPT
|
|
546
|
-
|
|
546
|
+
"""
|
|
547
547
|
|
|
548
548
|
import re
|
|
549
549
|
|
|
@@ -564,6 +564,7 @@ BINS = dict(
|
|
|
564
564
|
ICMP_TYPE_OPTIONS = dict(
|
|
565
565
|
ipv4='--icmp-type',
|
|
566
566
|
ipv6='--icmpv6-type',
|
|
567
|
+
both='--icmp-type --icmpv6-type',
|
|
567
568
|
)
|
|
568
569
|
|
|
569
570
|
|
|
@@ -614,7 +615,6 @@ def append_wait(rule, param, flag):
|
|
|
614
615
|
|
|
615
616
|
def construct_rule(params):
|
|
616
617
|
rule = []
|
|
617
|
-
append_wait(rule, params['wait'], '-w')
|
|
618
618
|
append_param(rule, params['protocol'], '-p', False)
|
|
619
619
|
append_param(rule, params['source'], '-s', False)
|
|
620
620
|
append_param(rule, params['destination'], '-d', False)
|
|
@@ -701,6 +701,8 @@ def push_arguments(iptables_path, action, params, make_rule=True):
|
|
|
701
701
|
cmd.extend([action, params['chain']])
|
|
702
702
|
if action == '-I' and params['rule_num']:
|
|
703
703
|
cmd.extend([params['rule_num']])
|
|
704
|
+
if params['wait']:
|
|
705
|
+
cmd.extend(['-w', params['wait']])
|
|
704
706
|
if make_rule:
|
|
705
707
|
cmd.extend(construct_rule(params))
|
|
706
708
|
return cmd
|
|
@@ -781,7 +783,7 @@ def main():
|
|
|
781
783
|
table=dict(type='str', default='filter', choices=['filter', 'nat', 'mangle', 'raw', 'security']),
|
|
782
784
|
state=dict(type='str', default='present', choices=['absent', 'present']),
|
|
783
785
|
action=dict(type='str', default='append', choices=['append', 'insert']),
|
|
784
|
-
ip_version=dict(type='str', default='ipv4', choices=['ipv4', 'ipv6']),
|
|
786
|
+
ip_version=dict(type='str', default='ipv4', choices=['ipv4', 'ipv6', 'both']),
|
|
785
787
|
chain=dict(type='str'),
|
|
786
788
|
rule_num=dict(type='str'),
|
|
787
789
|
protocol=dict(type='str'),
|
|
@@ -861,86 +863,97 @@ def main():
|
|
|
861
863
|
rule=' '.join(construct_rule(module.params)),
|
|
862
864
|
state=module.params['state'],
|
|
863
865
|
chain_management=module.params['chain_management'],
|
|
866
|
+
wait=module.params['wait'],
|
|
864
867
|
)
|
|
865
868
|
|
|
866
|
-
ip_version = module.params['ip_version']
|
|
867
|
-
iptables_path = module.get_bin_path(
|
|
869
|
+
ip_version = ['ipv4', 'ipv6'] if module.params['ip_version'] == 'both' else [module.params['ip_version']]
|
|
870
|
+
iptables_path = [module.get_bin_path('iptables', True) if ip_version == 'ipv4' else module.get_bin_path('ip6tables', True) for ip_version in ip_version]
|
|
868
871
|
|
|
869
|
-
|
|
870
|
-
if module.params['jump'] is None:
|
|
871
|
-
module.params['jump'] = 'LOG'
|
|
872
|
-
elif module.params['jump'] != 'LOG':
|
|
873
|
-
module.fail_json(msg="Logging options can only be used with the LOG jump target.")
|
|
872
|
+
both_changed = False
|
|
874
873
|
|
|
875
|
-
|
|
876
|
-
|
|
874
|
+
for path in iptables_path:
|
|
875
|
+
if module.params.get('log_prefix', None) or module.params.get('log_level', None):
|
|
876
|
+
if module.params['jump'] is None:
|
|
877
|
+
module.params['jump'] = 'LOG'
|
|
878
|
+
elif module.params['jump'] != 'LOG':
|
|
879
|
+
module.fail_json(msg="Logging options can only be used with the LOG jump target.")
|
|
877
880
|
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
module.params['wait'] = ''
|
|
881
|
-
else:
|
|
882
|
-
module.params['wait'] = None
|
|
883
|
-
|
|
884
|
-
# Flush the table
|
|
885
|
-
if args['flush'] is True:
|
|
886
|
-
args['changed'] = True
|
|
887
|
-
if not module.check_mode:
|
|
888
|
-
flush_table(iptables_path, module, module.params)
|
|
889
|
-
|
|
890
|
-
# Set the policy
|
|
891
|
-
elif module.params['policy']:
|
|
892
|
-
current_policy = get_chain_policy(iptables_path, module, module.params)
|
|
893
|
-
if not current_policy:
|
|
894
|
-
module.fail_json(msg='Can\'t detect current policy')
|
|
895
|
-
|
|
896
|
-
changed = current_policy != module.params['policy']
|
|
897
|
-
args['changed'] = changed
|
|
898
|
-
if changed and not module.check_mode:
|
|
899
|
-
set_chain_policy(iptables_path, module, module.params)
|
|
900
|
-
|
|
901
|
-
# Delete the chain if there is no rule in the arguments
|
|
902
|
-
elif (args['state'] == 'absent') and not args['rule']:
|
|
903
|
-
chain_is_present = check_chain_present(
|
|
904
|
-
iptables_path, module, module.params
|
|
905
|
-
)
|
|
906
|
-
args['changed'] = chain_is_present
|
|
907
|
-
|
|
908
|
-
if (chain_is_present and args['chain_management'] and not module.check_mode):
|
|
909
|
-
delete_chain(iptables_path, module, module.params)
|
|
881
|
+
# Check if wait option is supported
|
|
882
|
+
iptables_version = LooseVersion(get_iptables_version(path, module))
|
|
910
883
|
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
884
|
+
if iptables_version >= LooseVersion(IPTABLES_WAIT_SUPPORT_ADDED):
|
|
885
|
+
if iptables_version < LooseVersion(IPTABLES_WAIT_WITH_SECONDS_SUPPORT_ADDED):
|
|
886
|
+
module.params['wait'] = ''
|
|
887
|
+
else:
|
|
888
|
+
module.params['wait'] = None
|
|
889
|
+
|
|
890
|
+
# Flush the table
|
|
891
|
+
if args['flush'] is True:
|
|
892
|
+
args['changed'] = True
|
|
893
|
+
both_changed = True
|
|
894
|
+
if not module.check_mode:
|
|
895
|
+
flush_table(path, module, module.params)
|
|
896
|
+
|
|
897
|
+
# Set the policy
|
|
898
|
+
elif module.params['policy']:
|
|
899
|
+
current_policy = get_chain_policy(path, module, module.params)
|
|
900
|
+
if not current_policy:
|
|
901
|
+
module.fail_json(msg='Can\'t detect current policy')
|
|
902
|
+
|
|
903
|
+
changed = current_policy != module.params['policy']
|
|
904
|
+
args['changed'] = changed
|
|
905
|
+
both_changed = both_changed or changed
|
|
906
|
+
if changed and not module.check_mode:
|
|
907
|
+
set_chain_policy(path, module, module.params)
|
|
908
|
+
|
|
909
|
+
# Delete the chain if there is no rule in the arguments
|
|
910
|
+
elif (args['state'] == 'absent') and not args['rule']:
|
|
914
911
|
chain_is_present = check_chain_present(
|
|
915
|
-
|
|
912
|
+
path, module, module.params
|
|
916
913
|
)
|
|
917
|
-
args['changed'] =
|
|
914
|
+
args['changed'] = chain_is_present
|
|
915
|
+
both_changed = both_changed or chain_is_present
|
|
918
916
|
|
|
919
|
-
if (
|
|
920
|
-
|
|
917
|
+
if (chain_is_present and args['chain_management'] and not module.check_mode):
|
|
918
|
+
delete_chain(path, module, module.params)
|
|
921
919
|
|
|
922
920
|
else:
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
921
|
+
# Create the chain if there are no rule arguments
|
|
922
|
+
if (args['state'] == 'present') and not args['rule']:
|
|
923
|
+
chain_is_present = check_chain_present(
|
|
924
|
+
path, module, module.params
|
|
925
|
+
)
|
|
926
|
+
args['changed'] = not chain_is_present
|
|
927
|
+
both_changed = both_changed or not chain_is_present
|
|
927
928
|
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
args['changed'] = (rule_is_present != should_be_present)
|
|
931
|
-
if args['changed'] is False:
|
|
932
|
-
# Target is already up to date
|
|
933
|
-
module.exit_json(**args)
|
|
929
|
+
if (not chain_is_present and args['chain_management'] and not module.check_mode):
|
|
930
|
+
create_chain(path, module, module.params)
|
|
934
931
|
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
932
|
+
else:
|
|
933
|
+
insert = (module.params['action'] == 'insert')
|
|
934
|
+
rule_is_present = check_rule_present(
|
|
935
|
+
path, module, module.params
|
|
936
|
+
)
|
|
937
|
+
|
|
938
|
+
should_be_present = (args['state'] == 'present')
|
|
939
|
+
# Check if target is up to date
|
|
940
|
+
args['changed'] = (rule_is_present != should_be_present)
|
|
941
|
+
both_changed = both_changed or (rule_is_present != should_be_present)
|
|
942
|
+
if args['changed'] is False:
|
|
943
|
+
# Target is already up to date
|
|
944
|
+
continue
|
|
945
|
+
|
|
946
|
+
# Modify if not check_mode
|
|
947
|
+
if not module.check_mode:
|
|
948
|
+
if should_be_present:
|
|
949
|
+
if insert:
|
|
950
|
+
insert_rule(path, module, module.params)
|
|
951
|
+
else:
|
|
952
|
+
append_rule(path, module, module.params)
|
|
940
953
|
else:
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
954
|
+
remove_rule(path, module, module.params)
|
|
955
|
+
|
|
956
|
+
args['changed'] = both_changed
|
|
944
957
|
|
|
945
958
|
module.exit_json(**args)
|
|
946
959
|
|
ansible/modules/known_hosts.py
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
from __future__ import annotations
|
|
6
6
|
|
|
7
7
|
|
|
8
|
-
DOCUMENTATION = r
|
|
8
|
+
DOCUMENTATION = r"""
|
|
9
9
|
---
|
|
10
10
|
module: known_hosts
|
|
11
11
|
short_description: Add or remove a host from the C(known_hosts) file
|
|
@@ -65,9 +65,9 @@ extends_documentation_fragment:
|
|
|
65
65
|
- action_common_attributes
|
|
66
66
|
author:
|
|
67
67
|
- Matthew Vernon (@mcv21)
|
|
68
|
-
|
|
68
|
+
"""
|
|
69
69
|
|
|
70
|
-
EXAMPLES = r
|
|
70
|
+
EXAMPLES = r"""
|
|
71
71
|
- name: Tell the host about our servers it might want to ssh to
|
|
72
72
|
ansible.builtin.known_hosts:
|
|
73
73
|
path: /etc/ssh/ssh_known_hosts
|
|
@@ -87,7 +87,7 @@ EXAMPLES = r'''
|
|
|
87
87
|
key: '[host1.example.com]:2222 ssh-rsa ASDeararAIUHI324324' # some key gibberish
|
|
88
88
|
path: /etc/ssh/ssh_known_hosts
|
|
89
89
|
state: present
|
|
90
|
-
|
|
90
|
+
"""
|
|
91
91
|
|
|
92
92
|
# Makes sure public host keys are present or absent in the given known_hosts
|
|
93
93
|
# file.
|
|
@@ -102,7 +102,6 @@ EXAMPLES = r'''
|
|
|
102
102
|
|
|
103
103
|
import base64
|
|
104
104
|
import copy
|
|
105
|
-
import errno
|
|
106
105
|
import hashlib
|
|
107
106
|
import hmac
|
|
108
107
|
import os
|
|
@@ -169,11 +168,10 @@ def enforce_state(module, params):
|
|
|
169
168
|
if replace_or_add or found != (state == "present"):
|
|
170
169
|
try:
|
|
171
170
|
inf = open(path, "r")
|
|
172
|
-
except
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
module.fail_json(msg="Failed to read %s: %s" % (path, str(e)))
|
|
171
|
+
except FileNotFoundError:
|
|
172
|
+
inf = None
|
|
173
|
+
except OSError as ex:
|
|
174
|
+
raise Exception(f"Failed to read {path!r}.") from ex
|
|
177
175
|
try:
|
|
178
176
|
with tempfile.NamedTemporaryFile(mode='w+', dir=os.path.dirname(path), delete=False) as outf:
|
|
179
177
|
if inf is not None:
|
|
@@ -184,8 +182,8 @@ def enforce_state(module, params):
|
|
|
184
182
|
inf.close()
|
|
185
183
|
if state == 'present':
|
|
186
184
|
outf.write(key)
|
|
187
|
-
except
|
|
188
|
-
|
|
185
|
+
except OSError as ex:
|
|
186
|
+
raise Exception(f"Failed to write to file {path!r}.") from ex
|
|
189
187
|
else:
|
|
190
188
|
module.atomic_move(outf.name, path)
|
|
191
189
|
|
|
@@ -195,13 +193,13 @@ def enforce_state(module, params):
|
|
|
195
193
|
|
|
196
194
|
|
|
197
195
|
def sanity_check(module, host, key, sshkeygen):
|
|
198
|
-
|
|
196
|
+
"""Check supplied key is sensible
|
|
199
197
|
|
|
200
198
|
host and key are parameters provided by the user; If the host
|
|
201
199
|
provided is inconsistent with the key supplied, then this function
|
|
202
200
|
quits, providing an error to the user.
|
|
203
201
|
sshkeygen is the path to ssh-keygen, found earlier with get_bin_path
|
|
204
|
-
|
|
202
|
+
"""
|
|
205
203
|
# If no key supplied, we're doing a removal, and have nothing to check here.
|
|
206
204
|
if not key:
|
|
207
205
|
return
|
|
@@ -220,9 +218,8 @@ def sanity_check(module, host, key, sshkeygen):
|
|
|
220
218
|
try:
|
|
221
219
|
outf.write(key)
|
|
222
220
|
outf.flush()
|
|
223
|
-
except
|
|
224
|
-
|
|
225
|
-
(outf.name, to_native(e)))
|
|
221
|
+
except OSError as ex:
|
|
222
|
+
raise Exception(f"Failed to write to temporary file {outf.name!r}.") from ex
|
|
226
223
|
|
|
227
224
|
sshkeygen_command = [sshkeygen, '-F', host, '-f', outf.name]
|
|
228
225
|
rc, stdout, stderr = module.run_command(sshkeygen_command)
|
|
@@ -232,7 +229,7 @@ def sanity_check(module, host, key, sshkeygen):
|
|
|
232
229
|
|
|
233
230
|
|
|
234
231
|
def search_for_host_key(module, host, key, path, sshkeygen):
|
|
235
|
-
|
|
232
|
+
"""search_for_host_key(module,host,key,path,sshkeygen) -> (found,replace_or_add,found_line)
|
|
236
233
|
|
|
237
234
|
Looks up host and keytype in the known_hosts file path; if it's there, looks to see
|
|
238
235
|
if one of those entries matches key. Returns:
|
|
@@ -241,7 +238,7 @@ def search_for_host_key(module, host, key, path, sshkeygen):
|
|
|
241
238
|
found_line (int or None): the line where a key of the same type was found
|
|
242
239
|
if found=False, then replace is always False.
|
|
243
240
|
sshkeygen is the path to ssh-keygen, found earlier with get_bin_path
|
|
244
|
-
|
|
241
|
+
"""
|
|
245
242
|
if os.path.exists(path) is False:
|
|
246
243
|
return False, False, None
|
|
247
244
|
|
|
@@ -304,14 +301,14 @@ def hash_host_key(host, key):
|
|
|
304
301
|
|
|
305
302
|
|
|
306
303
|
def normalize_known_hosts_key(key):
|
|
307
|
-
|
|
304
|
+
"""
|
|
308
305
|
Transform a key, either taken from a known_host file or provided by the
|
|
309
306
|
user, into a normalized form.
|
|
310
307
|
The host part (which might include multiple hostnames or be hashed) gets
|
|
311
308
|
replaced by the provided host. Also, any spurious information gets removed
|
|
312
309
|
from the end (like the username@host tag usually present in hostkeys, but
|
|
313
310
|
absent in known_hosts files)
|
|
314
|
-
|
|
311
|
+
"""
|
|
315
312
|
key = key.strip() # trim trailing newline
|
|
316
313
|
k = key.split()
|
|
317
314
|
d = dict()
|
|
@@ -337,9 +334,10 @@ def compute_diff(path, found_line, replace_or_add, state, key):
|
|
|
337
334
|
}
|
|
338
335
|
try:
|
|
339
336
|
inf = open(path, "r")
|
|
340
|
-
except
|
|
341
|
-
|
|
342
|
-
|
|
337
|
+
except FileNotFoundError:
|
|
338
|
+
diff['before_header'] = '/dev/null'
|
|
339
|
+
except OSError:
|
|
340
|
+
pass
|
|
343
341
|
else:
|
|
344
342
|
diff['before'] = inf.read()
|
|
345
343
|
inf.close()
|
ansible/modules/lineinfile.py
CHANGED
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
DOCUMENTATION = r
|
|
11
|
+
DOCUMENTATION = r"""
|
|
12
12
|
---
|
|
13
13
|
module: lineinfile
|
|
14
14
|
short_description: Manage lines in text files
|
|
@@ -152,9 +152,9 @@ author:
|
|
|
152
152
|
- Daniel Hokka Zakrissoni (@dhozac)
|
|
153
153
|
- Ahti Kitsik (@ahtik)
|
|
154
154
|
- Jose Angel Munoz (@imjoseangel)
|
|
155
|
-
|
|
155
|
+
"""
|
|
156
156
|
|
|
157
|
-
EXAMPLES = r
|
|
157
|
+
EXAMPLES = r"""
|
|
158
158
|
# NOTE: Before 2.3, option 'dest', 'destfile' or 'name' was used instead of 'path'
|
|
159
159
|
- name: Ensure SELinux is set to enforcing mode
|
|
160
160
|
ansible.builtin.lineinfile:
|
|
@@ -237,9 +237,9 @@ EXAMPLES = r'''
|
|
|
237
237
|
regexp: ^(host=).*
|
|
238
238
|
line: \g<1>{{ hostname }}
|
|
239
239
|
backrefs: yes
|
|
240
|
-
|
|
240
|
+
"""
|
|
241
241
|
|
|
242
|
-
RETURN = r
|
|
242
|
+
RETURN = r"""#"""
|
|
243
243
|
|
|
244
244
|
import os
|
|
245
245
|
import re
|
ansible/modules/meta.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
DOCUMENTATION = r
|
|
9
|
+
DOCUMENTATION = r"""
|
|
10
10
|
module: meta
|
|
11
11
|
short_description: Execute Ansible 'actions'
|
|
12
12
|
version_added: '1.2'
|
|
@@ -83,9 +83,9 @@ seealso:
|
|
|
83
83
|
- module: ansible.builtin.fail
|
|
84
84
|
author:
|
|
85
85
|
- Ansible Core Team
|
|
86
|
-
|
|
86
|
+
"""
|
|
87
87
|
|
|
88
|
-
EXAMPLES = r
|
|
88
|
+
EXAMPLES = r"""
|
|
89
89
|
# Example showing flushing handlers on demand, not at end of play
|
|
90
90
|
- ansible.builtin.template:
|
|
91
91
|
src: new.j2
|
|
@@ -131,4 +131,4 @@ EXAMPLES = r'''
|
|
|
131
131
|
when:
|
|
132
132
|
- ansible_distribution == 'CentOS'
|
|
133
133
|
- ansible_distribution_major_version == '6'
|
|
134
|
-
|
|
134
|
+
"""
|
ansible/modules/mount_facts.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# -*- coding: utf-8 -*-
|
|
2
|
-
# Copyright
|
|
2
|
+
# Copyright: Contributors to the Ansible project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
4
|
|
|
5
5
|
from __future__ import annotations
|
|
@@ -359,7 +359,7 @@ def gen_mounts_from_stdout(stdout: str) -> t.Iterable[MountInfo]:
|
|
|
359
359
|
elif pattern is BSD_MOUNT_RE:
|
|
360
360
|
# the group containing fstype is comma separated, and may include whitespace
|
|
361
361
|
mount_info = match.groupdict()
|
|
362
|
-
parts = re.split(r"\s*,\s*", match.group("fstype"), 1)
|
|
362
|
+
parts = re.split(r"\s*,\s*", match.group("fstype"), maxsplit=1)
|
|
363
363
|
if len(parts) == 1:
|
|
364
364
|
mount_info["fstype"] = parts[0]
|
|
365
365
|
else:
|
ansible/modules/package.py
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
DOCUMENTATION =
|
|
10
|
+
DOCUMENTATION = """
|
|
11
11
|
---
|
|
12
12
|
module: package
|
|
13
13
|
version_added: 2.0
|
|
@@ -66,8 +66,8 @@ attributes:
|
|
|
66
66
|
notes:
|
|
67
67
|
- While M(ansible.builtin.package) abstracts package managers to ease dealing with multiple distributions, package name often differs for the same software.
|
|
68
68
|
|
|
69
|
-
|
|
70
|
-
EXAMPLES =
|
|
69
|
+
"""
|
|
70
|
+
EXAMPLES = """
|
|
71
71
|
- name: Install ntpdate
|
|
72
72
|
ansible.builtin.package:
|
|
73
73
|
name: ntpdate
|
|
@@ -85,4 +85,10 @@ EXAMPLES = '''
|
|
|
85
85
|
- httpd
|
|
86
86
|
- mariadb-server
|
|
87
87
|
state: latest
|
|
88
|
-
|
|
88
|
+
|
|
89
|
+
- name: Use the dnf package manager to install httpd
|
|
90
|
+
ansible.builtin.package:
|
|
91
|
+
name: httpd
|
|
92
|
+
state: present
|
|
93
|
+
use: dnf
|
|
94
|
+
"""
|
ansible/modules/package_facts.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
DOCUMENTATION =
|
|
9
|
+
DOCUMENTATION = """
|
|
10
10
|
module: package_facts
|
|
11
11
|
short_description: Package information as facts
|
|
12
12
|
description:
|
|
@@ -23,7 +23,7 @@ options:
|
|
|
23
23
|
default: ['auto']
|
|
24
24
|
choices:
|
|
25
25
|
auto: Depending on O(strategy), will match the first or all package managers provided, in order
|
|
26
|
-
rpm: For RPM based distros, requires RPM Python bindings, not installed by default on Suse (python3-rpm)
|
|
26
|
+
rpm: For RPM based distros, requires RPM Python bindings, not installed by default on Suse or Fedora 41+ (python3-rpm)
|
|
27
27
|
yum: Alias to rpm
|
|
28
28
|
dnf: Alias to rpm
|
|
29
29
|
dnf5: Alias to rpm
|
|
@@ -67,9 +67,9 @@ attributes:
|
|
|
67
67
|
support: full
|
|
68
68
|
platform:
|
|
69
69
|
platforms: posix
|
|
70
|
-
|
|
70
|
+
"""
|
|
71
71
|
|
|
72
|
-
EXAMPLES =
|
|
72
|
+
EXAMPLES = """
|
|
73
73
|
- name: Gather the package facts
|
|
74
74
|
ansible.builtin.package_facts:
|
|
75
75
|
manager: auto
|
|
@@ -83,9 +83,9 @@ EXAMPLES = '''
|
|
|
83
83
|
msg: "{{ ansible_facts.packages['foobar'] | length }} versions of foobar are installed!"
|
|
84
84
|
when: "'foobar' in ansible_facts.packages"
|
|
85
85
|
|
|
86
|
-
|
|
86
|
+
"""
|
|
87
87
|
|
|
88
|
-
RETURN =
|
|
88
|
+
RETURN = """
|
|
89
89
|
ansible_facts:
|
|
90
90
|
description: Facts to add to ansible_facts.
|
|
91
91
|
returned: always
|
|
@@ -248,7 +248,7 @@ ansible_facts:
|
|
|
248
248
|
],
|
|
249
249
|
}
|
|
250
250
|
}
|
|
251
|
-
|
|
251
|
+
"""
|
|
252
252
|
|
|
253
253
|
import re
|
|
254
254
|
|
|
@@ -460,7 +460,7 @@ def main():
|
|
|
460
460
|
|
|
461
461
|
# get supported pkg managers
|
|
462
462
|
PKG_MANAGERS = get_all_pkg_managers()
|
|
463
|
-
PKG_MANAGER_NAMES = [x.lower() for x in PKG_MANAGERS.keys()]
|
|
463
|
+
PKG_MANAGER_NAMES = sorted([x.lower() for x in PKG_MANAGERS.keys()])
|
|
464
464
|
# add aliases
|
|
465
465
|
PKG_MANAGER_NAMES.extend([alias for alist in ALIASES.values() for alias in alist])
|
|
466
466
|
|
|
@@ -510,12 +510,24 @@ def main():
|
|
|
510
510
|
|
|
511
511
|
manager = PKG_MANAGERS[pkgmgr]()
|
|
512
512
|
try:
|
|
513
|
+
packages_found = {}
|
|
513
514
|
if manager.is_available(handle_exceptions=False):
|
|
514
|
-
found += 1
|
|
515
515
|
try:
|
|
516
|
-
|
|
516
|
+
packages_found = manager.get_packages()
|
|
517
517
|
except Exception as e:
|
|
518
518
|
module.warn('Failed to retrieve packages with %s: %s' % (pkgmgr, to_text(e)))
|
|
519
|
+
|
|
520
|
+
# only consider 'found' if it results in something
|
|
521
|
+
if packages_found:
|
|
522
|
+
found += 1
|
|
523
|
+
for k in packages_found.keys():
|
|
524
|
+
if k in packages:
|
|
525
|
+
packages[k].extend(packages_found[k])
|
|
526
|
+
else:
|
|
527
|
+
packages[k] = packages_found[k]
|
|
528
|
+
else:
|
|
529
|
+
module.warn('Found "%s" but no associated packages' % (pkgmgr))
|
|
530
|
+
|
|
519
531
|
except Exception as e:
|
|
520
532
|
if pkgmgr in module.params['manager']:
|
|
521
533
|
module.warn('Requested package manager %s was not usable by this module: %s' % (pkgmgr, to_text(e)))
|
ansible/modules/pause.py
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
|
|
7
|
-
DOCUMENTATION =
|
|
7
|
+
DOCUMENTATION = """
|
|
8
8
|
---
|
|
9
9
|
module: pause
|
|
10
10
|
short_description: Pause playbook execution
|
|
@@ -65,9 +65,9 @@ attributes:
|
|
|
65
65
|
notes:
|
|
66
66
|
- Starting in 2.2, if you specify 0 or negative for minutes or seconds, it will wait for 1 second, previously it would wait indefinitely.
|
|
67
67
|
- User input is not captured or echoed, regardless of echo setting, when minutes or seconds is specified.
|
|
68
|
-
|
|
68
|
+
"""
|
|
69
69
|
|
|
70
|
-
EXAMPLES =
|
|
70
|
+
EXAMPLES = """
|
|
71
71
|
- name: Pause for 5 minutes to build app cache
|
|
72
72
|
ansible.builtin.pause:
|
|
73
73
|
minutes: 5
|
|
@@ -83,9 +83,9 @@ EXAMPLES = '''
|
|
|
83
83
|
ansible.builtin.pause:
|
|
84
84
|
prompt: "Enter a secret"
|
|
85
85
|
echo: no
|
|
86
|
-
|
|
86
|
+
"""
|
|
87
87
|
|
|
88
|
-
RETURN =
|
|
88
|
+
RETURN = """
|
|
89
89
|
user_input:
|
|
90
90
|
description: User input from interactive console
|
|
91
91
|
returned: if no waiting time set
|
|
@@ -116,4 +116,4 @@ echo:
|
|
|
116
116
|
returned: always
|
|
117
117
|
type: bool
|
|
118
118
|
sample: true
|
|
119
|
-
|
|
119
|
+
"""
|
ansible/modules/ping.py
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
DOCUMENTATION =
|
|
10
|
+
DOCUMENTATION = """
|
|
11
11
|
---
|
|
12
12
|
module: ping
|
|
13
13
|
version_added: historical
|
|
@@ -41,9 +41,9 @@ seealso:
|
|
|
41
41
|
author:
|
|
42
42
|
- Ansible Core Team
|
|
43
43
|
- Michael DeHaan
|
|
44
|
-
|
|
44
|
+
"""
|
|
45
45
|
|
|
46
|
-
EXAMPLES =
|
|
46
|
+
EXAMPLES = """
|
|
47
47
|
# Test we can logon to 'webservers' and execute python with json lib.
|
|
48
48
|
# ansible webservers -m ansible.builtin.ping
|
|
49
49
|
|
|
@@ -53,15 +53,15 @@ EXAMPLES = '''
|
|
|
53
53
|
- name: Induce an exception to see what happens
|
|
54
54
|
ansible.builtin.ping:
|
|
55
55
|
data: crash
|
|
56
|
-
|
|
56
|
+
"""
|
|
57
57
|
|
|
58
|
-
RETURN =
|
|
58
|
+
RETURN = """
|
|
59
59
|
ping:
|
|
60
60
|
description: Value provided with the O(data) parameter.
|
|
61
61
|
returned: success
|
|
62
62
|
type: str
|
|
63
63
|
sample: pong
|
|
64
|
-
|
|
64
|
+
"""
|
|
65
65
|
|
|
66
66
|
from ansible.module_utils.basic import AnsibleModule
|
|
67
67
|
|