ansible-core 2.16.5__py3-none-any.whl → 2.17.0b1__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 +5 -27
- 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 +32 -25
- ansible/constants.py +41 -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 +1 -3
- 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 +10 -5
- 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 +2 -3
- 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 +2 -3
- 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 +2 -3
- 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 +3 -4
- 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 +63 -188
- 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 +25 -9
- 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 +14 -4
- 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 +2 -4
- 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 +6 -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 -2
- 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 +17 -6
- 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 +18 -8
- ansible/plugins/strategy/host_pinned.py +1 -3
- ansible/plugins/strategy/linear.py +23 -23
- 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 +14 -27
- 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 +9 -29
- ansible/vars/manager.py +24 -6
- ansible/vars/reserved.py +1 -3
- {ansible_core-2.16.5.data → ansible_core-2.17.0b1.data}/scripts/ansible-test +1 -2
- {ansible_core-2.16.5.dist-info → ansible_core-2.17.0b1.dist-info}/METADATA +3 -3
- ansible_core-2.17.0b1.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/ansible_doc.py +1 -1
- 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.5.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.5.dist-info → ansible_core-2.17.0b1.dist-info}/COPYING +0 -0
- {ansible_core-2.16.5.dist-info → ansible_core-2.17.0b1.dist-info}/WHEEL +0 -0
- {ansible_core-2.16.5.dist-info → ansible_core-2.17.0b1.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.16.5.dist-info → ansible_core-2.17.0b1.dist-info}/top_level.txt +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
# (c) 2013, seth vidal <skvidal@fedoraproject.org> red hat, inc
|
|
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: first_found
|
|
@@ -147,6 +146,7 @@ from jinja2.exceptions import UndefinedError
|
|
|
147
146
|
from ansible.errors import AnsibleLookupError, AnsibleUndefinedVariable
|
|
148
147
|
from ansible.module_utils.six import string_types
|
|
149
148
|
from ansible.plugins.lookup import LookupBase
|
|
149
|
+
from ansible.utils.path import unfrackpath
|
|
150
150
|
|
|
151
151
|
|
|
152
152
|
def _splitter(value, chars):
|
|
@@ -198,7 +198,7 @@ class LookupModule(LookupBase):
|
|
|
198
198
|
# NOTE: this is used as 'global' but can be set many times?!?!?
|
|
199
199
|
skip = self.get_option('skip')
|
|
200
200
|
|
|
201
|
-
# magic extra
|
|
201
|
+
# magic extra splitting to create lists
|
|
202
202
|
filelist = _split_on(files, ',;')
|
|
203
203
|
pathlist = _split_on(paths, ',:;')
|
|
204
204
|
|
|
@@ -209,7 +209,7 @@ class LookupModule(LookupBase):
|
|
|
209
209
|
f = os.path.join(path, fn)
|
|
210
210
|
total_search.append(f)
|
|
211
211
|
elif filelist:
|
|
212
|
-
# NOTE: this is now 'extend',
|
|
212
|
+
# NOTE: this is now 'extend', previously it would clobber all options, but we deemed that a bug
|
|
213
213
|
total_search.extend(filelist)
|
|
214
214
|
else:
|
|
215
215
|
total_search.append(term)
|
|
@@ -218,8 +218,9 @@ class LookupModule(LookupBase):
|
|
|
218
218
|
|
|
219
219
|
def run(self, terms, variables, **kwargs):
|
|
220
220
|
|
|
221
|
+
self.set_options(var_options=variables, direct=kwargs)
|
|
222
|
+
|
|
221
223
|
if not terms:
|
|
222
|
-
self.set_options(var_options=variables, direct=kwargs)
|
|
223
224
|
terms = self.get_option('files')
|
|
224
225
|
|
|
225
226
|
total_search, skip = self._process_terms(terms, variables, kwargs)
|
|
@@ -246,10 +247,10 @@ class LookupModule(LookupBase):
|
|
|
246
247
|
|
|
247
248
|
# exit if we find one!
|
|
248
249
|
if path is not None:
|
|
249
|
-
return [path]
|
|
250
|
+
return [unfrackpath(path, follow=False)]
|
|
250
251
|
|
|
251
252
|
# if we get here, no file was found
|
|
252
253
|
if skip:
|
|
253
|
-
# NOTE: global skip
|
|
254
|
+
# NOTE: global skip won't matter, only last 'skip' value in dict term
|
|
254
255
|
return []
|
|
255
256
|
raise AnsibleLookupError("No file was found when using first_found.")
|
|
@@ -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: indexed_items
|
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
|