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
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"""Public API for data tagging."""
|
|
2
|
+
from __future__ import annotations as _annotations
|
|
3
|
+
|
|
4
|
+
import typing as _t
|
|
5
|
+
|
|
6
|
+
from ._internal import _datatag, _deprecator, _traceback, _messages
|
|
7
|
+
from ._internal._datatag import _tags
|
|
8
|
+
|
|
9
|
+
_T = _t.TypeVar('_T')
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
deprecator_from_collection_name = _deprecator.deprecator_from_collection_name
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
def deprecate_value(
|
|
16
|
+
value: _T,
|
|
17
|
+
msg: str,
|
|
18
|
+
*,
|
|
19
|
+
version: str | None = None,
|
|
20
|
+
date: str | None = None,
|
|
21
|
+
collection_name: str | None = None,
|
|
22
|
+
deprecator: _messages.PluginInfo | None = None,
|
|
23
|
+
help_text: str | None = None,
|
|
24
|
+
) -> _T:
|
|
25
|
+
"""
|
|
26
|
+
Return `value` tagged with the given deprecation details.
|
|
27
|
+
The types `None` and `bool` cannot be deprecated and are returned unmodified.
|
|
28
|
+
Raises a `TypeError` if `value` is not a supported type.
|
|
29
|
+
Most callers do not need to provide `collection_name` or `deprecator` -- but provide only one if needed.
|
|
30
|
+
Specify `version` or `date`, but not both.
|
|
31
|
+
If `date` is provided, it should be in the form `YYYY-MM-DD`.
|
|
32
|
+
"""
|
|
33
|
+
_skip_stackwalk = True
|
|
34
|
+
|
|
35
|
+
deprecated = _tags.Deprecated(
|
|
36
|
+
msg=msg,
|
|
37
|
+
help_text=help_text,
|
|
38
|
+
date=date,
|
|
39
|
+
version=version,
|
|
40
|
+
deprecator=_deprecator.get_best_deprecator(deprecator=deprecator, collection_name=collection_name),
|
|
41
|
+
formatted_traceback=_traceback.maybe_capture_traceback(msg, _traceback.TracebackEvent.DEPRECATED_VALUE),
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
return deprecated.tag(value)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def native_type_name(value: object | type, /) -> str:
|
|
48
|
+
"""Return the type name of `value`, substituting the native Python type name for internal tagged types."""
|
|
49
|
+
return _datatag.AnsibleTagHelper.base_type(value).__name__
|
|
@@ -30,8 +30,7 @@ from __future__ import annotations
|
|
|
30
30
|
|
|
31
31
|
import fnmatch
|
|
32
32
|
import sys
|
|
33
|
-
|
|
34
|
-
import ansible.module_utils.compat.typing as t
|
|
33
|
+
import typing as t
|
|
35
34
|
|
|
36
35
|
from ansible.module_utils.facts import timeout
|
|
37
36
|
from ansible.module_utils.facts import collector
|
|
@@ -39,13 +38,13 @@ from ansible.module_utils.common.collections import is_string
|
|
|
39
38
|
|
|
40
39
|
|
|
41
40
|
class AnsibleFactCollector(collector.BaseFactCollector):
|
|
42
|
-
|
|
41
|
+
"""A FactCollector that returns results under 'ansible_facts' top level key.
|
|
43
42
|
|
|
44
43
|
If a namespace if provided, facts will be collected under that namespace.
|
|
45
44
|
For ex, a ansible.module_utils.facts.namespace.PrefixFactNamespace(prefix='ansible_')
|
|
46
45
|
|
|
47
46
|
Has a 'from_gather_subset() constructor that populates collectors based on a
|
|
48
|
-
gather_subset specifier.
|
|
47
|
+
gather_subset specifier."""
|
|
49
48
|
|
|
50
49
|
def __init__(self, collectors=None, namespace=None, filter_spec=None):
|
|
51
50
|
|
|
@@ -102,7 +101,7 @@ class AnsibleFactCollector(collector.BaseFactCollector):
|
|
|
102
101
|
|
|
103
102
|
|
|
104
103
|
class CollectorMetaDataCollector(collector.BaseFactCollector):
|
|
105
|
-
|
|
104
|
+
"""Collector that provides a facts with the gather_subset metadata."""
|
|
106
105
|
|
|
107
106
|
name = 'gather_subset'
|
|
108
107
|
_fact_ids = set() # type: t.Set[str]
|
|
@@ -31,20 +31,19 @@ from __future__ import annotations
|
|
|
31
31
|
from collections import defaultdict
|
|
32
32
|
|
|
33
33
|
import platform
|
|
34
|
-
|
|
35
|
-
import ansible.module_utils.compat.typing as t
|
|
34
|
+
import typing as t
|
|
36
35
|
|
|
37
36
|
from ansible.module_utils.facts import timeout
|
|
38
37
|
|
|
39
38
|
|
|
40
39
|
class CycleFoundInFactDeps(Exception):
|
|
41
|
-
|
|
40
|
+
"""Indicates there is a cycle in fact collector deps
|
|
42
41
|
|
|
43
42
|
If collector-B requires collector-A, and collector-A requires
|
|
44
43
|
collector-B, that is a cycle. In that case, there is no ordering
|
|
45
44
|
that will satisfy B before A and A and before B. That will cause this
|
|
46
45
|
error to be raised.
|
|
47
|
-
|
|
46
|
+
"""
|
|
48
47
|
pass
|
|
49
48
|
|
|
50
49
|
|
|
@@ -64,9 +63,9 @@ class BaseFactCollector:
|
|
|
64
63
|
required_facts = set() # type: t.Set[str]
|
|
65
64
|
|
|
66
65
|
def __init__(self, collectors=None, namespace=None):
|
|
67
|
-
|
|
66
|
+
"""Base class for things that collect facts.
|
|
68
67
|
|
|
69
|
-
'collectors' is an optional list of other FactCollectors for composing.
|
|
68
|
+
'collectors' is an optional list of other FactCollectors for composing."""
|
|
70
69
|
self.collectors = collectors or []
|
|
71
70
|
|
|
72
71
|
# self.namespace is a object with a 'transform' method that transforms
|
|
@@ -88,7 +87,7 @@ class BaseFactCollector:
|
|
|
88
87
|
return key_name
|
|
89
88
|
|
|
90
89
|
def _transform_dict_keys(self, fact_dict):
|
|
91
|
-
|
|
90
|
+
"""update a dicts keys to use new names as transformed by self._transform_name"""
|
|
92
91
|
|
|
93
92
|
if fact_dict is None:
|
|
94
93
|
return {}
|
|
@@ -107,7 +106,7 @@ class BaseFactCollector:
|
|
|
107
106
|
return facts_dict
|
|
108
107
|
|
|
109
108
|
def collect(self, module=None, collected_facts=None):
|
|
110
|
-
|
|
109
|
+
"""do the fact collection
|
|
111
110
|
|
|
112
111
|
'collected_facts' is a object (a dict, likely) that holds all previously
|
|
113
112
|
facts. This is intended to be used if a FactCollector needs to reference
|
|
@@ -115,7 +114,7 @@ class BaseFactCollector:
|
|
|
115
114
|
|
|
116
115
|
Returns a dict of facts.
|
|
117
116
|
|
|
118
|
-
|
|
117
|
+
"""
|
|
119
118
|
facts_dict = {}
|
|
120
119
|
return facts_dict
|
|
121
120
|
|
|
@@ -125,12 +124,12 @@ def get_collector_names(valid_subsets=None,
|
|
|
125
124
|
gather_subset=None,
|
|
126
125
|
aliases_map=None,
|
|
127
126
|
platform_info=None):
|
|
128
|
-
|
|
127
|
+
"""return a set of FactCollector names based on gather_subset spec.
|
|
129
128
|
|
|
130
129
|
gather_subset is a spec describing which facts to gather.
|
|
131
130
|
valid_subsets is a frozenset of potential matches for gather_subset ('all', 'network') etc
|
|
132
131
|
minimal_gather_subsets is a frozenset of matches to always use, even for gather_subset='!all'
|
|
133
|
-
|
|
132
|
+
"""
|
|
134
133
|
|
|
135
134
|
# Retrieve module parameters
|
|
136
135
|
gather_subset = gather_subset or ['all']
|
|
@@ -267,11 +266,11 @@ def _get_requires_by_collector_name(collector_name, all_fact_subsets):
|
|
|
267
266
|
|
|
268
267
|
|
|
269
268
|
def find_unresolved_requires(collector_names, all_fact_subsets):
|
|
270
|
-
|
|
269
|
+
"""Find any collector names that have unresolved requires
|
|
271
270
|
|
|
272
271
|
Returns a list of collector names that correspond to collector
|
|
273
272
|
classes whose .requires_facts() are not in collector_names.
|
|
274
|
-
|
|
273
|
+
"""
|
|
275
274
|
unresolved = set()
|
|
276
275
|
|
|
277
276
|
for collector_name in collector_names:
|
|
@@ -351,7 +350,7 @@ def collector_classes_from_gather_subset(all_collector_classes=None,
|
|
|
351
350
|
gather_subset=None,
|
|
352
351
|
gather_timeout=None,
|
|
353
352
|
platform_info=None):
|
|
354
|
-
|
|
353
|
+
"""return a list of collector classes that match the args"""
|
|
355
354
|
|
|
356
355
|
# use gather_name etc to get the list of collectors
|
|
357
356
|
|
|
@@ -34,19 +34,19 @@ from ansible.module_utils.facts import ansible_collector
|
|
|
34
34
|
|
|
35
35
|
|
|
36
36
|
def get_all_facts(module):
|
|
37
|
-
|
|
37
|
+
"""compat api for ansible 2.2/2.3 module_utils.facts.get_all_facts method
|
|
38
38
|
|
|
39
39
|
Expects module to be an instance of AnsibleModule, with a 'gather_subset' param.
|
|
40
40
|
|
|
41
41
|
returns a dict mapping the bare fact name ('default_ipv4' with no 'ansible_' namespace) to
|
|
42
|
-
the fact value.
|
|
42
|
+
the fact value."""
|
|
43
43
|
|
|
44
44
|
gather_subset = module.params['gather_subset']
|
|
45
45
|
return ansible_facts(module, gather_subset=gather_subset)
|
|
46
46
|
|
|
47
47
|
|
|
48
48
|
def ansible_facts(module, gather_subset=None):
|
|
49
|
-
|
|
49
|
+
"""Compat api for ansible 2.0/2.2/2.3 module_utils.facts.ansible_facts method
|
|
50
50
|
|
|
51
51
|
2.3/2.3 expects a gather_subset arg.
|
|
52
52
|
2.0/2.1 does not except a gather_subset arg
|
|
@@ -57,7 +57,7 @@ def ansible_facts(module, gather_subset=None):
|
|
|
57
57
|
|
|
58
58
|
returns a dict mapping the bare fact name ('default_ipv4' with no 'ansible_' namespace) to
|
|
59
59
|
the fact value.
|
|
60
|
-
|
|
60
|
+
"""
|
|
61
61
|
|
|
62
62
|
gather_subset = gather_subset or module.params.get('gather_subset', ['all'])
|
|
63
63
|
gather_timeout = module.params.get('gather_timeout', 10)
|
|
@@ -45,6 +45,7 @@ class AIXHardware(Hardware):
|
|
|
45
45
|
vgs_facts = self.get_vgs_facts()
|
|
46
46
|
mount_facts = self.get_mount_facts()
|
|
47
47
|
devices_facts = self.get_device_facts()
|
|
48
|
+
uptime_facts = self.get_uptime_facts()
|
|
48
49
|
|
|
49
50
|
hardware_facts.update(cpu_facts)
|
|
50
51
|
hardware_facts.update(memory_facts)
|
|
@@ -52,6 +53,7 @@ class AIXHardware(Hardware):
|
|
|
52
53
|
hardware_facts.update(vgs_facts)
|
|
53
54
|
hardware_facts.update(mount_facts)
|
|
54
55
|
hardware_facts.update(devices_facts)
|
|
56
|
+
hardware_facts.update(uptime_facts)
|
|
55
57
|
|
|
56
58
|
return hardware_facts
|
|
57
59
|
|
|
@@ -123,6 +125,38 @@ class AIXHardware(Hardware):
|
|
|
123
125
|
|
|
124
126
|
return memory_facts
|
|
125
127
|
|
|
128
|
+
def get_uptime_facts(self):
|
|
129
|
+
uptime_facts = {}
|
|
130
|
+
# On AIX, there are no options to get the uptime directly in seconds.
|
|
131
|
+
# Your options are to parse the output of "who", "uptime", or "ps".
|
|
132
|
+
# Only "ps" always provides a field with seconds.
|
|
133
|
+
ps_bin = self.module.get_bin_path("ps")
|
|
134
|
+
if ps_bin is None:
|
|
135
|
+
return uptime_facts
|
|
136
|
+
|
|
137
|
+
ps_cmd = [ps_bin, "-p", "1", "-o", "etime="]
|
|
138
|
+
|
|
139
|
+
rc, out, err = self.module.run_command(ps_cmd)
|
|
140
|
+
if rc != 0:
|
|
141
|
+
return uptime_facts
|
|
142
|
+
|
|
143
|
+
# Parse out
|
|
144
|
+
if out:
|
|
145
|
+
lines = out.splitlines()
|
|
146
|
+
data = lines[0].replace(':', '-').split('-')
|
|
147
|
+
try:
|
|
148
|
+
days = int(data[0])
|
|
149
|
+
hours = int(data[1])
|
|
150
|
+
minutes = int(data[2])
|
|
151
|
+
seconds = int(data[3])
|
|
152
|
+
except (IndexError, ValueError):
|
|
153
|
+
return uptime_facts
|
|
154
|
+
# Calculate uptime in seconds
|
|
155
|
+
uptime_seconds = (days * 86400) + (hours * 3600) + (minutes * 60) + seconds
|
|
156
|
+
uptime_facts['uptime_seconds'] = int(uptime_seconds)
|
|
157
|
+
|
|
158
|
+
return uptime_facts
|
|
159
|
+
|
|
126
160
|
def get_dmi_facts(self):
|
|
127
161
|
dmi_facts = {}
|
|
128
162
|
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
|
|
29
29
|
from __future__ import annotations
|
|
30
30
|
|
|
31
|
-
import
|
|
31
|
+
import typing as t
|
|
32
32
|
|
|
33
33
|
from ansible.module_utils.facts.collector import BaseFactCollector
|
|
34
34
|
|
|
@@ -49,7 +49,7 @@ class HardwareCollector(BaseFactCollector):
|
|
|
49
49
|
_fact_ids = set(['processor',
|
|
50
50
|
'processor_cores',
|
|
51
51
|
'processor_count',
|
|
52
|
-
# TODO: mounts
|
|
52
|
+
# TODO: mounts isn't exactly hardware
|
|
53
53
|
'mounts',
|
|
54
54
|
'devices']) # type: t.Set[str]
|
|
55
55
|
_fact_class = Hardware
|
|
@@ -93,9 +93,7 @@ class DarwinHardware(Hardware):
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
total_used = 0
|
|
96
|
-
page_size = 4096
|
|
97
|
-
if 'hw.pagesize' in self.sysctl:
|
|
98
|
-
page_size = int(self.sysctl['hw.pagesize'])
|
|
96
|
+
page_size = int(self.sysctl.get('hw.pagesize', 4096))
|
|
99
97
|
|
|
100
98
|
vm_stat_command = self.module.get_bin_path('vm_stat')
|
|
101
99
|
if vm_stat_command is None:
|
|
@@ -224,9 +224,9 @@ class FreeBSDHardware(Hardware):
|
|
|
224
224
|
return device_facts
|
|
225
225
|
|
|
226
226
|
def get_dmi_facts(self):
|
|
227
|
-
|
|
227
|
+
""" learn dmi facts from system
|
|
228
228
|
|
|
229
|
-
Use dmidecode executable if available
|
|
229
|
+
Use dmidecode executable if available"""
|
|
230
230
|
|
|
231
231
|
dmi_facts = {}
|
|
232
232
|
|
|
@@ -182,7 +182,7 @@ class LinuxHardware(Hardware):
|
|
|
182
182
|
xen = True
|
|
183
183
|
# Only interested in the first line
|
|
184
184
|
break
|
|
185
|
-
except
|
|
185
|
+
except OSError:
|
|
186
186
|
pass
|
|
187
187
|
|
|
188
188
|
if not os.access("/proc/cpuinfo", os.R_OK):
|
|
@@ -311,10 +311,10 @@ class LinuxHardware(Hardware):
|
|
|
311
311
|
return cpu_facts
|
|
312
312
|
|
|
313
313
|
def get_dmi_facts(self):
|
|
314
|
-
|
|
314
|
+
""" learn dmi facts from system
|
|
315
315
|
|
|
316
316
|
Try /sys first for dmi related facts.
|
|
317
|
-
If that is not available, fall back to dmidecode executable
|
|
317
|
+
If that is not available, fall back to dmidecode executable """
|
|
318
318
|
|
|
319
319
|
dmi_facts = {}
|
|
320
320
|
|
|
@@ -423,13 +423,13 @@ class LinuxHardware(Hardware):
|
|
|
423
423
|
'NA'
|
|
424
424
|
)
|
|
425
425
|
sysinfo_re = re.compile(
|
|
426
|
-
r
|
|
426
|
+
r"""
|
|
427
427
|
^
|
|
428
428
|
(?:Manufacturer:\s+(?P<system_vendor>.+))|
|
|
429
429
|
(?:Type:\s+(?P<product_name>.+))|
|
|
430
430
|
(?:Sequence\ Code:\s+0+(?P<product_serial>.+))
|
|
431
431
|
$
|
|
432
|
-
|
|
432
|
+
""",
|
|
433
433
|
re.VERBOSE | re.MULTILINE
|
|
434
434
|
)
|
|
435
435
|
data = get_file_content('/proc/sysinfo')
|
|
@@ -33,7 +33,7 @@ class FactNamespace:
|
|
|
33
33
|
self.namespace_name = namespace_name
|
|
34
34
|
|
|
35
35
|
def transform(self, name):
|
|
36
|
-
|
|
36
|
+
"""Take a text name, and transforms it as needed (add a namespace prefix, etc)"""
|
|
37
37
|
return name
|
|
38
38
|
|
|
39
39
|
def _underscore(self, name):
|
|
@@ -19,8 +19,7 @@ from __future__ import annotations
|
|
|
19
19
|
|
|
20
20
|
import sys
|
|
21
21
|
import glob
|
|
22
|
-
|
|
23
|
-
import ansible.module_utils.compat.typing as t
|
|
22
|
+
import typing as t
|
|
24
23
|
|
|
25
24
|
from ansible.module_utils.facts.utils import get_file_lines
|
|
26
25
|
from ansible.module_utils.facts.collector import BaseFactCollector
|
|
@@ -18,8 +18,7 @@
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
20
|
import sys
|
|
21
|
-
|
|
22
|
-
import ansible.module_utils.compat.typing as t
|
|
21
|
+
import typing as t
|
|
23
22
|
|
|
24
23
|
from ansible.module_utils.facts.utils import get_file_content
|
|
25
24
|
from ansible.module_utils.facts.network.base import NetworkCollector
|
|
@@ -18,8 +18,7 @@
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
20
|
import sys
|
|
21
|
-
|
|
22
|
-
import ansible.module_utils.compat.typing as t
|
|
21
|
+
import typing as t
|
|
23
22
|
|
|
24
23
|
from ansible.module_utils.facts.utils import get_file_content
|
|
25
24
|
from ansible.module_utils.facts.network.base import NetworkCollector
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
import json
|
|
7
|
-
|
|
8
|
-
import ansible.module_utils.compat.typing as t
|
|
7
|
+
import typing as t
|
|
9
8
|
|
|
10
9
|
from ansible.module_utils.facts.namespace import PrefixFactNamespace
|
|
11
10
|
from ansible.module_utils.facts.collector import BaseFactCollector
|
|
@@ -62,7 +61,7 @@ class FacterFactCollector(BaseFactCollector):
|
|
|
62
61
|
return out
|
|
63
62
|
|
|
64
63
|
def collect(self, module=None, collected_facts=None):
|
|
65
|
-
# Note that this mirrors previous facter behavior, where there
|
|
64
|
+
# Note that this mirrors previous facter behavior, where there isn't
|
|
66
65
|
# a 'ansible_facter' key in the main fact dict, but instead, 'facter_whatever'
|
|
67
66
|
# items are added to the main dict.
|
|
68
67
|
facter_dict = {}
|
|
@@ -16,8 +16,7 @@
|
|
|
16
16
|
from __future__ import annotations
|
|
17
17
|
|
|
18
18
|
import json
|
|
19
|
-
|
|
20
|
-
import ansible.module_utils.compat.typing as t
|
|
19
|
+
import typing as t
|
|
21
20
|
|
|
22
21
|
from ansible.module_utils.facts.namespace import PrefixFactNamespace
|
|
23
22
|
|
|
@@ -25,7 +24,7 @@ from ansible.module_utils.facts.collector import BaseFactCollector
|
|
|
25
24
|
|
|
26
25
|
|
|
27
26
|
class OhaiFactCollector(BaseFactCollector):
|
|
28
|
-
|
|
27
|
+
"""This is a subclass of Facts for including information gathered from Ohai."""
|
|
29
28
|
name = 'ohai'
|
|
30
29
|
_fact_ids = set() # type: t.Set[str]
|
|
31
30
|
|
|
@@ -17,8 +17,6 @@ from __future__ import annotations
|
|
|
17
17
|
|
|
18
18
|
import re
|
|
19
19
|
|
|
20
|
-
from ansible.module_utils.common.text.converters import to_text
|
|
21
|
-
|
|
22
20
|
|
|
23
21
|
def get_sysctl(module, prefixes):
|
|
24
22
|
|
|
@@ -31,8 +29,8 @@ def get_sysctl(module, prefixes):
|
|
|
31
29
|
|
|
32
30
|
try:
|
|
33
31
|
rc, out, err = module.run_command(cmd)
|
|
34
|
-
except
|
|
35
|
-
module.
|
|
32
|
+
except OSError as ex:
|
|
33
|
+
module.error_as_warning('Unable to read sysctl.', exception=ex)
|
|
36
34
|
rc = 1
|
|
37
35
|
|
|
38
36
|
if rc == 0:
|
|
@@ -54,8 +52,8 @@ def get_sysctl(module, prefixes):
|
|
|
54
52
|
|
|
55
53
|
try:
|
|
56
54
|
(key, value) = re.split(r'\s?=\s?|: ', line, maxsplit=1)
|
|
57
|
-
except Exception as
|
|
58
|
-
module.
|
|
55
|
+
except Exception as ex:
|
|
56
|
+
module.error_as_warning(f'Unable to split sysctl line {line!r}.', exception=ex)
|
|
59
57
|
|
|
60
58
|
if key:
|
|
61
59
|
sysctl[key] = value.strip()
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
|
|
18
18
|
from __future__ import annotations
|
|
19
19
|
|
|
20
|
-
import
|
|
20
|
+
import typing as t
|
|
21
21
|
|
|
22
22
|
from ansible.module_utils.facts.collector import BaseFactCollector
|
|
23
23
|
|
|
@@ -38,8 +38,8 @@ class SystemCapabilitiesFactCollector(BaseFactCollector):
|
|
|
38
38
|
# NOTE: -> get_caps_data()/parse_caps_data() for easier mocking -akl
|
|
39
39
|
try:
|
|
40
40
|
rc, out, err = module.run_command([capsh_path, "--print"], errors='surrogate_then_replace', handle_exceptions=False)
|
|
41
|
-
except
|
|
42
|
-
module.
|
|
41
|
+
except OSError as ex:
|
|
42
|
+
module.error_as_warning('Could not query system capabilities.', exception=ex)
|
|
43
43
|
|
|
44
44
|
if rc == 0:
|
|
45
45
|
enforced_caps = []
|
|
@@ -19,10 +19,9 @@ from __future__ import annotations
|
|
|
19
19
|
|
|
20
20
|
import datetime
|
|
21
21
|
import time
|
|
22
|
+
import typing as t
|
|
22
23
|
|
|
23
|
-
import ansible.module_utils.compat.typing as t
|
|
24
24
|
from ansible.module_utils.facts.collector import BaseFactCollector
|
|
25
|
-
from ansible.module_utils.compat.datetime import utcfromtimestamp
|
|
26
25
|
|
|
27
26
|
|
|
28
27
|
class DateTimeFactCollector(BaseFactCollector):
|
|
@@ -36,7 +35,10 @@ class DateTimeFactCollector(BaseFactCollector):
|
|
|
36
35
|
# Store the timestamp once, then get local and UTC versions from that
|
|
37
36
|
epoch_ts = time.time()
|
|
38
37
|
now = datetime.datetime.fromtimestamp(epoch_ts)
|
|
39
|
-
utcnow =
|
|
38
|
+
utcnow = datetime.datetime.fromtimestamp(
|
|
39
|
+
epoch_ts,
|
|
40
|
+
tz=datetime.timezone.utc,
|
|
41
|
+
)
|
|
40
42
|
|
|
41
43
|
date_time_facts['year'] = now.strftime('%Y')
|
|
42
44
|
date_time_facts['month'] = now.strftime('%m')
|