ansible-core 2.18.7rc1__py3-none-any.whl → 2.19.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ansible-core might be problematic. Click here for more details.
- ansible/_internal/__init__.py +53 -0
- ansible/_internal/_ansiballz/__init__.py +0 -0
- ansible/_internal/_ansiballz/_builder.py +101 -0
- ansible/_internal/_ansiballz/_wrapper.py +262 -0
- ansible/_internal/_collection_proxy.py +47 -0
- ansible/_internal/_datatag/__init__.py +0 -0
- ansible/_internal/_datatag/_tags.py +130 -0
- ansible/_internal/_datatag/_utils.py +19 -0
- ansible/_internal/_datatag/_wrappers.py +33 -0
- ansible/_internal/_errors/__init__.py +0 -0
- ansible/_internal/_errors/_alarm_timeout.py +66 -0
- ansible/_internal/_errors/_captured.py +123 -0
- ansible/_internal/_errors/_error_factory.py +89 -0
- ansible/_internal/_errors/_error_utils.py +240 -0
- ansible/_internal/_errors/_handler.py +91 -0
- ansible/_internal/_errors/_task_timeout.py +28 -0
- ansible/_internal/_event_formatting.py +127 -0
- ansible/_internal/_json/__init__.py +214 -0
- ansible/_internal/_json/_legacy_encoder.py +34 -0
- ansible/_internal/_json/_profiles/__init__.py +0 -0
- ansible/_internal/_json/_profiles/_cache_persistence.py +57 -0
- ansible/_internal/_json/_profiles/_inventory_legacy.py +40 -0
- ansible/_internal/_json/_profiles/_legacy.py +189 -0
- ansible/_internal/_locking.py +21 -0
- ansible/_internal/_plugins/__init__.py +0 -0
- ansible/_internal/_plugins/_cache.py +57 -0
- ansible/_internal/_ssh/__init__.py +0 -0
- ansible/_internal/_ssh/_agent_launch.py +91 -0
- ansible/_internal/_ssh/_ssh_agent.py +619 -0
- ansible/_internal/_task.py +78 -0
- ansible/_internal/_templating/__init__.py +12 -0
- ansible/_internal/_templating/_access.py +86 -0
- ansible/_internal/_templating/_chain_templar.py +63 -0
- ansible/_internal/_templating/_datatag.py +95 -0
- ansible/_internal/_templating/_engine.py +592 -0
- ansible/_internal/_templating/_errors.py +28 -0
- ansible/_internal/_templating/_jinja_bits.py +1106 -0
- ansible/_internal/_templating/_jinja_common.py +323 -0
- ansible/_internal/_templating/_jinja_patches.py +44 -0
- ansible/_internal/_templating/_jinja_plugins.py +375 -0
- ansible/_internal/_templating/_lazy_containers.py +633 -0
- ansible/_internal/_templating/_marker_behaviors.py +103 -0
- ansible/_internal/_templating/_template_vars.py +72 -0
- ansible/_internal/_templating/_transform.py +70 -0
- ansible/_internal/_templating/_utils.py +108 -0
- ansible/_internal/_testing.py +26 -0
- ansible/_internal/_wrapt.py +1052 -0
- ansible/_internal/_yaml/__init__.py +0 -0
- ansible/_internal/_yaml/_constructor.py +240 -0
- ansible/_internal/_yaml/_dumper.py +70 -0
- ansible/_internal/_yaml/_errors.py +166 -0
- ansible/_internal/_yaml/_loader.py +66 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/README.md +11 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/action/debug.py +36 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/apply_trust.py +19 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/dump_object.py +27 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/finalize.py +16 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/origin.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.py +24 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.yml +33 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/tag_names.py +16 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/true_type.py +17 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/unmask.py +49 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.py +21 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.yml +2 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.py +15 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.yml +19 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.yml +19 -0
- ansible/cli/__init__.py +93 -104
- ansible/cli/_ssh_askpass.py +54 -0
- ansible/cli/adhoc.py +20 -10
- ansible/cli/arguments/option_helpers.py +163 -10
- ansible/cli/config.py +43 -68
- ansible/cli/console.py +13 -11
- ansible/cli/doc.py +134 -77
- ansible/cli/galaxy.py +27 -20
- ansible/cli/inventory.py +28 -28
- ansible/cli/playbook.py +4 -12
- ansible/cli/pull.py +6 -3
- ansible/cli/scripts/ansible_connection_cli_stub.py +7 -7
- ansible/cli/vault.py +12 -11
- ansible/compat/__init__.py +2 -2
- ansible/compat/importlib_resources.py +9 -12
- ansible/config/base.yml +218 -133
- ansible/config/manager.py +220 -159
- ansible/constants.py +2 -65
- ansible/errors/__init__.py +350 -256
- ansible/executor/interpreter_discovery.py +28 -149
- ansible/executor/module_common.py +480 -514
- ansible/executor/play_iterator.py +22 -27
- ansible/executor/playbook_executor.py +11 -11
- ansible/executor/powershell/async_watchdog.ps1 +97 -102
- ansible/executor/powershell/async_wrapper.ps1 +204 -153
- ansible/executor/powershell/become_wrapper.ps1 +107 -144
- ansible/executor/powershell/bootstrap_wrapper.ps1 +46 -9
- ansible/executor/powershell/coverage_wrapper.ps1 +91 -135
- ansible/executor/powershell/exec_wrapper.ps1 +675 -196
- ansible/executor/powershell/module_manifest.py +469 -265
- ansible/executor/powershell/module_wrapper.ps1 +195 -186
- ansible/executor/powershell/powershell_expand_user.ps1 +20 -0
- ansible/executor/powershell/powershell_mkdtemp.ps1 +17 -0
- ansible/executor/powershell/psrp_fetch_file.ps1 +41 -0
- ansible/executor/powershell/psrp_put_file.ps1 +122 -0
- ansible/executor/powershell/winrm_fetch_file.ps1 +46 -0
- ansible/executor/powershell/winrm_put_file.ps1 +36 -0
- ansible/executor/process/worker.py +139 -149
- ansible/executor/stats.py +5 -5
- ansible/executor/task_executor.py +270 -297
- ansible/executor/task_queue_manager.py +135 -137
- ansible/executor/task_result.py +182 -79
- ansible/galaxy/__init__.py +2 -2
- ansible/galaxy/api.py +26 -25
- ansible/galaxy/collection/__init__.py +6 -14
- ansible/galaxy/collection/concrete_artifact_manager.py +12 -21
- ansible/galaxy/dependency_resolution/dataclasses.py +14 -4
- ansible/galaxy/dependency_resolution/providers.py +4 -4
- ansible/galaxy/dependency_resolution/reporters.py +81 -0
- ansible/galaxy/role.py +6 -10
- ansible/galaxy/token.py +28 -21
- ansible/inventory/data.py +47 -57
- ansible/inventory/group.py +50 -73
- ansible/inventory/helpers.py +9 -0
- ansible/inventory/host.py +37 -54
- ansible/inventory/manager.py +79 -34
- ansible/keyword_desc.yml +1 -1
- ansible/module_utils/_internal/__init__.py +55 -0
- ansible/module_utils/_internal/_ambient_context.py +58 -0
- ansible/module_utils/_internal/_ansiballz/__init__.py +0 -0
- ansible/module_utils/_internal/_ansiballz/_extensions/__init__.py +0 -0
- ansible/module_utils/_internal/_ansiballz/_extensions/_coverage.py +45 -0
- ansible/module_utils/_internal/_ansiballz/_extensions/_pydevd.py +62 -0
- ansible/module_utils/_internal/_ansiballz/_loader.py +81 -0
- ansible/module_utils/_internal/_ansiballz/_respawn.py +32 -0
- ansible/module_utils/_internal/_ansiballz/_respawn_wrapper.py +23 -0
- ansible/module_utils/_internal/_concurrent/_daemon_threading.py +1 -0
- ansible/module_utils/_internal/_dataclass_validation.py +217 -0
- ansible/module_utils/_internal/_datatag/__init__.py +961 -0
- ansible/module_utils/_internal/_datatag/_tags.py +16 -0
- ansible/module_utils/_internal/_debugging.py +31 -0
- ansible/module_utils/_internal/_deprecator.py +157 -0
- ansible/module_utils/_internal/_errors.py +101 -0
- ansible/module_utils/_internal/_event_utils.py +61 -0
- ansible/module_utils/_internal/_json/__init__.py +63 -0
- ansible/module_utils/_internal/_json/_legacy_encoder.py +26 -0
- ansible/module_utils/_internal/_json/_profiles/__init__.py +428 -0
- ansible/module_utils/_internal/_json/_profiles/_fallback_to_str.py +73 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py +33 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py +37 -0
- ansible/module_utils/_internal/_json/_profiles/_module_modern_c2m.py +35 -0
- ansible/module_utils/_internal/_json/_profiles/_module_modern_m2c.py +33 -0
- ansible/module_utils/_internal/_json/_profiles/_tagless.py +52 -0
- ansible/module_utils/_internal/_messages.py +130 -0
- ansible/module_utils/_internal/_patches/__init__.py +66 -0
- ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py +53 -0
- ansible/module_utils/_internal/_patches/_socket_patch.py +34 -0
- ansible/module_utils/_internal/_patches/_sys_intern_patch.py +34 -0
- ansible/module_utils/_internal/_plugin_info.py +38 -0
- ansible/module_utils/_internal/_stack.py +22 -0
- ansible/module_utils/_internal/_testing.py +0 -0
- ansible/module_utils/_internal/_text_utils.py +6 -0
- ansible/module_utils/_internal/_traceback.py +92 -0
- ansible/module_utils/_internal/_validation.py +14 -0
- ansible/module_utils/ansible_release.py +2 -2
- ansible/module_utils/api.py +1 -2
- ansible/module_utils/basic.py +303 -202
- ansible/module_utils/common/_utils.py +24 -28
- ansible/module_utils/common/arg_spec.py +8 -3
- ansible/module_utils/common/collections.py +7 -2
- ansible/module_utils/common/dict_transformations.py +2 -2
- ansible/module_utils/common/file.py +2 -2
- ansible/module_utils/common/json.py +90 -84
- ansible/module_utils/common/locale.py +2 -2
- ansible/module_utils/common/parameters.py +27 -24
- ansible/module_utils/common/process.py +2 -3
- ansible/module_utils/common/respawn.py +11 -33
- ansible/module_utils/common/sentinel.py +66 -0
- ansible/module_utils/common/sys_info.py +8 -8
- ansible/module_utils/common/text/converters.py +16 -37
- ansible/module_utils/common/validation.py +35 -24
- ansible/module_utils/common/warnings.py +143 -25
- ansible/module_utils/common/yaml.py +29 -3
- ansible/module_utils/compat/datetime.py +33 -21
- ansible/module_utils/compat/paramiko.py +21 -10
- ansible/module_utils/compat/typing.py +6 -5
- ansible/module_utils/connection.py +10 -13
- ansible/module_utils/csharp/Ansible.Basic.cs +15 -12
- ansible/module_utils/csharp/Ansible.Become.cs +1 -0
- ansible/module_utils/csharp/Ansible.Privilege.cs +2 -2
- ansible/module_utils/csharp/Ansible._Async.cs +517 -0
- ansible/module_utils/datatag.py +49 -0
- ansible/module_utils/distro/__init__.py +2 -2
- ansible/module_utils/facts/ansible_collector.py +4 -5
- ansible/module_utils/facts/collector.py +13 -14
- ansible/module_utils/facts/compat.py +4 -4
- ansible/module_utils/facts/default_collectors.py +1 -1
- ansible/module_utils/facts/hardware/aix.py +34 -0
- ansible/module_utils/facts/hardware/base.py +2 -2
- ansible/module_utils/facts/hardware/darwin.py +1 -3
- ansible/module_utils/facts/hardware/freebsd.py +2 -2
- ansible/module_utils/facts/hardware/linux.py +5 -5
- ansible/module_utils/facts/namespace.py +1 -1
- ansible/module_utils/facts/network/base.py +1 -1
- ansible/module_utils/facts/network/fc_wwn.py +1 -2
- ansible/module_utils/facts/network/iscsi.py +1 -2
- ansible/module_utils/facts/network/nvme.py +1 -2
- ansible/module_utils/facts/other/facter.py +2 -3
- ansible/module_utils/facts/other/ohai.py +2 -3
- ansible/module_utils/facts/sysctl.py +4 -6
- ansible/module_utils/facts/system/apparmor.py +1 -2
- ansible/module_utils/facts/system/caps.py +3 -3
- ansible/module_utils/facts/system/chroot.py +1 -2
- ansible/module_utils/facts/system/cmdline.py +1 -2
- ansible/module_utils/facts/system/date_time.py +5 -3
- ansible/module_utils/facts/system/distribution.py +27 -13
- ansible/module_utils/facts/system/dns.py +1 -1
- ansible/module_utils/facts/system/env.py +1 -2
- ansible/module_utils/facts/system/fips.py +7 -20
- ansible/module_utils/facts/system/loadavg.py +1 -2
- ansible/module_utils/facts/system/local.py +2 -3
- ansible/module_utils/facts/system/lsb.py +1 -2
- ansible/module_utils/facts/system/pkg_mgr.py +1 -2
- ansible/module_utils/facts/system/platform.py +1 -2
- ansible/module_utils/facts/system/python.py +1 -2
- ansible/module_utils/facts/system/selinux.py +1 -1
- ansible/module_utils/facts/system/service_mgr.py +1 -2
- ansible/module_utils/facts/system/ssh_pub_keys.py +1 -1
- ansible/module_utils/facts/system/systemd.py +1 -1
- ansible/module_utils/facts/system/user.py +1 -2
- ansible/module_utils/facts/utils.py +3 -3
- ansible/module_utils/facts/virtual/base.py +1 -1
- ansible/module_utils/facts/virtual/linux.py +3 -3
- ansible/module_utils/facts/virtual/sunos.py +3 -15
- ansible/module_utils/facts/virtual/sysctl.py +3 -16
- ansible/module_utils/json_utils.py +2 -2
- ansible/module_utils/parsing/convert_bool.py +7 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1 +1 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1 +1 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.CommandUtil.psm1 +1 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.WebRequest.psm1 +1 -1
- ansible/module_utils/service.py +21 -31
- ansible/module_utils/splitter.py +7 -7
- ansible/module_utils/testing.py +31 -0
- ansible/module_utils/urls.py +64 -35
- ansible/modules/add_host.py +4 -4
- ansible/modules/apt.py +69 -49
- ansible/modules/apt_key.py +19 -12
- ansible/modules/apt_repository.py +32 -51
- ansible/modules/assemble.py +16 -14
- ansible/modules/assert.py +4 -4
- ansible/modules/async_status.py +24 -24
- ansible/modules/async_wrapper.py +20 -25
- ansible/modules/blockinfile.py +6 -7
- ansible/modules/command.py +13 -20
- ansible/modules/copy.py +60 -147
- ansible/modules/cron.py +24 -21
- ansible/modules/deb822_repository.py +8 -9
- ansible/modules/debconf.py +5 -5
- ansible/modules/debug.py +4 -4
- ansible/modules/dnf.py +8 -8
- ansible/modules/dnf5.py +39 -13
- ansible/modules/dpkg_selections.py +4 -4
- ansible/modules/expect.py +13 -15
- ansible/modules/fail.py +4 -4
- ansible/modules/fetch.py +4 -4
- ansible/modules/file.py +184 -144
- ansible/modules/find.py +22 -20
- ansible/modules/gather_facts.py +3 -3
- ansible/modules/get_url.py +77 -54
- ansible/modules/getent.py +7 -9
- ansible/modules/git.py +38 -38
- ansible/modules/group.py +6 -6
- ansible/modules/group_by.py +4 -4
- ansible/modules/hostname.py +15 -32
- ansible/modules/import_playbook.py +6 -6
- ansible/modules/import_role.py +6 -6
- ansible/modules/import_tasks.py +6 -6
- ansible/modules/include_role.py +6 -6
- ansible/modules/include_tasks.py +6 -6
- ansible/modules/include_vars.py +6 -6
- ansible/modules/iptables.py +86 -73
- ansible/modules/known_hosts.py +22 -24
- ansible/modules/lineinfile.py +5 -5
- ansible/modules/meta.py +4 -4
- ansible/modules/mount_facts.py +2 -2
- ansible/modules/package.py +10 -4
- ansible/modules/package_facts.py +22 -10
- ansible/modules/pause.py +6 -6
- ansible/modules/ping.py +6 -6
- ansible/modules/pip.py +21 -26
- ansible/modules/raw.py +6 -6
- ansible/modules/reboot.py +6 -6
- ansible/modules/replace.py +10 -14
- ansible/modules/rpm_key.py +7 -8
- ansible/modules/script.py +4 -4
- ansible/modules/service.py +10 -17
- ansible/modules/service_facts.py +87 -10
- ansible/modules/set_fact.py +5 -5
- ansible/modules/set_stats.py +4 -4
- ansible/modules/setup.py +2 -2
- ansible/modules/shell.py +6 -6
- ansible/modules/slurp.py +16 -19
- ansible/modules/stat.py +15 -31
- ansible/modules/subversion.py +15 -15
- ansible/modules/systemd.py +7 -7
- ansible/modules/systemd_service.py +7 -7
- ansible/modules/sysvinit.py +9 -9
- ansible/modules/tempfile.py +5 -6
- ansible/modules/template.py +6 -6
- ansible/modules/unarchive.py +38 -17
- ansible/modules/uri.py +33 -26
- ansible/modules/user.py +45 -32
- ansible/modules/validate_argument_spec.py +10 -7
- ansible/modules/wait_for.py +70 -60
- ansible/modules/wait_for_connection.py +6 -6
- ansible/modules/yum_repository.py +10 -9
- ansible/parsing/ajson.py +17 -37
- ansible/parsing/dataloader.py +99 -54
- ansible/parsing/mod_args.py +62 -60
- ansible/parsing/plugin_docs.py +21 -86
- ansible/parsing/quoting.py +1 -1
- ansible/parsing/splitter.py +27 -12
- ansible/parsing/utils/addresses.py +24 -24
- ansible/parsing/utils/jsonify.py +5 -1
- ansible/parsing/utils/yaml.py +32 -61
- ansible/parsing/vault/__init__.py +327 -99
- ansible/parsing/yaml/__init__.py +0 -18
- ansible/parsing/yaml/dumper.py +6 -120
- ansible/parsing/yaml/loader.py +6 -39
- ansible/parsing/yaml/objects.py +43 -335
- ansible/playbook/__init__.py +1 -1
- ansible/playbook/attribute.py +8 -3
- ansible/playbook/base.py +187 -134
- ansible/playbook/block.py +26 -24
- ansible/playbook/collectionsearch.py +1 -15
- ansible/playbook/conditional.py +3 -77
- ansible/playbook/handler.py +8 -2
- ansible/playbook/helpers.py +41 -53
- ansible/playbook/included_file.py +32 -26
- ansible/playbook/loop_control.py +2 -2
- ansible/playbook/play.py +85 -44
- ansible/playbook/play_context.py +14 -17
- ansible/playbook/playbook_include.py +27 -62
- ansible/playbook/role/__init__.py +64 -49
- ansible/playbook/role/definition.py +15 -17
- ansible/playbook/role/include.py +2 -4
- ansible/playbook/role/metadata.py +10 -11
- ansible/playbook/role_include.py +3 -3
- ansible/playbook/taggable.py +28 -12
- ansible/playbook/task.py +192 -121
- ansible/playbook/task_include.py +5 -5
- ansible/plugins/__init__.py +58 -26
- ansible/plugins/action/__init__.py +188 -186
- ansible/plugins/action/add_host.py +2 -2
- ansible/plugins/action/assemble.py +11 -18
- ansible/plugins/action/assert.py +55 -67
- ansible/plugins/action/async_status.py +7 -2
- ansible/plugins/action/copy.py +14 -17
- ansible/plugins/action/debug.py +37 -31
- ansible/plugins/action/dnf.py +3 -4
- ansible/plugins/action/fail.py +1 -1
- ansible/plugins/action/fetch.py +7 -8
- ansible/plugins/action/gather_facts.py +13 -14
- ansible/plugins/action/group_by.py +1 -1
- ansible/plugins/action/include_vars.py +10 -11
- ansible/plugins/action/package.py +8 -14
- ansible/plugins/action/pause.py +2 -2
- ansible/plugins/action/script.py +27 -38
- ansible/plugins/action/service.py +9 -18
- ansible/plugins/action/set_fact.py +3 -12
- ansible/plugins/action/set_stats.py +3 -8
- ansible/plugins/action/template.py +47 -67
- ansible/plugins/action/unarchive.py +6 -16
- ansible/plugins/action/uri.py +9 -20
- ansible/plugins/action/validate_argument_spec.py +5 -5
- ansible/plugins/action/wait_for_connection.py +1 -1
- ansible/plugins/become/__init__.py +31 -8
- ansible/plugins/become/runas.py +71 -0
- ansible/plugins/become/su.py +13 -8
- ansible/plugins/become/sudo.py +19 -0
- ansible/plugins/cache/__init__.py +52 -63
- ansible/plugins/cache/base.py +8 -0
- ansible/plugins/cache/jsonfile.py +10 -16
- ansible/plugins/cache/memory.py +6 -12
- ansible/plugins/callback/__init__.py +294 -201
- ansible/plugins/callback/default.py +99 -95
- ansible/plugins/callback/junit.py +44 -43
- ansible/plugins/callback/minimal.py +28 -25
- ansible/plugins/callback/oneline.py +34 -21
- ansible/plugins/callback/tree.py +27 -16
- ansible/plugins/connection/__init__.py +47 -34
- ansible/plugins/connection/local.py +156 -60
- ansible/plugins/connection/paramiko_ssh.py +34 -24
- ansible/plugins/connection/psrp.py +76 -165
- ansible/plugins/connection/ssh.py +326 -86
- ansible/plugins/connection/winrm.py +62 -141
- ansible/plugins/doc_fragments/action_common_attributes.py +14 -14
- ansible/plugins/doc_fragments/action_core.py +6 -6
- ansible/plugins/doc_fragments/backup.py +2 -2
- ansible/plugins/doc_fragments/checksum_common.py +27 -0
- ansible/plugins/doc_fragments/constructed.py +8 -4
- ansible/plugins/doc_fragments/decrypt.py +2 -2
- ansible/plugins/doc_fragments/default_callback.py +2 -2
- ansible/plugins/doc_fragments/files.py +2 -2
- ansible/plugins/doc_fragments/inventory_cache.py +2 -2
- ansible/plugins/doc_fragments/result_format_callback.py +2 -2
- ansible/plugins/doc_fragments/return_common.py +2 -2
- ansible/plugins/doc_fragments/template_common.py +4 -4
- ansible/plugins/doc_fragments/url.py +17 -1
- ansible/plugins/doc_fragments/url_windows.py +2 -2
- ansible/plugins/doc_fragments/validate.py +2 -2
- ansible/plugins/doc_fragments/vars_plugin_staging.py +2 -2
- ansible/plugins/filter/__init__.py +6 -2
- ansible/plugins/filter/b64decode.yml +22 -0
- ansible/plugins/filter/b64encode.yml +22 -0
- ansible/plugins/filter/bool.yml +11 -4
- ansible/plugins/filter/core.py +245 -120
- ansible/plugins/filter/encryption.py +42 -34
- ansible/plugins/filter/flatten.yml +3 -2
- ansible/plugins/filter/human_to_bytes.yml +1 -1
- ansible/plugins/filter/mathstuff.py +30 -37
- ansible/plugins/filter/password_hash.yml +8 -0
- ansible/plugins/filter/pow.yml +1 -1
- ansible/plugins/filter/regex_search.yml +1 -4
- ansible/plugins/filter/root.yml +1 -1
- ansible/plugins/filter/split.yml +1 -1
- ansible/plugins/filter/strftime.yml +3 -3
- ansible/plugins/filter/to_nice_yaml.yml +0 -4
- ansible/plugins/filter/to_uuid.yml +1 -1
- ansible/plugins/filter/to_yaml.yml +0 -4
- ansible/plugins/filter/unvault.yml +1 -1
- ansible/plugins/filter/urls.py +1 -1
- ansible/plugins/filter/urlsplit.py +8 -9
- ansible/plugins/filter/vault.yml +14 -9
- ansible/plugins/filter/win_basename.yml +6 -1
- ansible/plugins/filter/win_dirname.yml +5 -0
- ansible/plugins/inventory/__init__.py +107 -86
- ansible/plugins/inventory/advanced_host_list.py +7 -5
- ansible/plugins/inventory/auto.py +11 -4
- ansible/plugins/inventory/constructed.py +21 -24
- ansible/plugins/inventory/generator.py +16 -11
- ansible/plugins/inventory/host_list.py +7 -5
- ansible/plugins/inventory/ini.py +78 -44
- ansible/plugins/inventory/script.py +190 -120
- ansible/plugins/inventory/toml.py +16 -126
- ansible/plugins/inventory/yaml.py +10 -8
- ansible/plugins/list.py +72 -19
- ansible/plugins/loader.py +383 -198
- ansible/plugins/lookup/__init__.py +21 -4
- ansible/plugins/lookup/config.py +21 -35
- ansible/plugins/lookup/csvfile.py +19 -73
- ansible/plugins/lookup/dict.py +1 -6
- ansible/plugins/lookup/env.py +12 -9
- ansible/plugins/lookup/file.py +5 -8
- ansible/plugins/lookup/first_found.py +87 -55
- ansible/plugins/lookup/indexed_items.py +1 -10
- ansible/plugins/lookup/ini.py +14 -13
- ansible/plugins/lookup/items.py +1 -1
- ansible/plugins/lookup/lines.py +8 -1
- ansible/plugins/lookup/list.py +1 -1
- ansible/plugins/lookup/nested.py +2 -18
- ansible/plugins/lookup/password.py +5 -5
- ansible/plugins/lookup/pipe.py +5 -7
- ansible/plugins/lookup/sequence.py +18 -8
- ansible/plugins/lookup/subelements.py +1 -4
- ansible/plugins/lookup/template.py +47 -36
- ansible/plugins/lookup/together.py +0 -12
- ansible/plugins/lookup/unvault.py +1 -5
- ansible/plugins/lookup/url.py +4 -10
- ansible/plugins/lookup/vars.py +16 -24
- ansible/plugins/shell/__init__.py +58 -4
- ansible/plugins/shell/cmd.py +2 -2
- ansible/plugins/shell/powershell.py +106 -31
- ansible/plugins/shell/sh.py +13 -7
- ansible/plugins/strategy/__init__.py +168 -193
- ansible/plugins/strategy/debug.py +2 -2
- ansible/plugins/strategy/free.py +16 -31
- ansible/plugins/strategy/host_pinned.py +2 -2
- ansible/plugins/strategy/linear.py +41 -41
- ansible/plugins/terminal/__init__.py +4 -4
- ansible/plugins/test/__init__.py +7 -2
- ansible/plugins/test/core.py +75 -35
- ansible/plugins/test/files.py +1 -1
- ansible/plugins/test/finished.yml +1 -1
- ansible/plugins/test/mathstuff.py +3 -3
- ansible/plugins/test/uri.py +5 -8
- ansible/plugins/vars/host_group_vars.py +7 -14
- ansible/release.py +2 -2
- ansible/template/__init__.py +353 -943
- ansible/utils/__init__.py +0 -18
- ansible/utils/collection_loader/__init__.py +54 -5
- ansible/utils/collection_loader/_collection_config.py +5 -6
- ansible/utils/collection_loader/_collection_finder.py +82 -96
- ansible/utils/collection_loader/_collection_meta.py +15 -8
- ansible/utils/display.py +485 -73
- ansible/utils/encrypt.py +27 -19
- ansible/utils/fqcn.py +2 -2
- ansible/utils/galaxy.py +2 -2
- ansible/utils/hashing.py +8 -10
- ansible/utils/helpers.py +2 -2
- ansible/utils/listify.py +10 -8
- ansible/utils/lock.py +2 -2
- ansible/utils/path.py +10 -12
- ansible/utils/plugin_docs.py +16 -14
- ansible/utils/py3compat.py +2 -7
- ansible/utils/sentinel.py +4 -62
- ansible/utils/singleton.py +2 -0
- ansible/utils/ssh_functions.py +6 -2
- ansible/utils/unsafe_proxy.py +23 -332
- ansible/utils/vars.py +55 -8
- ansible/utils/version.py +2 -2
- ansible/vars/clean.py +5 -5
- ansible/vars/hostvars.py +60 -90
- ansible/vars/manager.py +220 -285
- ansible/vars/plugins.py +4 -4
- ansible/vars/reserved.py +13 -12
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/METADATA +4 -3
- ansible_core-2.19.0.dist-info/RECORD +1097 -0
- ansible_core-2.19.0.dist-info/licenses/licenses/BSD-3-Clause.txt +28 -0
- ansible_test/_data/completion/docker.txt +7 -7
- ansible_test/_data/completion/remote.txt +6 -6
- ansible_test/_data/completion/windows.txt +1 -0
- ansible_test/_data/requirements/ansible.txt +2 -2
- ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
- ansible_test/_data/requirements/sanity.changelog.txt +2 -2
- ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
- ansible_test/_data/requirements/sanity.pep8.txt +1 -1
- ansible_test/_data/requirements/sanity.pylint.txt +5 -5
- ansible_test/_data/requirements/sanity.validate-modules.txt +2 -2
- ansible_test/_data/requirements/sanity.yamllint.txt +1 -1
- ansible_test/_data/requirements/units.txt +1 -0
- ansible_test/_internal/__init__.py +6 -0
- ansible_test/_internal/ansible_util.py +3 -1
- ansible_test/_internal/become.py +1 -0
- ansible_test/_internal/bootstrap.py +1 -0
- ansible_test/_internal/cache.py +1 -0
- ansible_test/_internal/cgroup.py +1 -0
- ansible_test/_internal/ci/__init__.py +1 -0
- ansible_test/_internal/ci/azp.py +1 -0
- ansible_test/_internal/ci/local.py +1 -0
- ansible_test/_internal/classification/__init__.py +1 -0
- ansible_test/_internal/classification/common.py +1 -0
- ansible_test/_internal/classification/csharp.py +1 -0
- ansible_test/_internal/classification/powershell.py +1 -0
- ansible_test/_internal/classification/python.py +1 -0
- ansible_test/_internal/cli/__init__.py +1 -0
- ansible_test/_internal/cli/actions.py +1 -0
- ansible_test/_internal/cli/argparsing/__init__.py +1 -0
- ansible_test/_internal/cli/argparsing/actions.py +1 -0
- ansible_test/_internal/cli/argparsing/argcompletion.py +1 -0
- ansible_test/_internal/cli/argparsing/parsers.py +1 -0
- ansible_test/_internal/cli/commands/__init__.py +11 -5
- ansible_test/_internal/cli/commands/coverage/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/combine.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/expand.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/filter.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/generate.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/missing.py +1 -0
- ansible_test/_internal/cli/commands/coverage/combine.py +1 -0
- ansible_test/_internal/cli/commands/coverage/erase.py +1 -0
- ansible_test/_internal/cli/commands/coverage/html.py +1 -0
- ansible_test/_internal/cli/commands/coverage/report.py +1 -0
- ansible_test/_internal/cli/commands/coverage/xml.py +1 -0
- ansible_test/_internal/cli/commands/env.py +1 -0
- ansible_test/_internal/cli/commands/integration/__init__.py +1 -0
- ansible_test/_internal/cli/commands/integration/network.py +1 -0
- ansible_test/_internal/cli/commands/integration/posix.py +1 -0
- ansible_test/_internal/cli/commands/integration/windows.py +1 -0
- ansible_test/_internal/cli/commands/sanity.py +9 -0
- ansible_test/_internal/cli/commands/shell.py +1 -0
- ansible_test/_internal/cli/commands/units.py +1 -0
- ansible_test/_internal/cli/compat.py +1 -0
- ansible_test/_internal/cli/completers.py +1 -0
- ansible_test/_internal/cli/converters.py +1 -0
- ansible_test/_internal/cli/environments.py +52 -5
- ansible_test/_internal/cli/epilog.py +1 -0
- ansible_test/_internal/cli/parsers/__init__.py +1 -0
- ansible_test/_internal/cli/parsers/base_argument_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/helpers.py +1 -0
- ansible_test/_internal/cli/parsers/host_config_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/key_value_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/value_parsers.py +1 -0
- ansible_test/_internal/commands/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/__init__.py +3 -2
- ansible_test/_internal/commands/coverage/analyze/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/combine.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/expand.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/filter.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/generate.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/missing.py +1 -0
- ansible_test/_internal/commands/coverage/combine.py +2 -1
- ansible_test/_internal/commands/coverage/erase.py +1 -0
- ansible_test/_internal/commands/coverage/html.py +1 -0
- ansible_test/_internal/commands/coverage/report.py +1 -0
- ansible_test/_internal/commands/coverage/xml.py +1 -0
- ansible_test/_internal/commands/env/__init__.py +2 -0
- ansible_test/_internal/commands/integration/__init__.py +22 -5
- ansible_test/_internal/commands/integration/cloud/__init__.py +1 -0
- ansible_test/_internal/commands/integration/cloud/acme.py +2 -1
- ansible_test/_internal/commands/integration/cloud/aws.py +1 -0
- ansible_test/_internal/commands/integration/cloud/azure.py +1 -0
- ansible_test/_internal/commands/integration/cloud/cs.py +1 -0
- ansible_test/_internal/commands/integration/cloud/digitalocean.py +1 -0
- ansible_test/_internal/commands/integration/cloud/galaxy.py +3 -2
- ansible_test/_internal/commands/integration/cloud/hcloud.py +1 -0
- ansible_test/_internal/commands/integration/cloud/httptester.py +3 -2
- ansible_test/_internal/commands/integration/cloud/nios.py +2 -1
- ansible_test/_internal/commands/integration/cloud/opennebula.py +1 -0
- ansible_test/_internal/commands/integration/cloud/openshift.py +1 -0
- ansible_test/_internal/commands/integration/cloud/scaleway.py +1 -0
- ansible_test/_internal/commands/integration/cloud/vcenter.py +1 -0
- ansible_test/_internal/commands/integration/cloud/vultr.py +1 -0
- ansible_test/_internal/commands/integration/coverage.py +8 -2
- ansible_test/_internal/commands/integration/filters.py +1 -0
- ansible_test/_internal/commands/integration/network.py +1 -0
- ansible_test/_internal/commands/integration/posix.py +1 -0
- ansible_test/_internal/commands/integration/windows.py +1 -0
- ansible_test/_internal/commands/sanity/__init__.py +19 -2
- ansible_test/_internal/commands/sanity/ansible_doc.py +1 -0
- ansible_test/_internal/commands/sanity/bin_symlinks.py +1 -0
- ansible_test/_internal/commands/sanity/compile.py +1 -0
- ansible_test/_internal/commands/sanity/ignores.py +1 -0
- ansible_test/_internal/commands/sanity/import.py +1 -0
- ansible_test/_internal/commands/sanity/integration_aliases.py +12 -0
- ansible_test/_internal/commands/sanity/pep8.py +1 -0
- ansible_test/_internal/commands/sanity/pslint.py +1 -0
- ansible_test/_internal/commands/sanity/pylint.py +25 -26
- ansible_test/_internal/commands/sanity/shellcheck.py +1 -0
- ansible_test/_internal/commands/sanity/validate_modules.py +1 -0
- ansible_test/_internal/commands/sanity/yamllint.py +1 -0
- ansible_test/_internal/commands/shell/__init__.py +44 -4
- ansible_test/_internal/commands/units/__init__.py +5 -1
- ansible_test/_internal/compat/__init__.py +1 -0
- ansible_test/_internal/compat/packaging.py +1 -0
- ansible_test/_internal/compat/yaml.py +1 -0
- ansible_test/_internal/completion.py +1 -0
- ansible_test/_internal/config.py +23 -13
- ansible_test/_internal/connections.py +1 -0
- ansible_test/_internal/constants.py +1 -0
- ansible_test/_internal/containers.py +1 -0
- ansible_test/_internal/content_config.py +1 -0
- ansible_test/_internal/core_ci.py +1 -0
- ansible_test/_internal/coverage_util.py +11 -10
- ansible_test/_internal/data.py +1 -0
- ansible_test/_internal/debugging.py +166 -0
- ansible_test/_internal/delegation.py +22 -13
- ansible_test/_internal/dev/__init__.py +1 -0
- ansible_test/_internal/dev/container_probe.py +1 -0
- ansible_test/_internal/diff.py +3 -2
- ansible_test/_internal/docker_util.py +2 -1
- ansible_test/_internal/encoding.py +1 -0
- ansible_test/_internal/executor.py +1 -0
- ansible_test/_internal/git.py +1 -0
- ansible_test/_internal/host_configs.py +1 -0
- ansible_test/_internal/host_profiles.py +260 -16
- ansible_test/_internal/http.py +1 -0
- ansible_test/_internal/init.py +1 -0
- ansible_test/_internal/inventory.py +39 -3
- ansible_test/_internal/io.py +1 -0
- ansible_test/_internal/metadata.py +95 -4
- ansible_test/_internal/payload.py +1 -0
- ansible_test/_internal/processes.py +80 -0
- ansible_test/_internal/provider/__init__.py +1 -0
- ansible_test/_internal/provider/layout/__init__.py +1 -0
- ansible_test/_internal/provider/layout/ansible.py +1 -0
- ansible_test/_internal/provider/layout/collection.py +1 -0
- ansible_test/_internal/provider/layout/unsupported.py +1 -0
- ansible_test/_internal/provider/source/__init__.py +1 -0
- ansible_test/_internal/provider/source/git.py +1 -0
- ansible_test/_internal/provider/source/installed.py +1 -0
- ansible_test/_internal/provider/source/unsupported.py +1 -0
- ansible_test/_internal/provider/source/unversioned.py +1 -0
- ansible_test/_internal/provisioning.py +11 -4
- ansible_test/_internal/pypi_proxy.py +6 -5
- ansible_test/_internal/python_requirements.py +28 -0
- ansible_test/_internal/ssh.py +2 -5
- ansible_test/_internal/target.py +9 -0
- ansible_test/_internal/test.py +3 -2
- ansible_test/_internal/thread.py +3 -1
- ansible_test/_internal/timeout.py +2 -1
- ansible_test/_internal/util.py +41 -12
- ansible_test/_internal/util_common.py +18 -5
- ansible_test/_internal/venv.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/action-plugin-docs.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/changelog/sphinx.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/changelog.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/empty-init.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/line-endings.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-assert.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-get-exception.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-illegal-filenames.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-smart-quotes.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/replace-urlopen.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py +28 -1
- ansible_test/_util/controller/sanity/code-smell/shebang.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/symlinks.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/use-argspec-type-path.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/use-compat-six.py +1 -0
- ansible_test/_util/controller/sanity/integration-aliases/yaml_to_json.py +2 -1
- ansible_test/_util/controller/sanity/pep8/current-ignore.txt +4 -0
- ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +8 -5
- ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +8 -5
- ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +8 -5
- ansible_test/_util/controller/sanity/pylint/config/collection.cfg +4 -5
- ansible_test/_util/controller/sanity/pylint/config/default.cfg +8 -7
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated_calls.py +541 -0
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated_comment.py +137 -0
- ansible_test/_util/controller/sanity/pylint/plugins/hide_unraisable.py +1 -0
- ansible_test/_util/controller/sanity/pylint/plugins/string_format.py +1 -8
- ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +1 -8
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +55 -28
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +12 -5
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +13 -2
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -0
- ansible_test/_util/controller/sanity/yamllint/yamllinter.py +35 -17
- ansible_test/_util/controller/tools/collection_detail.py +1 -0
- ansible_test/_util/controller/tools/yaml_to_json.py +2 -1
- ansible_test/_util/target/injector/python.py +8 -0
- ansible_test/_util/target/pytest/plugins/ansible_forked.py +6 -1
- ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +2 -1
- ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -0
- ansible_test/_util/target/sanity/compile/compile.py +1 -0
- ansible_test/_util/target/sanity/import/importer.py +15 -16
- ansible_test/_util/target/setup/bootstrap.sh +9 -20
- ansible_test/_util/target/setup/probe_cgroups.py +1 -0
- ansible_test/_util/target/setup/quiet_pip.py +1 -0
- ansible_test/_util/target/setup/requirements.py +38 -36
- ansible_test/_util/target/tools/virtualenvcheck.py +2 -1
- ansible_test/_util/target/tools/yamlcheck.py +2 -1
- ansible/compat/selectors.py +0 -32
- ansible/errors/yaml_strings.py +0 -138
- ansible/executor/action_write_locks.py +0 -44
- ansible/executor/discovery/python_target.py +0 -47
- ansible/executor/powershell/module_powershell_wrapper.ps1 +0 -86
- ansible/executor/powershell/module_script_wrapper.ps1 +0 -22
- ansible/module_utils/compat/importlib.py +0 -26
- ansible/module_utils/compat/selectors.py +0 -32
- ansible/module_utils/pycompat24.py +0 -73
- ansible/parsing/yaml/constructor.py +0 -178
- ansible/template/native_helpers.py +0 -251
- ansible/template/template.py +0 -43
- ansible/template/vars.py +0 -77
- ansible/utils/native_jinja.py +0 -11
- ansible/vars/fact_cache.py +0 -71
- ansible_core-2.18.7rc1.dist-info/RECORD +0 -992
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +0 -411
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/WHEEL +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/COPYING +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/Apache-License.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/MIT-license.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/PSF-license.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/licenses/licenses/simplified_bsd.txt +0 -0
- {ansible_core-2.18.7rc1.dist-info → ansible_core-2.19.0.dist-info}/top_level.txt +0 -0
ansible/cli/galaxy.py
CHANGED
|
@@ -53,10 +53,12 @@ from ansible.module_utils.ansible_release import __version__ as ansible_version
|
|
|
53
53
|
from ansible.module_utils.common.collections import is_iterable
|
|
54
54
|
from ansible.module_utils.common.yaml import yaml_dump, yaml_load
|
|
55
55
|
from ansible.module_utils.common.text.converters import to_bytes, to_native, to_text
|
|
56
|
+
from ansible._internal._datatag._tags import TrustedAsTemplate
|
|
56
57
|
from ansible.module_utils import six
|
|
57
58
|
from ansible.parsing.dataloader import DataLoader
|
|
58
59
|
from ansible.playbook.role.requirement import RoleRequirement
|
|
59
|
-
from ansible.
|
|
60
|
+
from ansible._internal._templating._engine import TemplateEngine
|
|
61
|
+
from ansible.template import trust_as_template
|
|
60
62
|
from ansible.utils.collection_loader import AnsibleCollectionConfig
|
|
61
63
|
from ansible.utils.display import Display
|
|
62
64
|
from ansible.utils.plugin_docs import get_versioned_doclink
|
|
@@ -177,11 +179,11 @@ class RoleDistributionServer:
|
|
|
177
179
|
|
|
178
180
|
|
|
179
181
|
class GalaxyCLI(CLI):
|
|
180
|
-
|
|
182
|
+
"""Command to manage Ansible roles and collections.
|
|
181
183
|
|
|
182
184
|
None of the CLI tools are designed to run concurrently with themselves.
|
|
183
185
|
Use an external scheduler and/or locking to ensure there are no clashing operations.
|
|
184
|
-
|
|
186
|
+
"""
|
|
185
187
|
|
|
186
188
|
name = 'ansible-galaxy'
|
|
187
189
|
|
|
@@ -212,7 +214,7 @@ class GalaxyCLI(CLI):
|
|
|
212
214
|
super(GalaxyCLI, self).__init__(args)
|
|
213
215
|
|
|
214
216
|
def init_parser(self):
|
|
215
|
-
|
|
217
|
+
""" create an options parser for bin/ansible """
|
|
216
218
|
|
|
217
219
|
super(GalaxyCLI, self).init_parser(
|
|
218
220
|
desc="Perform various Role and Collection related operations.",
|
|
@@ -639,6 +641,7 @@ class GalaxyCLI(CLI):
|
|
|
639
641
|
# it doesn't need to be passed as kwarg to GalaxyApi, same for others we pop here
|
|
640
642
|
auth_url = server_options.pop('auth_url')
|
|
641
643
|
client_id = server_options.pop('client_id')
|
|
644
|
+
client_secret = server_options.pop('client_secret')
|
|
642
645
|
token_val = server_options['token'] or NoTokenSentinel
|
|
643
646
|
username = server_options['username']
|
|
644
647
|
api_version = server_options.pop('api_version')
|
|
@@ -664,15 +667,17 @@ class GalaxyCLI(CLI):
|
|
|
664
667
|
if username:
|
|
665
668
|
server_options['token'] = BasicAuthToken(username, server_options['password'])
|
|
666
669
|
else:
|
|
667
|
-
if
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
670
|
+
if auth_url:
|
|
671
|
+
server_options['token'] = KeycloakToken(
|
|
672
|
+
access_token=token_val,
|
|
673
|
+
auth_url=auth_url,
|
|
674
|
+
validate_certs=validate_certs,
|
|
675
|
+
client_id=client_id,
|
|
676
|
+
client_secret=client_secret,
|
|
677
|
+
)
|
|
678
|
+
elif token_val:
|
|
679
|
+
# The galaxy v1 / github / django / 'Token'
|
|
680
|
+
server_options['token'] = GalaxyToken(token=token_val)
|
|
676
681
|
|
|
677
682
|
server_options.update(galaxy_options)
|
|
678
683
|
config_servers.append(GalaxyAPI(
|
|
@@ -912,8 +917,8 @@ class GalaxyCLI(CLI):
|
|
|
912
917
|
|
|
913
918
|
@staticmethod
|
|
914
919
|
def _get_skeleton_galaxy_yml(template_path, inject_data):
|
|
915
|
-
with open(to_bytes(template_path, errors='surrogate_or_strict'), '
|
|
916
|
-
meta_template = to_text(template_obj.read(), errors='surrogate_or_strict')
|
|
920
|
+
with open(to_bytes(template_path, errors='surrogate_or_strict'), 'r') as template_obj:
|
|
921
|
+
meta_template = TrustedAsTemplate().tag(to_text(template_obj.read(), errors='surrogate_or_strict'))
|
|
917
922
|
|
|
918
923
|
galaxy_meta = get_collections_galaxy_meta_info()
|
|
919
924
|
|
|
@@ -949,7 +954,7 @@ class GalaxyCLI(CLI):
|
|
|
949
954
|
return textwrap.fill(v, width=117, initial_indent="# ", subsequent_indent="# ", break_on_hyphens=False)
|
|
950
955
|
|
|
951
956
|
loader = DataLoader()
|
|
952
|
-
templar =
|
|
957
|
+
templar = TemplateEngine(loader, variables={'required_config': required_config, 'optional_config': optional_config})
|
|
953
958
|
templar.environment.filters['comment_ify'] = comment_ify
|
|
954
959
|
|
|
955
960
|
meta_value = templar.template(meta_template)
|
|
@@ -1151,7 +1156,7 @@ class GalaxyCLI(CLI):
|
|
|
1151
1156
|
|
|
1152
1157
|
loader = DataLoader()
|
|
1153
1158
|
inject_data.update(load_extra_vars(loader))
|
|
1154
|
-
templar =
|
|
1159
|
+
templar = TemplateEngine(loader, variables=inject_data)
|
|
1155
1160
|
|
|
1156
1161
|
# create role directory
|
|
1157
1162
|
if not os.path.exists(b_obj_path):
|
|
@@ -1193,7 +1198,7 @@ class GalaxyCLI(CLI):
|
|
|
1193
1198
|
elif ext == ".j2" and not in_templates_dir:
|
|
1194
1199
|
src_template = os.path.join(root, f)
|
|
1195
1200
|
dest_file = os.path.join(obj_path, rel_root, filename)
|
|
1196
|
-
template_data =
|
|
1201
|
+
template_data = trust_as_template(loader.get_text_file_contents(src_template))
|
|
1197
1202
|
try:
|
|
1198
1203
|
b_rendered = to_bytes(templar.template(template_data), errors='surrogate_or_strict')
|
|
1199
1204
|
except AnsibleError as e:
|
|
@@ -1721,7 +1726,7 @@ class GalaxyCLI(CLI):
|
|
|
1721
1726
|
publish_collection(collection_path, self.api, wait, timeout)
|
|
1722
1727
|
|
|
1723
1728
|
def execute_search(self):
|
|
1724
|
-
|
|
1729
|
+
""" searches for roles on the Ansible Galaxy server"""
|
|
1725
1730
|
page_size = 1000
|
|
1726
1731
|
search = None
|
|
1727
1732
|
|
|
@@ -1761,6 +1766,8 @@ class GalaxyCLI(CLI):
|
|
|
1761
1766
|
|
|
1762
1767
|
return 0
|
|
1763
1768
|
|
|
1769
|
+
_task_check_delay_sec = 10 # allows unit test override
|
|
1770
|
+
|
|
1764
1771
|
def execute_import(self):
|
|
1765
1772
|
""" used to import a role into Ansible Galaxy """
|
|
1766
1773
|
|
|
@@ -1814,7 +1821,7 @@ class GalaxyCLI(CLI):
|
|
|
1814
1821
|
rc = ['SUCCESS', 'FAILED'].index(state)
|
|
1815
1822
|
finished = True
|
|
1816
1823
|
else:
|
|
1817
|
-
time.sleep(
|
|
1824
|
+
time.sleep(self._task_check_delay_sec)
|
|
1818
1825
|
|
|
1819
1826
|
return rc
|
|
1820
1827
|
|
ansible/cli/inventory.py
CHANGED
|
@@ -9,15 +9,18 @@ from __future__ import annotations
|
|
|
9
9
|
# ansible.cli needs to be imported first, to ensure the source bin/* scripts run that code first
|
|
10
10
|
from ansible.cli import CLI
|
|
11
11
|
|
|
12
|
+
import json
|
|
12
13
|
import sys
|
|
14
|
+
import typing as t
|
|
13
15
|
|
|
14
16
|
import argparse
|
|
15
17
|
|
|
16
18
|
from ansible import constants as C
|
|
17
19
|
from ansible import context
|
|
18
20
|
from ansible.cli.arguments import option_helpers as opt_help
|
|
19
|
-
from ansible.errors import AnsibleError, AnsibleOptionsError
|
|
20
|
-
from ansible.module_utils.common.text.converters import to_bytes,
|
|
21
|
+
from ansible.errors import AnsibleError, AnsibleOptionsError, AnsibleRuntimeError
|
|
22
|
+
from ansible.module_utils.common.text.converters import to_bytes, to_text
|
|
23
|
+
from ansible._internal._json._profiles import _inventory_legacy
|
|
21
24
|
from ansible.utils.vars import combine_vars
|
|
22
25
|
from ansible.utils.display import Display
|
|
23
26
|
from ansible.vars.plugins import get_vars_from_inventory_sources, get_vars_from_path
|
|
@@ -26,7 +29,7 @@ display = Display()
|
|
|
26
29
|
|
|
27
30
|
|
|
28
31
|
class InventoryCLI(CLI):
|
|
29
|
-
|
|
32
|
+
""" used to display or dump the configured inventory as Ansible sees it """
|
|
30
33
|
|
|
31
34
|
name = 'ansible-inventory'
|
|
32
35
|
|
|
@@ -148,42 +151,24 @@ class InventoryCLI(CLI):
|
|
|
148
151
|
try:
|
|
149
152
|
with open(to_bytes(outfile), 'wb') as f:
|
|
150
153
|
f.write(to_bytes(results))
|
|
151
|
-
except
|
|
152
|
-
raise AnsibleError('Unable to write to destination file
|
|
154
|
+
except OSError as ex:
|
|
155
|
+
raise AnsibleError(f'Unable to write to destination file {outfile!r}.') from ex
|
|
153
156
|
sys.exit(0)
|
|
154
157
|
|
|
155
158
|
sys.exit(1)
|
|
156
159
|
|
|
157
160
|
@staticmethod
|
|
158
161
|
def dump(stuff):
|
|
159
|
-
|
|
160
162
|
if context.CLIARGS['yaml']:
|
|
161
163
|
import yaml
|
|
164
|
+
|
|
162
165
|
from ansible.parsing.yaml.dumper import AnsibleDumper
|
|
166
|
+
|
|
163
167
|
results = to_text(yaml.dump(stuff, Dumper=AnsibleDumper, default_flow_style=False, allow_unicode=True))
|
|
164
168
|
elif context.CLIARGS['toml']:
|
|
165
|
-
|
|
166
|
-
try:
|
|
167
|
-
results = toml_dumps(stuff)
|
|
168
|
-
except TypeError as e:
|
|
169
|
-
raise AnsibleError(
|
|
170
|
-
'The source inventory contains a value that cannot be represented in TOML: %s' % e
|
|
171
|
-
)
|
|
172
|
-
except KeyError as e:
|
|
173
|
-
raise AnsibleError(
|
|
174
|
-
'The source inventory contains a non-string key (%s) which cannot be represented in TOML. '
|
|
175
|
-
'The specified key will need to be converted to a string. Be aware that if your playbooks '
|
|
176
|
-
'expect this key to be non-string, your playbooks will need to be modified to support this '
|
|
177
|
-
'change.' % e.args[0]
|
|
178
|
-
)
|
|
169
|
+
results = toml_dumps(stuff)
|
|
179
170
|
else:
|
|
180
|
-
|
|
181
|
-
from ansible.parsing.ajson import AnsibleJSONEncoder
|
|
182
|
-
try:
|
|
183
|
-
results = json.dumps(stuff, cls=AnsibleJSONEncoder, sort_keys=True, indent=4, preprocess_unsafe=True, ensure_ascii=False)
|
|
184
|
-
except TypeError as e:
|
|
185
|
-
results = json.dumps(stuff, cls=AnsibleJSONEncoder, sort_keys=False, indent=4, preprocess_unsafe=True, ensure_ascii=False)
|
|
186
|
-
display.warning("Could not sort JSON output due to issues while sorting keys: %s" % to_native(e))
|
|
171
|
+
results = json.dumps(stuff, cls=_inventory_legacy.Encoder, sort_keys=True, indent=4)
|
|
187
172
|
|
|
188
173
|
return results
|
|
189
174
|
|
|
@@ -306,7 +291,11 @@ class InventoryCLI(CLI):
|
|
|
306
291
|
results = format_group(top, frozenset(h.name for h in hosts))
|
|
307
292
|
|
|
308
293
|
# populate meta
|
|
309
|
-
results['_meta'] = {
|
|
294
|
+
results['_meta'] = {
|
|
295
|
+
'hostvars': {},
|
|
296
|
+
'profile': _inventory_legacy.Encoder.profile_name,
|
|
297
|
+
}
|
|
298
|
+
|
|
310
299
|
for host in hosts:
|
|
311
300
|
hvars = self._get_host_variables(host)
|
|
312
301
|
if hvars:
|
|
@@ -409,6 +398,17 @@ class InventoryCLI(CLI):
|
|
|
409
398
|
return results
|
|
410
399
|
|
|
411
400
|
|
|
401
|
+
def toml_dumps(data: t.Any) -> str:
|
|
402
|
+
try:
|
|
403
|
+
from tomli_w import dumps as _tomli_w_dumps
|
|
404
|
+
except ImportError:
|
|
405
|
+
pass
|
|
406
|
+
else:
|
|
407
|
+
return _tomli_w_dumps(data)
|
|
408
|
+
|
|
409
|
+
raise AnsibleRuntimeError('The Python library "tomli-w" is required when using the TOML output format.')
|
|
410
|
+
|
|
411
|
+
|
|
412
412
|
def main(args=None):
|
|
413
413
|
InventoryCLI.cli_executor(args)
|
|
414
414
|
|
ansible/cli/playbook.py
CHANGED
|
@@ -29,11 +29,13 @@ display = Display()
|
|
|
29
29
|
|
|
30
30
|
|
|
31
31
|
class PlaybookCLI(CLI):
|
|
32
|
-
|
|
33
|
-
See the project home page (https://docs.ansible.com) for more information.
|
|
32
|
+
""" the tool to run *Ansible playbooks*, which are a configuration and multinode deployment system.
|
|
33
|
+
See the project home page (https://docs.ansible.com) for more information. """
|
|
34
34
|
|
|
35
35
|
name = 'ansible-playbook'
|
|
36
36
|
|
|
37
|
+
USES_CONNECTION = True
|
|
38
|
+
|
|
37
39
|
def init_parser(self):
|
|
38
40
|
|
|
39
41
|
# create parser for CLI options
|
|
@@ -143,10 +145,6 @@ class PlaybookCLI(CLI):
|
|
|
143
145
|
# Fix this when we rewrite inventory by making localhost a real host (and thus show up in list_hosts())
|
|
144
146
|
CLI.get_host_list(inventory, context.CLIARGS['subset'])
|
|
145
147
|
|
|
146
|
-
# flush fact cache if requested
|
|
147
|
-
if context.CLIARGS['flush_cache']:
|
|
148
|
-
self._flush_cache(inventory, variable_manager)
|
|
149
|
-
|
|
150
148
|
# create the playbook executor, which manages running the plays via a task queue manager
|
|
151
149
|
pbex = PlaybookExecutor(playbooks=context.CLIARGS['args'], inventory=inventory,
|
|
152
150
|
variable_manager=variable_manager, loader=loader,
|
|
@@ -228,12 +226,6 @@ class PlaybookCLI(CLI):
|
|
|
228
226
|
else:
|
|
229
227
|
return results
|
|
230
228
|
|
|
231
|
-
@staticmethod
|
|
232
|
-
def _flush_cache(inventory, variable_manager):
|
|
233
|
-
for host in inventory.list_hosts():
|
|
234
|
-
hostname = host.get_name()
|
|
235
|
-
variable_manager.clear_facts(hostname)
|
|
236
|
-
|
|
237
229
|
|
|
238
230
|
def main(args=None):
|
|
239
231
|
PlaybookCLI.cli_executor(args)
|
ansible/cli/pull.py
CHANGED
|
@@ -61,7 +61,7 @@ def safe_output_env(f):
|
|
|
61
61
|
|
|
62
62
|
|
|
63
63
|
class PullCLI(CLI):
|
|
64
|
-
|
|
64
|
+
""" Used to pull a remote copy of ansible on each managed node,
|
|
65
65
|
each set to run via cron and update playbook source via a source repository.
|
|
66
66
|
This inverts the default *push* architecture of ansible into a *pull* architecture,
|
|
67
67
|
which has near-limitless scaling potential.
|
|
@@ -73,7 +73,7 @@ class PullCLI(CLI):
|
|
|
73
73
|
This is useful both for extreme scale-out and periodic remediation.
|
|
74
74
|
Usage of the 'fetch' module to retrieve logs from ansible-pull runs would be an
|
|
75
75
|
excellent way to gather and analyze remote logs from ansible-pull.
|
|
76
|
-
|
|
76
|
+
"""
|
|
77
77
|
|
|
78
78
|
name = 'ansible-pull'
|
|
79
79
|
|
|
@@ -188,7 +188,7 @@ class PullCLI(CLI):
|
|
|
188
188
|
return options
|
|
189
189
|
|
|
190
190
|
def run(self):
|
|
191
|
-
|
|
191
|
+
""" use Runner lib to do SSH things """
|
|
192
192
|
|
|
193
193
|
super(PullCLI, self).run()
|
|
194
194
|
|
|
@@ -335,6 +335,9 @@ class PullCLI(CLI):
|
|
|
335
335
|
if context.CLIARGS['diff']:
|
|
336
336
|
cmd += ' -D'
|
|
337
337
|
|
|
338
|
+
if context.CLIARGS['flush_cache']:
|
|
339
|
+
cmd += ' --flush-cache'
|
|
340
|
+
|
|
338
341
|
os.chdir(context.CLIARGS['dest'])
|
|
339
342
|
|
|
340
343
|
# redo inventory options as new files might exist now
|
|
@@ -21,7 +21,7 @@ from ansible.cli.arguments import option_helpers as opt_help
|
|
|
21
21
|
from ansible.module_utils.common.text.converters import to_bytes, to_text
|
|
22
22
|
from ansible.module_utils.connection import Connection, ConnectionError, send_data, recv_data
|
|
23
23
|
from ansible.module_utils.service import fork_process
|
|
24
|
-
from ansible.
|
|
24
|
+
from ansible.module_utils._internal._json._profiles import _tagless
|
|
25
25
|
from ansible.playbook.play_context import PlayContext
|
|
26
26
|
from ansible.plugins.loader import connection_loader, init_plugin_loader
|
|
27
27
|
from ansible.utils.path import unfrackpath, makedirs_safe
|
|
@@ -57,10 +57,10 @@ def file_lock(lock_path):
|
|
|
57
57
|
|
|
58
58
|
|
|
59
59
|
class ConnectionProcess(object):
|
|
60
|
-
|
|
60
|
+
"""
|
|
61
61
|
The connection process wraps around a Connection object that manages
|
|
62
62
|
the connection to a remote device that persists over the playbook
|
|
63
|
-
|
|
63
|
+
"""
|
|
64
64
|
def __init__(self, fd, play_context, socket_path, original_path, task_uuid=None, ansible_playbook_pid=None):
|
|
65
65
|
self.play_context = play_context
|
|
66
66
|
self.socket_path = socket_path
|
|
@@ -110,7 +110,7 @@ class ConnectionProcess(object):
|
|
|
110
110
|
result['exception'] = traceback.format_exc()
|
|
111
111
|
finally:
|
|
112
112
|
result['messages'] = messages
|
|
113
|
-
self.fd.write(json.dumps(result, cls=
|
|
113
|
+
self.fd.write(json.dumps(result, cls=_tagless.Encoder))
|
|
114
114
|
self.fd.close()
|
|
115
115
|
|
|
116
116
|
def run(self):
|
|
@@ -292,7 +292,7 @@ def main(args=None):
|
|
|
292
292
|
else:
|
|
293
293
|
os.close(w)
|
|
294
294
|
rfd = os.fdopen(r, 'r')
|
|
295
|
-
data = json.loads(rfd.read(), cls=
|
|
295
|
+
data = json.loads(rfd.read(), cls=_tagless.Decoder)
|
|
296
296
|
messages.extend(data.pop('messages'))
|
|
297
297
|
result.update(data)
|
|
298
298
|
|
|
@@ -330,10 +330,10 @@ def main(args=None):
|
|
|
330
330
|
sys.stdout = saved_stdout
|
|
331
331
|
if 'exception' in result:
|
|
332
332
|
rc = 1
|
|
333
|
-
sys.stderr.write(json.dumps(result, cls=
|
|
333
|
+
sys.stderr.write(json.dumps(result, cls=_tagless.Encoder))
|
|
334
334
|
else:
|
|
335
335
|
rc = 0
|
|
336
|
-
sys.stdout.write(json.dumps(result, cls=
|
|
336
|
+
sys.stdout.write(json.dumps(result, cls=_tagless.Encoder))
|
|
337
337
|
|
|
338
338
|
sys.exit(rc)
|
|
339
339
|
|
ansible/cli/vault.py
CHANGED
|
@@ -25,7 +25,7 @@ display = Display()
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
class VaultCLI(CLI):
|
|
28
|
-
|
|
28
|
+
""" can encrypt any structured data file used by Ansible.
|
|
29
29
|
This can include *group_vars/* or *host_vars/* inventory variables,
|
|
30
30
|
variables loaded by *include_vars* or *vars_files*, or variable files
|
|
31
31
|
passed on the ansible-playbook command line with *-e @file.yml* or *-e @file.json*.
|
|
@@ -33,7 +33,7 @@ class VaultCLI(CLI):
|
|
|
33
33
|
|
|
34
34
|
Because Ansible tasks, handlers, and other objects are data, these can also be encrypted with vault.
|
|
35
35
|
If you'd like to not expose what variables you are using, you can keep an individual task file entirely encrypted.
|
|
36
|
-
|
|
36
|
+
"""
|
|
37
37
|
|
|
38
38
|
name = 'ansible-vault'
|
|
39
39
|
|
|
@@ -84,7 +84,7 @@ class VaultCLI(CLI):
|
|
|
84
84
|
create_parser.add_argument('--skip-tty-check', default=False, help='allows editor to be opened when no tty attached',
|
|
85
85
|
dest='skip_tty_check', action='store_true')
|
|
86
86
|
|
|
87
|
-
decrypt_parser = subparsers.add_parser('decrypt', help='Decrypt vault encrypted file', parents=[output, common])
|
|
87
|
+
decrypt_parser = subparsers.add_parser('decrypt', help='Decrypt vault encrypted file or string', parents=[output, common])
|
|
88
88
|
decrypt_parser.set_defaults(func=self.execute_decrypt)
|
|
89
89
|
decrypt_parser.add_argument('args', help='Filename', metavar='file_name', nargs='*')
|
|
90
90
|
|
|
@@ -228,6 +228,7 @@ class VaultCLI(CLI):
|
|
|
228
228
|
vault_ids=new_vault_ids,
|
|
229
229
|
vault_password_files=new_vault_password_files,
|
|
230
230
|
ask_vault_pass=context.CLIARGS['ask_vault_pass'],
|
|
231
|
+
initialize_context=False,
|
|
231
232
|
create_new_password=True)
|
|
232
233
|
|
|
233
234
|
if not new_vault_secrets:
|
|
@@ -253,13 +254,13 @@ class VaultCLI(CLI):
|
|
|
253
254
|
os.umask(old_umask)
|
|
254
255
|
|
|
255
256
|
def execute_encrypt(self):
|
|
256
|
-
|
|
257
|
+
""" encrypt the supplied file using the provided vault secret """
|
|
257
258
|
|
|
258
259
|
if not context.CLIARGS['args'] and sys.stdin.isatty():
|
|
259
260
|
display.display("Reading plaintext input from stdin", stderr=True)
|
|
260
261
|
|
|
261
262
|
for f in context.CLIARGS['args'] or ['-']:
|
|
262
|
-
#
|
|
263
|
+
# FIXME: use the correct vau
|
|
263
264
|
self.editor.encrypt_file(f, self.encrypt_secret,
|
|
264
265
|
vault_id=self.encrypt_vault_id,
|
|
265
266
|
output_file=context.CLIARGS['output_file'])
|
|
@@ -287,7 +288,7 @@ class VaultCLI(CLI):
|
|
|
287
288
|
return yaml_ciphertext
|
|
288
289
|
|
|
289
290
|
def execute_encrypt_string(self):
|
|
290
|
-
|
|
291
|
+
""" encrypt the supplied string using the provided vault secret """
|
|
291
292
|
b_plaintext = None
|
|
292
293
|
|
|
293
294
|
# Holds tuples (the_text, the_source_of_the_string, the variable name if its provided).
|
|
@@ -432,7 +433,7 @@ class VaultCLI(CLI):
|
|
|
432
433
|
return output
|
|
433
434
|
|
|
434
435
|
def execute_decrypt(self):
|
|
435
|
-
|
|
436
|
+
""" decrypt the supplied file using the provided vault secret """
|
|
436
437
|
|
|
437
438
|
if not context.CLIARGS['args'] and sys.stdin.isatty():
|
|
438
439
|
display.display("Reading ciphertext input from stdin", stderr=True)
|
|
@@ -444,7 +445,7 @@ class VaultCLI(CLI):
|
|
|
444
445
|
display.display("Decryption successful", stderr=True)
|
|
445
446
|
|
|
446
447
|
def execute_create(self):
|
|
447
|
-
|
|
448
|
+
""" create and open a file in an editor that will be encrypted with the provided vault secret when closed"""
|
|
448
449
|
|
|
449
450
|
if len(context.CLIARGS['args']) != 1:
|
|
450
451
|
raise AnsibleOptionsError("ansible-vault create can take only one filename argument")
|
|
@@ -456,12 +457,12 @@ class VaultCLI(CLI):
|
|
|
456
457
|
raise AnsibleOptionsError("not a tty, editor cannot be opened")
|
|
457
458
|
|
|
458
459
|
def execute_edit(self):
|
|
459
|
-
|
|
460
|
+
""" open and decrypt an existing vaulted file in an editor, that will be encrypted again when closed"""
|
|
460
461
|
for f in context.CLIARGS['args']:
|
|
461
462
|
self.editor.edit_file(f)
|
|
462
463
|
|
|
463
464
|
def execute_view(self):
|
|
464
|
-
|
|
465
|
+
""" open, decrypt and view an existing vaulted file using a pager using the supplied vault secret """
|
|
465
466
|
|
|
466
467
|
for f in context.CLIARGS['args']:
|
|
467
468
|
# Note: vault should return byte strings because it could encrypt
|
|
@@ -473,7 +474,7 @@ class VaultCLI(CLI):
|
|
|
473
474
|
self.pager(to_text(plaintext))
|
|
474
475
|
|
|
475
476
|
def execute_rekey(self):
|
|
476
|
-
|
|
477
|
+
""" re-encrypt a vaulted file with a new secret, the previous secret is required """
|
|
477
478
|
for f in context.CLIARGS['args']:
|
|
478
479
|
# FIXME: plumb in vault_id, use the default new_vault_secret for now
|
|
479
480
|
self.editor.rekey_file(f, self.new_encrypt_secret,
|
ansible/compat/__init__.py
CHANGED
|
@@ -15,9 +15,9 @@
|
|
|
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
|
-
|
|
18
|
+
"""
|
|
19
19
|
Compat library for ansible. This contains compatibility definitions for older python
|
|
20
20
|
When we need to import a module differently depending on python version, do it
|
|
21
21
|
here. Then in the code we can simply import from compat in order to get what we want.
|
|
22
|
-
|
|
22
|
+
"""
|
|
23
23
|
from __future__ import annotations
|
|
@@ -3,17 +3,14 @@
|
|
|
3
3
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
import
|
|
6
|
+
from ansible.utils.display import Display as _Display
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
from importlib.resources import files # pylint: disable=unused-import
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
else:
|
|
18
|
-
from importlib.resources import files
|
|
19
|
-
HAS_IMPORTLIB_RESOURCES = True
|
|
10
|
+
HAS_IMPORTLIB_RESOURCES = True
|
|
11
|
+
|
|
12
|
+
_Display().deprecated(
|
|
13
|
+
msg="The `ansible.compat.importlib_resources` module is deprecated.",
|
|
14
|
+
help_text="Use `importlib.resources` from the Python standard library instead.",
|
|
15
|
+
version="2.23",
|
|
16
|
+
)
|