ansible-core 2.18.5rc1__py3-none-any.whl → 2.19.0b2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ansible/_internal/__init__.py +53 -0
- ansible/_internal/_ansiballz.py +265 -0
- ansible/_internal/_collection_proxy.py +47 -0
- ansible/_internal/_datatag/__init__.py +0 -0
- ansible/_internal/_datatag/_tags.py +130 -0
- ansible/_internal/_datatag/_utils.py +19 -0
- ansible/_internal/_datatag/_wrappers.py +33 -0
- ansible/_internal/_errors/__init__.py +0 -0
- ansible/_internal/_errors/_captured.py +128 -0
- ansible/_internal/_errors/_handler.py +91 -0
- ansible/_internal/_errors/_utils.py +310 -0
- ansible/_internal/_json/__init__.py +203 -0
- ansible/_internal/_json/_legacy_encoder.py +34 -0
- ansible/_internal/_json/_profiles/__init__.py +0 -0
- ansible/_internal/_json/_profiles/_cache_persistence.py +55 -0
- ansible/_internal/_json/_profiles/_inventory_legacy.py +40 -0
- ansible/_internal/_json/_profiles/_legacy.py +197 -0
- ansible/_internal/_locking.py +21 -0
- ansible/_internal/_plugins/__init__.py +0 -0
- ansible/_internal/_plugins/_cache.py +57 -0
- ansible/_internal/_task.py +78 -0
- ansible/_internal/_templating/__init__.py +10 -0
- ansible/_internal/_templating/_access.py +86 -0
- ansible/_internal/_templating/_chain_templar.py +63 -0
- ansible/_internal/_templating/_datatag.py +95 -0
- ansible/_internal/_templating/_engine.py +588 -0
- ansible/_internal/_templating/_errors.py +28 -0
- ansible/_internal/_templating/_jinja_bits.py +1066 -0
- ansible/_internal/_templating/_jinja_common.py +332 -0
- ansible/_internal/_templating/_jinja_patches.py +44 -0
- ansible/_internal/_templating/_jinja_plugins.py +345 -0
- ansible/_internal/_templating/_lazy_containers.py +633 -0
- ansible/_internal/_templating/_marker_behaviors.py +103 -0
- ansible/_internal/_templating/_transform.py +63 -0
- ansible/_internal/_templating/_utils.py +107 -0
- ansible/_internal/_wrapt.py +1052 -0
- ansible/_internal/_yaml/__init__.py +0 -0
- ansible/_internal/_yaml/_constructor.py +240 -0
- ansible/_internal/_yaml/_dumper.py +62 -0
- ansible/_internal/_yaml/_errors.py +166 -0
- ansible/_internal/_yaml/_loader.py +66 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/README.md +11 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/action/debug.py +36 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/apply_trust.py +19 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/dump_object.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/finalize.py +16 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/origin.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.py +24 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.yml +33 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/tag_names.py +16 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/true_type.py +17 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/unmask.py +49 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.py +21 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.yml +2 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.py +15 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.yml +19 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.yml +19 -0
- ansible/cli/__init__.py +159 -89
- ansible/cli/_ssh_askpass.py +47 -0
- ansible/cli/adhoc.py +14 -7
- ansible/cli/arguments/option_helpers.py +154 -7
- ansible/cli/config.py +43 -68
- ansible/cli/console.py +10 -8
- ansible/cli/doc.py +62 -53
- ansible/cli/galaxy.py +27 -20
- ansible/cli/inventory.py +28 -26
- ansible/cli/playbook.py +4 -12
- ansible/cli/pull.py +51 -11
- ansible/cli/scripts/ansible_connection_cli_stub.py +7 -7
- ansible/cli/vault.py +12 -11
- ansible/compat/__init__.py +2 -2
- ansible/config/base.yml +166 -112
- ansible/config/manager.py +52 -49
- ansible/constants.py +3 -4
- ansible/errors/__init__.py +277 -235
- ansible/executor/interpreter_discovery.py +28 -149
- ansible/executor/module_common.py +426 -493
- ansible/executor/play_iterator.py +22 -27
- ansible/executor/playbook_executor.py +11 -11
- ansible/executor/powershell/async_watchdog.ps1 +97 -102
- ansible/executor/powershell/async_wrapper.ps1 +202 -151
- ansible/executor/powershell/become_wrapper.ps1 +89 -144
- ansible/executor/powershell/bootstrap_wrapper.ps1 +24 -9
- ansible/executor/powershell/coverage_wrapper.ps1 +82 -135
- ansible/executor/powershell/exec_wrapper.ps1 +462 -196
- ansible/executor/powershell/module_manifest.py +417 -265
- ansible/executor/powershell/module_wrapper.ps1 +169 -186
- ansible/executor/powershell/psrp_fetch_file.ps1 +41 -0
- ansible/executor/powershell/psrp_put_file.ps1 +122 -0
- ansible/executor/powershell/winrm_fetch_file.ps1 +46 -0
- ansible/executor/powershell/winrm_put_file.ps1 +36 -0
- ansible/executor/process/worker.py +161 -96
- ansible/executor/stats.py +5 -5
- ansible/executor/task_executor.py +268 -258
- ansible/executor/task_queue_manager.py +124 -90
- ansible/executor/task_result.py +183 -78
- ansible/galaxy/__init__.py +2 -2
- ansible/galaxy/api.py +22 -18
- ansible/galaxy/collection/__init__.py +1 -1
- ansible/galaxy/collection/concrete_artifact_manager.py +8 -11
- ansible/galaxy/dependency_resolution/dataclasses.py +14 -4
- ansible/galaxy/dependency_resolution/providers.py +1 -1
- ansible/galaxy/dependency_resolution/reporters.py +81 -0
- ansible/galaxy/role.py +4 -8
- ansible/galaxy/token.py +28 -21
- ansible/inventory/data.py +47 -57
- ansible/inventory/group.py +44 -72
- ansible/inventory/helpers.py +9 -0
- ansible/inventory/host.py +32 -54
- ansible/inventory/manager.py +78 -34
- ansible/keyword_desc.yml +1 -1
- ansible/module_utils/_internal/__init__.py +55 -0
- ansible/module_utils/_internal/_ambient_context.py +58 -0
- ansible/module_utils/_internal/_ansiballz.py +133 -0
- ansible/module_utils/_internal/_concurrent/_daemon_threading.py +1 -0
- ansible/module_utils/_internal/_dataclass_annotation_patch.py +64 -0
- ansible/module_utils/_internal/_dataclass_validation.py +217 -0
- ansible/module_utils/_internal/_datatag/__init__.py +928 -0
- ansible/module_utils/_internal/_datatag/_tags.py +38 -0
- ansible/module_utils/_internal/_debugging.py +31 -0
- ansible/module_utils/_internal/_errors.py +30 -0
- ansible/module_utils/_internal/_json/__init__.py +63 -0
- ansible/module_utils/_internal/_json/_legacy_encoder.py +26 -0
- ansible/module_utils/_internal/_json/_profiles/__init__.py +410 -0
- ansible/module_utils/_internal/_json/_profiles/_fallback_to_str.py +73 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py +31 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py +35 -0
- ansible/module_utils/_internal/_json/_profiles/_module_modern_c2m.py +35 -0
- ansible/module_utils/_internal/_json/_profiles/_module_modern_m2c.py +33 -0
- ansible/module_utils/_internal/_json/_profiles/_tagless.py +50 -0
- ansible/module_utils/_internal/_patches/__init__.py +66 -0
- ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py +55 -0
- ansible/module_utils/_internal/_patches/_socket_patch.py +34 -0
- ansible/module_utils/_internal/_patches/_sys_intern_patch.py +34 -0
- ansible/module_utils/_internal/_plugin_exec_context.py +49 -0
- ansible/module_utils/_internal/_testing.py +0 -0
- ansible/module_utils/_internal/_traceback.py +89 -0
- ansible/module_utils/ansible_release.py +2 -2
- ansible/module_utils/api.py +1 -2
- ansible/module_utils/basic.py +152 -120
- ansible/module_utils/common/_utils.py +24 -28
- ansible/module_utils/common/collections.py +1 -2
- ansible/module_utils/common/dict_transformations.py +2 -2
- ansible/module_utils/common/file.py +2 -2
- ansible/module_utils/common/json.py +90 -84
- ansible/module_utils/common/locale.py +2 -2
- ansible/module_utils/common/messages.py +108 -0
- ansible/module_utils/common/parameters.py +27 -24
- ansible/module_utils/common/process.py +2 -2
- ansible/module_utils/common/respawn.py +41 -19
- ansible/module_utils/common/sentinel.py +66 -0
- ansible/module_utils/common/sys_info.py +8 -8
- ansible/module_utils/common/text/converters.py +16 -37
- ansible/module_utils/common/validation.py +35 -24
- ansible/module_utils/common/warnings.py +86 -25
- ansible/module_utils/common/yaml.py +29 -3
- ansible/module_utils/compat/datetime.py +33 -21
- ansible/module_utils/compat/paramiko.py +21 -10
- ansible/module_utils/compat/typing.py +6 -5
- ansible/module_utils/connection.py +2 -2
- ansible/module_utils/csharp/Ansible.Basic.cs +14 -11
- ansible/module_utils/csharp/Ansible.Become.cs +1 -0
- ansible/module_utils/csharp/Ansible._Async.cs +517 -0
- ansible/module_utils/datatag.py +46 -0
- ansible/module_utils/distro/__init__.py +2 -2
- ansible/module_utils/facts/ansible_collector.py +4 -5
- ansible/module_utils/facts/collector.py +13 -14
- ansible/module_utils/facts/compat.py +4 -4
- ansible/module_utils/facts/default_collectors.py +1 -1
- ansible/module_utils/facts/hardware/aix.py +34 -0
- ansible/module_utils/facts/hardware/base.py +1 -1
- ansible/module_utils/facts/hardware/darwin.py +1 -3
- ansible/module_utils/facts/hardware/freebsd.py +2 -2
- ansible/module_utils/facts/hardware/linux.py +4 -4
- ansible/module_utils/facts/namespace.py +1 -1
- ansible/module_utils/facts/network/base.py +1 -1
- ansible/module_utils/facts/network/fc_wwn.py +1 -2
- ansible/module_utils/facts/network/iscsi.py +1 -2
- ansible/module_utils/facts/network/nvme.py +1 -2
- ansible/module_utils/facts/other/facter.py +1 -2
- ansible/module_utils/facts/other/ohai.py +2 -3
- ansible/module_utils/facts/system/apparmor.py +1 -2
- ansible/module_utils/facts/system/caps.py +1 -1
- ansible/module_utils/facts/system/chroot.py +1 -2
- ansible/module_utils/facts/system/cmdline.py +1 -2
- ansible/module_utils/facts/system/date_time.py +5 -3
- ansible/module_utils/facts/system/distribution.py +9 -8
- ansible/module_utils/facts/system/dns.py +1 -1
- ansible/module_utils/facts/system/env.py +1 -2
- ansible/module_utils/facts/system/fips.py +7 -20
- ansible/module_utils/facts/system/loadavg.py +1 -2
- ansible/module_utils/facts/system/local.py +1 -2
- ansible/module_utils/facts/system/lsb.py +1 -2
- ansible/module_utils/facts/system/pkg_mgr.py +1 -2
- ansible/module_utils/facts/system/platform.py +1 -2
- ansible/module_utils/facts/system/python.py +1 -2
- ansible/module_utils/facts/system/selinux.py +1 -1
- ansible/module_utils/facts/system/service_mgr.py +1 -2
- ansible/module_utils/facts/system/ssh_pub_keys.py +1 -1
- ansible/module_utils/facts/system/systemd.py +1 -1
- ansible/module_utils/facts/system/user.py +1 -2
- ansible/module_utils/facts/utils.py +3 -3
- ansible/module_utils/facts/virtual/base.py +1 -1
- ansible/module_utils/facts/virtual/sunos.py +3 -15
- ansible/module_utils/facts/virtual/sysctl.py +3 -16
- ansible/module_utils/json_utils.py +2 -2
- ansible/module_utils/parsing/convert_bool.py +1 -1
- ansible/module_utils/service.py +18 -21
- ansible/module_utils/splitter.py +7 -7
- ansible/module_utils/testing.py +31 -0
- ansible/module_utils/urls.py +60 -31
- ansible/modules/add_host.py +4 -4
- ansible/modules/apt.py +60 -46
- ansible/modules/apt_key.py +19 -12
- ansible/modules/apt_repository.py +19 -16
- ansible/modules/assemble.py +6 -6
- ansible/modules/assert.py +4 -4
- ansible/modules/async_status.py +10 -12
- ansible/modules/async_wrapper.py +8 -3
- ansible/modules/blockinfile.py +6 -7
- ansible/modules/command.py +10 -17
- ansible/modules/copy.py +57 -144
- ansible/modules/cron.py +20 -15
- ansible/modules/deb822_repository.py +8 -9
- ansible/modules/debconf.py +5 -5
- ansible/modules/debug.py +4 -4
- ansible/modules/dnf.py +8 -8
- ansible/modules/dnf5.py +39 -13
- ansible/modules/dpkg_selections.py +4 -4
- ansible/modules/expect.py +8 -10
- ansible/modules/fail.py +4 -4
- ansible/modules/fetch.py +4 -4
- ansible/modules/file.py +174 -133
- ansible/modules/find.py +19 -17
- ansible/modules/gather_facts.py +3 -3
- ansible/modules/get_url.py +59 -53
- ansible/modules/getent.py +7 -9
- ansible/modules/git.py +28 -25
- ansible/modules/group.py +6 -6
- ansible/modules/group_by.py +4 -4
- ansible/modules/hostname.py +13 -29
- ansible/modules/import_playbook.py +6 -6
- ansible/modules/import_role.py +6 -6
- ansible/modules/import_tasks.py +6 -6
- ansible/modules/include_role.py +6 -6
- ansible/modules/include_tasks.py +6 -6
- ansible/modules/include_vars.py +6 -6
- ansible/modules/iptables.py +86 -73
- ansible/modules/known_hosts.py +10 -10
- ansible/modules/lineinfile.py +5 -5
- ansible/modules/meta.py +4 -4
- ansible/modules/mount_facts.py +2 -2
- ansible/modules/package.py +4 -4
- ansible/modules/package_facts.py +22 -10
- ansible/modules/pause.py +6 -6
- ansible/modules/ping.py +6 -6
- ansible/modules/pip.py +10 -11
- ansible/modules/raw.py +4 -4
- ansible/modules/reboot.py +6 -6
- ansible/modules/replace.py +9 -13
- ansible/modules/rpm_key.py +7 -8
- ansible/modules/script.py +4 -4
- ansible/modules/service.py +7 -8
- ansible/modules/service_facts.py +87 -10
- ansible/modules/set_fact.py +5 -5
- ansible/modules/set_stats.py +4 -4
- ansible/modules/setup.py +2 -2
- ansible/modules/shell.py +6 -6
- ansible/modules/slurp.py +6 -6
- ansible/modules/stat.py +9 -23
- ansible/modules/subversion.py +15 -15
- ansible/modules/systemd.py +6 -6
- ansible/modules/systemd_service.py +6 -6
- ansible/modules/sysvinit.py +6 -6
- ansible/modules/tempfile.py +5 -6
- ansible/modules/template.py +6 -6
- ansible/modules/unarchive.py +32 -11
- ansible/modules/uri.py +33 -26
- ansible/modules/user.py +53 -34
- ansible/modules/validate_argument_spec.py +10 -7
- ansible/modules/wait_for.py +32 -27
- ansible/modules/wait_for_connection.py +6 -6
- ansible/modules/yum_repository.py +6 -6
- ansible/parsing/ajson.py +14 -32
- ansible/parsing/dataloader.py +99 -54
- ansible/parsing/mod_args.py +28 -44
- ansible/parsing/plugin_docs.py +21 -86
- ansible/parsing/quoting.py +1 -1
- ansible/parsing/splitter.py +27 -12
- ansible/parsing/utils/addresses.py +24 -24
- ansible/parsing/utils/jsonify.py +5 -1
- ansible/parsing/utils/yaml.py +32 -61
- ansible/parsing/vault/__init__.py +319 -87
- ansible/parsing/yaml/__init__.py +0 -18
- ansible/parsing/yaml/dumper.py +6 -120
- ansible/parsing/yaml/loader.py +6 -39
- ansible/parsing/yaml/objects.py +43 -335
- ansible/playbook/__init__.py +1 -1
- ansible/playbook/attribute.py +8 -3
- ansible/playbook/base.py +182 -132
- ansible/playbook/block.py +26 -24
- ansible/playbook/collectionsearch.py +1 -15
- ansible/playbook/conditional.py +3 -77
- ansible/playbook/handler.py +8 -2
- ansible/playbook/helpers.py +41 -53
- ansible/playbook/included_file.py +31 -27
- ansible/playbook/loop_control.py +2 -2
- ansible/playbook/play.py +85 -44
- ansible/playbook/play_context.py +12 -17
- ansible/playbook/playbook_include.py +14 -15
- ansible/playbook/role/__init__.py +24 -26
- ansible/playbook/role/definition.py +15 -17
- ansible/playbook/role/include.py +2 -4
- ansible/playbook/role/metadata.py +10 -11
- ansible/playbook/role_include.py +3 -3
- ansible/playbook/taggable.py +13 -8
- ansible/playbook/task.py +188 -118
- ansible/playbook/task_include.py +5 -5
- ansible/plugins/__init__.py +68 -21
- ansible/plugins/action/__init__.py +209 -176
- ansible/plugins/action/add_host.py +1 -1
- ansible/plugins/action/assemble.py +1 -1
- ansible/plugins/action/assert.py +54 -66
- ansible/plugins/action/copy.py +7 -11
- ansible/plugins/action/debug.py +37 -31
- ansible/plugins/action/dnf.py +3 -4
- ansible/plugins/action/fail.py +1 -1
- ansible/plugins/action/fetch.py +4 -5
- ansible/plugins/action/gather_facts.py +7 -6
- ansible/plugins/action/group_by.py +1 -1
- ansible/plugins/action/include_vars.py +10 -11
- ansible/plugins/action/package.py +3 -6
- ansible/plugins/action/pause.py +2 -2
- ansible/plugins/action/script.py +15 -8
- ansible/plugins/action/service.py +6 -11
- ansible/plugins/action/set_fact.py +3 -12
- ansible/plugins/action/set_stats.py +3 -8
- ansible/plugins/action/template.py +35 -59
- ansible/plugins/action/unarchive.py +1 -1
- ansible/plugins/action/validate_argument_spec.py +5 -5
- ansible/plugins/action/wait_for_connection.py +1 -1
- ansible/plugins/become/__init__.py +31 -8
- ansible/plugins/become/runas.py +71 -0
- ansible/plugins/become/su.py +13 -8
- ansible/plugins/become/sudo.py +19 -0
- ansible/plugins/cache/__init__.py +35 -44
- ansible/plugins/cache/base.py +8 -0
- ansible/plugins/cache/jsonfile.py +10 -16
- ansible/plugins/cache/memory.py +6 -12
- ansible/plugins/callback/__init__.py +284 -179
- ansible/plugins/callback/default.py +99 -92
- ansible/plugins/callback/junit.py +44 -39
- ansible/plugins/callback/minimal.py +28 -25
- ansible/plugins/callback/oneline.py +28 -21
- ansible/plugins/callback/tree.py +16 -11
- ansible/plugins/connection/__init__.py +47 -34
- ansible/plugins/connection/local.py +150 -54
- ansible/plugins/connection/paramiko_ssh.py +21 -18
- ansible/plugins/connection/psrp.py +76 -165
- ansible/plugins/connection/ssh.py +301 -78
- ansible/plugins/connection/winrm.py +58 -140
- ansible/plugins/doc_fragments/action_common_attributes.py +14 -14
- ansible/plugins/doc_fragments/action_core.py +6 -6
- ansible/plugins/doc_fragments/backup.py +2 -2
- ansible/plugins/doc_fragments/checksum_common.py +27 -0
- ansible/plugins/doc_fragments/constructed.py +6 -2
- ansible/plugins/doc_fragments/decrypt.py +2 -2
- ansible/plugins/doc_fragments/default_callback.py +2 -2
- ansible/plugins/doc_fragments/files.py +2 -2
- ansible/plugins/doc_fragments/inventory_cache.py +2 -2
- ansible/plugins/doc_fragments/result_format_callback.py +2 -2
- ansible/plugins/doc_fragments/return_common.py +2 -2
- ansible/plugins/doc_fragments/template_common.py +4 -4
- ansible/plugins/doc_fragments/url.py +17 -1
- ansible/plugins/doc_fragments/url_windows.py +2 -2
- ansible/plugins/doc_fragments/validate.py +2 -2
- ansible/plugins/doc_fragments/vars_plugin_staging.py +2 -2
- ansible/plugins/filter/__init__.py +6 -2
- ansible/plugins/filter/b64decode.yml +22 -0
- ansible/plugins/filter/b64encode.yml +22 -0
- ansible/plugins/filter/bool.yml +11 -4
- ansible/plugins/filter/core.py +225 -108
- ansible/plugins/filter/encryption.py +32 -32
- ansible/plugins/filter/flatten.yml +3 -2
- ansible/plugins/filter/human_to_bytes.yml +1 -1
- ansible/plugins/filter/mathstuff.py +30 -37
- ansible/plugins/filter/password_hash.yml +8 -0
- ansible/plugins/filter/regex_search.yml +1 -4
- ansible/plugins/filter/split.yml +1 -1
- ansible/plugins/filter/to_nice_yaml.yml +0 -4
- ansible/plugins/filter/to_yaml.yml +0 -4
- ansible/plugins/filter/unvault.yml +1 -1
- ansible/plugins/filter/urls.py +1 -1
- ansible/plugins/filter/urlsplit.py +8 -9
- ansible/plugins/filter/vault.yml +14 -9
- ansible/plugins/filter/win_basename.yml +6 -1
- ansible/plugins/filter/win_dirname.yml +5 -0
- ansible/plugins/inventory/__init__.py +97 -77
- ansible/plugins/inventory/advanced_host_list.py +7 -5
- ansible/plugins/inventory/auto.py +11 -4
- ansible/plugins/inventory/constructed.py +21 -24
- ansible/plugins/inventory/generator.py +16 -11
- ansible/plugins/inventory/host_list.py +7 -5
- ansible/plugins/inventory/ini.py +78 -44
- ansible/plugins/inventory/script.py +189 -119
- ansible/plugins/inventory/toml.py +16 -126
- ansible/plugins/inventory/yaml.py +10 -8
- ansible/plugins/list.py +3 -3
- ansible/plugins/loader.py +197 -82
- ansible/plugins/lookup/__init__.py +21 -4
- ansible/plugins/lookup/config.py +21 -35
- ansible/plugins/lookup/csvfile.py +3 -2
- ansible/plugins/lookup/dict.py +1 -6
- ansible/plugins/lookup/env.py +12 -9
- ansible/plugins/lookup/file.py +5 -8
- ansible/plugins/lookup/first_found.py +86 -55
- ansible/plugins/lookup/indexed_items.py +1 -10
- ansible/plugins/lookup/ini.py +14 -13
- ansible/plugins/lookup/items.py +1 -1
- ansible/plugins/lookup/lines.py +8 -1
- ansible/plugins/lookup/list.py +1 -1
- ansible/plugins/lookup/nested.py +2 -18
- ansible/plugins/lookup/password.py +5 -5
- ansible/plugins/lookup/pipe.py +5 -7
- ansible/plugins/lookup/sequence.py +18 -8
- ansible/plugins/lookup/subelements.py +1 -4
- ansible/plugins/lookup/template.py +42 -36
- ansible/plugins/lookup/together.py +0 -12
- ansible/plugins/lookup/unvault.py +1 -5
- ansible/plugins/lookup/url.py +2 -8
- ansible/plugins/lookup/vars.py +16 -24
- ansible/plugins/shell/__init__.py +2 -2
- ansible/plugins/shell/cmd.py +2 -2
- ansible/plugins/shell/powershell.py +39 -22
- ansible/plugins/shell/sh.py +3 -2
- ansible/plugins/strategy/__init__.py +159 -184
- ansible/plugins/strategy/debug.py +2 -2
- ansible/plugins/strategy/free.py +16 -31
- ansible/plugins/strategy/host_pinned.py +2 -2
- ansible/plugins/strategy/linear.py +41 -41
- ansible/plugins/terminal/__init__.py +4 -4
- ansible/plugins/test/__init__.py +7 -2
- ansible/plugins/test/core.py +55 -21
- ansible/plugins/test/files.py +1 -1
- ansible/plugins/test/mathstuff.py +3 -3
- ansible/plugins/test/uri.py +3 -3
- ansible/plugins/vars/host_group_vars.py +7 -14
- ansible/release.py +2 -2
- ansible/template/__init__.py +370 -944
- ansible/utils/__init__.py +0 -18
- ansible/utils/_ssh_agent.py +657 -0
- ansible/utils/collection_loader/__init__.py +52 -5
- ansible/utils/collection_loader/_collection_config.py +5 -6
- ansible/utils/collection_loader/_collection_finder.py +79 -93
- ansible/utils/collection_loader/_collection_meta.py +13 -8
- ansible/utils/display.py +433 -63
- ansible/utils/encrypt.py +27 -19
- ansible/utils/fqcn.py +2 -2
- ansible/utils/hashing.py +2 -2
- ansible/utils/helpers.py +2 -2
- ansible/utils/listify.py +8 -8
- ansible/utils/lock.py +2 -2
- ansible/utils/path.py +4 -4
- ansible/utils/plugin_docs.py +14 -13
- ansible/utils/sentinel.py +4 -62
- ansible/utils/singleton.py +2 -0
- ansible/utils/ssh_functions.py +1 -1
- ansible/utils/unsafe_proxy.py +23 -332
- ansible/utils/vars.py +51 -8
- ansible/utils/version.py +2 -2
- ansible/vars/clean.py +5 -5
- ansible/vars/hostvars.py +60 -90
- ansible/vars/manager.py +206 -282
- ansible/vars/reserved.py +8 -9
- ansible_core-2.19.0b2.dist-info/BSD-3-Clause.txt +28 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/METADATA +5 -4
- ansible_core-2.19.0b2.dist-info/RECORD +1072 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/WHEEL +1 -1
- ansible_test/_data/completion/docker.txt +7 -7
- ansible_test/_data/completion/remote.txt +6 -6
- ansible_test/_data/completion/windows.txt +1 -0
- ansible_test/_data/requirements/ansible.txt +2 -2
- ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
- ansible_test/_data/requirements/sanity.changelog.txt +1 -1
- ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
- ansible_test/_data/requirements/sanity.pylint.txt +4 -4
- ansible_test/_data/requirements/sanity.validate-modules.txt +2 -2
- ansible_test/_data/requirements/sanity.yamllint.txt +1 -1
- ansible_test/_data/requirements/units.txt +1 -0
- ansible_test/_internal/__init__.py +1 -0
- ansible_test/_internal/ansible_util.py +2 -0
- ansible_test/_internal/become.py +1 -0
- ansible_test/_internal/bootstrap.py +1 -0
- ansible_test/_internal/cache.py +1 -0
- ansible_test/_internal/cgroup.py +1 -0
- ansible_test/_internal/ci/__init__.py +1 -0
- ansible_test/_internal/ci/azp.py +1 -0
- ansible_test/_internal/ci/local.py +1 -0
- ansible_test/_internal/classification/__init__.py +1 -0
- ansible_test/_internal/classification/common.py +1 -0
- ansible_test/_internal/classification/csharp.py +1 -0
- ansible_test/_internal/classification/powershell.py +1 -0
- ansible_test/_internal/classification/python.py +1 -0
- ansible_test/_internal/cli/__init__.py +1 -0
- ansible_test/_internal/cli/actions.py +1 -0
- ansible_test/_internal/cli/argparsing/__init__.py +1 -0
- ansible_test/_internal/cli/argparsing/actions.py +1 -0
- ansible_test/_internal/cli/argparsing/argcompletion.py +1 -0
- ansible_test/_internal/cli/argparsing/parsers.py +1 -0
- ansible_test/_internal/cli/commands/__init__.py +11 -0
- ansible_test/_internal/cli/commands/coverage/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/combine.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/expand.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/filter.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/generate.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/missing.py +1 -0
- ansible_test/_internal/cli/commands/coverage/combine.py +1 -0
- ansible_test/_internal/cli/commands/coverage/erase.py +1 -0
- ansible_test/_internal/cli/commands/coverage/html.py +1 -0
- ansible_test/_internal/cli/commands/coverage/report.py +1 -0
- ansible_test/_internal/cli/commands/coverage/xml.py +1 -0
- ansible_test/_internal/cli/commands/env.py +1 -0
- ansible_test/_internal/cli/commands/integration/__init__.py +1 -0
- ansible_test/_internal/cli/commands/integration/network.py +1 -0
- ansible_test/_internal/cli/commands/integration/posix.py +1 -0
- ansible_test/_internal/cli/commands/integration/windows.py +1 -0
- ansible_test/_internal/cli/commands/sanity.py +9 -0
- ansible_test/_internal/cli/commands/shell.py +1 -0
- ansible_test/_internal/cli/commands/units.py +1 -0
- ansible_test/_internal/cli/compat.py +1 -0
- ansible_test/_internal/cli/completers.py +1 -0
- ansible_test/_internal/cli/converters.py +1 -0
- ansible_test/_internal/cli/environments.py +1 -0
- ansible_test/_internal/cli/epilog.py +1 -0
- ansible_test/_internal/cli/parsers/__init__.py +1 -0
- ansible_test/_internal/cli/parsers/base_argument_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/helpers.py +1 -0
- ansible_test/_internal/cli/parsers/host_config_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/key_value_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/value_parsers.py +1 -0
- ansible_test/_internal/commands/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/__init__.py +2 -1
- ansible_test/_internal/commands/coverage/analyze/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/combine.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/expand.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/filter.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/generate.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/missing.py +1 -0
- ansible_test/_internal/commands/coverage/combine.py +2 -1
- ansible_test/_internal/commands/coverage/erase.py +1 -0
- ansible_test/_internal/commands/coverage/html.py +1 -0
- ansible_test/_internal/commands/coverage/report.py +1 -0
- ansible_test/_internal/commands/coverage/xml.py +1 -0
- ansible_test/_internal/commands/env/__init__.py +2 -0
- ansible_test/_internal/commands/integration/__init__.py +4 -0
- ansible_test/_internal/commands/integration/cloud/__init__.py +1 -0
- ansible_test/_internal/commands/integration/cloud/acme.py +2 -1
- ansible_test/_internal/commands/integration/cloud/aws.py +1 -0
- ansible_test/_internal/commands/integration/cloud/azure.py +1 -0
- ansible_test/_internal/commands/integration/cloud/cs.py +1 -0
- ansible_test/_internal/commands/integration/cloud/digitalocean.py +1 -0
- ansible_test/_internal/commands/integration/cloud/galaxy.py +3 -2
- ansible_test/_internal/commands/integration/cloud/hcloud.py +1 -0
- ansible_test/_internal/commands/integration/cloud/httptester.py +2 -1
- ansible_test/_internal/commands/integration/cloud/nios.py +2 -1
- ansible_test/_internal/commands/integration/cloud/opennebula.py +1 -0
- ansible_test/_internal/commands/integration/cloud/openshift.py +1 -0
- ansible_test/_internal/commands/integration/cloud/scaleway.py +1 -0
- ansible_test/_internal/commands/integration/cloud/vcenter.py +1 -0
- ansible_test/_internal/commands/integration/cloud/vultr.py +1 -0
- ansible_test/_internal/commands/integration/coverage.py +1 -0
- ansible_test/_internal/commands/integration/filters.py +1 -0
- ansible_test/_internal/commands/integration/network.py +1 -0
- ansible_test/_internal/commands/integration/posix.py +1 -0
- ansible_test/_internal/commands/integration/windows.py +1 -0
- ansible_test/_internal/commands/sanity/__init__.py +16 -1
- ansible_test/_internal/commands/sanity/ansible_doc.py +1 -0
- ansible_test/_internal/commands/sanity/bin_symlinks.py +1 -0
- ansible_test/_internal/commands/sanity/compile.py +1 -0
- ansible_test/_internal/commands/sanity/ignores.py +1 -0
- ansible_test/_internal/commands/sanity/import.py +1 -0
- ansible_test/_internal/commands/sanity/integration_aliases.py +1 -0
- ansible_test/_internal/commands/sanity/pep8.py +1 -0
- ansible_test/_internal/commands/sanity/pslint.py +1 -0
- ansible_test/_internal/commands/sanity/pylint.py +24 -26
- ansible_test/_internal/commands/sanity/shellcheck.py +1 -0
- ansible_test/_internal/commands/sanity/validate_modules.py +1 -0
- ansible_test/_internal/commands/sanity/yamllint.py +1 -0
- ansible_test/_internal/commands/shell/__init__.py +1 -0
- ansible_test/_internal/commands/units/__init__.py +1 -0
- ansible_test/_internal/compat/__init__.py +1 -0
- ansible_test/_internal/compat/packaging.py +1 -0
- ansible_test/_internal/compat/yaml.py +1 -0
- ansible_test/_internal/completion.py +1 -0
- ansible_test/_internal/config.py +2 -0
- ansible_test/_internal/connections.py +1 -0
- ansible_test/_internal/constants.py +1 -0
- ansible_test/_internal/containers.py +1 -0
- ansible_test/_internal/content_config.py +1 -0
- ansible_test/_internal/core_ci.py +1 -0
- ansible_test/_internal/coverage_util.py +11 -10
- ansible_test/_internal/data.py +1 -0
- ansible_test/_internal/delegation.py +1 -0
- ansible_test/_internal/dev/__init__.py +1 -0
- ansible_test/_internal/dev/container_probe.py +1 -0
- ansible_test/_internal/diff.py +3 -2
- ansible_test/_internal/docker_util.py +2 -1
- ansible_test/_internal/encoding.py +1 -0
- ansible_test/_internal/executor.py +1 -0
- ansible_test/_internal/git.py +1 -0
- ansible_test/_internal/host_configs.py +1 -0
- ansible_test/_internal/host_profiles.py +1 -0
- ansible_test/_internal/http.py +1 -0
- ansible_test/_internal/init.py +1 -0
- ansible_test/_internal/inventory.py +35 -3
- ansible_test/_internal/io.py +1 -0
- ansible_test/_internal/metadata.py +1 -0
- ansible_test/_internal/payload.py +1 -0
- ansible_test/_internal/provider/__init__.py +1 -0
- ansible_test/_internal/provider/layout/__init__.py +1 -0
- ansible_test/_internal/provider/layout/ansible.py +1 -0
- ansible_test/_internal/provider/layout/collection.py +1 -0
- ansible_test/_internal/provider/layout/unsupported.py +1 -0
- ansible_test/_internal/provider/source/__init__.py +1 -0
- ansible_test/_internal/provider/source/git.py +1 -0
- ansible_test/_internal/provider/source/installed.py +1 -0
- ansible_test/_internal/provider/source/unsupported.py +1 -0
- ansible_test/_internal/provider/source/unversioned.py +1 -0
- ansible_test/_internal/provisioning.py +1 -0
- ansible_test/_internal/pypi_proxy.py +6 -5
- ansible_test/_internal/python_requirements.py +1 -0
- ansible_test/_internal/ssh.py +1 -0
- ansible_test/_internal/target.py +1 -0
- ansible_test/_internal/test.py +3 -2
- ansible_test/_internal/thread.py +1 -0
- ansible_test/_internal/timeout.py +1 -0
- ansible_test/_internal/util.py +1 -0
- ansible_test/_internal/util_common.py +5 -2
- ansible_test/_internal/venv.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/action-plugin-docs.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/changelog/sphinx.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/changelog.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/empty-init.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/line-endings.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-assert.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-get-exception.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-illegal-filenames.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-smart-quotes.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/replace-urlopen.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py +28 -1
- ansible_test/_util/controller/sanity/code-smell/shebang.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/symlinks.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/use-argspec-type-path.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/use-compat-six.py +1 -0
- ansible_test/_util/controller/sanity/integration-aliases/yaml_to_json.py +2 -1
- ansible_test/_util/controller/sanity/pep8/current-ignore.txt +4 -0
- ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +7 -5
- ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +7 -5
- ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +7 -5
- ansible_test/_util/controller/sanity/pylint/config/collection.cfg +3 -5
- ansible_test/_util/controller/sanity/pylint/config/default.cfg +7 -7
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +1 -13
- ansible_test/_util/controller/sanity/pylint/plugins/hide_unraisable.py +1 -0
- ansible_test/_util/controller/sanity/pylint/plugins/string_format.py +1 -8
- ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +1 -8
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +55 -28
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +12 -5
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +13 -2
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -0
- ansible_test/_util/controller/sanity/yamllint/yamllinter.py +35 -17
- ansible_test/_util/controller/tools/collection_detail.py +1 -0
- ansible_test/_util/controller/tools/yaml_to_json.py +2 -1
- ansible_test/_util/target/pytest/plugins/ansible_forked.py +6 -1
- ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +2 -1
- ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -0
- ansible_test/_util/target/sanity/compile/compile.py +1 -0
- ansible_test/_util/target/sanity/import/importer.py +15 -16
- ansible_test/_util/target/setup/bootstrap.sh +9 -20
- ansible_test/_util/target/setup/probe_cgroups.py +1 -0
- ansible_test/_util/target/setup/quiet_pip.py +1 -0
- ansible_test/_util/target/setup/requirements.py +35 -27
- ansible_test/_util/target/tools/virtualenvcheck.py +2 -1
- ansible_test/_util/target/tools/yamlcheck.py +2 -1
- ansible/compat/selectors.py +0 -32
- ansible/errors/yaml_strings.py +0 -138
- ansible/executor/action_write_locks.py +0 -44
- ansible/executor/discovery/python_target.py +0 -47
- ansible/executor/powershell/module_powershell_wrapper.ps1 +0 -86
- ansible/executor/powershell/module_script_wrapper.ps1 +0 -22
- ansible/module_utils/compat/importlib.py +0 -26
- ansible/module_utils/compat/selectors.py +0 -32
- ansible/module_utils/pycompat24.py +0 -73
- ansible/parsing/yaml/constructor.py +0 -178
- ansible/template/native_helpers.py +0 -251
- ansible/template/template.py +0 -43
- ansible/template/vars.py +0 -77
- ansible/utils/native_jinja.py +0 -11
- ansible/vars/fact_cache.py +0 -71
- ansible_core-2.18.5rc1.dist-info/RECORD +0 -992
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/Apache-License.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/COPYING +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/MIT-license.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/PSF-license.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/simplified_bsd.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/top_level.txt +0 -0
ansible/parsing/yaml/dumper.py
CHANGED
@@ -1,124 +1,10 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# This file is part of Ansible
|
4
|
-
#
|
5
|
-
# Ansible is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# Ansible is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU General Public License
|
16
|
-
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
1
|
+
from __future__ import annotations as _annotations
|
17
2
|
|
18
|
-
|
3
|
+
import typing as _t
|
19
4
|
|
20
|
-
import
|
5
|
+
from ansible._internal._yaml import _dumper
|
21
6
|
|
22
|
-
from ansible.module_utils.six import text_type, binary_type
|
23
|
-
from ansible.module_utils.common.yaml import SafeDumper
|
24
|
-
from ansible.parsing.yaml.objects import AnsibleUnicode, AnsibleSequence, AnsibleMapping, AnsibleVaultEncryptedUnicode
|
25
|
-
from ansible.utils.unsafe_proxy import AnsibleUnsafeText, AnsibleUnsafeBytes, NativeJinjaUnsafeText, NativeJinjaText, _is_unsafe
|
26
|
-
from ansible.template import AnsibleUndefined
|
27
|
-
from ansible.vars.hostvars import HostVars, HostVarsVars
|
28
|
-
from ansible.vars.manager import VarsWithSources
|
29
7
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
A simple stub class that allows us to add representers
|
34
|
-
for our overridden object types.
|
35
|
-
'''
|
36
|
-
|
37
|
-
|
38
|
-
def represent_hostvars(self, data):
|
39
|
-
return self.represent_dict(dict(data))
|
40
|
-
|
41
|
-
|
42
|
-
# Note: only want to represent the encrypted data
|
43
|
-
def represent_vault_encrypted_unicode(self, data):
|
44
|
-
return self.represent_scalar(u'!vault', data._ciphertext.decode(), style='|')
|
45
|
-
|
46
|
-
|
47
|
-
def represent_unicode(self, data):
|
48
|
-
if _is_unsafe(data):
|
49
|
-
data = data._strip_unsafe()
|
50
|
-
return yaml.representer.SafeRepresenter.represent_str(self, text_type(data))
|
51
|
-
|
52
|
-
|
53
|
-
def represent_binary(self, data):
|
54
|
-
if _is_unsafe(data):
|
55
|
-
data = data._strip_unsafe()
|
56
|
-
return yaml.representer.SafeRepresenter.represent_binary(self, binary_type(data))
|
57
|
-
|
58
|
-
|
59
|
-
def represent_undefined(self, data):
|
60
|
-
# Here bool will ensure _fail_with_undefined_error happens
|
61
|
-
# if the value is Undefined.
|
62
|
-
# This happens because Jinja sets __bool__ on StrictUndefined
|
63
|
-
return bool(data)
|
64
|
-
|
65
|
-
|
66
|
-
AnsibleDumper.add_representer(
|
67
|
-
AnsibleUnicode,
|
68
|
-
represent_unicode,
|
69
|
-
)
|
70
|
-
|
71
|
-
AnsibleDumper.add_representer(
|
72
|
-
AnsibleUnsafeText,
|
73
|
-
represent_unicode,
|
74
|
-
)
|
75
|
-
|
76
|
-
AnsibleDumper.add_representer(
|
77
|
-
AnsibleUnsafeBytes,
|
78
|
-
represent_binary,
|
79
|
-
)
|
80
|
-
|
81
|
-
AnsibleDumper.add_representer(
|
82
|
-
HostVars,
|
83
|
-
represent_hostvars,
|
84
|
-
)
|
85
|
-
|
86
|
-
AnsibleDumper.add_representer(
|
87
|
-
HostVarsVars,
|
88
|
-
represent_hostvars,
|
89
|
-
)
|
90
|
-
|
91
|
-
AnsibleDumper.add_representer(
|
92
|
-
VarsWithSources,
|
93
|
-
represent_hostvars,
|
94
|
-
)
|
95
|
-
|
96
|
-
AnsibleDumper.add_representer(
|
97
|
-
AnsibleSequence,
|
98
|
-
yaml.representer.SafeRepresenter.represent_list,
|
99
|
-
)
|
100
|
-
|
101
|
-
AnsibleDumper.add_representer(
|
102
|
-
AnsibleMapping,
|
103
|
-
yaml.representer.SafeRepresenter.represent_dict,
|
104
|
-
)
|
105
|
-
|
106
|
-
AnsibleDumper.add_representer(
|
107
|
-
AnsibleVaultEncryptedUnicode,
|
108
|
-
represent_vault_encrypted_unicode,
|
109
|
-
)
|
110
|
-
|
111
|
-
AnsibleDumper.add_representer(
|
112
|
-
AnsibleUndefined,
|
113
|
-
represent_undefined,
|
114
|
-
)
|
115
|
-
|
116
|
-
AnsibleDumper.add_representer(
|
117
|
-
NativeJinjaUnsafeText,
|
118
|
-
represent_unicode,
|
119
|
-
)
|
120
|
-
|
121
|
-
AnsibleDumper.add_representer(
|
122
|
-
NativeJinjaText,
|
123
|
-
represent_unicode,
|
124
|
-
)
|
8
|
+
def AnsibleDumper(*args, **kwargs) -> _t.Any:
|
9
|
+
"""Compatibility factory function; returns an Ansible YAML dumper instance."""
|
10
|
+
return _dumper.AnsibleDumper(*args, **kwargs)
|
ansible/parsing/yaml/loader.py
CHANGED
@@ -1,43 +1,10 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# This file is part of Ansible
|
4
|
-
#
|
5
|
-
# Ansible is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# Ansible is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU General Public License
|
16
|
-
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
1
|
+
from __future__ import annotations as _annotations
|
17
2
|
|
18
|
-
|
3
|
+
import typing as _t
|
19
4
|
|
20
|
-
from
|
5
|
+
from ansible._internal._yaml import _loader
|
21
6
|
|
22
|
-
from ansible.parsing.yaml.constructor import AnsibleConstructor
|
23
|
-
from ansible.module_utils.common.yaml import HAS_LIBYAML, Parser
|
24
7
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
Parser.__init__(self, stream)
|
29
|
-
AnsibleConstructor.__init__(self, file_name=file_name, vault_secrets=vault_secrets)
|
30
|
-
Resolver.__init__(self)
|
31
|
-
else:
|
32
|
-
from yaml.composer import Composer
|
33
|
-
from yaml.reader import Reader
|
34
|
-
from yaml.scanner import Scanner
|
35
|
-
|
36
|
-
class AnsibleLoader(Reader, Scanner, Parser, Composer, AnsibleConstructor, Resolver): # type: ignore[misc,no-redef] # pylint: disable=inconsistent-mro
|
37
|
-
def __init__(self, stream, file_name=None, vault_secrets=None):
|
38
|
-
Reader.__init__(self, stream)
|
39
|
-
Scanner.__init__(self)
|
40
|
-
Parser.__init__(self)
|
41
|
-
Composer.__init__(self)
|
42
|
-
AnsibleConstructor.__init__(self, file_name=file_name, vault_secrets=vault_secrets)
|
43
|
-
Resolver.__init__(self)
|
8
|
+
def AnsibleLoader(*args, **kwargs) -> _t.Any:
|
9
|
+
"""Compatibility factory function; returns an Ansible YAML loader instance."""
|
10
|
+
return _loader.AnsibleLoader(*args, **kwargs)
|
ansible/parsing/yaml/objects.py
CHANGED
@@ -1,359 +1,67 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
# This file is part of Ansible
|
4
|
-
#
|
5
|
-
# Ansible is free software: you can redistribute it and/or modify
|
6
|
-
# it under the terms of the GNU General Public License as published by
|
7
|
-
# the Free Software Foundation, either version 3 of the License, or
|
8
|
-
# (at your option) any later version.
|
9
|
-
#
|
10
|
-
# Ansible is distributed in the hope that it will be useful,
|
11
|
-
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12
|
-
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
13
|
-
# GNU General Public License for more details.
|
14
|
-
#
|
15
|
-
# You should have received a copy of the GNU General Public License
|
16
|
-
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
1
|
+
"""Backwards compatibility types, which will be deprecated a future release. Do not use these in new code."""
|
17
2
|
|
18
|
-
from __future__ import annotations
|
3
|
+
from __future__ import annotations as _annotations
|
19
4
|
|
20
|
-
import
|
5
|
+
import typing as _t
|
21
6
|
|
22
|
-
from
|
7
|
+
from ansible.module_utils._internal import _datatag
|
8
|
+
from ansible.module_utils.common.text import converters as _converters
|
9
|
+
from ansible.parsing import vault as _vault
|
23
10
|
|
24
|
-
|
25
|
-
from ansible.module_utils.common.text.converters import to_bytes, to_text, to_native
|
11
|
+
_UNSET = _t.cast(_t.Any, object())
|
26
12
|
|
27
13
|
|
28
|
-
class
|
29
|
-
|
30
|
-
the base class used to sub-class python built-in objects
|
31
|
-
so that we can add attributes to them during yaml parsing
|
14
|
+
class _AnsibleMapping(dict):
|
15
|
+
"""Backwards compatibility type."""
|
32
16
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
_column_number = 0
|
17
|
+
def __new__(cls, value=_UNSET, /, **kwargs):
|
18
|
+
if value is _UNSET:
|
19
|
+
return dict(**kwargs)
|
37
20
|
|
38
|
-
|
39
|
-
return (self._data_source, self._line_number, self._column_number)
|
21
|
+
return _datatag.AnsibleTagHelper.tag_copy(value, dict(value, **kwargs))
|
40
22
|
|
41
|
-
def _set_ansible_position(self, obj):
|
42
|
-
try:
|
43
|
-
(src, line, col) = obj
|
44
|
-
except (TypeError, ValueError):
|
45
|
-
raise AssertionError(
|
46
|
-
'ansible_pos can only be set with a tuple/list '
|
47
|
-
'of three values: source, line number, column number'
|
48
|
-
)
|
49
|
-
self._data_source = src
|
50
|
-
self._line_number = line
|
51
|
-
self._column_number = col
|
52
23
|
|
53
|
-
|
24
|
+
class _AnsibleUnicode(str):
|
25
|
+
"""Backwards compatibility type."""
|
54
26
|
|
27
|
+
def __new__(cls, object=_UNSET, **kwargs):
|
28
|
+
if object is _UNSET:
|
29
|
+
return str(**kwargs)
|
55
30
|
|
56
|
-
|
57
|
-
''' sub class for dictionaries '''
|
58
|
-
pass
|
31
|
+
return _datatag.AnsibleTagHelper.tag_copy(object, str(object, **kwargs))
|
59
32
|
|
60
33
|
|
61
|
-
class
|
62
|
-
|
63
|
-
pass
|
34
|
+
class _AnsibleSequence(list):
|
35
|
+
"""Backwards compatibility type."""
|
64
36
|
|
37
|
+
def __new__(cls, value=_UNSET, /):
|
38
|
+
if value is _UNSET:
|
39
|
+
return list()
|
65
40
|
|
66
|
-
|
67
|
-
''' sub class for lists '''
|
68
|
-
pass
|
41
|
+
return _datatag.AnsibleTagHelper.tag_copy(value, list(value))
|
69
42
|
|
70
43
|
|
71
|
-
class
|
72
|
-
|
73
|
-
__UNSAFE__ = True
|
74
|
-
__ENCRYPTED__ = True
|
75
|
-
yaml_tag = u'!vault'
|
44
|
+
class _AnsibleVaultEncryptedUnicode:
|
45
|
+
"""Backwards compatibility type."""
|
76
46
|
|
77
|
-
|
78
|
-
|
79
|
-
if not vault:
|
80
|
-
raise vault.AnsibleVaultError('Error creating AnsibleVaultEncryptedUnicode, invalid vault (%s) provided' % vault)
|
47
|
+
def __new__(cls, ciphertext: str | bytes):
|
48
|
+
encrypted_string = _vault.EncryptedString(ciphertext=_converters.to_text(_datatag.AnsibleTagHelper.untag(ciphertext)))
|
81
49
|
|
82
|
-
|
83
|
-
avu = cls(ciphertext)
|
84
|
-
avu.vault = vault
|
85
|
-
return avu
|
50
|
+
return _datatag.AnsibleTagHelper.tag_copy(ciphertext, encrypted_string)
|
86
51
|
|
87
|
-
def __init__(self, ciphertext):
|
88
|
-
'''A AnsibleUnicode with a Vault attribute that can decrypt it.
|
89
52
|
|
90
|
-
|
53
|
+
def __getattr__(name: str) -> _t.Any:
|
54
|
+
"""Inject import-time deprecation warnings."""
|
55
|
+
if (value := globals().get(f'_{name}', None)) and name.startswith('Ansible'):
|
56
|
+
# deprecated: description='enable deprecation of everything in this module', core_version='2.23'
|
57
|
+
# from ansible.utils.display import Display
|
58
|
+
#
|
59
|
+
# Display().deprecated(
|
60
|
+
# msg=f"Importing {name!r} is deprecated.",
|
61
|
+
# help_text="Instances of this type cannot be created and will not be encountered.",
|
62
|
+
# version="2.27",
|
63
|
+
# )
|
91
64
|
|
92
|
-
|
93
|
-
of the ciphertext as a PY2 unicode or PY3 string object.
|
94
|
-
'''
|
95
|
-
super(AnsibleVaultEncryptedUnicode, self).__init__()
|
65
|
+
return value
|
96
66
|
|
97
|
-
|
98
|
-
self.vault = None
|
99
|
-
self._ciphertext = to_bytes(ciphertext)
|
100
|
-
|
101
|
-
@property
|
102
|
-
def data(self):
|
103
|
-
if not self.vault:
|
104
|
-
return to_text(self._ciphertext)
|
105
|
-
return to_text(self.vault.decrypt(self._ciphertext, obj=self))
|
106
|
-
|
107
|
-
@data.setter
|
108
|
-
def data(self, value):
|
109
|
-
self._ciphertext = to_bytes(value)
|
110
|
-
|
111
|
-
def is_encrypted(self):
|
112
|
-
return self.vault and self.vault.is_encrypted(self._ciphertext)
|
113
|
-
|
114
|
-
def __eq__(self, other):
|
115
|
-
if self.vault:
|
116
|
-
return other == self.data
|
117
|
-
return False
|
118
|
-
|
119
|
-
def __ne__(self, other):
|
120
|
-
if self.vault:
|
121
|
-
return other != self.data
|
122
|
-
return True
|
123
|
-
|
124
|
-
def __reversed__(self):
|
125
|
-
# This gets inherited from ``collections.Sequence`` which returns a generator
|
126
|
-
# make this act more like the string implementation
|
127
|
-
return to_text(self[::-1], errors='surrogate_or_strict')
|
128
|
-
|
129
|
-
def __str__(self):
|
130
|
-
return to_native(self.data, errors='surrogate_or_strict')
|
131
|
-
|
132
|
-
def __unicode__(self):
|
133
|
-
return to_text(self.data, errors='surrogate_or_strict')
|
134
|
-
|
135
|
-
def encode(self, encoding=None, errors=None):
|
136
|
-
return to_bytes(self.data, encoding=encoding, errors=errors)
|
137
|
-
|
138
|
-
# Methods below are a copy from ``collections.UserString``
|
139
|
-
# Some are copied as is, where others are modified to not
|
140
|
-
# auto wrap with ``self.__class__``
|
141
|
-
def __repr__(self):
|
142
|
-
return repr(self.data)
|
143
|
-
|
144
|
-
def __int__(self, base=10):
|
145
|
-
return int(self.data, base=base)
|
146
|
-
|
147
|
-
def __float__(self):
|
148
|
-
return float(self.data)
|
149
|
-
|
150
|
-
def __complex__(self):
|
151
|
-
return complex(self.data)
|
152
|
-
|
153
|
-
def __hash__(self):
|
154
|
-
return hash(self.data)
|
155
|
-
|
156
|
-
# This breaks vault, do not define it, we cannot satisfy this
|
157
|
-
# def __getnewargs__(self):
|
158
|
-
# return (self.data[:],)
|
159
|
-
|
160
|
-
def __lt__(self, string):
|
161
|
-
if isinstance(string, AnsibleVaultEncryptedUnicode):
|
162
|
-
return self.data < string.data
|
163
|
-
return self.data < string
|
164
|
-
|
165
|
-
def __le__(self, string):
|
166
|
-
if isinstance(string, AnsibleVaultEncryptedUnicode):
|
167
|
-
return self.data <= string.data
|
168
|
-
return self.data <= string
|
169
|
-
|
170
|
-
def __gt__(self, string):
|
171
|
-
if isinstance(string, AnsibleVaultEncryptedUnicode):
|
172
|
-
return self.data > string.data
|
173
|
-
return self.data > string
|
174
|
-
|
175
|
-
def __ge__(self, string):
|
176
|
-
if isinstance(string, AnsibleVaultEncryptedUnicode):
|
177
|
-
return self.data >= string.data
|
178
|
-
return self.data >= string
|
179
|
-
|
180
|
-
def __contains__(self, char):
|
181
|
-
if isinstance(char, AnsibleVaultEncryptedUnicode):
|
182
|
-
char = char.data
|
183
|
-
return char in self.data
|
184
|
-
|
185
|
-
def __len__(self):
|
186
|
-
return len(self.data)
|
187
|
-
|
188
|
-
def __getitem__(self, index):
|
189
|
-
return self.data[index]
|
190
|
-
|
191
|
-
def __getslice__(self, start, end):
|
192
|
-
start = max(start, 0)
|
193
|
-
end = max(end, 0)
|
194
|
-
return self.data[start:end]
|
195
|
-
|
196
|
-
def __add__(self, other):
|
197
|
-
if isinstance(other, AnsibleVaultEncryptedUnicode):
|
198
|
-
return self.data + other.data
|
199
|
-
elif isinstance(other, text_type):
|
200
|
-
return self.data + other
|
201
|
-
return self.data + to_text(other)
|
202
|
-
|
203
|
-
def __radd__(self, other):
|
204
|
-
if isinstance(other, text_type):
|
205
|
-
return other + self.data
|
206
|
-
return to_text(other) + self.data
|
207
|
-
|
208
|
-
def __mul__(self, n):
|
209
|
-
return self.data * n
|
210
|
-
|
211
|
-
__rmul__ = __mul__
|
212
|
-
|
213
|
-
def __mod__(self, args):
|
214
|
-
return self.data % args
|
215
|
-
|
216
|
-
def __rmod__(self, template):
|
217
|
-
return to_text(template) % self
|
218
|
-
|
219
|
-
# the following methods are defined in alphabetical order:
|
220
|
-
def capitalize(self):
|
221
|
-
return self.data.capitalize()
|
222
|
-
|
223
|
-
def casefold(self):
|
224
|
-
return self.data.casefold()
|
225
|
-
|
226
|
-
def center(self, width, *args):
|
227
|
-
return self.data.center(width, *args)
|
228
|
-
|
229
|
-
def count(self, sub, start=0, end=_sys.maxsize):
|
230
|
-
if isinstance(sub, AnsibleVaultEncryptedUnicode):
|
231
|
-
sub = sub.data
|
232
|
-
return self.data.count(sub, start, end)
|
233
|
-
|
234
|
-
def endswith(self, suffix, start=0, end=_sys.maxsize):
|
235
|
-
return self.data.endswith(suffix, start, end)
|
236
|
-
|
237
|
-
def expandtabs(self, tabsize=8):
|
238
|
-
return self.data.expandtabs(tabsize)
|
239
|
-
|
240
|
-
def find(self, sub, start=0, end=_sys.maxsize):
|
241
|
-
if isinstance(sub, AnsibleVaultEncryptedUnicode):
|
242
|
-
sub = sub.data
|
243
|
-
return self.data.find(sub, start, end)
|
244
|
-
|
245
|
-
def format(self, *args, **kwds):
|
246
|
-
return self.data.format(*args, **kwds)
|
247
|
-
|
248
|
-
def format_map(self, mapping):
|
249
|
-
return self.data.format_map(mapping)
|
250
|
-
|
251
|
-
def index(self, sub, start=0, end=_sys.maxsize):
|
252
|
-
return self.data.index(sub, start, end)
|
253
|
-
|
254
|
-
def isalpha(self):
|
255
|
-
return self.data.isalpha()
|
256
|
-
|
257
|
-
def isalnum(self):
|
258
|
-
return self.data.isalnum()
|
259
|
-
|
260
|
-
def isascii(self):
|
261
|
-
return self.data.isascii()
|
262
|
-
|
263
|
-
def isdecimal(self):
|
264
|
-
return self.data.isdecimal()
|
265
|
-
|
266
|
-
def isdigit(self):
|
267
|
-
return self.data.isdigit()
|
268
|
-
|
269
|
-
def isidentifier(self):
|
270
|
-
return self.data.isidentifier()
|
271
|
-
|
272
|
-
def islower(self):
|
273
|
-
return self.data.islower()
|
274
|
-
|
275
|
-
def isnumeric(self):
|
276
|
-
return self.data.isnumeric()
|
277
|
-
|
278
|
-
def isprintable(self):
|
279
|
-
return self.data.isprintable()
|
280
|
-
|
281
|
-
def isspace(self):
|
282
|
-
return self.data.isspace()
|
283
|
-
|
284
|
-
def istitle(self):
|
285
|
-
return self.data.istitle()
|
286
|
-
|
287
|
-
def isupper(self):
|
288
|
-
return self.data.isupper()
|
289
|
-
|
290
|
-
def join(self, seq):
|
291
|
-
return self.data.join(seq)
|
292
|
-
|
293
|
-
def ljust(self, width, *args):
|
294
|
-
return self.data.ljust(width, *args)
|
295
|
-
|
296
|
-
def lower(self):
|
297
|
-
return self.data.lower()
|
298
|
-
|
299
|
-
def lstrip(self, chars=None):
|
300
|
-
return self.data.lstrip(chars)
|
301
|
-
|
302
|
-
maketrans = str.maketrans
|
303
|
-
|
304
|
-
def partition(self, sep):
|
305
|
-
return self.data.partition(sep)
|
306
|
-
|
307
|
-
def replace(self, old, new, maxsplit=-1):
|
308
|
-
if isinstance(old, AnsibleVaultEncryptedUnicode):
|
309
|
-
old = old.data
|
310
|
-
if isinstance(new, AnsibleVaultEncryptedUnicode):
|
311
|
-
new = new.data
|
312
|
-
return self.data.replace(old, new, maxsplit)
|
313
|
-
|
314
|
-
def rfind(self, sub, start=0, end=_sys.maxsize):
|
315
|
-
if isinstance(sub, AnsibleVaultEncryptedUnicode):
|
316
|
-
sub = sub.data
|
317
|
-
return self.data.rfind(sub, start, end)
|
318
|
-
|
319
|
-
def rindex(self, sub, start=0, end=_sys.maxsize):
|
320
|
-
return self.data.rindex(sub, start, end)
|
321
|
-
|
322
|
-
def rjust(self, width, *args):
|
323
|
-
return self.data.rjust(width, *args)
|
324
|
-
|
325
|
-
def rpartition(self, sep):
|
326
|
-
return self.data.rpartition(sep)
|
327
|
-
|
328
|
-
def rstrip(self, chars=None):
|
329
|
-
return self.data.rstrip(chars)
|
330
|
-
|
331
|
-
def split(self, sep=None, maxsplit=-1):
|
332
|
-
return self.data.split(sep, maxsplit)
|
333
|
-
|
334
|
-
def rsplit(self, sep=None, maxsplit=-1):
|
335
|
-
return self.data.rsplit(sep, maxsplit)
|
336
|
-
|
337
|
-
def splitlines(self, keepends=False):
|
338
|
-
return self.data.splitlines(keepends)
|
339
|
-
|
340
|
-
def startswith(self, prefix, start=0, end=_sys.maxsize):
|
341
|
-
return self.data.startswith(prefix, start, end)
|
342
|
-
|
343
|
-
def strip(self, chars=None):
|
344
|
-
return self.data.strip(chars)
|
345
|
-
|
346
|
-
def swapcase(self):
|
347
|
-
return self.data.swapcase()
|
348
|
-
|
349
|
-
def title(self):
|
350
|
-
return self.data.title()
|
351
|
-
|
352
|
-
def translate(self, *args):
|
353
|
-
return self.data.translate(*args)
|
354
|
-
|
355
|
-
def upper(self):
|
356
|
-
return self.data.upper()
|
357
|
-
|
358
|
-
def zfill(self, width):
|
359
|
-
return self.data.zfill(width)
|
67
|
+
raise AttributeError(f'module {__name__!r} has no attribute {name!r}')
|
ansible/playbook/__init__.py
CHANGED
@@ -66,7 +66,7 @@ class Playbook:
|
|
66
66
|
self._file_name = file_name
|
67
67
|
|
68
68
|
try:
|
69
|
-
ds = self._loader.load_from_file(os.path.basename(file_name))
|
69
|
+
ds = self._loader.load_from_file(os.path.basename(file_name), trusted_as_template=True)
|
70
70
|
except UnicodeDecodeError as e:
|
71
71
|
raise AnsibleParserError("Could not read playbook (%s) due to encoding issues: %s" % (file_name, to_native(e)))
|
72
72
|
|
ansible/playbook/attribute.py
CHANGED
@@ -17,8 +17,13 @@
|
|
17
17
|
|
18
18
|
from __future__ import annotations
|
19
19
|
|
20
|
+
import typing as t
|
21
|
+
|
20
22
|
from ansible.utils.sentinel import Sentinel
|
21
23
|
|
24
|
+
if t.TYPE_CHECKING:
|
25
|
+
from ansible.playbook.base import FieldAttributeBase
|
26
|
+
|
22
27
|
_CONTAINERS = frozenset(('list', 'dict', 'set'))
|
23
28
|
|
24
29
|
|
@@ -105,7 +110,7 @@ class Attribute:
|
|
105
110
|
def __ge__(self, other):
|
106
111
|
return other.priority >= self.priority
|
107
112
|
|
108
|
-
def __get__(self, obj, obj_type=None):
|
113
|
+
def __get__(self, obj: FieldAttributeBase, obj_type=None):
|
109
114
|
method = f'_get_attr_{self.name}'
|
110
115
|
if hasattr(obj, method):
|
111
116
|
# NOTE this appears to be not used in the codebase,
|
@@ -127,7 +132,7 @@ class Attribute:
|
|
127
132
|
|
128
133
|
return value
|
129
134
|
|
130
|
-
def __set__(self, obj, value):
|
135
|
+
def __set__(self, obj: FieldAttributeBase, value):
|
131
136
|
setattr(obj, f'_{self.name}', value)
|
132
137
|
if self.alias is not None:
|
133
138
|
setattr(obj, f'_{self.alias}', value)
|
@@ -180,7 +185,7 @@ class FieldAttribute(Attribute):
|
|
180
185
|
|
181
186
|
class ConnectionFieldAttribute(FieldAttribute):
|
182
187
|
def __get__(self, obj, obj_type=None):
|
183
|
-
from ansible.module_utils.compat.paramiko import paramiko
|
188
|
+
from ansible.module_utils.compat.paramiko import _paramiko as paramiko
|
184
189
|
from ansible.utils.ssh_functions import check_for_controlpersist
|
185
190
|
value = super().__get__(obj, obj_type)
|
186
191
|
|