ansible-core 2.18.5rc1__py3-none-any.whl → 2.19.0b2__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.
- ansible/_internal/__init__.py +53 -0
- ansible/_internal/_ansiballz.py +265 -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/_captured.py +128 -0
- ansible/_internal/_errors/_handler.py +91 -0
- ansible/_internal/_errors/_utils.py +310 -0
- ansible/_internal/_json/__init__.py +203 -0
- ansible/_internal/_json/_legacy_encoder.py +34 -0
- ansible/_internal/_json/_profiles/__init__.py +0 -0
- ansible/_internal/_json/_profiles/_cache_persistence.py +55 -0
- ansible/_internal/_json/_profiles/_inventory_legacy.py +40 -0
- ansible/_internal/_json/_profiles/_legacy.py +197 -0
- ansible/_internal/_locking.py +21 -0
- ansible/_internal/_plugins/__init__.py +0 -0
- ansible/_internal/_plugins/_cache.py +57 -0
- ansible/_internal/_task.py +78 -0
- ansible/_internal/_templating/__init__.py +10 -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 +588 -0
- ansible/_internal/_templating/_errors.py +28 -0
- ansible/_internal/_templating/_jinja_bits.py +1066 -0
- ansible/_internal/_templating/_jinja_common.py +332 -0
- ansible/_internal/_templating/_jinja_patches.py +44 -0
- ansible/_internal/_templating/_jinja_plugins.py +345 -0
- ansible/_internal/_templating/_lazy_containers.py +633 -0
- ansible/_internal/_templating/_marker_behaviors.py +103 -0
- ansible/_internal/_templating/_transform.py +63 -0
- ansible/_internal/_templating/_utils.py +107 -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 +62 -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 +18 -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 +159 -89
- ansible/cli/_ssh_askpass.py +47 -0
- ansible/cli/adhoc.py +14 -7
- ansible/cli/arguments/option_helpers.py +154 -7
- ansible/cli/config.py +43 -68
- ansible/cli/console.py +10 -8
- ansible/cli/doc.py +62 -53
- ansible/cli/galaxy.py +27 -20
- ansible/cli/inventory.py +28 -26
- ansible/cli/playbook.py +4 -12
- ansible/cli/pull.py +51 -11
- ansible/cli/scripts/ansible_connection_cli_stub.py +7 -7
- ansible/cli/vault.py +12 -11
- ansible/compat/__init__.py +2 -2
- ansible/config/base.yml +166 -112
- ansible/config/manager.py +52 -49
- ansible/constants.py +3 -4
- ansible/errors/__init__.py +277 -235
- ansible/executor/interpreter_discovery.py +28 -149
- ansible/executor/module_common.py +426 -493
- 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 +202 -151
- ansible/executor/powershell/become_wrapper.ps1 +89 -144
- ansible/executor/powershell/bootstrap_wrapper.ps1 +24 -9
- ansible/executor/powershell/coverage_wrapper.ps1 +82 -135
- ansible/executor/powershell/exec_wrapper.ps1 +462 -196
- ansible/executor/powershell/module_manifest.py +417 -265
- ansible/executor/powershell/module_wrapper.ps1 +169 -186
- 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 +161 -96
- ansible/executor/stats.py +5 -5
- ansible/executor/task_executor.py +268 -258
- ansible/executor/task_queue_manager.py +124 -90
- ansible/executor/task_result.py +183 -78
- ansible/galaxy/__init__.py +2 -2
- ansible/galaxy/api.py +22 -18
- ansible/galaxy/collection/__init__.py +1 -1
- ansible/galaxy/collection/concrete_artifact_manager.py +8 -11
- ansible/galaxy/dependency_resolution/dataclasses.py +14 -4
- ansible/galaxy/dependency_resolution/providers.py +1 -1
- ansible/galaxy/dependency_resolution/reporters.py +81 -0
- ansible/galaxy/role.py +4 -8
- ansible/galaxy/token.py +28 -21
- ansible/inventory/data.py +47 -57
- ansible/inventory/group.py +44 -72
- ansible/inventory/helpers.py +9 -0
- ansible/inventory/host.py +32 -54
- ansible/inventory/manager.py +78 -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.py +133 -0
- ansible/module_utils/_internal/_concurrent/_daemon_threading.py +1 -0
- ansible/module_utils/_internal/_dataclass_annotation_patch.py +64 -0
- ansible/module_utils/_internal/_dataclass_validation.py +217 -0
- ansible/module_utils/_internal/_datatag/__init__.py +928 -0
- ansible/module_utils/_internal/_datatag/_tags.py +38 -0
- ansible/module_utils/_internal/_debugging.py +31 -0
- ansible/module_utils/_internal/_errors.py +30 -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 +410 -0
- ansible/module_utils/_internal/_json/_profiles/_fallback_to_str.py +73 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py +31 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py +35 -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 +50 -0
- ansible/module_utils/_internal/_patches/__init__.py +66 -0
- ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py +55 -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_exec_context.py +49 -0
- ansible/module_utils/_internal/_testing.py +0 -0
- ansible/module_utils/_internal/_traceback.py +89 -0
- ansible/module_utils/ansible_release.py +2 -2
- ansible/module_utils/api.py +1 -2
- ansible/module_utils/basic.py +152 -120
- ansible/module_utils/common/_utils.py +24 -28
- ansible/module_utils/common/collections.py +1 -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/messages.py +108 -0
- ansible/module_utils/common/parameters.py +27 -24
- ansible/module_utils/common/process.py +2 -2
- ansible/module_utils/common/respawn.py +41 -19
- 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 +86 -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 +2 -2
- ansible/module_utils/csharp/Ansible.Basic.cs +14 -11
- ansible/module_utils/csharp/Ansible.Become.cs +1 -0
- ansible/module_utils/csharp/Ansible._Async.cs +517 -0
- ansible/module_utils/datatag.py +46 -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 +1 -1
- 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 +4 -4
- 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 +1 -2
- ansible/module_utils/facts/other/ohai.py +2 -3
- ansible/module_utils/facts/system/apparmor.py +1 -2
- ansible/module_utils/facts/system/caps.py +1 -1
- 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 +9 -8
- 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 +1 -2
- 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/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 +1 -1
- ansible/module_utils/service.py +18 -21
- ansible/module_utils/splitter.py +7 -7
- ansible/module_utils/testing.py +31 -0
- ansible/module_utils/urls.py +60 -31
- ansible/modules/add_host.py +4 -4
- ansible/modules/apt.py +60 -46
- ansible/modules/apt_key.py +19 -12
- ansible/modules/apt_repository.py +19 -16
- ansible/modules/assemble.py +6 -6
- ansible/modules/assert.py +4 -4
- ansible/modules/async_status.py +10 -12
- ansible/modules/async_wrapper.py +8 -3
- ansible/modules/blockinfile.py +6 -7
- ansible/modules/command.py +10 -17
- ansible/modules/copy.py +57 -144
- ansible/modules/cron.py +20 -15
- 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 +8 -10
- ansible/modules/fail.py +4 -4
- ansible/modules/fetch.py +4 -4
- ansible/modules/file.py +174 -133
- ansible/modules/find.py +19 -17
- ansible/modules/gather_facts.py +3 -3
- ansible/modules/get_url.py +59 -53
- ansible/modules/getent.py +7 -9
- ansible/modules/git.py +28 -25
- ansible/modules/group.py +6 -6
- ansible/modules/group_by.py +4 -4
- ansible/modules/hostname.py +13 -29
- 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 +10 -10
- ansible/modules/lineinfile.py +5 -5
- ansible/modules/meta.py +4 -4
- ansible/modules/mount_facts.py +2 -2
- ansible/modules/package.py +4 -4
- ansible/modules/package_facts.py +22 -10
- ansible/modules/pause.py +6 -6
- ansible/modules/ping.py +6 -6
- ansible/modules/pip.py +10 -11
- ansible/modules/raw.py +4 -4
- ansible/modules/reboot.py +6 -6
- ansible/modules/replace.py +9 -13
- ansible/modules/rpm_key.py +7 -8
- ansible/modules/script.py +4 -4
- ansible/modules/service.py +7 -8
- 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 +6 -6
- ansible/modules/stat.py +9 -23
- ansible/modules/subversion.py +15 -15
- ansible/modules/systemd.py +6 -6
- ansible/modules/systemd_service.py +6 -6
- ansible/modules/sysvinit.py +6 -6
- ansible/modules/tempfile.py +5 -6
- ansible/modules/template.py +6 -6
- ansible/modules/unarchive.py +32 -11
- ansible/modules/uri.py +33 -26
- ansible/modules/user.py +53 -34
- ansible/modules/validate_argument_spec.py +10 -7
- ansible/modules/wait_for.py +32 -27
- ansible/modules/wait_for_connection.py +6 -6
- ansible/modules/yum_repository.py +6 -6
- ansible/parsing/ajson.py +14 -32
- ansible/parsing/dataloader.py +99 -54
- ansible/parsing/mod_args.py +28 -44
- 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 +319 -87
- 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 +182 -132
- 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 +31 -27
- ansible/playbook/loop_control.py +2 -2
- ansible/playbook/play.py +85 -44
- ansible/playbook/play_context.py +12 -17
- ansible/playbook/playbook_include.py +14 -15
- ansible/playbook/role/__init__.py +24 -26
- 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 +13 -8
- ansible/playbook/task.py +188 -118
- ansible/playbook/task_include.py +5 -5
- ansible/plugins/__init__.py +68 -21
- ansible/plugins/action/__init__.py +209 -176
- ansible/plugins/action/add_host.py +1 -1
- ansible/plugins/action/assemble.py +1 -1
- ansible/plugins/action/assert.py +54 -66
- ansible/plugins/action/copy.py +7 -11
- 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 +4 -5
- ansible/plugins/action/gather_facts.py +7 -6
- ansible/plugins/action/group_by.py +1 -1
- ansible/plugins/action/include_vars.py +10 -11
- ansible/plugins/action/package.py +3 -6
- ansible/plugins/action/pause.py +2 -2
- ansible/plugins/action/script.py +15 -8
- ansible/plugins/action/service.py +6 -11
- ansible/plugins/action/set_fact.py +3 -12
- ansible/plugins/action/set_stats.py +3 -8
- ansible/plugins/action/template.py +35 -59
- ansible/plugins/action/unarchive.py +1 -1
- 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 +35 -44
- 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 +284 -179
- ansible/plugins/callback/default.py +99 -92
- ansible/plugins/callback/junit.py +44 -39
- ansible/plugins/callback/minimal.py +28 -25
- ansible/plugins/callback/oneline.py +28 -21
- ansible/plugins/callback/tree.py +16 -11
- ansible/plugins/connection/__init__.py +47 -34
- ansible/plugins/connection/local.py +150 -54
- ansible/plugins/connection/paramiko_ssh.py +21 -18
- ansible/plugins/connection/psrp.py +76 -165
- ansible/plugins/connection/ssh.py +301 -78
- ansible/plugins/connection/winrm.py +58 -140
- 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 +6 -2
- 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 +225 -108
- ansible/plugins/filter/encryption.py +32 -32
- 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/regex_search.yml +1 -4
- ansible/plugins/filter/split.yml +1 -1
- ansible/plugins/filter/to_nice_yaml.yml +0 -4
- 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 +97 -77
- 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 +189 -119
- ansible/plugins/inventory/toml.py +16 -126
- ansible/plugins/inventory/yaml.py +10 -8
- ansible/plugins/list.py +3 -3
- ansible/plugins/loader.py +197 -82
- ansible/plugins/lookup/__init__.py +21 -4
- ansible/plugins/lookup/config.py +21 -35
- ansible/plugins/lookup/csvfile.py +3 -2
- 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 +86 -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 +42 -36
- ansible/plugins/lookup/together.py +0 -12
- ansible/plugins/lookup/unvault.py +1 -5
- ansible/plugins/lookup/url.py +2 -8
- ansible/plugins/lookup/vars.py +16 -24
- ansible/plugins/shell/__init__.py +2 -2
- ansible/plugins/shell/cmd.py +2 -2
- ansible/plugins/shell/powershell.py +39 -22
- ansible/plugins/shell/sh.py +3 -2
- ansible/plugins/strategy/__init__.py +159 -184
- 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 +55 -21
- ansible/plugins/test/files.py +1 -1
- ansible/plugins/test/mathstuff.py +3 -3
- ansible/plugins/test/uri.py +3 -3
- ansible/plugins/vars/host_group_vars.py +7 -14
- ansible/release.py +2 -2
- ansible/template/__init__.py +370 -944
- ansible/utils/__init__.py +0 -18
- ansible/utils/_ssh_agent.py +657 -0
- ansible/utils/collection_loader/__init__.py +52 -5
- ansible/utils/collection_loader/_collection_config.py +5 -6
- ansible/utils/collection_loader/_collection_finder.py +79 -93
- ansible/utils/collection_loader/_collection_meta.py +13 -8
- ansible/utils/display.py +433 -63
- ansible/utils/encrypt.py +27 -19
- ansible/utils/fqcn.py +2 -2
- ansible/utils/hashing.py +2 -2
- ansible/utils/helpers.py +2 -2
- ansible/utils/listify.py +8 -8
- ansible/utils/lock.py +2 -2
- ansible/utils/path.py +4 -4
- ansible/utils/plugin_docs.py +14 -13
- ansible/utils/sentinel.py +4 -62
- ansible/utils/singleton.py +2 -0
- ansible/utils/ssh_functions.py +1 -1
- ansible/utils/unsafe_proxy.py +23 -332
- ansible/utils/vars.py +51 -8
- ansible/utils/version.py +2 -2
- ansible/vars/clean.py +5 -5
- ansible/vars/hostvars.py +60 -90
- ansible/vars/manager.py +206 -282
- ansible/vars/reserved.py +8 -9
- ansible_core-2.19.0b2.dist-info/BSD-3-Clause.txt +28 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/METADATA +5 -4
- ansible_core-2.19.0b2.dist-info/RECORD +1072 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/WHEEL +1 -1
- 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 +1 -1
- ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
- ansible_test/_data/requirements/sanity.pylint.txt +4 -4
- 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 +1 -0
- ansible_test/_internal/ansible_util.py +2 -0
- 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 -0
- 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 +1 -0
- 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 +2 -1
- 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 +4 -0
- 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 +2 -1
- 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 +1 -0
- 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 +16 -1
- 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 +1 -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 +24 -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 +1 -0
- ansible_test/_internal/commands/units/__init__.py +1 -0
- 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 +2 -0
- 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/delegation.py +1 -0
- 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 +1 -0
- ansible_test/_internal/http.py +1 -0
- ansible_test/_internal/init.py +1 -0
- ansible_test/_internal/inventory.py +35 -3
- ansible_test/_internal/io.py +1 -0
- ansible_test/_internal/metadata.py +1 -0
- ansible_test/_internal/payload.py +1 -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 +1 -0
- ansible_test/_internal/pypi_proxy.py +6 -5
- ansible_test/_internal/python_requirements.py +1 -0
- ansible_test/_internal/ssh.py +1 -0
- ansible_test/_internal/target.py +1 -0
- ansible_test/_internal/test.py +3 -2
- ansible_test/_internal/thread.py +1 -0
- ansible_test/_internal/timeout.py +1 -0
- ansible_test/_internal/util.py +1 -0
- ansible_test/_internal/util_common.py +5 -2
- 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 +7 -5
- ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +7 -5
- ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +7 -5
- ansible_test/_util/controller/sanity/pylint/config/collection.cfg +3 -5
- ansible_test/_util/controller/sanity/pylint/config/default.cfg +7 -7
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +1 -13
- 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/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 +35 -27
- 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.5rc1.dist-info/RECORD +0 -992
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/Apache-License.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/COPYING +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/MIT-license.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/PSF-license.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/simplified_bsd.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/top_level.txt +0 -0
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
|
|
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
|
@@ -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
|
@@ -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('==')
|
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,9 +70,9 @@ seealso:
|
|
70
70
|
author:
|
71
71
|
- Ansible Core Team
|
72
72
|
- Michael DeHaan
|
73
|
-
|
73
|
+
"""
|
74
74
|
|
75
|
-
EXAMPLES = r
|
75
|
+
EXAMPLES = r"""
|
76
76
|
- name: Bootstrap a host without python2 installed
|
77
77
|
ansible.builtin.raw: dnf install -y python2 python2-dnf libselinux-python
|
78
78
|
|
@@ -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
|
@@ -259,8 +257,7 @@ def main():
|
|
259
257
|
with open(path, 'rb') as f:
|
260
258
|
contents = to_text(f.read(), errors='surrogate_or_strict', encoding=encoding)
|
261
259
|
except (OSError, IOError) as e:
|
262
|
-
module.fail_json(msg='Unable to read the contents of %s: %s' % (path, to_text(e))
|
263
|
-
exception=format_exc())
|
260
|
+
module.fail_json(msg='Unable to read the contents of %s: %s' % (path, to_text(e)))
|
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
|
@@ -695,9 +695,8 @@ class LinuxService(Service):
|
|
695
695
|
#
|
696
696
|
if self.enable_cmd.endswith("initctl"):
|
697
697
|
def write_to_override_file(file_name, file_contents, ):
|
698
|
-
|
699
|
-
|
700
|
-
override_file.close()
|
698
|
+
with open(file_name, 'w') as override_file:
|
699
|
+
override_file.write(file_contents)
|
701
700
|
|
702
701
|
initpath = '/etc/init'
|
703
702
|
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)
|