ansible-core 2.18.5rc1__py3-none-any.whl → 2.19.0b2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ansible/_internal/__init__.py +53 -0
- ansible/_internal/_ansiballz.py +265 -0
- ansible/_internal/_collection_proxy.py +47 -0
- ansible/_internal/_datatag/__init__.py +0 -0
- ansible/_internal/_datatag/_tags.py +130 -0
- ansible/_internal/_datatag/_utils.py +19 -0
- ansible/_internal/_datatag/_wrappers.py +33 -0
- ansible/_internal/_errors/__init__.py +0 -0
- ansible/_internal/_errors/_captured.py +128 -0
- ansible/_internal/_errors/_handler.py +91 -0
- ansible/_internal/_errors/_utils.py +310 -0
- ansible/_internal/_json/__init__.py +203 -0
- ansible/_internal/_json/_legacy_encoder.py +34 -0
- ansible/_internal/_json/_profiles/__init__.py +0 -0
- ansible/_internal/_json/_profiles/_cache_persistence.py +55 -0
- ansible/_internal/_json/_profiles/_inventory_legacy.py +40 -0
- ansible/_internal/_json/_profiles/_legacy.py +197 -0
- ansible/_internal/_locking.py +21 -0
- ansible/_internal/_plugins/__init__.py +0 -0
- ansible/_internal/_plugins/_cache.py +57 -0
- ansible/_internal/_task.py +78 -0
- ansible/_internal/_templating/__init__.py +10 -0
- ansible/_internal/_templating/_access.py +86 -0
- ansible/_internal/_templating/_chain_templar.py +63 -0
- ansible/_internal/_templating/_datatag.py +95 -0
- ansible/_internal/_templating/_engine.py +588 -0
- ansible/_internal/_templating/_errors.py +28 -0
- ansible/_internal/_templating/_jinja_bits.py +1066 -0
- ansible/_internal/_templating/_jinja_common.py +332 -0
- ansible/_internal/_templating/_jinja_patches.py +44 -0
- ansible/_internal/_templating/_jinja_plugins.py +345 -0
- ansible/_internal/_templating/_lazy_containers.py +633 -0
- ansible/_internal/_templating/_marker_behaviors.py +103 -0
- ansible/_internal/_templating/_transform.py +63 -0
- ansible/_internal/_templating/_utils.py +107 -0
- ansible/_internal/_wrapt.py +1052 -0
- ansible/_internal/_yaml/__init__.py +0 -0
- ansible/_internal/_yaml/_constructor.py +240 -0
- ansible/_internal/_yaml/_dumper.py +62 -0
- ansible/_internal/_yaml/_errors.py +166 -0
- ansible/_internal/_yaml/_loader.py +66 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/README.md +11 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/action/debug.py +36 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/apply_trust.py +19 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/dump_object.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/finalize.py +16 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/origin.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.py +24 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/python_literal_eval.yml +33 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/tag_names.py +16 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/true_type.py +17 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/filter/unmask.py +49 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.py +21 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/lookup/config.yml +2 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.py +15 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged.yml +19 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.py +18 -0
- ansible/_internal/ansible_collections/ansible/_protomatter/plugins/test/tagged_with.yml +19 -0
- ansible/cli/__init__.py +159 -89
- ansible/cli/_ssh_askpass.py +47 -0
- ansible/cli/adhoc.py +14 -7
- ansible/cli/arguments/option_helpers.py +154 -7
- ansible/cli/config.py +43 -68
- ansible/cli/console.py +10 -8
- ansible/cli/doc.py +62 -53
- ansible/cli/galaxy.py +27 -20
- ansible/cli/inventory.py +28 -26
- ansible/cli/playbook.py +4 -12
- ansible/cli/pull.py +51 -11
- ansible/cli/scripts/ansible_connection_cli_stub.py +7 -7
- ansible/cli/vault.py +12 -11
- ansible/compat/__init__.py +2 -2
- ansible/config/base.yml +166 -112
- ansible/config/manager.py +52 -49
- ansible/constants.py +3 -4
- ansible/errors/__init__.py +277 -235
- ansible/executor/interpreter_discovery.py +28 -149
- ansible/executor/module_common.py +426 -493
- ansible/executor/play_iterator.py +22 -27
- ansible/executor/playbook_executor.py +11 -11
- ansible/executor/powershell/async_watchdog.ps1 +97 -102
- ansible/executor/powershell/async_wrapper.ps1 +202 -151
- ansible/executor/powershell/become_wrapper.ps1 +89 -144
- ansible/executor/powershell/bootstrap_wrapper.ps1 +24 -9
- ansible/executor/powershell/coverage_wrapper.ps1 +82 -135
- ansible/executor/powershell/exec_wrapper.ps1 +462 -196
- ansible/executor/powershell/module_manifest.py +417 -265
- ansible/executor/powershell/module_wrapper.ps1 +169 -186
- ansible/executor/powershell/psrp_fetch_file.ps1 +41 -0
- ansible/executor/powershell/psrp_put_file.ps1 +122 -0
- ansible/executor/powershell/winrm_fetch_file.ps1 +46 -0
- ansible/executor/powershell/winrm_put_file.ps1 +36 -0
- ansible/executor/process/worker.py +161 -96
- ansible/executor/stats.py +5 -5
- ansible/executor/task_executor.py +268 -258
- ansible/executor/task_queue_manager.py +124 -90
- ansible/executor/task_result.py +183 -78
- ansible/galaxy/__init__.py +2 -2
- ansible/galaxy/api.py +22 -18
- ansible/galaxy/collection/__init__.py +1 -1
- ansible/galaxy/collection/concrete_artifact_manager.py +8 -11
- ansible/galaxy/dependency_resolution/dataclasses.py +14 -4
- ansible/galaxy/dependency_resolution/providers.py +1 -1
- ansible/galaxy/dependency_resolution/reporters.py +81 -0
- ansible/galaxy/role.py +4 -8
- ansible/galaxy/token.py +28 -21
- ansible/inventory/data.py +47 -57
- ansible/inventory/group.py +44 -72
- ansible/inventory/helpers.py +9 -0
- ansible/inventory/host.py +32 -54
- ansible/inventory/manager.py +78 -34
- ansible/keyword_desc.yml +1 -1
- ansible/module_utils/_internal/__init__.py +55 -0
- ansible/module_utils/_internal/_ambient_context.py +58 -0
- ansible/module_utils/_internal/_ansiballz.py +133 -0
- ansible/module_utils/_internal/_concurrent/_daemon_threading.py +1 -0
- ansible/module_utils/_internal/_dataclass_annotation_patch.py +64 -0
- ansible/module_utils/_internal/_dataclass_validation.py +217 -0
- ansible/module_utils/_internal/_datatag/__init__.py +928 -0
- ansible/module_utils/_internal/_datatag/_tags.py +38 -0
- ansible/module_utils/_internal/_debugging.py +31 -0
- ansible/module_utils/_internal/_errors.py +30 -0
- ansible/module_utils/_internal/_json/__init__.py +63 -0
- ansible/module_utils/_internal/_json/_legacy_encoder.py +26 -0
- ansible/module_utils/_internal/_json/_profiles/__init__.py +410 -0
- ansible/module_utils/_internal/_json/_profiles/_fallback_to_str.py +73 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_c2m.py +31 -0
- ansible/module_utils/_internal/_json/_profiles/_module_legacy_m2c.py +35 -0
- ansible/module_utils/_internal/_json/_profiles/_module_modern_c2m.py +35 -0
- ansible/module_utils/_internal/_json/_profiles/_module_modern_m2c.py +33 -0
- ansible/module_utils/_internal/_json/_profiles/_tagless.py +50 -0
- ansible/module_utils/_internal/_patches/__init__.py +66 -0
- ansible/module_utils/_internal/_patches/_dataclass_annotation_patch.py +55 -0
- ansible/module_utils/_internal/_patches/_socket_patch.py +34 -0
- ansible/module_utils/_internal/_patches/_sys_intern_patch.py +34 -0
- ansible/module_utils/_internal/_plugin_exec_context.py +49 -0
- ansible/module_utils/_internal/_testing.py +0 -0
- ansible/module_utils/_internal/_traceback.py +89 -0
- ansible/module_utils/ansible_release.py +2 -2
- ansible/module_utils/api.py +1 -2
- ansible/module_utils/basic.py +152 -120
- ansible/module_utils/common/_utils.py +24 -28
- ansible/module_utils/common/collections.py +1 -2
- ansible/module_utils/common/dict_transformations.py +2 -2
- ansible/module_utils/common/file.py +2 -2
- ansible/module_utils/common/json.py +90 -84
- ansible/module_utils/common/locale.py +2 -2
- ansible/module_utils/common/messages.py +108 -0
- ansible/module_utils/common/parameters.py +27 -24
- ansible/module_utils/common/process.py +2 -2
- ansible/module_utils/common/respawn.py +41 -19
- ansible/module_utils/common/sentinel.py +66 -0
- ansible/module_utils/common/sys_info.py +8 -8
- ansible/module_utils/common/text/converters.py +16 -37
- ansible/module_utils/common/validation.py +35 -24
- ansible/module_utils/common/warnings.py +86 -25
- ansible/module_utils/common/yaml.py +29 -3
- ansible/module_utils/compat/datetime.py +33 -21
- ansible/module_utils/compat/paramiko.py +21 -10
- ansible/module_utils/compat/typing.py +6 -5
- ansible/module_utils/connection.py +2 -2
- ansible/module_utils/csharp/Ansible.Basic.cs +14 -11
- ansible/module_utils/csharp/Ansible.Become.cs +1 -0
- ansible/module_utils/csharp/Ansible._Async.cs +517 -0
- ansible/module_utils/datatag.py +46 -0
- ansible/module_utils/distro/__init__.py +2 -2
- ansible/module_utils/facts/ansible_collector.py +4 -5
- ansible/module_utils/facts/collector.py +13 -14
- ansible/module_utils/facts/compat.py +4 -4
- ansible/module_utils/facts/default_collectors.py +1 -1
- ansible/module_utils/facts/hardware/aix.py +34 -0
- ansible/module_utils/facts/hardware/base.py +1 -1
- ansible/module_utils/facts/hardware/darwin.py +1 -3
- ansible/module_utils/facts/hardware/freebsd.py +2 -2
- ansible/module_utils/facts/hardware/linux.py +4 -4
- ansible/module_utils/facts/namespace.py +1 -1
- ansible/module_utils/facts/network/base.py +1 -1
- ansible/module_utils/facts/network/fc_wwn.py +1 -2
- ansible/module_utils/facts/network/iscsi.py +1 -2
- ansible/module_utils/facts/network/nvme.py +1 -2
- ansible/module_utils/facts/other/facter.py +1 -2
- ansible/module_utils/facts/other/ohai.py +2 -3
- ansible/module_utils/facts/system/apparmor.py +1 -2
- ansible/module_utils/facts/system/caps.py +1 -1
- ansible/module_utils/facts/system/chroot.py +1 -2
- ansible/module_utils/facts/system/cmdline.py +1 -2
- ansible/module_utils/facts/system/date_time.py +5 -3
- ansible/module_utils/facts/system/distribution.py +9 -8
- ansible/module_utils/facts/system/dns.py +1 -1
- ansible/module_utils/facts/system/env.py +1 -2
- ansible/module_utils/facts/system/fips.py +7 -20
- ansible/module_utils/facts/system/loadavg.py +1 -2
- ansible/module_utils/facts/system/local.py +1 -2
- ansible/module_utils/facts/system/lsb.py +1 -2
- ansible/module_utils/facts/system/pkg_mgr.py +1 -2
- ansible/module_utils/facts/system/platform.py +1 -2
- ansible/module_utils/facts/system/python.py +1 -2
- ansible/module_utils/facts/system/selinux.py +1 -1
- ansible/module_utils/facts/system/service_mgr.py +1 -2
- ansible/module_utils/facts/system/ssh_pub_keys.py +1 -1
- ansible/module_utils/facts/system/systemd.py +1 -1
- ansible/module_utils/facts/system/user.py +1 -2
- ansible/module_utils/facts/utils.py +3 -3
- ansible/module_utils/facts/virtual/base.py +1 -1
- ansible/module_utils/facts/virtual/sunos.py +3 -15
- ansible/module_utils/facts/virtual/sysctl.py +3 -16
- ansible/module_utils/json_utils.py +2 -2
- ansible/module_utils/parsing/convert_bool.py +1 -1
- ansible/module_utils/service.py +18 -21
- ansible/module_utils/splitter.py +7 -7
- ansible/module_utils/testing.py +31 -0
- ansible/module_utils/urls.py +60 -31
- ansible/modules/add_host.py +4 -4
- ansible/modules/apt.py +60 -46
- ansible/modules/apt_key.py +19 -12
- ansible/modules/apt_repository.py +19 -16
- ansible/modules/assemble.py +6 -6
- ansible/modules/assert.py +4 -4
- ansible/modules/async_status.py +10 -12
- ansible/modules/async_wrapper.py +8 -3
- ansible/modules/blockinfile.py +6 -7
- ansible/modules/command.py +10 -17
- ansible/modules/copy.py +57 -144
- ansible/modules/cron.py +20 -15
- ansible/modules/deb822_repository.py +8 -9
- ansible/modules/debconf.py +5 -5
- ansible/modules/debug.py +4 -4
- ansible/modules/dnf.py +8 -8
- ansible/modules/dnf5.py +39 -13
- ansible/modules/dpkg_selections.py +4 -4
- ansible/modules/expect.py +8 -10
- ansible/modules/fail.py +4 -4
- ansible/modules/fetch.py +4 -4
- ansible/modules/file.py +174 -133
- ansible/modules/find.py +19 -17
- ansible/modules/gather_facts.py +3 -3
- ansible/modules/get_url.py +59 -53
- ansible/modules/getent.py +7 -9
- ansible/modules/git.py +28 -25
- ansible/modules/group.py +6 -6
- ansible/modules/group_by.py +4 -4
- ansible/modules/hostname.py +13 -29
- ansible/modules/import_playbook.py +6 -6
- ansible/modules/import_role.py +6 -6
- ansible/modules/import_tasks.py +6 -6
- ansible/modules/include_role.py +6 -6
- ansible/modules/include_tasks.py +6 -6
- ansible/modules/include_vars.py +6 -6
- ansible/modules/iptables.py +86 -73
- ansible/modules/known_hosts.py +10 -10
- ansible/modules/lineinfile.py +5 -5
- ansible/modules/meta.py +4 -4
- ansible/modules/mount_facts.py +2 -2
- ansible/modules/package.py +4 -4
- ansible/modules/package_facts.py +22 -10
- ansible/modules/pause.py +6 -6
- ansible/modules/ping.py +6 -6
- ansible/modules/pip.py +10 -11
- ansible/modules/raw.py +4 -4
- ansible/modules/reboot.py +6 -6
- ansible/modules/replace.py +9 -13
- ansible/modules/rpm_key.py +7 -8
- ansible/modules/script.py +4 -4
- ansible/modules/service.py +7 -8
- ansible/modules/service_facts.py +87 -10
- ansible/modules/set_fact.py +5 -5
- ansible/modules/set_stats.py +4 -4
- ansible/modules/setup.py +2 -2
- ansible/modules/shell.py +6 -6
- ansible/modules/slurp.py +6 -6
- ansible/modules/stat.py +9 -23
- ansible/modules/subversion.py +15 -15
- ansible/modules/systemd.py +6 -6
- ansible/modules/systemd_service.py +6 -6
- ansible/modules/sysvinit.py +6 -6
- ansible/modules/tempfile.py +5 -6
- ansible/modules/template.py +6 -6
- ansible/modules/unarchive.py +32 -11
- ansible/modules/uri.py +33 -26
- ansible/modules/user.py +53 -34
- ansible/modules/validate_argument_spec.py +10 -7
- ansible/modules/wait_for.py +32 -27
- ansible/modules/wait_for_connection.py +6 -6
- ansible/modules/yum_repository.py +6 -6
- ansible/parsing/ajson.py +14 -32
- ansible/parsing/dataloader.py +99 -54
- ansible/parsing/mod_args.py +28 -44
- ansible/parsing/plugin_docs.py +21 -86
- ansible/parsing/quoting.py +1 -1
- ansible/parsing/splitter.py +27 -12
- ansible/parsing/utils/addresses.py +24 -24
- ansible/parsing/utils/jsonify.py +5 -1
- ansible/parsing/utils/yaml.py +32 -61
- ansible/parsing/vault/__init__.py +319 -87
- ansible/parsing/yaml/__init__.py +0 -18
- ansible/parsing/yaml/dumper.py +6 -120
- ansible/parsing/yaml/loader.py +6 -39
- ansible/parsing/yaml/objects.py +43 -335
- ansible/playbook/__init__.py +1 -1
- ansible/playbook/attribute.py +8 -3
- ansible/playbook/base.py +182 -132
- ansible/playbook/block.py +26 -24
- ansible/playbook/collectionsearch.py +1 -15
- ansible/playbook/conditional.py +3 -77
- ansible/playbook/handler.py +8 -2
- ansible/playbook/helpers.py +41 -53
- ansible/playbook/included_file.py +31 -27
- ansible/playbook/loop_control.py +2 -2
- ansible/playbook/play.py +85 -44
- ansible/playbook/play_context.py +12 -17
- ansible/playbook/playbook_include.py +14 -15
- ansible/playbook/role/__init__.py +24 -26
- ansible/playbook/role/definition.py +15 -17
- ansible/playbook/role/include.py +2 -4
- ansible/playbook/role/metadata.py +10 -11
- ansible/playbook/role_include.py +3 -3
- ansible/playbook/taggable.py +13 -8
- ansible/playbook/task.py +188 -118
- ansible/playbook/task_include.py +5 -5
- ansible/plugins/__init__.py +68 -21
- ansible/plugins/action/__init__.py +209 -176
- ansible/plugins/action/add_host.py +1 -1
- ansible/plugins/action/assemble.py +1 -1
- ansible/plugins/action/assert.py +54 -66
- ansible/plugins/action/copy.py +7 -11
- ansible/plugins/action/debug.py +37 -31
- ansible/plugins/action/dnf.py +3 -4
- ansible/plugins/action/fail.py +1 -1
- ansible/plugins/action/fetch.py +4 -5
- ansible/plugins/action/gather_facts.py +7 -6
- ansible/plugins/action/group_by.py +1 -1
- ansible/plugins/action/include_vars.py +10 -11
- ansible/plugins/action/package.py +3 -6
- ansible/plugins/action/pause.py +2 -2
- ansible/plugins/action/script.py +15 -8
- ansible/plugins/action/service.py +6 -11
- ansible/plugins/action/set_fact.py +3 -12
- ansible/plugins/action/set_stats.py +3 -8
- ansible/plugins/action/template.py +35 -59
- ansible/plugins/action/unarchive.py +1 -1
- ansible/plugins/action/validate_argument_spec.py +5 -5
- ansible/plugins/action/wait_for_connection.py +1 -1
- ansible/plugins/become/__init__.py +31 -8
- ansible/plugins/become/runas.py +71 -0
- ansible/plugins/become/su.py +13 -8
- ansible/plugins/become/sudo.py +19 -0
- ansible/plugins/cache/__init__.py +35 -44
- ansible/plugins/cache/base.py +8 -0
- ansible/plugins/cache/jsonfile.py +10 -16
- ansible/plugins/cache/memory.py +6 -12
- ansible/plugins/callback/__init__.py +284 -179
- ansible/plugins/callback/default.py +99 -92
- ansible/plugins/callback/junit.py +44 -39
- ansible/plugins/callback/minimal.py +28 -25
- ansible/plugins/callback/oneline.py +28 -21
- ansible/plugins/callback/tree.py +16 -11
- ansible/plugins/connection/__init__.py +47 -34
- ansible/plugins/connection/local.py +150 -54
- ansible/plugins/connection/paramiko_ssh.py +21 -18
- ansible/plugins/connection/psrp.py +76 -165
- ansible/plugins/connection/ssh.py +301 -78
- ansible/plugins/connection/winrm.py +58 -140
- ansible/plugins/doc_fragments/action_common_attributes.py +14 -14
- ansible/plugins/doc_fragments/action_core.py +6 -6
- ansible/plugins/doc_fragments/backup.py +2 -2
- ansible/plugins/doc_fragments/checksum_common.py +27 -0
- ansible/plugins/doc_fragments/constructed.py +6 -2
- ansible/plugins/doc_fragments/decrypt.py +2 -2
- ansible/plugins/doc_fragments/default_callback.py +2 -2
- ansible/plugins/doc_fragments/files.py +2 -2
- ansible/plugins/doc_fragments/inventory_cache.py +2 -2
- ansible/plugins/doc_fragments/result_format_callback.py +2 -2
- ansible/plugins/doc_fragments/return_common.py +2 -2
- ansible/plugins/doc_fragments/template_common.py +4 -4
- ansible/plugins/doc_fragments/url.py +17 -1
- ansible/plugins/doc_fragments/url_windows.py +2 -2
- ansible/plugins/doc_fragments/validate.py +2 -2
- ansible/plugins/doc_fragments/vars_plugin_staging.py +2 -2
- ansible/plugins/filter/__init__.py +6 -2
- ansible/plugins/filter/b64decode.yml +22 -0
- ansible/plugins/filter/b64encode.yml +22 -0
- ansible/plugins/filter/bool.yml +11 -4
- ansible/plugins/filter/core.py +225 -108
- ansible/plugins/filter/encryption.py +32 -32
- ansible/plugins/filter/flatten.yml +3 -2
- ansible/plugins/filter/human_to_bytes.yml +1 -1
- ansible/plugins/filter/mathstuff.py +30 -37
- ansible/plugins/filter/password_hash.yml +8 -0
- ansible/plugins/filter/regex_search.yml +1 -4
- ansible/plugins/filter/split.yml +1 -1
- ansible/plugins/filter/to_nice_yaml.yml +0 -4
- ansible/plugins/filter/to_yaml.yml +0 -4
- ansible/plugins/filter/unvault.yml +1 -1
- ansible/plugins/filter/urls.py +1 -1
- ansible/plugins/filter/urlsplit.py +8 -9
- ansible/plugins/filter/vault.yml +14 -9
- ansible/plugins/filter/win_basename.yml +6 -1
- ansible/plugins/filter/win_dirname.yml +5 -0
- ansible/plugins/inventory/__init__.py +97 -77
- ansible/plugins/inventory/advanced_host_list.py +7 -5
- ansible/plugins/inventory/auto.py +11 -4
- ansible/plugins/inventory/constructed.py +21 -24
- ansible/plugins/inventory/generator.py +16 -11
- ansible/plugins/inventory/host_list.py +7 -5
- ansible/plugins/inventory/ini.py +78 -44
- ansible/plugins/inventory/script.py +189 -119
- ansible/plugins/inventory/toml.py +16 -126
- ansible/plugins/inventory/yaml.py +10 -8
- ansible/plugins/list.py +3 -3
- ansible/plugins/loader.py +197 -82
- ansible/plugins/lookup/__init__.py +21 -4
- ansible/plugins/lookup/config.py +21 -35
- ansible/plugins/lookup/csvfile.py +3 -2
- ansible/plugins/lookup/dict.py +1 -6
- ansible/plugins/lookup/env.py +12 -9
- ansible/plugins/lookup/file.py +5 -8
- ansible/plugins/lookup/first_found.py +86 -55
- ansible/plugins/lookup/indexed_items.py +1 -10
- ansible/plugins/lookup/ini.py +14 -13
- ansible/plugins/lookup/items.py +1 -1
- ansible/plugins/lookup/lines.py +8 -1
- ansible/plugins/lookup/list.py +1 -1
- ansible/plugins/lookup/nested.py +2 -18
- ansible/plugins/lookup/password.py +5 -5
- ansible/plugins/lookup/pipe.py +5 -7
- ansible/plugins/lookup/sequence.py +18 -8
- ansible/plugins/lookup/subelements.py +1 -4
- ansible/plugins/lookup/template.py +42 -36
- ansible/plugins/lookup/together.py +0 -12
- ansible/plugins/lookup/unvault.py +1 -5
- ansible/plugins/lookup/url.py +2 -8
- ansible/plugins/lookup/vars.py +16 -24
- ansible/plugins/shell/__init__.py +2 -2
- ansible/plugins/shell/cmd.py +2 -2
- ansible/plugins/shell/powershell.py +39 -22
- ansible/plugins/shell/sh.py +3 -2
- ansible/plugins/strategy/__init__.py +159 -184
- ansible/plugins/strategy/debug.py +2 -2
- ansible/plugins/strategy/free.py +16 -31
- ansible/plugins/strategy/host_pinned.py +2 -2
- ansible/plugins/strategy/linear.py +41 -41
- ansible/plugins/terminal/__init__.py +4 -4
- ansible/plugins/test/__init__.py +7 -2
- ansible/plugins/test/core.py +55 -21
- ansible/plugins/test/files.py +1 -1
- ansible/plugins/test/mathstuff.py +3 -3
- ansible/plugins/test/uri.py +3 -3
- ansible/plugins/vars/host_group_vars.py +7 -14
- ansible/release.py +2 -2
- ansible/template/__init__.py +370 -944
- ansible/utils/__init__.py +0 -18
- ansible/utils/_ssh_agent.py +657 -0
- ansible/utils/collection_loader/__init__.py +52 -5
- ansible/utils/collection_loader/_collection_config.py +5 -6
- ansible/utils/collection_loader/_collection_finder.py +79 -93
- ansible/utils/collection_loader/_collection_meta.py +13 -8
- ansible/utils/display.py +433 -63
- ansible/utils/encrypt.py +27 -19
- ansible/utils/fqcn.py +2 -2
- ansible/utils/hashing.py +2 -2
- ansible/utils/helpers.py +2 -2
- ansible/utils/listify.py +8 -8
- ansible/utils/lock.py +2 -2
- ansible/utils/path.py +4 -4
- ansible/utils/plugin_docs.py +14 -13
- ansible/utils/sentinel.py +4 -62
- ansible/utils/singleton.py +2 -0
- ansible/utils/ssh_functions.py +1 -1
- ansible/utils/unsafe_proxy.py +23 -332
- ansible/utils/vars.py +51 -8
- ansible/utils/version.py +2 -2
- ansible/vars/clean.py +5 -5
- ansible/vars/hostvars.py +60 -90
- ansible/vars/manager.py +206 -282
- ansible/vars/reserved.py +8 -9
- ansible_core-2.19.0b2.dist-info/BSD-3-Clause.txt +28 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/METADATA +5 -4
- ansible_core-2.19.0b2.dist-info/RECORD +1072 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/WHEEL +1 -1
- ansible_test/_data/completion/docker.txt +7 -7
- ansible_test/_data/completion/remote.txt +6 -6
- ansible_test/_data/completion/windows.txt +1 -0
- ansible_test/_data/requirements/ansible.txt +2 -2
- ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
- ansible_test/_data/requirements/sanity.changelog.txt +1 -1
- ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
- ansible_test/_data/requirements/sanity.pylint.txt +4 -4
- ansible_test/_data/requirements/sanity.validate-modules.txt +2 -2
- ansible_test/_data/requirements/sanity.yamllint.txt +1 -1
- ansible_test/_data/requirements/units.txt +1 -0
- ansible_test/_internal/__init__.py +1 -0
- ansible_test/_internal/ansible_util.py +2 -0
- ansible_test/_internal/become.py +1 -0
- ansible_test/_internal/bootstrap.py +1 -0
- ansible_test/_internal/cache.py +1 -0
- ansible_test/_internal/cgroup.py +1 -0
- ansible_test/_internal/ci/__init__.py +1 -0
- ansible_test/_internal/ci/azp.py +1 -0
- ansible_test/_internal/ci/local.py +1 -0
- ansible_test/_internal/classification/__init__.py +1 -0
- ansible_test/_internal/classification/common.py +1 -0
- ansible_test/_internal/classification/csharp.py +1 -0
- ansible_test/_internal/classification/powershell.py +1 -0
- ansible_test/_internal/classification/python.py +1 -0
- ansible_test/_internal/cli/__init__.py +1 -0
- ansible_test/_internal/cli/actions.py +1 -0
- ansible_test/_internal/cli/argparsing/__init__.py +1 -0
- ansible_test/_internal/cli/argparsing/actions.py +1 -0
- ansible_test/_internal/cli/argparsing/argcompletion.py +1 -0
- ansible_test/_internal/cli/argparsing/parsers.py +1 -0
- ansible_test/_internal/cli/commands/__init__.py +11 -0
- ansible_test/_internal/cli/commands/coverage/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/__init__.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/combine.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/expand.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/filter.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/generate.py +1 -0
- ansible_test/_internal/cli/commands/coverage/analyze/targets/missing.py +1 -0
- ansible_test/_internal/cli/commands/coverage/combine.py +1 -0
- ansible_test/_internal/cli/commands/coverage/erase.py +1 -0
- ansible_test/_internal/cli/commands/coverage/html.py +1 -0
- ansible_test/_internal/cli/commands/coverage/report.py +1 -0
- ansible_test/_internal/cli/commands/coverage/xml.py +1 -0
- ansible_test/_internal/cli/commands/env.py +1 -0
- ansible_test/_internal/cli/commands/integration/__init__.py +1 -0
- ansible_test/_internal/cli/commands/integration/network.py +1 -0
- ansible_test/_internal/cli/commands/integration/posix.py +1 -0
- ansible_test/_internal/cli/commands/integration/windows.py +1 -0
- ansible_test/_internal/cli/commands/sanity.py +9 -0
- ansible_test/_internal/cli/commands/shell.py +1 -0
- ansible_test/_internal/cli/commands/units.py +1 -0
- ansible_test/_internal/cli/compat.py +1 -0
- ansible_test/_internal/cli/completers.py +1 -0
- ansible_test/_internal/cli/converters.py +1 -0
- ansible_test/_internal/cli/environments.py +1 -0
- ansible_test/_internal/cli/epilog.py +1 -0
- ansible_test/_internal/cli/parsers/__init__.py +1 -0
- ansible_test/_internal/cli/parsers/base_argument_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/helpers.py +1 -0
- ansible_test/_internal/cli/parsers/host_config_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/key_value_parsers.py +1 -0
- ansible_test/_internal/cli/parsers/value_parsers.py +1 -0
- ansible_test/_internal/commands/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/__init__.py +2 -1
- ansible_test/_internal/commands/coverage/analyze/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/__init__.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/combine.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/expand.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/filter.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/generate.py +1 -0
- ansible_test/_internal/commands/coverage/analyze/targets/missing.py +1 -0
- ansible_test/_internal/commands/coverage/combine.py +2 -1
- ansible_test/_internal/commands/coverage/erase.py +1 -0
- ansible_test/_internal/commands/coverage/html.py +1 -0
- ansible_test/_internal/commands/coverage/report.py +1 -0
- ansible_test/_internal/commands/coverage/xml.py +1 -0
- ansible_test/_internal/commands/env/__init__.py +2 -0
- ansible_test/_internal/commands/integration/__init__.py +4 -0
- ansible_test/_internal/commands/integration/cloud/__init__.py +1 -0
- ansible_test/_internal/commands/integration/cloud/acme.py +2 -1
- ansible_test/_internal/commands/integration/cloud/aws.py +1 -0
- ansible_test/_internal/commands/integration/cloud/azure.py +1 -0
- ansible_test/_internal/commands/integration/cloud/cs.py +1 -0
- ansible_test/_internal/commands/integration/cloud/digitalocean.py +1 -0
- ansible_test/_internal/commands/integration/cloud/galaxy.py +3 -2
- ansible_test/_internal/commands/integration/cloud/hcloud.py +1 -0
- ansible_test/_internal/commands/integration/cloud/httptester.py +2 -1
- ansible_test/_internal/commands/integration/cloud/nios.py +2 -1
- ansible_test/_internal/commands/integration/cloud/opennebula.py +1 -0
- ansible_test/_internal/commands/integration/cloud/openshift.py +1 -0
- ansible_test/_internal/commands/integration/cloud/scaleway.py +1 -0
- ansible_test/_internal/commands/integration/cloud/vcenter.py +1 -0
- ansible_test/_internal/commands/integration/cloud/vultr.py +1 -0
- ansible_test/_internal/commands/integration/coverage.py +1 -0
- ansible_test/_internal/commands/integration/filters.py +1 -0
- ansible_test/_internal/commands/integration/network.py +1 -0
- ansible_test/_internal/commands/integration/posix.py +1 -0
- ansible_test/_internal/commands/integration/windows.py +1 -0
- ansible_test/_internal/commands/sanity/__init__.py +16 -1
- ansible_test/_internal/commands/sanity/ansible_doc.py +1 -0
- ansible_test/_internal/commands/sanity/bin_symlinks.py +1 -0
- ansible_test/_internal/commands/sanity/compile.py +1 -0
- ansible_test/_internal/commands/sanity/ignores.py +1 -0
- ansible_test/_internal/commands/sanity/import.py +1 -0
- ansible_test/_internal/commands/sanity/integration_aliases.py +1 -0
- ansible_test/_internal/commands/sanity/pep8.py +1 -0
- ansible_test/_internal/commands/sanity/pslint.py +1 -0
- ansible_test/_internal/commands/sanity/pylint.py +24 -26
- ansible_test/_internal/commands/sanity/shellcheck.py +1 -0
- ansible_test/_internal/commands/sanity/validate_modules.py +1 -0
- ansible_test/_internal/commands/sanity/yamllint.py +1 -0
- ansible_test/_internal/commands/shell/__init__.py +1 -0
- ansible_test/_internal/commands/units/__init__.py +1 -0
- ansible_test/_internal/compat/__init__.py +1 -0
- ansible_test/_internal/compat/packaging.py +1 -0
- ansible_test/_internal/compat/yaml.py +1 -0
- ansible_test/_internal/completion.py +1 -0
- ansible_test/_internal/config.py +2 -0
- ansible_test/_internal/connections.py +1 -0
- ansible_test/_internal/constants.py +1 -0
- ansible_test/_internal/containers.py +1 -0
- ansible_test/_internal/content_config.py +1 -0
- ansible_test/_internal/core_ci.py +1 -0
- ansible_test/_internal/coverage_util.py +11 -10
- ansible_test/_internal/data.py +1 -0
- ansible_test/_internal/delegation.py +1 -0
- ansible_test/_internal/dev/__init__.py +1 -0
- ansible_test/_internal/dev/container_probe.py +1 -0
- ansible_test/_internal/diff.py +3 -2
- ansible_test/_internal/docker_util.py +2 -1
- ansible_test/_internal/encoding.py +1 -0
- ansible_test/_internal/executor.py +1 -0
- ansible_test/_internal/git.py +1 -0
- ansible_test/_internal/host_configs.py +1 -0
- ansible_test/_internal/host_profiles.py +1 -0
- ansible_test/_internal/http.py +1 -0
- ansible_test/_internal/init.py +1 -0
- ansible_test/_internal/inventory.py +35 -3
- ansible_test/_internal/io.py +1 -0
- ansible_test/_internal/metadata.py +1 -0
- ansible_test/_internal/payload.py +1 -0
- ansible_test/_internal/provider/__init__.py +1 -0
- ansible_test/_internal/provider/layout/__init__.py +1 -0
- ansible_test/_internal/provider/layout/ansible.py +1 -0
- ansible_test/_internal/provider/layout/collection.py +1 -0
- ansible_test/_internal/provider/layout/unsupported.py +1 -0
- ansible_test/_internal/provider/source/__init__.py +1 -0
- ansible_test/_internal/provider/source/git.py +1 -0
- ansible_test/_internal/provider/source/installed.py +1 -0
- ansible_test/_internal/provider/source/unsupported.py +1 -0
- ansible_test/_internal/provider/source/unversioned.py +1 -0
- ansible_test/_internal/provisioning.py +1 -0
- ansible_test/_internal/pypi_proxy.py +6 -5
- ansible_test/_internal/python_requirements.py +1 -0
- ansible_test/_internal/ssh.py +1 -0
- ansible_test/_internal/target.py +1 -0
- ansible_test/_internal/test.py +3 -2
- ansible_test/_internal/thread.py +1 -0
- ansible_test/_internal/timeout.py +1 -0
- ansible_test/_internal/util.py +1 -0
- ansible_test/_internal/util_common.py +5 -2
- ansible_test/_internal/venv.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/action-plugin-docs.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/changelog/sphinx.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/changelog.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/empty-init.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/line-endings.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-assert.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-get-exception.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-illegal-filenames.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/no-smart-quotes.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/replace-urlopen.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/runtime-metadata.py +28 -1
- ansible_test/_util/controller/sanity/code-smell/shebang.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/symlinks.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/use-argspec-type-path.py +1 -0
- ansible_test/_util/controller/sanity/code-smell/use-compat-six.py +1 -0
- ansible_test/_util/controller/sanity/integration-aliases/yaml_to_json.py +2 -1
- ansible_test/_util/controller/sanity/pep8/current-ignore.txt +4 -0
- ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +7 -5
- ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +7 -5
- ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +7 -5
- ansible_test/_util/controller/sanity/pylint/config/collection.cfg +3 -5
- ansible_test/_util/controller/sanity/pylint/config/default.cfg +7 -7
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +1 -13
- ansible_test/_util/controller/sanity/pylint/plugins/hide_unraisable.py +1 -0
- ansible_test/_util/controller/sanity/pylint/plugins/string_format.py +1 -8
- ansible_test/_util/controller/sanity/pylint/plugins/unwanted.py +1 -8
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +55 -28
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/module_args.py +12 -5
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +13 -2
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/utils.py +1 -0
- ansible_test/_util/controller/sanity/yamllint/yamllinter.py +35 -17
- ansible_test/_util/controller/tools/collection_detail.py +1 -0
- ansible_test/_util/controller/tools/yaml_to_json.py +2 -1
- ansible_test/_util/target/pytest/plugins/ansible_forked.py +6 -1
- ansible_test/_util/target/pytest/plugins/ansible_pytest_collections.py +2 -1
- ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +1 -0
- ansible_test/_util/target/sanity/compile/compile.py +1 -0
- ansible_test/_util/target/sanity/import/importer.py +15 -16
- ansible_test/_util/target/setup/bootstrap.sh +9 -20
- ansible_test/_util/target/setup/probe_cgroups.py +1 -0
- ansible_test/_util/target/setup/quiet_pip.py +1 -0
- ansible_test/_util/target/setup/requirements.py +35 -27
- ansible_test/_util/target/tools/virtualenvcheck.py +2 -1
- ansible_test/_util/target/tools/yamlcheck.py +2 -1
- ansible/compat/selectors.py +0 -32
- ansible/errors/yaml_strings.py +0 -138
- ansible/executor/action_write_locks.py +0 -44
- ansible/executor/discovery/python_target.py +0 -47
- ansible/executor/powershell/module_powershell_wrapper.ps1 +0 -86
- ansible/executor/powershell/module_script_wrapper.ps1 +0 -22
- ansible/module_utils/compat/importlib.py +0 -26
- ansible/module_utils/compat/selectors.py +0 -32
- ansible/module_utils/pycompat24.py +0 -73
- ansible/parsing/yaml/constructor.py +0 -178
- ansible/template/native_helpers.py +0 -251
- ansible/template/template.py +0 -43
- ansible/template/vars.py +0 -77
- ansible/utils/native_jinja.py +0 -11
- ansible/vars/fact_cache.py +0 -71
- ansible_core-2.18.5rc1.dist-info/RECORD +0 -992
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/Apache-License.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/COPYING +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/MIT-license.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/PSF-license.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/entry_points.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/simplified_bsd.txt +0 -0
- {ansible_core-2.18.5rc1.dist-info → ansible_core-2.19.0b2.dist-info}/top_level.txt +0 -0
ansible/modules/command.py
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
from __future__ import annotations
|
8
8
|
|
9
9
|
|
10
|
-
DOCUMENTATION = r
|
10
|
+
DOCUMENTATION = r"""
|
11
11
|
---
|
12
12
|
module: command
|
13
13
|
short_description: Execute commands on targets
|
@@ -117,9 +117,9 @@ seealso:
|
|
117
117
|
author:
|
118
118
|
- Ansible Core Team
|
119
119
|
- Michael DeHaan
|
120
|
-
|
120
|
+
"""
|
121
121
|
|
122
|
-
EXAMPLES = r
|
122
|
+
EXAMPLES = r"""
|
123
123
|
- name: Return motd to registered var
|
124
124
|
ansible.builtin.command: cat /etc/motd
|
125
125
|
register: mymotd
|
@@ -173,9 +173,9 @@ EXAMPLES = r'''
|
|
173
173
|
- name: Safely use templated variable to run command. Always use the quote filter to avoid injection issues
|
174
174
|
ansible.builtin.command: cat {{ myfile|quote }}
|
175
175
|
register: myoutput
|
176
|
-
|
176
|
+
"""
|
177
177
|
|
178
|
-
RETURN = r
|
178
|
+
RETURN = r"""
|
179
179
|
msg:
|
180
180
|
description: changed
|
181
181
|
returned: always
|
@@ -228,7 +228,7 @@ stderr_lines:
|
|
228
228
|
returned: always
|
229
229
|
type: list
|
230
230
|
sample: [u'ls cannot access foo: No such file or directory', u'ls …']
|
231
|
-
|
231
|
+
"""
|
232
232
|
|
233
233
|
import datetime
|
234
234
|
import glob
|
@@ -249,6 +249,7 @@ def main():
|
|
249
249
|
argument_spec=dict(
|
250
250
|
_raw_params=dict(),
|
251
251
|
_uses_shell=dict(type='bool', default=False),
|
252
|
+
cmd=dict(),
|
252
253
|
argv=dict(type='list', elements='str'),
|
253
254
|
chdir=dict(type='path'),
|
254
255
|
executable=dict(),
|
@@ -260,12 +261,14 @@ def main():
|
|
260
261
|
stdin_add_newline=dict(type='bool', default=True),
|
261
262
|
strip_empty_ends=dict(type='bool', default=True),
|
262
263
|
),
|
264
|
+
required_one_of=[['_raw_params', 'cmd', 'argv']],
|
265
|
+
mutually_exclusive=[['_raw_params', 'cmd', 'argv']],
|
263
266
|
supports_check_mode=True,
|
264
267
|
)
|
265
268
|
shell = module.params['_uses_shell']
|
266
269
|
chdir = module.params['chdir']
|
267
270
|
executable = module.params['executable']
|
268
|
-
args = module.params['_raw_params']
|
271
|
+
args = module.params['_raw_params'] or module.params['cmd']
|
269
272
|
argv = module.params['argv']
|
270
273
|
creates = module.params['creates']
|
271
274
|
removes = module.params['removes']
|
@@ -281,16 +284,6 @@ def main():
|
|
281
284
|
module.warn("As of Ansible 2.4, the parameter 'executable' is no longer supported with the 'command' module. Not using '%s'." % executable)
|
282
285
|
executable = None
|
283
286
|
|
284
|
-
if (not args or args.strip() == '') and not argv:
|
285
|
-
r['rc'] = 256
|
286
|
-
r['msg'] = "no command given"
|
287
|
-
module.fail_json(**r)
|
288
|
-
|
289
|
-
if args and argv:
|
290
|
-
r['rc'] = 256
|
291
|
-
r['msg'] = "only command or argv can be given, not both"
|
292
|
-
module.fail_json(**r)
|
293
|
-
|
294
287
|
if not shell and args:
|
295
288
|
args = shlex.split(args)
|
296
289
|
|
ansible/modules/copy.py
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
from __future__ import annotations
|
8
8
|
|
9
9
|
|
10
|
-
DOCUMENTATION = r
|
10
|
+
DOCUMENTATION = r"""
|
11
11
|
---
|
12
12
|
module: copy
|
13
13
|
version_added: historical
|
@@ -109,7 +109,6 @@ options:
|
|
109
109
|
description:
|
110
110
|
- This flag indicates that filesystem links in the source tree, if they exist, should be followed.
|
111
111
|
type: bool
|
112
|
-
default: yes
|
113
112
|
version_added: '2.4'
|
114
113
|
checksum:
|
115
114
|
description:
|
@@ -155,9 +154,9 @@ attributes:
|
|
155
154
|
vault:
|
156
155
|
support: full
|
157
156
|
version_added: '2.2'
|
158
|
-
|
157
|
+
"""
|
159
158
|
|
160
|
-
EXAMPLES = r
|
159
|
+
EXAMPLES = r"""
|
161
160
|
- name: Copy file with owner and permissions
|
162
161
|
ansible.builtin.copy:
|
163
162
|
src: /srv/myfiles/foo.conf
|
@@ -220,9 +219,9 @@ EXAMPLES = r'''
|
|
220
219
|
src: /etc/foo.conf
|
221
220
|
dest: /path/to/link # link to /path/to/file
|
222
221
|
follow: no
|
223
|
-
|
222
|
+
"""
|
224
223
|
|
225
|
-
RETURN = r
|
224
|
+
RETURN = r"""
|
226
225
|
dest:
|
227
226
|
description: Destination file/path.
|
228
227
|
returned: success
|
@@ -283,18 +282,15 @@ state:
|
|
283
282
|
returned: success
|
284
283
|
type: str
|
285
284
|
sample: file
|
286
|
-
|
285
|
+
"""
|
287
286
|
|
288
287
|
import errno
|
289
288
|
import filecmp
|
290
|
-
import grp
|
291
289
|
import os
|
292
290
|
import os.path
|
293
|
-
import pwd
|
294
291
|
import shutil
|
295
292
|
import stat
|
296
293
|
import tempfile
|
297
|
-
import traceback
|
298
294
|
|
299
295
|
from ansible.module_utils.common.text.converters import to_bytes, to_native
|
300
296
|
from ansible.module_utils.basic import AnsibleModule
|
@@ -306,9 +302,9 @@ class AnsibleModuleError(Exception):
|
|
306
302
|
|
307
303
|
|
308
304
|
def split_pre_existing_dir(dirname):
|
309
|
-
|
305
|
+
"""
|
310
306
|
Return the first pre-existing directory and a list of the new directories that will be created.
|
311
|
-
|
307
|
+
"""
|
312
308
|
head, tail = os.path.split(dirname)
|
313
309
|
b_head = to_bytes(head, errors='surrogate_or_strict')
|
314
310
|
if head == '':
|
@@ -324,9 +320,9 @@ def split_pre_existing_dir(dirname):
|
|
324
320
|
|
325
321
|
|
326
322
|
def adjust_recursive_directory_permissions(pre_existing_dir, new_directory_list, module, directory_args, changed):
|
327
|
-
|
323
|
+
"""
|
328
324
|
Walk the new directories list and make sure that permissions are as we would expect
|
329
|
-
|
325
|
+
"""
|
330
326
|
|
331
327
|
if new_directory_list:
|
332
328
|
working_dir = os.path.join(pre_existing_dir, new_directory_list.pop(0))
|
@@ -336,67 +332,24 @@ def adjust_recursive_directory_permissions(pre_existing_dir, new_directory_list,
|
|
336
332
|
return changed
|
337
333
|
|
338
334
|
|
335
|
+
def chown_path(module, path, owner, group):
|
336
|
+
"""Update the owner/group if specified and different from the current owner/group."""
|
337
|
+
changed = module.set_owner_if_different(path, owner, False)
|
338
|
+
return module.set_group_if_different(path, group, changed)
|
339
|
+
|
340
|
+
|
339
341
|
def chown_recursive(path, module):
|
340
342
|
changed = False
|
341
343
|
owner = module.params['owner']
|
342
344
|
group = module.params['group']
|
343
345
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
owner_changed = module.set_owner_if_different(dir, owner, False)
|
352
|
-
if owner_changed is True:
|
353
|
-
changed = owner_changed
|
354
|
-
for file in [os.path.join(dirpath, f) for f in filenames]:
|
355
|
-
owner_changed = module.set_owner_if_different(file, owner, False)
|
356
|
-
if owner_changed is True:
|
357
|
-
changed = owner_changed
|
358
|
-
else:
|
359
|
-
uid = pwd.getpwnam(owner).pw_uid
|
360
|
-
for dirpath, dirnames, filenames in os.walk(path):
|
361
|
-
owner_changed = (os.stat(dirpath).st_uid != uid)
|
362
|
-
if owner_changed is True:
|
363
|
-
changed = owner_changed
|
364
|
-
for dir in [os.path.join(dirpath, d) for d in dirnames]:
|
365
|
-
owner_changed = (os.stat(dir).st_uid != uid)
|
366
|
-
if owner_changed is True:
|
367
|
-
changed = owner_changed
|
368
|
-
for file in [os.path.join(dirpath, f) for f in filenames]:
|
369
|
-
owner_changed = (os.stat(file).st_uid != uid)
|
370
|
-
if owner_changed is True:
|
371
|
-
changed = owner_changed
|
372
|
-
if group is not None:
|
373
|
-
if not module.check_mode:
|
374
|
-
for dirpath, dirnames, filenames in os.walk(path):
|
375
|
-
group_changed = module.set_group_if_different(dirpath, group, False)
|
376
|
-
if group_changed is True:
|
377
|
-
changed = group_changed
|
378
|
-
for dir in [os.path.join(dirpath, d) for d in dirnames]:
|
379
|
-
group_changed = module.set_group_if_different(dir, group, False)
|
380
|
-
if group_changed is True:
|
381
|
-
changed = group_changed
|
382
|
-
for file in [os.path.join(dirpath, f) for f in filenames]:
|
383
|
-
group_changed = module.set_group_if_different(file, group, False)
|
384
|
-
if group_changed is True:
|
385
|
-
changed = group_changed
|
386
|
-
else:
|
387
|
-
gid = grp.getgrnam(group).gr_gid
|
388
|
-
for dirpath, dirnames, filenames in os.walk(path):
|
389
|
-
group_changed = (os.stat(dirpath).st_gid != gid)
|
390
|
-
if group_changed is True:
|
391
|
-
changed = group_changed
|
392
|
-
for dir in [os.path.join(dirpath, d) for d in dirnames]:
|
393
|
-
group_changed = (os.stat(dir).st_gid != gid)
|
394
|
-
if group_changed is True:
|
395
|
-
changed = group_changed
|
396
|
-
for file in [os.path.join(dirpath, f) for f in filenames]:
|
397
|
-
group_changed = (os.stat(file).st_gid != gid)
|
398
|
-
if group_changed is True:
|
399
|
-
changed = group_changed
|
346
|
+
# TODO: Consolidate with the other methods calling set_*_if_different method, this is inefficient.
|
347
|
+
for dirpath, dirnames, filenames in os.walk(path):
|
348
|
+
changed |= chown_path(module, dirpath, owner, group)
|
349
|
+
for subdir in [os.path.join(dirpath, d) for d in dirnames]:
|
350
|
+
changed |= chown_path(module, subdir, owner, group)
|
351
|
+
for filepath in [os.path.join(dirpath, f) for f in filenames]:
|
352
|
+
changed |= chown_path(module, filepath, owner, group)
|
400
353
|
|
401
354
|
return changed
|
402
355
|
|
@@ -424,10 +377,7 @@ def copy_diff_files(src, dest, module):
|
|
424
377
|
shutil.copyfile(b_src_item_path, b_dest_item_path)
|
425
378
|
shutil.copymode(b_src_item_path, b_dest_item_path)
|
426
379
|
|
427
|
-
|
428
|
-
module.set_owner_if_different(b_dest_item_path, owner, False)
|
429
|
-
if group is not None:
|
430
|
-
module.set_group_if_different(b_dest_item_path, group, False)
|
380
|
+
chown_path(module, b_dest_item_path, owner, group)
|
431
381
|
changed = True
|
432
382
|
return changed
|
433
383
|
|
@@ -459,10 +409,7 @@ def copy_left_only(src, dest, module):
|
|
459
409
|
|
460
410
|
if os.path.islink(b_src_item_path) and os.path.isfile(b_src_item_path) and local_follow is True:
|
461
411
|
shutil.copyfile(b_src_item_path, b_dest_item_path)
|
462
|
-
|
463
|
-
module.set_owner_if_different(b_dest_item_path, owner, False)
|
464
|
-
if group is not None:
|
465
|
-
module.set_group_if_different(b_dest_item_path, group, False)
|
412
|
+
chown_path(module, b_dest_item_path, owner, group)
|
466
413
|
|
467
414
|
if os.path.islink(b_src_item_path) and os.path.isfile(b_src_item_path) and local_follow is False:
|
468
415
|
linkto = os.readlink(b_src_item_path)
|
@@ -471,11 +418,7 @@ def copy_left_only(src, dest, module):
|
|
471
418
|
if not os.path.islink(b_src_item_path) and os.path.isfile(b_src_item_path):
|
472
419
|
shutil.copyfile(b_src_item_path, b_dest_item_path)
|
473
420
|
shutil.copymode(b_src_item_path, b_dest_item_path)
|
474
|
-
|
475
|
-
if owner is not None:
|
476
|
-
module.set_owner_if_different(b_dest_item_path, owner, False)
|
477
|
-
if group is not None:
|
478
|
-
module.set_group_if_different(b_dest_item_path, group, False)
|
421
|
+
chown_path(module, b_dest_item_path, owner, group)
|
479
422
|
|
480
423
|
if not os.path.islink(b_src_item_path) and os.path.isdir(b_src_item_path):
|
481
424
|
shutil.copytree(b_src_item_path, b_dest_item_path, symlinks=not local_follow)
|
@@ -503,6 +446,21 @@ def copy_common_dirs(src, dest, module):
|
|
503
446
|
return changed
|
504
447
|
|
505
448
|
|
449
|
+
def copy_directory(src, dest, module):
|
450
|
+
if not os.path.exists(dest):
|
451
|
+
if not module.check_mode:
|
452
|
+
shutil.copytree(src, dest, symlinks=not module.params['local_follow'])
|
453
|
+
chown_recursive(dest, module)
|
454
|
+
changed = True
|
455
|
+
else:
|
456
|
+
diff_files_changed = copy_diff_files(src, dest, module)
|
457
|
+
left_only_changed = copy_left_only(src, dest, module)
|
458
|
+
common_dirs_changed = copy_common_dirs(src, dest, module)
|
459
|
+
owner_group_changed = chown_recursive(dest, module)
|
460
|
+
changed = any([diff_files_changed, left_only_changed, common_dirs_changed, owner_group_changed])
|
461
|
+
return changed
|
462
|
+
|
463
|
+
|
506
464
|
def main():
|
507
465
|
|
508
466
|
module = AnsibleModule(
|
@@ -516,7 +474,7 @@ def main():
|
|
516
474
|
force=dict(type='bool', default=True),
|
517
475
|
validate=dict(type='str'),
|
518
476
|
directory_mode=dict(type='raw'),
|
519
|
-
remote_src=dict(type='bool'),
|
477
|
+
remote_src=dict(type='bool', default=False),
|
520
478
|
local_follow=dict(type='bool'),
|
521
479
|
checksum=dict(type='str'),
|
522
480
|
follow=dict(type='bool', default=False),
|
@@ -653,12 +611,8 @@ def main():
|
|
653
611
|
if validate:
|
654
612
|
# if we have a mode, make sure we set it on the temporary
|
655
613
|
# file source as some validations may require it
|
656
|
-
|
657
|
-
|
658
|
-
if owner is not None:
|
659
|
-
module.set_owner_if_different(src, owner, False)
|
660
|
-
if group is not None:
|
661
|
-
module.set_group_if_different(src, group, False)
|
614
|
+
module.set_mode_if_different(src, mode, False)
|
615
|
+
chown_path(module, src, owner, group)
|
662
616
|
if "%s" not in validate:
|
663
617
|
module.fail_json(msg="validate must contain %%s: %s" % (validate))
|
664
618
|
(rc, out, err) = module.run_command(validate % src)
|
@@ -683,63 +637,22 @@ def main():
|
|
683
637
|
module.atomic_move(b_mysrc, dest, unsafe_writes=module.params['unsafe_writes'], keep_dest_attrs=not remote_src)
|
684
638
|
|
685
639
|
except (IOError, OSError):
|
686
|
-
module.fail_json(msg="
|
640
|
+
module.fail_json(msg=f"Failed to copy {src!r} to {dest!r}.")
|
687
641
|
changed = True
|
688
642
|
|
689
643
|
# If neither have checksums, both src and dest are directories.
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
701
|
-
|
702
|
-
|
703
|
-
if src.endswith(os.path.sep) and not os.path.exists(module.params['dest']):
|
704
|
-
b_basename = to_bytes(os.path.basename(src), errors='surrogate_or_strict')
|
705
|
-
b_dest = to_bytes(os.path.join(b_dest, b_basename), errors='surrogate_or_strict')
|
706
|
-
b_src = to_bytes(os.path.join(module.params['src'], ""), errors='surrogate_or_strict')
|
707
|
-
if not module.check_mode:
|
708
|
-
shutil.copytree(b_src, b_dest, symlinks=not local_follow)
|
709
|
-
chown_recursive(dest, module)
|
710
|
-
changed = True
|
711
|
-
|
712
|
-
if not src.endswith(os.path.sep) and os.path.isdir(module.params['dest']):
|
713
|
-
b_basename = to_bytes(os.path.basename(src), errors='surrogate_or_strict')
|
714
|
-
b_dest = to_bytes(os.path.join(b_dest, b_basename), errors='surrogate_or_strict')
|
715
|
-
b_src = to_bytes(os.path.join(module.params['src'], ""), errors='surrogate_or_strict')
|
716
|
-
if not module.check_mode and not os.path.exists(b_dest):
|
717
|
-
shutil.copytree(b_src, b_dest, symlinks=not local_follow)
|
718
|
-
changed = True
|
719
|
-
chown_recursive(dest, module)
|
720
|
-
if module.check_mode and not os.path.exists(b_dest):
|
721
|
-
changed = True
|
722
|
-
if os.path.exists(b_dest):
|
723
|
-
diff_files_changed = copy_diff_files(b_src, b_dest, module)
|
724
|
-
left_only_changed = copy_left_only(b_src, b_dest, module)
|
725
|
-
common_dirs_changed = copy_common_dirs(b_src, b_dest, module)
|
726
|
-
owner_group_changed = chown_recursive(b_dest, module)
|
727
|
-
if diff_files_changed or left_only_changed or common_dirs_changed or owner_group_changed:
|
728
|
-
changed = True
|
729
|
-
|
730
|
-
if not src.endswith(os.path.sep) and not os.path.exists(module.params['dest']):
|
731
|
-
b_basename = to_bytes(os.path.basename(module.params['src']), errors='surrogate_or_strict')
|
732
|
-
b_dest = to_bytes(os.path.join(b_dest, b_basename), errors='surrogate_or_strict')
|
733
|
-
if not module.check_mode and not os.path.exists(b_dest):
|
734
|
-
os.makedirs(b_dest)
|
735
|
-
changed = True
|
736
|
-
b_src = to_bytes(os.path.join(module.params['src'], ""), errors='surrogate_or_strict')
|
737
|
-
diff_files_changed = copy_diff_files(b_src, b_dest, module)
|
738
|
-
left_only_changed = copy_left_only(b_src, b_dest, module)
|
739
|
-
common_dirs_changed = copy_common_dirs(b_src, b_dest, module)
|
740
|
-
owner_group_changed = chown_recursive(b_dest, module)
|
741
|
-
if module.check_mode and not os.path.exists(b_dest):
|
742
|
-
changed = True
|
644
|
+
checksums_none = checksum_src is None and checksum_dest is None
|
645
|
+
both_directories = os.path.isdir(module.params['src']) and (os.path.isdir(module.params['dest']) or not os.path.exists(module.params['dest']))
|
646
|
+
if checksums_none and remote_src and both_directories:
|
647
|
+
b_src = to_bytes(module.params['src'], errors='surrogate_or_strict')
|
648
|
+
b_dest = to_bytes(module.params['dest'], errors='surrogate_or_strict')
|
649
|
+
|
650
|
+
if not b_src.endswith(to_bytes(os.path.sep)):
|
651
|
+
b_basename = os.path.basename(b_src)
|
652
|
+
b_dest = os.path.join(b_dest, b_basename)
|
653
|
+
b_src = os.path.join(b_src, b'')
|
654
|
+
|
655
|
+
changed |= copy_directory(b_src, b_dest, module)
|
743
656
|
|
744
657
|
res_args = dict(
|
745
658
|
dest=dest, src=src, md5sum=md5sum_src, checksum=checksum_src, changed=changed
|
ansible/modules/cron.py
CHANGED
@@ -10,7 +10,7 @@
|
|
10
10
|
from __future__ import annotations
|
11
11
|
|
12
12
|
|
13
|
-
DOCUMENTATION = r
|
13
|
+
DOCUMENTATION = r"""
|
14
14
|
---
|
15
15
|
module: cron
|
16
16
|
short_description: Manage cron.d and crontab entries
|
@@ -72,33 +72,39 @@ options:
|
|
72
72
|
minute:
|
73
73
|
description:
|
74
74
|
- Minute when the job should run (V(0-59), V(*), V(*/2), and so on).
|
75
|
+
- Cannot be combined with O(special_time).
|
75
76
|
type: str
|
76
77
|
default: "*"
|
77
78
|
hour:
|
78
79
|
description:
|
79
80
|
- Hour when the job should run (V(0-23), V(*), V(*/2), and so on).
|
81
|
+
- Cannot be combined with O(special_time).
|
80
82
|
type: str
|
81
83
|
default: "*"
|
82
84
|
day:
|
83
85
|
description:
|
84
86
|
- Day of the month the job should run (V(1-31), V(*), V(*/2), and so on).
|
87
|
+
- Cannot be combined with O(special_time).
|
85
88
|
type: str
|
86
89
|
default: "*"
|
87
90
|
aliases: [ dom ]
|
88
91
|
month:
|
89
92
|
description:
|
90
|
-
- Month of the year the job should run (V(1-12), V(*), V(*/2), and so on).
|
93
|
+
- Month of the year the job should run (V(JAN-DEC) or V(1-12), V(*), V(*/2), and so on).
|
94
|
+
- Cannot be combined with O(special_time).
|
91
95
|
type: str
|
92
96
|
default: "*"
|
93
97
|
weekday:
|
94
98
|
description:
|
95
|
-
- Day of the week that the job should run (V(
|
99
|
+
- Day of the week that the job should run (V(SUN-SAT) or V(0-6), V(*), and so on).
|
100
|
+
- Cannot be combined with O(special_time).
|
96
101
|
type: str
|
97
102
|
default: "*"
|
98
103
|
aliases: [ dow ]
|
99
104
|
special_time:
|
100
105
|
description:
|
101
106
|
- Special time specification nickname.
|
107
|
+
- Cannot be combined with O(minute), O(hour), O(day), O(month) or O(weekday).
|
102
108
|
type: str
|
103
109
|
choices: [ annually, daily, hourly, monthly, reboot, weekly, yearly ]
|
104
110
|
version_added: "1.3"
|
@@ -150,9 +156,9 @@ attributes:
|
|
150
156
|
platform:
|
151
157
|
support: full
|
152
158
|
platforms: posix
|
153
|
-
|
159
|
+
"""
|
154
160
|
|
155
|
-
EXAMPLES = r
|
161
|
+
EXAMPLES = r"""
|
156
162
|
- name: Ensure a job that runs at 2 and 5 exists. Creates an entry like "0 5,2 * * ls -alh > /dev/null"
|
157
163
|
ansible.builtin.cron:
|
158
164
|
name: "check dirs"
|
@@ -205,9 +211,9 @@ EXAMPLES = r'''
|
|
205
211
|
name: APP_HOME
|
206
212
|
env: yes
|
207
213
|
state: absent
|
208
|
-
|
214
|
+
"""
|
209
215
|
|
210
|
-
RETURN = r
|
216
|
+
RETURN = r"""#"""
|
211
217
|
|
212
218
|
import os
|
213
219
|
import platform
|
@@ -262,17 +268,16 @@ class CronTab(object):
|
|
262
268
|
if self.cron_file:
|
263
269
|
# read the cronfile
|
264
270
|
try:
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
f.close()
|
271
|
+
with open(self.b_cron_file, 'rb') as f:
|
272
|
+
self.n_existing = to_native(f.read(), errors='surrogate_or_strict')
|
273
|
+
self.lines = self.n_existing.splitlines()
|
269
274
|
except IOError:
|
270
275
|
# cron file does not exist
|
271
276
|
return
|
272
277
|
except Exception:
|
273
278
|
raise CronTabError("Unexpected error:", sys.exc_info()[0])
|
274
279
|
else:
|
275
|
-
# using safely quoted shell for now, but this really should be two non-shell calls instead.
|
280
|
+
# FIXME: using safely quoted shell for now, but this really should be two non-shell calls instead.
|
276
281
|
(rc, out, err) = self.module.run_command(self._read_user_execute(), use_unsafe_shell=True)
|
277
282
|
|
278
283
|
if rc != 0 and rc != 1: # 1 can mean that there are no jobs.
|
@@ -323,12 +328,12 @@ class CronTab(object):
|
|
323
328
|
|
324
329
|
# Add the entire crontab back to the user crontab
|
325
330
|
if not self.cron_file:
|
326
|
-
# quoting shell args for now but really this should be two non-shell calls.
|
331
|
+
# FIXME: quoting shell args for now but really this should be two non-shell calls.
|
327
332
|
(rc, out, err) = self.module.run_command(self._write_execute(path), use_unsafe_shell=True)
|
328
333
|
os.unlink(path)
|
329
334
|
|
330
335
|
if rc != 0:
|
331
|
-
self.module.fail_json(msg=err)
|
336
|
+
self.module.fail_json(msg=f"Failed to install new cronfile: {path}", stderr=err, stdout=out, rc=rc)
|
332
337
|
|
333
338
|
# set SELinux permissions
|
334
339
|
if self.module.selinux_enabled() and self.cron_file:
|
@@ -646,7 +651,7 @@ def main():
|
|
646
651
|
|
647
652
|
if special_time and \
|
648
653
|
(True in [(x != '*') for x in [minute, hour, day, month, weekday]]):
|
649
|
-
module.fail_json(msg="You
|
654
|
+
module.fail_json(msg="You cannot combine special_time with any of the time or day/date parameters.")
|
650
655
|
|
651
656
|
# cannot support special_time on solaris
|
652
657
|
if special_time and platform.system() == 'SunOS':
|
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
from __future__ import annotations
|
6
6
|
|
7
|
-
DOCUMENTATION =
|
7
|
+
DOCUMENTATION = """
|
8
8
|
author: 'Ansible Core Team (@ansible)'
|
9
9
|
short_description: 'Add and remove deb822 formatted repositories'
|
10
10
|
description:
|
@@ -145,9 +145,9 @@ options:
|
|
145
145
|
requirements:
|
146
146
|
- python3-debian / python-debian
|
147
147
|
version_added: '2.15'
|
148
|
-
|
148
|
+
"""
|
149
149
|
|
150
|
-
EXAMPLES =
|
150
|
+
EXAMPLES = """
|
151
151
|
- name: Add debian repo
|
152
152
|
deb822_repository:
|
153
153
|
name: debian
|
@@ -189,9 +189,9 @@ EXAMPLES = '''
|
|
189
189
|
components: stable
|
190
190
|
architectures: amd64
|
191
191
|
signed_by: https://download.example.com/linux/ubuntu/gpg
|
192
|
-
|
192
|
+
"""
|
193
193
|
|
194
|
-
RETURN =
|
194
|
+
RETURN = """
|
195
195
|
repo:
|
196
196
|
description: A source string for the repository
|
197
197
|
returned: always
|
@@ -224,13 +224,12 @@ key_filename:
|
|
224
224
|
returned: always
|
225
225
|
type: str
|
226
226
|
sample: /etc/apt/keyrings/debian.gpg
|
227
|
-
|
227
|
+
"""
|
228
228
|
|
229
229
|
import os
|
230
230
|
import re
|
231
231
|
import tempfile
|
232
232
|
import textwrap
|
233
|
-
import traceback
|
234
233
|
|
235
234
|
from ansible.module_utils.basic import AnsibleModule
|
236
235
|
from ansible.module_utils.basic import missing_required_lib
|
@@ -248,9 +247,9 @@ HAS_DEBIAN = True
|
|
248
247
|
DEBIAN_IMP_ERR = None
|
249
248
|
try:
|
250
249
|
from debian.deb822 import Deb822 # type: ignore[import]
|
251
|
-
except ImportError:
|
250
|
+
except ImportError as ex:
|
252
251
|
HAS_DEBIAN = False
|
253
|
-
DEBIAN_IMP_ERR =
|
252
|
+
DEBIAN_IMP_ERR = ex
|
254
253
|
|
255
254
|
KEYRINGS_DIR = '/etc/apt/keyrings'
|
256
255
|
|
ansible/modules/debconf.py
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
from __future__ import annotations
|
7
7
|
|
8
8
|
|
9
|
-
DOCUMENTATION = r
|
9
|
+
DOCUMENTATION = r"""
|
10
10
|
---
|
11
11
|
module: debconf
|
12
12
|
short_description: Configure a .deb package
|
@@ -86,9 +86,9 @@ options:
|
|
86
86
|
default: false
|
87
87
|
author:
|
88
88
|
- Brian Coca (@bcoca)
|
89
|
-
|
89
|
+
"""
|
90
90
|
|
91
|
-
EXAMPLES = r
|
91
|
+
EXAMPLES = r"""
|
92
92
|
- name: Set default locale to fr_FR.UTF-8
|
93
93
|
ansible.builtin.debconf:
|
94
94
|
name: locales
|
@@ -121,9 +121,9 @@ EXAMPLES = r'''
|
|
121
121
|
value: "{{ site_passphrase }}"
|
122
122
|
vtype: password
|
123
123
|
no_log: True
|
124
|
-
|
124
|
+
"""
|
125
125
|
|
126
|
-
RETURN = r
|
126
|
+
RETURN = r"""#"""
|
127
127
|
|
128
128
|
from ansible.module_utils.common.text.converters import to_text, to_native
|
129
129
|
from ansible.module_utils.basic import AnsibleModule
|
ansible/modules/debug.py
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
from __future__ import annotations
|
7
7
|
|
8
8
|
|
9
|
-
DOCUMENTATION = r
|
9
|
+
DOCUMENTATION = r"""
|
10
10
|
---
|
11
11
|
module: debug
|
12
12
|
short_description: Print statements during execution
|
@@ -68,9 +68,9 @@ seealso:
|
|
68
68
|
author:
|
69
69
|
- Dag Wieers (@dagwieers)
|
70
70
|
- Michael DeHaan
|
71
|
-
|
71
|
+
"""
|
72
72
|
|
73
|
-
EXAMPLES = r
|
73
|
+
EXAMPLES = r"""
|
74
74
|
- name: Print the gateway for each host when defined
|
75
75
|
ansible.builtin.debug:
|
76
76
|
msg: System {{ inventory_hostname }} has gateway {{ ansible_default_ipv4.gateway }}
|
@@ -95,4 +95,4 @@ EXAMPLES = r'''
|
|
95
95
|
msg:
|
96
96
|
- "Provisioning based on YOUR_KEY which is: {{ lookup('ansible.builtin.env', 'YOUR_KEY') }}"
|
97
97
|
- "These servers were built using the password of '{{ password_used }}'. Please retain this for later use."
|
98
|
-
|
98
|
+
"""
|