ansible-core 2.16.6__py3-none-any.whl → 2.17.0rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ansible-core might be problematic. Click here for more details.
- ansible/__init__.py +1 -3
- ansible/__main__.py +1 -0
- ansible/_vendor/__init__.py +1 -2
- ansible/cli/__init__.py +7 -8
- ansible/cli/adhoc.py +1 -2
- ansible/cli/arguments/__init__.py +1 -2
- ansible/cli/arguments/option_helpers.py +1 -2
- ansible/cli/config.py +1 -2
- ansible/cli/console.py +1 -2
- ansible/cli/doc.py +320 -198
- ansible/cli/galaxy.py +9 -3
- ansible/cli/inventory.py +4 -6
- ansible/cli/playbook.py +1 -2
- ansible/cli/pull.py +4 -5
- ansible/cli/scripts/ansible_connection_cli_stub.py +1 -4
- ansible/cli/vault.py +1 -2
- ansible/collections/list.py +1 -0
- ansible/compat/__init__.py +1 -4
- ansible/compat/importlib_resources.py +1 -2
- ansible/compat/{selectors/__init__.py → selectors.py} +12 -12
- ansible/config/ansible_builtin_runtime.yml +2 -0
- ansible/config/base.yml +154 -149
- ansible/config/manager.py +33 -25
- ansible/constants.py +1 -2
- ansible/context.py +1 -4
- ansible/errors/__init__.py +1 -3
- ansible/errors/yaml_strings.py +1 -3
- ansible/executor/__init__.py +1 -3
- ansible/executor/discovery/python_target.py +1 -2
- ansible/executor/interpreter_discovery.py +9 -8
- ansible/executor/module_common.py +1 -3
- ansible/executor/play_iterator.py +2 -4
- ansible/executor/playbook_executor.py +1 -3
- ansible/executor/powershell/module_manifest.py +2 -3
- ansible/executor/process/__init__.py +1 -3
- ansible/executor/process/worker.py +1 -3
- ansible/executor/stats.py +1 -3
- ansible/executor/task_executor.py +2 -3
- ansible/executor/task_queue_manager.py +1 -3
- ansible/executor/task_result.py +2 -3
- ansible/galaxy/__init__.py +1 -2
- ansible/galaxy/api.py +10 -2
- ansible/galaxy/collection/__init__.py +38 -24
- ansible/galaxy/collection/concrete_artifact_manager.py +1 -2
- ansible/galaxy/collection/galaxy_api_proxy.py +1 -2
- ansible/galaxy/collection/gpg.py +4 -2
- ansible/galaxy/data/apb/meta/main.yml.j2 +0 -15
- ansible/galaxy/data/container/meta/main.yml.j2 +0 -18
- ansible/galaxy/data/default/role/meta/main.yml.j2 +0 -18
- ansible/galaxy/data/network/cliconf_plugins/example.py.j2 +1 -2
- ansible/galaxy/data/network/library/example_command.py.j2 +1 -2
- ansible/galaxy/data/network/library/example_config.py.j2 +1 -2
- ansible/galaxy/data/network/library/example_facts.py.j2 +1 -2
- ansible/galaxy/data/network/meta/main.yml.j2 +0 -15
- ansible/galaxy/data/network/module_utils/example.py.j2 +1 -2
- ansible/galaxy/data/network/netconf_plugins/example.py.j2 +1 -2
- ansible/galaxy/data/network/terminal_plugins/example.py.j2 +1 -2
- ansible/galaxy/dependency_resolution/__init__.py +1 -2
- ansible/galaxy/dependency_resolution/dataclasses.py +5 -6
- ansible/galaxy/dependency_resolution/errors.py +1 -2
- ansible/galaxy/dependency_resolution/providers.py +3 -4
- ansible/galaxy/dependency_resolution/reporters.py +2 -3
- ansible/galaxy/dependency_resolution/resolvers.py +1 -2
- ansible/galaxy/dependency_resolution/versioning.py +1 -2
- ansible/galaxy/role.py +12 -15
- ansible/galaxy/token.py +1 -2
- ansible/galaxy/user_agent.py +1 -2
- ansible/inventory/data.py +1 -2
- ansible/inventory/group.py +1 -2
- ansible/inventory/helpers.py +1 -2
- ansible/inventory/host.py +1 -3
- ansible/inventory/manager.py +1 -2
- ansible/module_utils/_text.py +1 -2
- ansible/module_utils/ansible_release.py +3 -5
- ansible/module_utils/api.py +1 -2
- ansible/module_utils/basic.py +113 -158
- ansible/module_utils/common/_collections_compat.py +1 -2
- ansible/module_utils/common/_utils.py +1 -3
- ansible/module_utils/common/arg_spec.py +1 -2
- ansible/module_utils/common/collections.py +1 -2
- ansible/module_utils/common/dict_transformations.py +1 -2
- ansible/module_utils/common/file.py +10 -5
- ansible/module_utils/common/json.py +1 -3
- ansible/module_utils/common/locale.py +1 -2
- ansible/module_utils/common/network.py +2 -3
- ansible/module_utils/common/parameters.py +9 -9
- ansible/module_utils/common/process.py +12 -5
- ansible/module_utils/common/respawn.py +2 -3
- ansible/module_utils/common/sys_info.py +1 -2
- ansible/module_utils/common/text/converters.py +1 -2
- ansible/module_utils/common/text/formatters.py +1 -2
- ansible/module_utils/common/validation.py +5 -6
- ansible/module_utils/common/warnings.py +1 -2
- ansible/module_utils/common/yaml.py +1 -2
- ansible/module_utils/compat/datetime.py +1 -3
- ansible/module_utils/compat/importlib.py +21 -13
- ansible/module_utils/compat/paramiko.py +1 -2
- ansible/module_utils/compat/selectors.py +10 -34
- ansible/module_utils/compat/selinux.py +1 -2
- ansible/module_utils/compat/typing.py +1 -2
- ansible/module_utils/compat/version.py +1 -2
- ansible/module_utils/connection.py +1 -2
- ansible/module_utils/csharp/Ansible.Basic.cs +20 -3
- ansible/module_utils/distro/__init__.py +3 -4
- ansible/module_utils/distro/_distro.py +230 -234
- ansible/module_utils/errors.py +1 -2
- ansible/module_utils/facts/__init__.py +1 -2
- ansible/module_utils/facts/ansible_collector.py +1 -2
- ansible/module_utils/facts/collector.py +1 -2
- ansible/module_utils/facts/compat.py +1 -2
- ansible/module_utils/facts/default_collectors.py +1 -2
- ansible/module_utils/facts/hardware/aix.py +1 -2
- ansible/module_utils/facts/hardware/base.py +1 -2
- ansible/module_utils/facts/hardware/darwin.py +1 -2
- ansible/module_utils/facts/hardware/dragonfly.py +1 -2
- ansible/module_utils/facts/hardware/freebsd.py +1 -2
- ansible/module_utils/facts/hardware/hpux.py +1 -2
- ansible/module_utils/facts/hardware/hurd.py +1 -2
- ansible/module_utils/facts/hardware/linux.py +8 -6
- ansible/module_utils/facts/hardware/netbsd.py +1 -2
- ansible/module_utils/facts/hardware/openbsd.py +1 -2
- ansible/module_utils/facts/hardware/sunos.py +2 -3
- ansible/module_utils/facts/namespace.py +1 -2
- ansible/module_utils/facts/network/aix.py +1 -2
- ansible/module_utils/facts/network/base.py +1 -2
- ansible/module_utils/facts/network/darwin.py +1 -2
- ansible/module_utils/facts/network/dragonfly.py +1 -2
- ansible/module_utils/facts/network/fc_wwn.py +1 -2
- ansible/module_utils/facts/network/freebsd.py +1 -2
- ansible/module_utils/facts/network/generic_bsd.py +1 -2
- ansible/module_utils/facts/network/hpux.py +1 -2
- ansible/module_utils/facts/network/hurd.py +1 -2
- ansible/module_utils/facts/network/iscsi.py +1 -2
- ansible/module_utils/facts/network/linux.py +1 -2
- ansible/module_utils/facts/network/netbsd.py +1 -2
- ansible/module_utils/facts/network/nvme.py +1 -2
- ansible/module_utils/facts/network/openbsd.py +1 -2
- ansible/module_utils/facts/network/sunos.py +1 -2
- ansible/module_utils/facts/other/facter.py +1 -2
- ansible/module_utils/facts/other/ohai.py +1 -2
- ansible/module_utils/facts/packages.py +1 -2
- ansible/module_utils/facts/sysctl.py +1 -2
- ansible/module_utils/facts/system/apparmor.py +1 -2
- ansible/module_utils/facts/system/caps.py +1 -2
- 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 +1 -2
- ansible/module_utils/facts/system/distribution.py +4 -5
- ansible/module_utils/facts/system/dns.py +1 -2
- ansible/module_utils/facts/system/env.py +1 -2
- ansible/module_utils/facts/system/fips.py +1 -2
- 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 +7 -30
- 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 -2
- ansible/module_utils/facts/system/service_mgr.py +1 -2
- ansible/module_utils/facts/system/ssh_pub_keys.py +1 -2
- ansible/module_utils/facts/system/user.py +1 -2
- ansible/module_utils/facts/timeout.py +1 -2
- ansible/module_utils/facts/utils.py +1 -2
- ansible/module_utils/facts/virtual/base.py +1 -2
- ansible/module_utils/facts/virtual/dragonfly.py +1 -2
- ansible/module_utils/facts/virtual/freebsd.py +1 -2
- ansible/module_utils/facts/virtual/hpux.py +1 -2
- ansible/module_utils/facts/virtual/linux.py +1 -2
- ansible/module_utils/facts/virtual/netbsd.py +1 -2
- ansible/module_utils/facts/virtual/openbsd.py +1 -2
- ansible/module_utils/facts/virtual/sunos.py +1 -2
- ansible/module_utils/facts/virtual/sysctl.py +1 -2
- ansible/module_utils/json_utils.py +1 -2
- ansible/module_utils/parsing/convert_bool.py +1 -2
- ansible/module_utils/powershell/Ansible.ModuleUtils.Legacy.psm1 +5 -2
- ansible/module_utils/powershell/Ansible.ModuleUtils.WebRequest.psm1 +1 -1
- ansible/module_utils/pycompat24.py +24 -4
- ansible/module_utils/service.py +31 -5
- ansible/module_utils/six/__init__.py +1 -1
- ansible/module_utils/splitter.py +1 -2
- ansible/module_utils/urls.py +335 -1052
- ansible/module_utils/yumdnf.py +13 -35
- ansible/modules/add_host.py +1 -2
- ansible/modules/apt.py +38 -22
- ansible/modules/apt_key.py +1 -2
- ansible/modules/apt_repository.py +18 -10
- ansible/modules/assemble.py +1 -2
- ansible/modules/assert.py +8 -4
- ansible/modules/async_status.py +17 -14
- ansible/modules/async_wrapper.py +11 -9
- ansible/modules/blockinfile.py +2 -3
- ansible/modules/command.py +1 -2
- ansible/modules/copy.py +4 -76
- ansible/modules/cron.py +3 -3
- ansible/modules/deb822_repository.py +5 -5
- ansible/modules/debconf.py +19 -8
- ansible/modules/debug.py +1 -2
- ansible/modules/dnf.py +59 -186
- ansible/modules/dnf5.py +57 -43
- ansible/modules/dpkg_selections.py +1 -2
- ansible/modules/expect.py +23 -15
- ansible/modules/fail.py +1 -2
- ansible/modules/fetch.py +1 -2
- ansible/modules/file.py +4 -3
- ansible/modules/find.py +18 -5
- ansible/modules/gather_facts.py +1 -2
- ansible/modules/get_url.py +2 -3
- ansible/modules/getent.py +2 -3
- ansible/modules/git.py +28 -17
- ansible/modules/group.py +1 -2
- ansible/modules/group_by.py +1 -2
- ansible/modules/hostname.py +2 -19
- ansible/modules/import_playbook.py +1 -2
- ansible/modules/import_role.py +9 -2
- ansible/modules/import_tasks.py +1 -2
- ansible/modules/include_role.py +1 -2
- ansible/modules/include_tasks.py +1 -2
- ansible/modules/include_vars.py +1 -2
- ansible/modules/iptables.py +38 -21
- ansible/modules/known_hosts.py +15 -8
- ansible/modules/lineinfile.py +1 -6
- ansible/modules/meta.py +3 -2
- ansible/modules/package.py +6 -5
- ansible/modules/package_facts.py +1 -2
- ansible/modules/pause.py +2 -3
- ansible/modules/ping.py +1 -2
- ansible/modules/pip.py +40 -20
- ansible/modules/raw.py +1 -2
- ansible/modules/reboot.py +1 -2
- ansible/modules/replace.py +7 -5
- ansible/modules/rpm_key.py +1 -2
- ansible/modules/script.py +1 -2
- ansible/modules/service.py +3 -21
- ansible/modules/service_facts.py +3 -12
- ansible/modules/set_fact.py +1 -2
- ansible/modules/set_stats.py +1 -2
- ansible/modules/setup.py +1 -2
- ansible/modules/shell.py +1 -2
- ansible/modules/slurp.py +1 -2
- ansible/modules/stat.py +1 -2
- ansible/modules/subversion.py +2 -3
- ansible/modules/systemd.py +12 -9
- ansible/modules/systemd_service.py +12 -9
- ansible/modules/sysvinit.py +7 -2
- ansible/modules/tempfile.py +7 -2
- ansible/modules/template.py +2 -3
- ansible/modules/unarchive.py +13 -3
- ansible/modules/uri.py +5 -8
- ansible/modules/user.py +11 -10
- ansible/modules/validate_argument_spec.py +15 -16
- ansible/modules/wait_for.py +1 -2
- ansible/modules/wait_for_connection.py +1 -2
- ansible/modules/yum_repository.py +2 -3
- ansible/parsing/__init__.py +1 -3
- ansible/parsing/ajson.py +1 -3
- ansible/parsing/dataloader.py +23 -12
- ansible/parsing/mod_args.py +14 -8
- ansible/parsing/plugin_docs.py +1 -2
- ansible/parsing/quoting.py +1 -3
- ansible/parsing/splitter.py +1 -3
- ansible/parsing/utils/__init__.py +1 -3
- ansible/parsing/utils/addresses.py +1 -3
- ansible/parsing/utils/jsonify.py +1 -3
- ansible/parsing/utils/yaml.py +1 -3
- ansible/parsing/vault/__init__.py +6 -8
- ansible/parsing/yaml/__init__.py +1 -3
- ansible/parsing/yaml/constructor.py +1 -3
- ansible/parsing/yaml/dumper.py +1 -3
- ansible/parsing/yaml/loader.py +1 -3
- ansible/parsing/yaml/objects.py +1 -3
- ansible/playbook/__init__.py +1 -3
- ansible/playbook/attribute.py +1 -3
- ansible/playbook/base.py +2 -3
- ansible/playbook/block.py +1 -3
- ansible/playbook/collectionsearch.py +1 -2
- ansible/playbook/conditional.py +1 -3
- ansible/playbook/delegatable.py +1 -0
- ansible/playbook/handler.py +2 -4
- ansible/playbook/handler_task_include.py +1 -3
- ansible/playbook/helpers.py +1 -4
- ansible/playbook/included_file.py +4 -4
- ansible/playbook/loop_control.py +1 -3
- ansible/playbook/notifiable.py +1 -0
- ansible/playbook/play.py +1 -3
- ansible/playbook/play_context.py +1 -3
- ansible/playbook/playbook_include.py +1 -3
- ansible/playbook/role/__init__.py +1 -3
- ansible/playbook/role/definition.py +1 -3
- ansible/playbook/role/include.py +1 -3
- ansible/playbook/role/metadata.py +1 -3
- ansible/playbook/role/requirement.py +1 -3
- ansible/playbook/role_include.py +2 -10
- ansible/playbook/taggable.py +1 -3
- ansible/playbook/task.py +2 -4
- ansible/playbook/task_include.py +1 -3
- ansible/plugins/__init__.py +4 -5
- ansible/plugins/action/__init__.py +20 -14
- ansible/plugins/action/add_host.py +2 -4
- ansible/plugins/action/assemble.py +2 -3
- ansible/plugins/action/assert.py +1 -2
- ansible/plugins/action/async_status.py +1 -2
- ansible/plugins/action/command.py +1 -2
- ansible/plugins/action/copy.py +12 -9
- ansible/plugins/action/debug.py +1 -2
- ansible/plugins/action/dnf.py +4 -4
- ansible/plugins/action/fail.py +1 -2
- ansible/plugins/action/fetch.py +2 -3
- ansible/plugins/action/gather_facts.py +3 -4
- ansible/plugins/action/group_by.py +1 -2
- ansible/plugins/action/include_vars.py +1 -2
- ansible/plugins/action/normal.py +1 -2
- ansible/plugins/action/package.py +36 -21
- ansible/plugins/action/pause.py +1 -2
- ansible/plugins/action/raw.py +2 -3
- ansible/plugins/action/reboot.py +30 -15
- ansible/plugins/action/script.py +3 -4
- ansible/plugins/action/service.py +1 -2
- ansible/plugins/action/set_fact.py +1 -2
- ansible/plugins/action/set_stats.py +1 -2
- ansible/plugins/action/shell.py +1 -2
- ansible/plugins/action/template.py +1 -2
- ansible/plugins/action/unarchive.py +1 -2
- ansible/plugins/action/uri.py +2 -3
- ansible/plugins/action/validate_argument_spec.py +1 -2
- ansible/plugins/action/wait_for_connection.py +2 -3
- ansible/plugins/become/__init__.py +1 -2
- ansible/plugins/become/runas.py +1 -2
- ansible/plugins/become/su.py +1 -2
- ansible/plugins/become/sudo.py +1 -2
- ansible/plugins/cache/__init__.py +3 -3
- ansible/plugins/cache/base.py +1 -2
- ansible/plugins/cache/jsonfile.py +1 -3
- ansible/plugins/cache/memory.py +1 -2
- ansible/plugins/callback/__init__.py +2 -4
- ansible/plugins/callback/default.py +2 -3
- ansible/plugins/callback/junit.py +1 -2
- ansible/plugins/callback/minimal.py +1 -3
- ansible/plugins/callback/oneline.py +1 -3
- ansible/plugins/callback/tree.py +1 -2
- ansible/plugins/cliconf/__init__.py +1 -2
- ansible/plugins/connection/__init__.py +4 -5
- ansible/plugins/connection/local.py +3 -4
- ansible/plugins/connection/paramiko_ssh.py +1 -2
- ansible/plugins/connection/psrp.py +1 -2
- ansible/plugins/connection/ssh.py +18 -54
- ansible/plugins/connection/winrm.py +3 -4
- ansible/plugins/doc_fragments/action_common_attributes.py +2 -3
- ansible/plugins/doc_fragments/action_core.py +3 -4
- ansible/plugins/doc_fragments/backup.py +1 -2
- ansible/plugins/doc_fragments/connection_pipelining.py +1 -2
- ansible/plugins/doc_fragments/constructed.py +1 -2
- ansible/plugins/doc_fragments/decrypt.py +2 -3
- ansible/plugins/doc_fragments/default_callback.py +1 -2
- ansible/plugins/doc_fragments/files.py +1 -2
- ansible/plugins/doc_fragments/inventory_cache.py +1 -2
- ansible/plugins/doc_fragments/result_format_callback.py +1 -2
- ansible/plugins/doc_fragments/return_common.py +1 -2
- ansible/plugins/doc_fragments/shell_common.py +1 -2
- ansible/plugins/doc_fragments/shell_windows.py +1 -2
- ansible/plugins/doc_fragments/template_common.py +1 -2
- ansible/plugins/doc_fragments/url.py +1 -2
- ansible/plugins/doc_fragments/url_windows.py +1 -2
- ansible/plugins/doc_fragments/validate.py +1 -2
- ansible/plugins/doc_fragments/vars_plugin_staging.py +1 -2
- ansible/plugins/filter/__init__.py +1 -2
- ansible/plugins/filter/b64decode.yml +8 -8
- ansible/plugins/filter/b64encode.yml +4 -4
- ansible/plugins/filter/comment.yml +1 -1
- ansible/plugins/filter/core.py +11 -9
- ansible/plugins/filter/encryption.py +1 -3
- ansible/plugins/filter/extract.yml +1 -1
- ansible/plugins/filter/from_yaml_all.yml +1 -1
- ansible/plugins/filter/human_readable.yml +3 -3
- ansible/plugins/filter/human_to_bytes.yml +2 -2
- ansible/plugins/filter/mandatory.yml +1 -1
- ansible/plugins/filter/mathstuff.py +2 -2
- ansible/plugins/filter/password_hash.yml +3 -2
- ansible/plugins/filter/regex_replace.yml +15 -0
- ansible/plugins/filter/regex_search.yml +12 -0
- ansible/plugins/filter/strftime.yml +2 -9
- ansible/plugins/filter/to_datetime.yml +17 -2
- ansible/plugins/filter/to_nice_json.yml +4 -0
- ansible/plugins/filter/union.yml +1 -1
- ansible/plugins/filter/urls.py +1 -2
- ansible/plugins/filter/urlsplit.py +1 -2
- ansible/plugins/filter/zip.yml +2 -2
- ansible/plugins/filter/zip_longest.yml +1 -1
- ansible/plugins/httpapi/__init__.py +1 -2
- ansible/plugins/inventory/__init__.py +2 -4
- ansible/plugins/inventory/advanced_host_list.py +1 -2
- ansible/plugins/inventory/auto.py +2 -3
- ansible/plugins/inventory/constructed.py +3 -2
- ansible/plugins/inventory/generator.py +1 -2
- ansible/plugins/inventory/host_list.py +1 -2
- ansible/plugins/inventory/ini.py +1 -2
- ansible/plugins/inventory/script.py +122 -3
- ansible/plugins/inventory/toml.py +1 -2
- ansible/plugins/inventory/yaml.py +3 -4
- ansible/plugins/list.py +2 -3
- ansible/plugins/loader.py +10 -11
- ansible/plugins/lookup/__init__.py +1 -3
- ansible/plugins/lookup/config.py +19 -15
- ansible/plugins/lookup/csvfile.py +16 -7
- ansible/plugins/lookup/dict.py +2 -3
- ansible/plugins/lookup/env.py +4 -4
- ansible/plugins/lookup/file.py +1 -2
- ansible/plugins/lookup/fileglob.py +1 -2
- ansible/plugins/lookup/first_found.py +8 -7
- ansible/plugins/lookup/indexed_items.py +1 -2
- ansible/plugins/lookup/ini.py +6 -3
- ansible/plugins/lookup/inventory_hostnames.py +1 -2
- ansible/plugins/lookup/items.py +1 -2
- ansible/plugins/lookup/lines.py +1 -2
- ansible/plugins/lookup/list.py +1 -3
- ansible/plugins/lookup/nested.py +1 -2
- ansible/plugins/lookup/password.py +16 -14
- ansible/plugins/lookup/pipe.py +1 -2
- ansible/plugins/lookup/random_choice.py +1 -2
- ansible/plugins/lookup/sequence.py +21 -52
- ansible/plugins/lookup/subelements.py +1 -2
- ansible/plugins/lookup/template.py +1 -2
- ansible/plugins/lookup/together.py +1 -2
- ansible/plugins/lookup/unvault.py +1 -2
- ansible/plugins/lookup/url.py +9 -3
- ansible/plugins/lookup/varnames.py +1 -2
- ansible/plugins/lookup/vars.py +1 -2
- ansible/plugins/netconf/__init__.py +1 -2
- ansible/plugins/shell/__init__.py +3 -4
- ansible/plugins/shell/cmd.py +1 -2
- ansible/plugins/shell/powershell.py +1 -2
- ansible/plugins/shell/sh.py +1 -2
- ansible/plugins/strategy/__init__.py +33 -21
- ansible/plugins/strategy/debug.py +1 -2
- ansible/plugins/strategy/free.py +17 -7
- ansible/plugins/strategy/host_pinned.py +1 -3
- ansible/plugins/strategy/linear.py +22 -22
- ansible/plugins/terminal/__init__.py +2 -3
- ansible/plugins/test/__init__.py +1 -2
- ansible/plugins/test/change.yml +1 -1
- ansible/plugins/test/changed.yml +1 -1
- ansible/plugins/test/contains.yml +1 -1
- ansible/plugins/test/core.py +2 -4
- ansible/plugins/test/exists.yml +1 -1
- ansible/plugins/test/failed.yml +1 -1
- ansible/plugins/test/failure.yml +1 -1
- ansible/plugins/test/files.py +1 -3
- ansible/plugins/test/finished.yml +3 -3
- ansible/plugins/test/issuperset.yml +1 -1
- ansible/plugins/test/match.yml +1 -1
- ansible/plugins/test/mathstuff.py +1 -2
- ansible/plugins/test/reachable.yml +1 -1
- ansible/plugins/test/regex.yml +1 -1
- ansible/plugins/test/search.yml +1 -1
- ansible/plugins/test/skip.yml +1 -1
- ansible/plugins/test/skipped.yml +1 -1
- ansible/plugins/test/started.yml +1 -1
- ansible/plugins/test/succeeded.yml +1 -1
- ansible/plugins/test/success.yml +1 -1
- ansible/plugins/test/successful.yml +1 -1
- ansible/plugins/test/superset.yml +1 -1
- ansible/plugins/test/unreachable.yml +1 -1
- ansible/plugins/test/uri.py +1 -3
- ansible/plugins/vars/__init__.py +1 -2
- ansible/plugins/vars/host_group_vars.py +2 -3
- ansible/release.py +3 -5
- ansible/template/__init__.py +24 -37
- ansible/template/native_helpers.py +1 -3
- ansible/template/template.py +1 -3
- ansible/template/vars.py +1 -0
- ansible/utils/__init__.py +1 -3
- ansible/utils/cmd_functions.py +1 -2
- ansible/utils/collection_loader/__init__.py +1 -2
- ansible/utils/collection_loader/_collection_config.py +1 -2
- ansible/utils/collection_loader/_collection_finder.py +1 -2
- ansible/utils/collection_loader/_collection_meta.py +1 -2
- ansible/utils/color.py +1 -2
- ansible/utils/context_objects.py +1 -4
- ansible/utils/display.py +88 -30
- ansible/utils/encrypt.py +4 -105
- ansible/utils/fqcn.py +1 -2
- ansible/utils/galaxy.py +1 -3
- ansible/utils/hashing.py +1 -3
- ansible/utils/helpers.py +1 -3
- ansible/utils/jsonrpc.py +1 -2
- ansible/utils/listify.py +1 -3
- ansible/utils/lock.py +1 -3
- ansible/utils/multiprocessing.py +1 -3
- ansible/utils/native_jinja.py +1 -3
- ansible/utils/path.py +1 -2
- ansible/utils/plugin_docs.py +7 -6
- ansible/utils/py3compat.py +17 -55
- ansible/utils/sentinel.py +1 -3
- ansible/utils/shlex.py +1 -3
- ansible/utils/singleton.py +1 -3
- ansible/utils/ssh_functions.py +1 -3
- ansible/utils/unicode.py +1 -3
- ansible/utils/unsafe_proxy.py +1 -2
- ansible/utils/vars.py +6 -8
- ansible/utils/version.py +1 -3
- ansible/vars/clean.py +1 -3
- ansible/vars/fact_cache.py +1 -2
- ansible/vars/hostvars.py +3 -7
- ansible/vars/manager.py +24 -6
- ansible/vars/reserved.py +1 -3
- {ansible_core-2.16.6.data → ansible_core-2.17.0rc1.data}/scripts/ansible-test +1 -2
- {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/METADATA +3 -3
- ansible_core-2.17.0rc1.dist-info/RECORD +987 -0
- ansible_test/__init__.py +1 -2
- ansible_test/_data/completion/docker.txt +7 -9
- ansible_test/_data/completion/remote.txt +6 -7
- ansible_test/_data/requirements/ansible-test.txt +0 -2
- ansible_test/_data/requirements/constraints.txt +1 -6
- ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
- ansible_test/_data/requirements/sanity.changelog.txt +3 -3
- ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
- ansible_test/_data/requirements/sanity.mypy.txt +12 -12
- ansible_test/_data/requirements/sanity.pep8.txt +1 -1
- ansible_test/_data/requirements/sanity.pylint.txt +7 -7
- ansible_test/_data/requirements/sanity.runtime-metadata.txt +1 -1
- ansible_test/_data/requirements/sanity.validate-modules.txt +3 -3
- ansible_test/_data/requirements/sanity.yamllint.txt +2 -2
- ansible_test/_internal/bootstrap.py +2 -2
- ansible_test/_internal/classification/__init__.py +0 -5
- ansible_test/_internal/commands/integration/cloud/cs.py +1 -1
- ansible_test/_internal/commands/integration/cloud/nios.py +1 -1
- ansible_test/_internal/commands/sanity/__init__.py +1 -27
- ansible_test/_internal/commands/sanity/import.py +0 -18
- ansible_test/_internal/commands/sanity/mypy.py +7 -10
- ansible_test/_internal/commands/units/__init__.py +1 -1
- ansible_test/_internal/config.py +0 -1
- ansible_test/_internal/content_config.py +0 -5
- ansible_test/_internal/coverage_util.py +0 -1
- ansible_test/_internal/docker_util.py +1 -1
- ansible_test/_internal/host_profiles.py +5 -4
- ansible_test/_internal/python_requirements.py +1 -119
- ansible_test/_internal/ssh.py +1 -0
- ansible_test/_internal/util.py +1 -1
- ansible_test/_internal/util_common.py +1 -1
- ansible_test/_internal/venv.py +10 -108
- ansible_test/_util/__init__.py +1 -2
- ansible_test/_util/controller/sanity/mypy/ansible-core.ini +0 -6
- ansible_test/_util/controller/sanity/mypy/modules.ini +0 -6
- ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +0 -1
- ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +0 -1
- ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +0 -1
- ansible_test/_util/controller/sanity/pylint/config/collection.cfg +0 -1
- ansible_test/_util/controller/sanity/pylint/config/default.cfg +0 -1
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +1 -2
- ansible_test/_util/controller/sanity/shellcheck/exclude.txt +0 -1
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +31 -59
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +0 -7
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +10 -2
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -1
- ansible_test/_util/controller/sanity/yamllint/yamllinter.py +16 -4
- ansible_test/_util/target/__init__.py +1 -2
- ansible_test/_util/target/cli/ansible_test_cli_stub.py +1 -2
- ansible_test/_util/target/common/constants.py +1 -4
- ansible_test/_util/target/injector/python.py +4 -19
- ansible_test/_util/target/pytest/plugins/ansible_forked.py +2 -9
- ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +1 -5
- ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -2
- ansible_test/_util/target/sanity/compile/compile.py +3 -12
- ansible_test/_util/target/sanity/import/importer.py +1 -12
- ansible_test/_util/target/setup/bootstrap.sh +49 -105
- ansible_test/_util/target/setup/probe_cgroups.py +1 -2
- ansible_test/_util/target/setup/quiet_pip.py +1 -16
- ansible_test/_util/target/setup/requirements.py +9 -2
- ansible_test/_util/target/tools/virtualenvcheck.py +1 -2
- ansible_test/_util/target/tools/yamlcheck.py +1 -2
- ansible/module_utils/common/_json_compat.py +0 -16
- ansible/module_utils/compat/_selectors2.py +0 -655
- ansible/modules/yum.py +0 -1821
- ansible/plugins/action/yum.py +0 -111
- ansible_core-2.16.6.dist-info/RECORD +0 -1009
- ansible_test/_util/controller/sanity/code-smell/future-import-boilerplate.json +0 -7
- ansible_test/_util/controller/sanity/code-smell/future-import-boilerplate.py +0 -46
- ansible_test/_util/controller/sanity/code-smell/metaclass-boilerplate.json +0 -7
- ansible_test/_util/controller/sanity/code-smell/metaclass-boilerplate.py +0 -44
- ansible_test/_util/controller/sanity/code-smell/no-basestring.json +0 -7
- ansible_test/_util/controller/sanity/code-smell/no-basestring.py +0 -21
- ansible_test/_util/controller/sanity/code-smell/no-dict-iteritems.json +0 -7
- ansible_test/_util/controller/sanity/code-smell/no-dict-iteritems.py +0 -21
- ansible_test/_util/controller/sanity/code-smell/no-dict-iterkeys.json +0 -7
- ansible_test/_util/controller/sanity/code-smell/no-dict-iterkeys.py +0 -21
- ansible_test/_util/controller/sanity/code-smell/no-dict-itervalues.json +0 -7
- ansible_test/_util/controller/sanity/code-smell/no-dict-itervalues.py +0 -21
- ansible_test/_util/controller/sanity/code-smell/no-main-display.json +0 -10
- ansible_test/_util/controller/sanity/code-smell/no-main-display.py +0 -21
- ansible_test/_util/controller/sanity/code-smell/no-unicode-literals.json +0 -7
- ansible_test/_util/controller/sanity/code-smell/no-unicode-literals.py +0 -21
- ansible_test/_util/controller/tools/sslcheck.py +0 -22
- ansible_test/_util/target/common/__init__.py +0 -2
- {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/COPYING +0 -0
- {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/WHEEL +0 -0
- {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.16.6.dist-info → ansible_core-2.17.0rc1.dist-info}/top_level.txt +0 -0
ansible/plugins/lookup/ini.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2015, Yannig Perre <yannig.perre(at)gmail.com>
|
|
2
2
|
# (c) 2017 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = """
|
|
8
7
|
name: ini
|
|
@@ -155,16 +154,20 @@ class LookupModule(LookupBase):
|
|
|
155
154
|
params = _parse_params(term, paramvals)
|
|
156
155
|
try:
|
|
157
156
|
updated_key = False
|
|
157
|
+
updated_options = False
|
|
158
158
|
for param in params:
|
|
159
159
|
if '=' in param:
|
|
160
160
|
name, value = param.split('=')
|
|
161
161
|
if name not in paramvals:
|
|
162
162
|
raise AnsibleLookupError('%s is not a valid option.' % name)
|
|
163
|
-
|
|
163
|
+
self.set_option(name, value)
|
|
164
|
+
updated_options = True
|
|
164
165
|
elif key == term:
|
|
165
166
|
# only take first, this format never supported multiple keys inline
|
|
166
167
|
key = param
|
|
167
168
|
updated_key = True
|
|
169
|
+
if updated_options:
|
|
170
|
+
paramvals = self.get_options()
|
|
168
171
|
except ValueError as e:
|
|
169
172
|
# bad params passed
|
|
170
173
|
raise AnsibleLookupError("Could not use '%s' from '%s': %s" % (param, params, to_native(e)), orig_exc=e)
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
# (c) 2017 Ansible Project
|
|
4
4
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
5
5
|
|
|
6
|
-
from __future__ import
|
|
7
|
-
__metaclass__ = type
|
|
6
|
+
from __future__ import annotations
|
|
8
7
|
|
|
9
8
|
DOCUMENTATION = """
|
|
10
9
|
name: inventory_hostnames
|
ansible/plugins/lookup/items.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
2
2
|
# (c) 2017 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = """
|
|
8
7
|
name: items
|
ansible/plugins/lookup/lines.py
CHANGED
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
# (c) 2017 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
|
-
from __future__ import
|
|
6
|
-
__metaclass__ = type
|
|
5
|
+
from __future__ import annotations
|
|
7
6
|
|
|
8
7
|
DOCUMENTATION = """
|
|
9
8
|
name: lines
|
ansible/plugins/lookup/list.py
CHANGED
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
# (c) 2012-17 Ansible Project
|
|
2
2
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
from __future__ import (absolute_import, division, print_function)
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
|
-
__metaclass__ = type
|
|
8
6
|
|
|
9
7
|
DOCUMENTATION = """
|
|
10
8
|
name: list
|
ansible/plugins/lookup/nested.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
|
2
2
|
# (c) 2017 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = """
|
|
8
7
|
name: nested
|
|
@@ -3,8 +3,7 @@
|
|
|
3
3
|
# (c) 2013, Maykel Moya <mmoya@speedyrails.com>
|
|
4
4
|
# (c) 2017 Ansible Project
|
|
5
5
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
6
|
-
from __future__ import
|
|
7
|
-
__metaclass__ = type
|
|
6
|
+
from __future__ import annotations
|
|
8
7
|
|
|
9
8
|
DOCUMENTATION = """
|
|
10
9
|
name: password
|
|
@@ -332,29 +331,32 @@ class LookupModule(LookupBase):
|
|
|
332
331
|
if invalid_params:
|
|
333
332
|
raise AnsibleError('Unrecognized parameter(s) given to password lookup: %s' % ', '.join(invalid_params))
|
|
334
333
|
|
|
335
|
-
#
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
params['ident'] = params.get('ident', self.get_option('ident'))
|
|
339
|
-
params['seed'] = params.get('seed', self.get_option('seed'))
|
|
334
|
+
# update options with what we got
|
|
335
|
+
if params:
|
|
336
|
+
self.set_options(direct=params)
|
|
340
337
|
|
|
341
|
-
|
|
342
|
-
|
|
338
|
+
# chars still might need more
|
|
339
|
+
chars = params.get('chars', self.get_option('chars'))
|
|
340
|
+
if chars and isinstance(chars, string_types):
|
|
343
341
|
tmp_chars = []
|
|
344
|
-
if u',,' in
|
|
342
|
+
if u',,' in chars:
|
|
345
343
|
tmp_chars.append(u',')
|
|
346
|
-
tmp_chars.extend(c for c in
|
|
347
|
-
|
|
344
|
+
tmp_chars.extend(c for c in chars.replace(u',,', u',').split(u',') if c)
|
|
345
|
+
self.set_option('chars', tmp_chars)
|
|
346
|
+
|
|
347
|
+
# return processed params
|
|
348
|
+
for field in VALID_PARAMS:
|
|
349
|
+
params[field] = self.get_option(field)
|
|
348
350
|
|
|
349
351
|
return relpath, params
|
|
350
352
|
|
|
351
353
|
def run(self, terms, variables, **kwargs):
|
|
352
354
|
ret = []
|
|
353
355
|
|
|
354
|
-
self.set_options(var_options=variables, direct=kwargs)
|
|
355
|
-
|
|
356
356
|
for term in terms:
|
|
357
357
|
|
|
358
|
+
self.set_options(var_options=variables, direct=kwargs)
|
|
359
|
+
|
|
358
360
|
changed = None
|
|
359
361
|
relpath, params = self._parse_parameters(term)
|
|
360
362
|
path = self._loader.path_dwim(relpath)
|
ansible/plugins/lookup/pipe.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2012, Daniel Hokka Zakrisson <daniel@hozac.com>
|
|
2
2
|
# (c) 2017 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = r"""
|
|
8
7
|
name: pipe
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2013, Michael DeHaan <michael.dehaan@gmail.com>
|
|
2
2
|
# (c) 2017 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = """
|
|
8
7
|
name: random_choice
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2013, Jayson Vantuyl <jayson@aggressive.ly>
|
|
2
2
|
# (c) 2012-17 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = """
|
|
8
7
|
name: sequence
|
|
@@ -20,21 +19,21 @@ DOCUMENTATION = """
|
|
|
20
19
|
options:
|
|
21
20
|
start:
|
|
22
21
|
description: number at which to start the sequence
|
|
23
|
-
default:
|
|
22
|
+
default: 1
|
|
24
23
|
type: integer
|
|
25
24
|
end:
|
|
26
25
|
description: number at which to end the sequence, dont use this with count
|
|
27
26
|
type: integer
|
|
28
|
-
default: 0
|
|
29
27
|
count:
|
|
30
28
|
description: number of elements in the sequence, this is not to be used with end
|
|
31
29
|
type: integer
|
|
32
|
-
default: 0
|
|
33
30
|
stride:
|
|
34
31
|
description: increments between sequence numbers, the default is 1 unless the end is less than the start, then it is -1.
|
|
35
32
|
type: integer
|
|
33
|
+
default: 1
|
|
36
34
|
format:
|
|
37
35
|
description: return a string with the generated number formatted in
|
|
36
|
+
default: "%d"
|
|
38
37
|
"""
|
|
39
38
|
|
|
40
39
|
EXAMPLES = """
|
|
@@ -98,6 +97,7 @@ SHORTCUT = re_compile(
|
|
|
98
97
|
"(:(.+))?$", # Group 5, Group 6: Format String
|
|
99
98
|
IGNORECASE
|
|
100
99
|
)
|
|
100
|
+
FIELDS = frozenset(('start', 'end', 'stride', 'count', 'format'))
|
|
101
101
|
|
|
102
102
|
|
|
103
103
|
class LookupModule(LookupBase):
|
|
@@ -139,30 +139,12 @@ class LookupModule(LookupBase):
|
|
|
139
139
|
calculating the number of entries in a sequence when a stride is specified.
|
|
140
140
|
"""
|
|
141
141
|
|
|
142
|
-
def reset(self):
|
|
143
|
-
"""set sensible defaults"""
|
|
144
|
-
self.start = 1
|
|
145
|
-
self.count = None
|
|
146
|
-
self.end = None
|
|
147
|
-
self.stride = 1
|
|
148
|
-
self.format = "%d"
|
|
149
|
-
|
|
150
142
|
def parse_kv_args(self, args):
|
|
151
143
|
"""parse key-value style arguments"""
|
|
152
|
-
for arg in
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
continue
|
|
157
|
-
arg_cooked = int(arg_raw, 0)
|
|
158
|
-
setattr(self, arg, arg_cooked)
|
|
159
|
-
except ValueError:
|
|
160
|
-
raise AnsibleError(
|
|
161
|
-
"can't parse %s=%s as integer"
|
|
162
|
-
% (arg, arg_raw)
|
|
163
|
-
)
|
|
164
|
-
if 'format' in args:
|
|
165
|
-
self.format = args.pop("format")
|
|
144
|
+
for arg in FIELDS:
|
|
145
|
+
value = args.pop(arg, None)
|
|
146
|
+
if value is not None:
|
|
147
|
+
self.set_option(arg, value)
|
|
166
148
|
if args:
|
|
167
149
|
raise AnsibleError(
|
|
168
150
|
"unrecognized arguments to with_sequence: %s"
|
|
@@ -177,33 +159,17 @@ class LookupModule(LookupBase):
|
|
|
177
159
|
|
|
178
160
|
dummy, start, end, dummy, stride, dummy, format = match.groups()
|
|
179
161
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
raise AnsibleError("can't parse start=%s as integer" % start)
|
|
185
|
-
if end is not None:
|
|
186
|
-
try:
|
|
187
|
-
end = int(end, 0)
|
|
188
|
-
except ValueError:
|
|
189
|
-
raise AnsibleError("can't parse end=%s as integer" % end)
|
|
190
|
-
if stride is not None:
|
|
191
|
-
try:
|
|
192
|
-
stride = int(stride, 0)
|
|
193
|
-
except ValueError:
|
|
194
|
-
raise AnsibleError("can't parse stride=%s as integer" % stride)
|
|
195
|
-
|
|
196
|
-
if start is not None:
|
|
197
|
-
self.start = start
|
|
198
|
-
if end is not None:
|
|
199
|
-
self.end = end
|
|
200
|
-
if stride is not None:
|
|
201
|
-
self.stride = stride
|
|
202
|
-
if format is not None:
|
|
203
|
-
self.format = format
|
|
162
|
+
for key in FIELDS:
|
|
163
|
+
value = locals().get(key, None)
|
|
164
|
+
if value is not None:
|
|
165
|
+
self.set_option(key, value)
|
|
204
166
|
|
|
205
167
|
return True
|
|
206
168
|
|
|
169
|
+
def set_fields(self):
|
|
170
|
+
for f in FIELDS:
|
|
171
|
+
setattr(self, f, self.get_option(f))
|
|
172
|
+
|
|
207
173
|
def sanity_check(self):
|
|
208
174
|
if self.count is None and self.end is None:
|
|
209
175
|
raise AnsibleError("must specify count or end in with_sequence")
|
|
@@ -246,7 +212,8 @@ class LookupModule(LookupBase):
|
|
|
246
212
|
|
|
247
213
|
for term in terms:
|
|
248
214
|
try:
|
|
249
|
-
|
|
215
|
+
# set defaults/global
|
|
216
|
+
self.set_options(direct=kwargs)
|
|
250
217
|
try:
|
|
251
218
|
if not self.parse_simple_args(term):
|
|
252
219
|
self.parse_kv_args(parse_kv(term))
|
|
@@ -255,7 +222,9 @@ class LookupModule(LookupBase):
|
|
|
255
222
|
except Exception as e:
|
|
256
223
|
raise AnsibleError("unknown error parsing with_sequence arguments: %r. Error was: %s" % (term, e))
|
|
257
224
|
|
|
225
|
+
self.set_fields()
|
|
258
226
|
self.sanity_check()
|
|
227
|
+
|
|
259
228
|
if self.stride != 0:
|
|
260
229
|
results.extend(self.generate_sequence())
|
|
261
230
|
except AnsibleError:
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2013, Serge van Ginderachter <serge@vanginderachter.be>
|
|
2
2
|
# (c) 2012-17 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = """
|
|
8
7
|
name: subelements
|
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
# Copyright: (c) 2012-17, 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
|
-
from __future__ import
|
|
6
|
-
__metaclass__ = type
|
|
5
|
+
from __future__ import annotations
|
|
7
6
|
|
|
8
7
|
DOCUMENTATION = """
|
|
9
8
|
name: template
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2013, Bradley Young <young.bradley@gmail.com>
|
|
2
2
|
# (c) 2012-17 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = """
|
|
8
7
|
name: together
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# (c) 2020 Ansible Project
|
|
2
2
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
|
-
from __future__ import
|
|
4
|
-
__metaclass__ = type
|
|
3
|
+
from __future__ import annotations
|
|
5
4
|
|
|
6
5
|
DOCUMENTATION = """
|
|
7
6
|
name: unvault
|
ansible/plugins/lookup/url.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2015, Brian Coca <bcoca@ansible.com>
|
|
2
2
|
# (c) 2012-17 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = """
|
|
8
7
|
name: url
|
|
@@ -88,7 +87,7 @@ options:
|
|
|
88
87
|
- section: url_lookup
|
|
89
88
|
key: force_basic_auth
|
|
90
89
|
follow_redirects:
|
|
91
|
-
description: String of urllib2, all/yes, safe, none to determine how redirects are followed
|
|
90
|
+
description: String of urllib2, all/yes, safe, none to determine how redirects are followed
|
|
92
91
|
type: string
|
|
93
92
|
version_added: "2.10"
|
|
94
93
|
default: 'urllib2'
|
|
@@ -99,6 +98,13 @@ options:
|
|
|
99
98
|
ini:
|
|
100
99
|
- section: url_lookup
|
|
101
100
|
key: follow_redirects
|
|
101
|
+
choices:
|
|
102
|
+
- urllib2
|
|
103
|
+
- all
|
|
104
|
+
- 'yes'
|
|
105
|
+
- safe
|
|
106
|
+
- none
|
|
107
|
+
- 'no'
|
|
102
108
|
use_gssapi:
|
|
103
109
|
description:
|
|
104
110
|
- Use GSSAPI handler of requests
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# (c) 2017 Ansible Project
|
|
2
2
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
|
-
from __future__ import
|
|
4
|
-
__metaclass__ = type
|
|
3
|
+
from __future__ import annotations
|
|
5
4
|
|
|
6
5
|
DOCUMENTATION = """
|
|
7
6
|
name: varnames
|
ansible/plugins/lookup/vars.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# (c) 2017 Ansible Project
|
|
2
2
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
|
-
from __future__ import
|
|
4
|
-
__metaclass__ = type
|
|
3
|
+
from __future__ import annotations
|
|
5
4
|
|
|
6
5
|
DOCUMENTATION = """
|
|
7
6
|
name: vars
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
# You should have received a copy of the GNU General Public License
|
|
17
17
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
18
18
|
#
|
|
19
|
-
from __future__ import
|
|
20
|
-
__metaclass__ = type
|
|
19
|
+
from __future__ import annotations
|
|
21
20
|
|
|
22
21
|
from abc import abstractmethod
|
|
23
22
|
from functools import wraps
|
|
@@ -14,8 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
# You should have received a copy of the GNU General Public License
|
|
16
16
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
-
from __future__ import
|
|
18
|
-
__metaclass__ = type
|
|
17
|
+
from __future__ import annotations
|
|
19
18
|
|
|
20
19
|
import os
|
|
21
20
|
import os.path
|
|
@@ -65,12 +64,12 @@ class ShellBase(AnsiblePlugin):
|
|
|
65
64
|
# TODO: config system should already resolve this so we should be able to just iterate over dicts
|
|
66
65
|
env = self.get_option('environment')
|
|
67
66
|
if isinstance(env, string_types):
|
|
68
|
-
raise AnsibleError('The "
|
|
67
|
+
raise AnsibleError('The "environment" keyword takes a list of dictionaries or a dictionary, not a string')
|
|
69
68
|
if not isinstance(env, Sequence):
|
|
70
69
|
env = [env]
|
|
71
70
|
for env_dict in env:
|
|
72
71
|
if not isinstance(env_dict, Mapping):
|
|
73
|
-
raise AnsibleError('The "
|
|
72
|
+
raise AnsibleError('The "environment" keyword takes a list of dictionaries (or single dictionary), but got a "%s" instead' % type(env_dict))
|
|
74
73
|
self.env.update(env_dict)
|
|
75
74
|
|
|
76
75
|
# We can remove the try: except in the future when we make ShellBase a proper subset of
|
ansible/plugins/shell/cmd.py
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# Copyright (c) 2019 Ansible Project
|
|
2
2
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
3
|
-
from __future__ import
|
|
4
|
-
__metaclass__ = type
|
|
3
|
+
from __future__ import annotations
|
|
5
4
|
|
|
6
5
|
DOCUMENTATION = '''
|
|
7
6
|
name: cmd
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Copyright (c) 2014, Chris Church <chris@ninemoreminutes.com>
|
|
2
2
|
# Copyright (c) 2017 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = '''
|
|
8
7
|
name: powershell
|
ansible/plugins/shell/sh.py
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# Copyright (c) 2014, Chris Church <chris@ninemoreminutes.com>
|
|
2
2
|
# Copyright (c) 2017 Ansible Project
|
|
3
3
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
4
|
-
from __future__ import
|
|
5
|
-
__metaclass__ = type
|
|
4
|
+
from __future__ import annotations
|
|
6
5
|
|
|
7
6
|
DOCUMENTATION = '''
|
|
8
7
|
name: sh
|
|
@@ -15,9 +15,7 @@
|
|
|
15
15
|
# You should have received a copy of the GNU General Public License
|
|
16
16
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
from __future__ import (absolute_import, division, print_function)
|
|
20
|
-
__metaclass__ = type
|
|
18
|
+
from __future__ import annotations
|
|
21
19
|
|
|
22
20
|
import cmd
|
|
23
21
|
import functools
|
|
@@ -555,12 +553,19 @@ class StrategyBase:
|
|
|
555
553
|
seen = []
|
|
556
554
|
for handler in handlers:
|
|
557
555
|
if listeners := handler.listen:
|
|
558
|
-
|
|
556
|
+
listeners = handler.get_validated_value(
|
|
559
557
|
'listen',
|
|
560
558
|
handler.fattributes.get('listen'),
|
|
561
559
|
listeners,
|
|
562
560
|
templar,
|
|
563
|
-
)
|
|
561
|
+
)
|
|
562
|
+
if handler._role is not None:
|
|
563
|
+
for listener in listeners.copy():
|
|
564
|
+
listeners.extend([
|
|
565
|
+
handler._role.get_name(include_role_fqcn=True) + ' : ' + listener,
|
|
566
|
+
handler._role.get_name(include_role_fqcn=False) + ' : ' + listener
|
|
567
|
+
])
|
|
568
|
+
if notification in listeners:
|
|
564
569
|
if handler.name and handler.name in seen:
|
|
565
570
|
continue
|
|
566
571
|
seen.append(handler.name)
|
|
@@ -845,7 +850,7 @@ class StrategyBase:
|
|
|
845
850
|
|
|
846
851
|
return ti_copy
|
|
847
852
|
|
|
848
|
-
def _load_included_file(self, included_file, iterator, is_handler=False):
|
|
853
|
+
def _load_included_file(self, included_file, iterator, is_handler=False, handle_stats_and_callbacks=True):
|
|
849
854
|
'''
|
|
850
855
|
Loads an included YAML file of tasks, applying the optional set of variables.
|
|
851
856
|
|
|
@@ -853,6 +858,15 @@ class StrategyBase:
|
|
|
853
858
|
in such case the caller is responsible for marking the host(s) as failed
|
|
854
859
|
using PlayIterator.mark_host_failed().
|
|
855
860
|
'''
|
|
861
|
+
if handle_stats_and_callbacks:
|
|
862
|
+
display.deprecated(
|
|
863
|
+
"Reporting play recap stats and running callbacks functionality for "
|
|
864
|
+
"``include_tasks`` in ``StrategyBase._load_included_file`` is deprecated. "
|
|
865
|
+
"See ``https://github.com/ansible/ansible/pull/79260`` for guidance on how to "
|
|
866
|
+
"move the reporting into specific strategy plugins to account for "
|
|
867
|
+
"``include_role`` tasks as well.",
|
|
868
|
+
version="2.21"
|
|
869
|
+
)
|
|
856
870
|
display.debug("loading included file: %s" % included_file._filename)
|
|
857
871
|
try:
|
|
858
872
|
data = self._loader.load_from_file(included_file._filename)
|
|
@@ -872,11 +886,9 @@ class StrategyBase:
|
|
|
872
886
|
loader=self._loader,
|
|
873
887
|
variable_manager=self._variable_manager,
|
|
874
888
|
)
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
for host in included_file._hosts:
|
|
879
|
-
self._tqm._stats.increment('ok', host.name)
|
|
889
|
+
if handle_stats_and_callbacks:
|
|
890
|
+
for host in included_file._hosts:
|
|
891
|
+
self._tqm._stats.increment('ok', host.name)
|
|
880
892
|
except AnsibleParserError:
|
|
881
893
|
raise
|
|
882
894
|
except AnsibleError as e:
|
|
@@ -884,18 +896,18 @@ class StrategyBase:
|
|
|
884
896
|
reason = "Could not find or access '%s' on the Ansible Controller." % to_text(e.file_name)
|
|
885
897
|
else:
|
|
886
898
|
reason = to_text(e)
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
899
|
+
if handle_stats_and_callbacks:
|
|
900
|
+
for r in included_file._results:
|
|
901
|
+
r._result['failed'] = True
|
|
902
|
+
|
|
903
|
+
for host in included_file._hosts:
|
|
904
|
+
tr = TaskResult(host=host, task=included_file._task, return_data=dict(failed=True, reason=reason))
|
|
905
|
+
self._tqm._stats.increment('failures', host.name)
|
|
906
|
+
self._tqm.send_callback('v2_runner_on_failed', tr)
|
|
895
907
|
raise AnsibleError(reason) from e
|
|
896
908
|
|
|
897
|
-
|
|
898
|
-
|
|
909
|
+
if handle_stats_and_callbacks:
|
|
910
|
+
self._tqm.send_callback('v2_playbook_on_include', included_file)
|
|
899
911
|
display.debug("done processing included file")
|
|
900
912
|
return block_list
|
|
901
913
|
|
|
@@ -12,8 +12,7 @@
|
|
|
12
12
|
#
|
|
13
13
|
# You should have received a copy of the GNU General Public License
|
|
14
14
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
15
|
-
from __future__ import
|
|
16
|
-
__metaclass__ = type
|
|
15
|
+
from __future__ import annotations
|
|
17
16
|
|
|
18
17
|
DOCUMENTATION = '''
|
|
19
18
|
name: debug
|
ansible/plugins/strategy/free.py
CHANGED
|
@@ -14,9 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
# You should have received a copy of the GNU General Public License
|
|
16
16
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
-
|
|
18
|
-
from __future__ import (absolute_import, division, print_function)
|
|
19
|
-
__metaclass__ = type
|
|
17
|
+
from __future__ import annotations
|
|
20
18
|
|
|
21
19
|
DOCUMENTATION = '''
|
|
22
20
|
name: free
|
|
@@ -250,7 +248,12 @@ class StrategyModule(StrategyBase):
|
|
|
250
248
|
)
|
|
251
249
|
else:
|
|
252
250
|
is_handler = isinstance(included_file._task, Handler)
|
|
253
|
-
new_blocks = self._load_included_file(
|
|
251
|
+
new_blocks = self._load_included_file(
|
|
252
|
+
included_file,
|
|
253
|
+
iterator=iterator,
|
|
254
|
+
is_handler=is_handler,
|
|
255
|
+
handle_stats_and_callbacks=False,
|
|
256
|
+
)
|
|
254
257
|
|
|
255
258
|
# let PlayIterator know about any new handlers included via include_role or
|
|
256
259
|
# import_role within include_role/include_taks
|
|
@@ -258,13 +261,20 @@ class StrategyModule(StrategyBase):
|
|
|
258
261
|
except AnsibleParserError:
|
|
259
262
|
raise
|
|
260
263
|
except AnsibleError as e:
|
|
261
|
-
|
|
262
|
-
# include_role does not have on_include callback so display the error
|
|
263
|
-
display.error(to_text(e), wrap_text=False)
|
|
264
|
+
display.error(to_text(e), wrap_text=False)
|
|
264
265
|
for r in included_file._results:
|
|
265
266
|
r._result['failed'] = True
|
|
267
|
+
r._result['reason'] = str(e)
|
|
268
|
+
self._tqm._stats.increment('failures', r._host.name)
|
|
269
|
+
self._tqm.send_callback('v2_runner_on_failed', r)
|
|
266
270
|
failed_includes_hosts.add(r._host)
|
|
267
271
|
continue
|
|
272
|
+
else:
|
|
273
|
+
# since we skip incrementing the stats when the task result is
|
|
274
|
+
# first processed, we do so now for each host in the list
|
|
275
|
+
for host in included_file._hosts:
|
|
276
|
+
self._tqm._stats.increment('ok', host.name)
|
|
277
|
+
self._tqm.send_callback('v2_playbook_on_include', included_file)
|
|
268
278
|
|
|
269
279
|
for new_block in new_blocks:
|
|
270
280
|
if is_handler:
|
|
@@ -14,9 +14,7 @@
|
|
|
14
14
|
#
|
|
15
15
|
# You should have received a copy of the GNU General Public License
|
|
16
16
|
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
17
|
-
|
|
18
|
-
from __future__ import (absolute_import, division, print_function)
|
|
19
|
-
__metaclass__ = type
|
|
17
|
+
from __future__ import annotations
|
|
20
18
|
|
|
21
19
|
DOCUMENTATION = '''
|
|
22
20
|
name: host_pinned
|