ansible-core 2.17.6rc1__py3-none-any.whl → 2.18.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/__main__.py +2 -17
- ansible/cli/__init__.py +3 -15
- ansible/cli/config.py +187 -24
- ansible/cli/console.py +1 -1
- ansible/cli/doc.py +38 -16
- ansible/cli/galaxy.py +3 -49
- ansible/cli/inventory.py +2 -2
- ansible/cli/pull.py +2 -2
- ansible/cli/scripts/ansible_connection_cli_stub.py +1 -10
- ansible/config/base.yml +127 -57
- ansible/config/manager.py +89 -11
- ansible/constants.py +32 -9
- ansible/errors/__init__.py +5 -0
- ansible/executor/interpreter_discovery.py +1 -1
- ansible/executor/play_iterator.py +16 -0
- ansible/executor/playbook_executor.py +1 -4
- ansible/executor/powershell/become_wrapper.ps1 +4 -5
- ansible/executor/powershell/bootstrap_wrapper.ps1 +2 -3
- ansible/executor/powershell/exec_wrapper.ps1 +1 -1
- ansible/executor/powershell/module_manifest.py +2 -2
- ansible/executor/task_executor.py +50 -39
- ansible/executor/task_queue_manager.py +1 -1
- ansible/executor/task_result.py +1 -1
- ansible/galaxy/api.py +3 -4
- ansible/galaxy/collection/__init__.py +21 -10
- ansible/galaxy/collection/concrete_artifact_manager.py +2 -2
- ansible/galaxy/collection/galaxy_api_proxy.py +10 -16
- ansible/galaxy/collection/gpg.py +17 -23
- ansible/galaxy/data/COPYING +7 -0
- ansible/galaxy/data/apb/Dockerfile.j2 +1 -0
- ansible/galaxy/data/apb/Makefile.j2 +1 -0
- ansible/galaxy/data/apb/README.md +7 -3
- ansible/galaxy/data/apb/apb.yml.j2 +1 -0
- ansible/galaxy/data/apb/defaults/main.yml.j2 +1 -0
- ansible/galaxy/data/apb/handlers/main.yml.j2 +1 -0
- ansible/galaxy/data/apb/meta/main.yml.j2 +1 -0
- ansible/galaxy/data/apb/playbooks/deprovision.yml.j2 +1 -0
- ansible/galaxy/data/apb/playbooks/provision.yml.j2 +1 -0
- ansible/galaxy/data/apb/tasks/main.yml.j2 +1 -0
- ansible/galaxy/data/apb/tests/ansible.cfg +1 -0
- ansible/galaxy/data/apb/tests/inventory +1 -0
- ansible/galaxy/data/apb/tests/test.yml.j2 +1 -0
- ansible/galaxy/data/apb/vars/main.yml.j2 +1 -0
- ansible/galaxy/data/collections_galaxy_meta.yml +1 -0
- ansible/galaxy/data/container/defaults/main.yml.j2 +1 -0
- ansible/galaxy/data/container/handlers/main.yml.j2 +1 -0
- ansible/galaxy/data/container/meta/container.yml.j2 +1 -0
- ansible/galaxy/data/container/meta/main.yml.j2 +1 -0
- ansible/galaxy/data/container/tasks/main.yml.j2 +1 -0
- ansible/galaxy/data/container/tests/ansible.cfg +1 -0
- ansible/galaxy/data/container/tests/inventory +1 -0
- ansible/galaxy/data/container/tests/test.yml.j2 +1 -0
- ansible/galaxy/data/container/vars/main.yml.j2 +1 -0
- ansible/galaxy/data/default/collection/README.md.j2 +1 -0
- ansible/galaxy/data/default/collection/galaxy.yml.j2 +1 -0
- ansible/galaxy/data/default/collection/meta/runtime.yml +1 -0
- ansible/galaxy/data/default/collection/plugins/README.md.j2 +1 -0
- ansible/galaxy/data/default/role/defaults/main.yml.j2 +1 -0
- ansible/galaxy/data/default/role/handlers/main.yml.j2 +1 -0
- ansible/galaxy/data/default/role/meta/main.yml.j2 +1 -0
- ansible/galaxy/data/default/role/tasks/main.yml.j2 +1 -0
- ansible/galaxy/data/default/role/tests/inventory +1 -0
- ansible/galaxy/data/default/role/tests/test.yml.j2 +1 -0
- ansible/galaxy/data/default/role/vars/main.yml.j2 +1 -0
- ansible/galaxy/data/network/cliconf_plugins/example.py.j2 +1 -0
- ansible/galaxy/data/network/defaults/main.yml.j2 +1 -0
- ansible/galaxy/data/network/library/example_command.py.j2 +1 -0
- ansible/galaxy/data/network/library/example_config.py.j2 +1 -0
- ansible/galaxy/data/network/library/example_facts.py.j2 +1 -0
- ansible/galaxy/data/network/meta/main.yml.j2 +1 -0
- ansible/galaxy/data/network/module_utils/example.py.j2 +1 -0
- ansible/galaxy/data/network/netconf_plugins/example.py.j2 +1 -0
- ansible/galaxy/data/network/tasks/main.yml.j2 +1 -0
- ansible/galaxy/data/network/terminal_plugins/example.py.j2 +1 -0
- ansible/galaxy/data/network/tests/inventory +1 -0
- ansible/galaxy/data/network/tests/test.yml.j2 +1 -0
- ansible/galaxy/data/network/vars/main.yml.j2 +1 -0
- ansible/galaxy/dependency_resolution/providers.py +3 -3
- ansible/galaxy/role.py +1 -1
- ansible/galaxy/token.py +20 -8
- ansible/keyword_desc.yml +1 -1
- ansible/module_utils/_internal/__init__.py +0 -0
- ansible/module_utils/_internal/_concurrent/__init__.py +0 -0
- ansible/module_utils/_internal/_concurrent/_daemon_threading.py +28 -0
- ansible/module_utils/_internal/_concurrent/_futures.py +21 -0
- ansible/module_utils/ansible_release.py +2 -2
- ansible/module_utils/api.py +2 -2
- ansible/module_utils/basic.py +8 -8
- ansible/module_utils/common/collections.py +1 -1
- ansible/module_utils/common/file.py +0 -6
- ansible/module_utils/common/process.py +22 -9
- ansible/module_utils/common/text/converters.py +5 -8
- ansible/module_utils/common/text/formatters.py +20 -4
- ansible/module_utils/common/validation.py +33 -25
- ansible/module_utils/compat/paramiko.py +6 -1
- ansible/module_utils/compat/selinux.py +2 -2
- ansible/module_utils/connection.py +8 -24
- ansible/module_utils/csharp/Ansible.Become.cs +14 -25
- ansible/module_utils/csharp/Ansible.Process.cs +1 -1
- ansible/module_utils/distro/__init__.py +1 -1
- ansible/module_utils/distro/_distro.py +8 -4
- ansible/module_utils/facts/collector.py +2 -0
- ansible/module_utils/facts/default_collectors.py +3 -1
- ansible/module_utils/facts/hardware/aix.py +54 -52
- ansible/module_utils/facts/hardware/darwin.py +37 -34
- ansible/module_utils/facts/hardware/freebsd.py +55 -15
- ansible/module_utils/facts/hardware/hpux.py +3 -0
- ansible/module_utils/facts/hardware/linux.py +101 -57
- ansible/module_utils/facts/hardware/netbsd.py +3 -0
- ansible/module_utils/facts/hardware/openbsd.py +4 -1
- ansible/module_utils/facts/hardware/sunos.py +7 -1
- ansible/module_utils/facts/network/aix.py +16 -17
- ansible/module_utils/facts/network/fc_wwn.py +4 -1
- ansible/module_utils/facts/network/hpux.py +21 -4
- ansible/module_utils/facts/network/iscsi.py +7 -8
- ansible/module_utils/facts/network/linux.py +0 -2
- ansible/module_utils/facts/other/facter.py +9 -4
- ansible/module_utils/facts/other/ohai.py +5 -5
- ansible/module_utils/facts/packages.py +49 -7
- ansible/module_utils/facts/sysctl.py +33 -31
- ansible/module_utils/facts/system/distribution.py +1 -1
- ansible/module_utils/facts/system/local.py +12 -22
- ansible/module_utils/facts/system/service_mgr.py +3 -1
- ansible/module_utils/facts/system/systemd.py +47 -0
- ansible/module_utils/powershell/Ansible.ModuleUtils.AddType.psm1 +1 -1
- ansible/module_utils/powershell/Ansible.ModuleUtils.CamelConversion.psm1 +1 -1
- ansible/module_utils/splitter.py +1 -1
- ansible/modules/add_host.py +1 -1
- ansible/modules/apt.py +43 -32
- ansible/modules/apt_key.py +6 -6
- ansible/modules/apt_repository.py +23 -14
- ansible/modules/assemble.py +7 -2
- ansible/modules/assert.py +4 -4
- ansible/modules/blockinfile.py +3 -6
- ansible/modules/command.py +1 -1
- ansible/modules/copy.py +4 -4
- ansible/modules/cron.py +13 -10
- ansible/modules/deb822_repository.py +16 -17
- ansible/modules/debconf.py +9 -9
- ansible/modules/debug.py +1 -1
- ansible/modules/dnf.py +79 -164
- ansible/modules/dnf5.py +54 -29
- ansible/modules/dpkg_selections.py +2 -2
- ansible/modules/expect.py +2 -2
- ansible/modules/fetch.py +2 -2
- ansible/modules/file.py +5 -3
- ansible/modules/find.py +40 -12
- ansible/modules/gather_facts.py +4 -2
- ansible/modules/get_url.py +29 -24
- ansible/modules/git.py +35 -35
- ansible/modules/group.py +71 -1
- ansible/modules/hostname.py +2 -4
- ansible/modules/include_vars.py +5 -5
- ansible/modules/iptables.py +13 -16
- ansible/modules/known_hosts.py +16 -13
- ansible/modules/lineinfile.py +1 -4
- ansible/modules/meta.py +6 -1
- ansible/modules/mount_facts.py +651 -0
- ansible/modules/package_facts.py +63 -80
- ansible/modules/pause.py +4 -3
- ansible/modules/pip.py +14 -14
- ansible/modules/replace.py +1 -4
- ansible/modules/rpm_key.py +31 -11
- ansible/modules/service.py +8 -8
- ansible/modules/service_facts.py +20 -5
- ansible/modules/set_stats.py +1 -1
- ansible/modules/setup.py +3 -3
- ansible/modules/stat.py +3 -3
- ansible/modules/subversion.py +1 -1
- ansible/modules/systemd.py +16 -10
- ansible/modules/systemd_service.py +16 -10
- ansible/modules/sysvinit.py +4 -4
- ansible/modules/unarchive.py +35 -22
- ansible/modules/uri.py +24 -18
- ansible/modules/user.py +145 -12
- ansible/modules/validate_argument_spec.py +3 -3
- ansible/modules/wait_for_connection.py +2 -1
- ansible/modules/yum_repository.py +136 -179
- ansible/parsing/dataloader.py +2 -2
- ansible/parsing/mod_args.py +11 -10
- ansible/parsing/vault/__init__.py +8 -3
- ansible/parsing/yaml/constructor.py +10 -8
- ansible/parsing/yaml/objects.py +1 -1
- ansible/playbook/base.py +12 -23
- ansible/playbook/helpers.py +4 -0
- ansible/playbook/loop_control.py +8 -0
- ansible/playbook/play.py +4 -22
- ansible/playbook/play_context.py +0 -16
- ansible/playbook/playbook_include.py +2 -2
- ansible/playbook/role/__init__.py +2 -2
- ansible/plugins/__init__.py +2 -0
- ansible/plugins/action/__init__.py +7 -9
- ansible/plugins/action/dnf.py +7 -5
- ansible/plugins/action/package.py +5 -4
- ansible/plugins/action/reboot.py +2 -2
- ansible/plugins/become/__init__.py +1 -1
- ansible/plugins/callback/__init__.py +44 -3
- ansible/plugins/callback/default.py +1 -1
- ansible/plugins/cliconf/__init__.py +1 -1
- ansible/plugins/connection/paramiko_ssh.py +2 -80
- ansible/plugins/connection/psrp.py +33 -82
- ansible/plugins/connection/ssh.py +0 -8
- ansible/plugins/connection/winrm.py +46 -1
- ansible/plugins/doc_fragments/connection_pipelining.py +2 -2
- ansible/plugins/doc_fragments/constructed.py +10 -10
- ansible/plugins/doc_fragments/default_callback.py +8 -8
- ansible/plugins/doc_fragments/files.py +5 -5
- ansible/plugins/doc_fragments/inventory_cache.py +2 -2
- ansible/plugins/doc_fragments/result_format_callback.py +6 -6
- ansible/plugins/doc_fragments/return_common.py +1 -1
- ansible/plugins/doc_fragments/shell_common.py +2 -10
- ansible/plugins/doc_fragments/shell_windows.py +0 -9
- ansible/plugins/doc_fragments/url.py +2 -2
- ansible/plugins/doc_fragments/url_windows.py +4 -5
- ansible/plugins/doc_fragments/validate.py +1 -1
- ansible/plugins/filter/core.py +2 -0
- ansible/plugins/filter/human_to_bytes.yml +9 -0
- ansible/plugins/filter/password_hash.yml +1 -1
- ansible/plugins/filter/strftime.yml +1 -1
- ansible/plugins/filter/to_nice_json.yml +7 -3
- ansible/plugins/filter/to_uuid.yml +1 -1
- ansible/plugins/inventory/script.py +1 -1
- ansible/plugins/list.py +1 -1
- ansible/plugins/loader.py +0 -11
- ansible/plugins/lookup/config.py +1 -1
- ansible/plugins/lookup/csvfile.py +21 -9
- ansible/plugins/lookup/env.py +8 -9
- ansible/plugins/lookup/ini.py +10 -1
- ansible/plugins/lookup/random_choice.py +2 -2
- ansible/plugins/lookup/url.py +7 -2
- ansible/plugins/shell/__init__.py +15 -20
- ansible/plugins/shell/powershell.py +9 -6
- ansible/plugins/strategy/__init__.py +16 -7
- ansible/plugins/test/core.py +23 -1
- ansible/plugins/test/issubset.yml +1 -1
- ansible/plugins/test/subset.yml +1 -1
- ansible/plugins/test/timedout.yml +20 -0
- ansible/plugins/test/vault_encrypted.yml +6 -6
- ansible/plugins/test/vaulted_file.yml +19 -0
- ansible/release.py +2 -2
- ansible/template/__init__.py +3 -8
- ansible/utils/collection_loader/_collection_finder.py +23 -55
- ansible/utils/display.py +44 -31
- ansible/utils/jsonrpc.py +1 -1
- ansible/utils/listify.py +1 -5
- ansible/utils/path.py +3 -0
- ansible/utils/vars.py +18 -27
- ansible/vars/manager.py +7 -150
- ansible/vars/plugins.py +1 -1
- ansible_core-2.18.0.dist-info/Apache-License.txt +202 -0
- {ansible_core-2.17.6rc1.dist-info → ansible_core-2.18.0.dist-info}/METADATA +36 -23
- ansible_core-2.18.0.dist-info/MIT-license.txt +14 -0
- ansible_core-2.18.0.dist-info/PSF-license.txt +48 -0
- {ansible_core-2.17.6rc1.dist-info → ansible_core-2.18.0.dist-info}/RECORD +316 -311
- {ansible_core-2.17.6rc1.dist-info → ansible_core-2.18.0.dist-info}/entry_points.txt +1 -1
- ansible_core-2.18.0.dist-info/simplified_bsd.txt +8 -0
- ansible_test/_data/completion/docker.txt +7 -7
- ansible_test/_data/completion/remote.txt +5 -4
- ansible_test/_data/completion/windows.txt +4 -4
- ansible_test/_data/requirements/ansible-test.txt +1 -2
- ansible_test/_data/requirements/constraints.txt +1 -2
- ansible_test/_data/requirements/sanity.ansible-doc.txt +3 -3
- ansible_test/_data/requirements/sanity.changelog.in +1 -1
- ansible_test/_data/requirements/sanity.changelog.txt +4 -4
- ansible_test/_data/requirements/sanity.import.plugin.txt +2 -2
- ansible_test/_data/requirements/sanity.import.txt +1 -1
- ansible_test/_data/requirements/sanity.integration-aliases.txt +1 -1
- ansible_test/_data/requirements/sanity.pep8.txt +1 -1
- ansible_test/_data/requirements/sanity.pylint.txt +6 -8
- ansible_test/_data/requirements/sanity.runtime-metadata.txt +2 -2
- ansible_test/_data/requirements/sanity.validate-modules.txt +3 -3
- ansible_test/_data/requirements/sanity.yamllint.in +1 -0
- ansible_test/_data/requirements/sanity.yamllint.txt +1 -1
- ansible_test/_internal/ansible_util.py +8 -35
- ansible_test/_internal/ci/azp.py +1 -1
- ansible_test/_internal/classification/__init__.py +0 -2
- ansible_test/_internal/cli/parsers/key_value_parsers.py +3 -0
- ansible_test/_internal/commands/integration/cloud/hcloud.py +1 -1
- ansible_test/_internal/commands/integration/cloud/httptester.py +1 -1
- ansible_test/_internal/commands/integration/cloud/nios.py +1 -1
- ansible_test/_internal/commands/sanity/__init__.py +96 -19
- ansible_test/_internal/commands/sanity/pylint.py +20 -24
- ansible_test/_internal/completion.py +2 -0
- ansible_test/_internal/constants.py +0 -1
- ansible_test/_internal/coverage_util.py +1 -2
- ansible_test/_internal/docker_util.py +1 -1
- ansible_test/_internal/encoding.py +4 -4
- ansible_test/_internal/host_configs.py +10 -0
- ansible_test/_internal/host_profiles.py +9 -13
- ansible_test/_internal/pypi_proxy.py +1 -1
- ansible_test/_internal/python_requirements.py +5 -14
- ansible_test/_internal/timeout.py +1 -1
- ansible_test/_internal/util.py +40 -0
- ansible_test/_internal/util_common.py +5 -1
- ansible_test/_util/controller/sanity/code-smell/action-plugin-docs.json +3 -1
- ansible_test/_util/controller/sanity/code-smell/action-plugin-docs.py +6 -3
- ansible_test/_util/controller/sanity/code-smell/empty-init.json +0 -2
- ansible_test/_util/controller/sanity/pylint/config/ansible-test-target.cfg +5 -0
- ansible_test/_util/controller/sanity/pylint/config/ansible-test.cfg +5 -0
- ansible_test/_util/controller/sanity/pylint/config/code-smell.cfg +5 -0
- ansible_test/_util/controller/sanity/pylint/config/collection.cfg +6 -0
- ansible_test/_util/controller/sanity/pylint/config/default.cfg +6 -0
- ansible_test/_util/controller/sanity/pylint/plugins/deprecated.py +1 -19
- ansible_test/_util/controller/sanity/shellcheck/exclude.txt +1 -0
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/main.py +67 -2
- ansible_test/_util/controller/sanity/validate-modules/validate_modules/schema.py +27 -5
- ansible_test/_util/target/cli/ansible_test_cli_stub.py +0 -0
- ansible_test/_util/target/common/constants.py +2 -2
- ansible_test/_util/target/injector/python.py +5 -0
- ansible_test/_util/target/pytest/plugins/ansible_pytest_coverage.py +6 -0
- ansible_test/_util/target/sanity/import/importer.py +1 -1
- ansible_test/_util/target/setup/bootstrap.sh +6 -17
- ansible_test/_util/target/setup/requirements.py +18 -24
- ansible_test/config/config.yml +1 -1
- ansible_core-2.17.6rc1.data/scripts/ansible-test +0 -44
- ansible_test/_data/requirements/sanity.mypy.in +0 -10
- ansible_test/_data/requirements/sanity.mypy.txt +0 -18
- ansible_test/_internal/commands/sanity/mypy.py +0 -274
- ansible_test/_util/controller/sanity/mypy/ansible-core.ini +0 -116
- ansible_test/_util/controller/sanity/mypy/ansible-test.ini +0 -27
- ansible_test/_util/controller/sanity/mypy/modules.ini +0 -92
- ansible_test/_util/controller/sanity/mypy/packaging.ini +0 -20
- {ansible_core-2.17.6rc1.dist-info → ansible_core-2.18.0.dist-info}/COPYING +0 -0
- {ansible_core-2.17.6rc1.dist-info → ansible_core-2.18.0.dist-info}/WHEEL +0 -0
- {ansible_core-2.17.6rc1.dist-info → ansible_core-2.18.0.dist-info}/top_level.txt +0 -0
|
@@ -41,13 +41,13 @@ options:
|
|
|
41
41
|
default: "present"
|
|
42
42
|
mode:
|
|
43
43
|
description:
|
|
44
|
-
- The octal mode for newly created files in sources.list.d.
|
|
44
|
+
- The octal mode for newly created files in C(sources.list.d).
|
|
45
45
|
- Default is what system uses (probably 0644).
|
|
46
46
|
type: raw
|
|
47
47
|
version_added: "1.6"
|
|
48
48
|
update_cache:
|
|
49
49
|
description:
|
|
50
|
-
- Run the equivalent of C(apt-get update) when a change occurs.
|
|
50
|
+
- Run the equivalent of C(apt-get update) when a change occurs. Cache updates are run after making changes.
|
|
51
51
|
type: bool
|
|
52
52
|
default: "yes"
|
|
53
53
|
aliases: [ update-cache ]
|
|
@@ -72,9 +72,9 @@ options:
|
|
|
72
72
|
version_added: '1.8'
|
|
73
73
|
filename:
|
|
74
74
|
description:
|
|
75
|
-
- Sets the name of the source list file in sources.list.d.
|
|
75
|
+
- Sets the name of the source list file in C(sources.list.d).
|
|
76
76
|
Defaults to a file name based on the repository source url.
|
|
77
|
-
The .list extension will be automatically added.
|
|
77
|
+
The C(.list) extension will be automatically added.
|
|
78
78
|
type: str
|
|
79
79
|
version_added: '2.1'
|
|
80
80
|
codename:
|
|
@@ -90,8 +90,8 @@ options:
|
|
|
90
90
|
Without this library, the module does not work.
|
|
91
91
|
- Runs C(apt-get install python-apt) for Python 2, and C(apt-get install python3-apt) for Python 3.
|
|
92
92
|
- Only works with the system Python 2 or Python 3. If you are using a Python on the remote that is not
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
the system Python, set O(install_python_apt=false) and ensure that the Python apt library
|
|
94
|
+
for your Python version is installed some other way.
|
|
95
95
|
type: bool
|
|
96
96
|
default: true
|
|
97
97
|
author:
|
|
@@ -174,9 +174,9 @@ import glob
|
|
|
174
174
|
import json
|
|
175
175
|
import os
|
|
176
176
|
import re
|
|
177
|
+
import secrets
|
|
177
178
|
import sys
|
|
178
179
|
import tempfile
|
|
179
|
-
import random
|
|
180
180
|
import time
|
|
181
181
|
|
|
182
182
|
from ansible.module_utils.basic import AnsibleModule
|
|
@@ -504,7 +504,7 @@ class UbuntuSourcesList(SourcesList):
|
|
|
504
504
|
|
|
505
505
|
if self.apt_key_bin:
|
|
506
506
|
locale = get_best_parsable_locale(self.module)
|
|
507
|
-
APT_ENV = dict(LANG=locale, LC_ALL=locale, LC_MESSAGES=locale, LC_CTYPE=locale)
|
|
507
|
+
APT_ENV = dict(LANG=locale, LC_ALL=locale, LC_MESSAGES=locale, LC_CTYPE=locale, LANGUAGE=locale)
|
|
508
508
|
self.module.run_command_environ_update = APT_ENV
|
|
509
509
|
rc, out, err = self.module.run_command([self.apt_key_bin, 'export', key_fingerprint], check_rc=True)
|
|
510
510
|
found = bool(not err or 'nothing exported' not in err)
|
|
@@ -738,29 +738,38 @@ def main():
|
|
|
738
738
|
|
|
739
739
|
if changed and not module.check_mode:
|
|
740
740
|
try:
|
|
741
|
+
err = ''
|
|
741
742
|
sourceslist.save()
|
|
742
743
|
if update_cache:
|
|
743
|
-
err = ''
|
|
744
744
|
update_cache_retries = module.params.get('update_cache_retries')
|
|
745
745
|
update_cache_retry_max_delay = module.params.get('update_cache_retry_max_delay')
|
|
746
|
-
randomize =
|
|
746
|
+
randomize = secrets.randbelow(1000) / 1000.0
|
|
747
747
|
|
|
748
|
+
cache = apt.Cache()
|
|
748
749
|
for retry in range(update_cache_retries):
|
|
749
750
|
try:
|
|
750
|
-
cache = apt.Cache()
|
|
751
751
|
cache.update()
|
|
752
752
|
break
|
|
753
|
-
except apt.cache.FetchFailedException as
|
|
754
|
-
err =
|
|
753
|
+
except apt.cache.FetchFailedException as fetch_failed_exc:
|
|
754
|
+
err = fetch_failed_exc
|
|
755
|
+
module.warn(
|
|
756
|
+
f"Failed to update cache after {retry + 1} due "
|
|
757
|
+
f"to {to_native(fetch_failed_exc)} retry, retrying"
|
|
758
|
+
)
|
|
755
759
|
|
|
756
760
|
# Use exponential backoff with a max fail count, plus a little bit of randomness
|
|
757
761
|
delay = 2 ** retry + randomize
|
|
758
762
|
if delay > update_cache_retry_max_delay:
|
|
759
763
|
delay = update_cache_retry_max_delay + randomize
|
|
760
764
|
time.sleep(delay)
|
|
765
|
+
module.warn(f"Sleeping for {int(round(delay))} seconds, before attempting to update the cache again")
|
|
761
766
|
else:
|
|
762
767
|
revert_sources_list(sources_before, sources_after, sourceslist_before)
|
|
763
|
-
|
|
768
|
+
msg = (
|
|
769
|
+
f"Failed to update apt cache after {update_cache_retries} retries: "
|
|
770
|
+
f"{err if err else 'unknown reason'}"
|
|
771
|
+
)
|
|
772
|
+
module.fail_json(msg=msg)
|
|
764
773
|
|
|
765
774
|
except (OSError, IOError) as ex:
|
|
766
775
|
revert_sources_list(sources_before, sources_after, sourceslist_before)
|
ansible/modules/assemble.py
CHANGED
|
@@ -61,14 +61,14 @@ options:
|
|
|
61
61
|
type: str
|
|
62
62
|
ignore_hidden:
|
|
63
63
|
description:
|
|
64
|
-
- A boolean that controls if files that start with a
|
|
64
|
+
- A boolean that controls if files that start with a C(.) will be included or not.
|
|
65
65
|
type: bool
|
|
66
66
|
default: no
|
|
67
67
|
version_added: '2.0'
|
|
68
68
|
validate:
|
|
69
69
|
description:
|
|
70
70
|
- The validation command to run before copying into place.
|
|
71
|
-
- The path to the file to validate is passed in
|
|
71
|
+
- The path to the file to validate is passed in by C(%s) which must be present as in the sshd example below.
|
|
72
72
|
- The command is passed securely so shell features like expansion and pipes won't work.
|
|
73
73
|
type: str
|
|
74
74
|
version_added: '2.0'
|
|
@@ -205,6 +205,11 @@ def main():
|
|
|
205
205
|
regexp=dict(type='str'),
|
|
206
206
|
ignore_hidden=dict(type='bool', default=False),
|
|
207
207
|
validate=dict(type='str'),
|
|
208
|
+
|
|
209
|
+
# Options that are for the action plugin, but ignored by the module itself.
|
|
210
|
+
# We have them here so that the tests pass without ignores, which
|
|
211
|
+
# reduces the likelihood of further bugs added.
|
|
212
|
+
decrypt=dict(type='bool', default=True),
|
|
208
213
|
),
|
|
209
214
|
add_file_common_args=True,
|
|
210
215
|
)
|
ansible/modules/assert.py
CHANGED
|
@@ -17,14 +17,14 @@ version_added: "1.5"
|
|
|
17
17
|
options:
|
|
18
18
|
that:
|
|
19
19
|
description:
|
|
20
|
-
- A list of string expressions of the same form that can be passed to the
|
|
20
|
+
- A list of string expressions of the same form that can be passed to the C(when) statement.
|
|
21
21
|
type: list
|
|
22
22
|
elements: str
|
|
23
23
|
required: true
|
|
24
24
|
fail_msg:
|
|
25
25
|
description:
|
|
26
26
|
- The customized message used for a failing assertion.
|
|
27
|
-
- This argument was called
|
|
27
|
+
- This argument was called O(msg) before Ansible 2.7, now it is renamed to O(fail_msg) with alias O(msg).
|
|
28
28
|
type: str
|
|
29
29
|
aliases: [ msg ]
|
|
30
30
|
version_added: "2.7"
|
|
@@ -85,7 +85,7 @@ EXAMPLES = r'''
|
|
|
85
85
|
- >
|
|
86
86
|
"reject" not in some_command_result.stderr
|
|
87
87
|
|
|
88
|
-
- name: After version 2.7 both
|
|
88
|
+
- name: After version 2.7 both O(msg) and O(fail_msg) can customize failing assertion message
|
|
89
89
|
ansible.builtin.assert:
|
|
90
90
|
that:
|
|
91
91
|
- my_param <= 100
|
|
@@ -93,7 +93,7 @@ EXAMPLES = r'''
|
|
|
93
93
|
fail_msg: "'my_param' must be between 0 and 100"
|
|
94
94
|
success_msg: "'my_param' is between 0 and 100"
|
|
95
95
|
|
|
96
|
-
- name: Please use
|
|
96
|
+
- name: Please use O(msg) when ansible version is smaller than 2.7
|
|
97
97
|
ansible.builtin.assert:
|
|
98
98
|
that:
|
|
99
99
|
- my_param <= 100
|
ansible/modules/blockinfile.py
CHANGED
|
@@ -33,7 +33,7 @@ options:
|
|
|
33
33
|
marker:
|
|
34
34
|
description:
|
|
35
35
|
- The marker line template.
|
|
36
|
-
- C({mark}) will be replaced with the values in O(marker_begin) (default=
|
|
36
|
+
- C({mark}) will be replaced with the values in O(marker_begin) (default=C(BEGIN)) and O(marker_end) (default=C(END)).
|
|
37
37
|
- Using a custom marker without the C({mark}) variable may result in the block being repeatedly inserted on subsequent playbook runs.
|
|
38
38
|
- Multi-line markers are not supported and will result in the block being repeatedly inserted on subsequent playbook runs.
|
|
39
39
|
- A newline is automatically appended by the module to O(marker_begin) and O(marker_end).
|
|
@@ -50,12 +50,10 @@ options:
|
|
|
50
50
|
description:
|
|
51
51
|
- If specified and no begin/ending O(marker) lines are found, the block will be inserted after the last match of specified regular expression.
|
|
52
52
|
- A special value is available; V(EOF) for inserting the block at the end of the file.
|
|
53
|
-
- If specified regular expression has no matches, V(EOF) will be used instead.
|
|
53
|
+
- If specified regular expression has no matches or no value is passed, V(EOF) will be used instead.
|
|
54
54
|
- The presence of the multiline flag (?m) in the regular expression controls whether the match is done line by line or with multiple lines.
|
|
55
55
|
This behaviour was added in ansible-core 2.14.
|
|
56
56
|
type: str
|
|
57
|
-
choices: [ EOF, '*regex*' ]
|
|
58
|
-
default: EOF
|
|
59
57
|
insertbefore:
|
|
60
58
|
description:
|
|
61
59
|
- If specified and no begin/ending O(marker) lines are found, the block will be inserted before the last match of specified regular expression.
|
|
@@ -64,7 +62,6 @@ options:
|
|
|
64
62
|
- The presence of the multiline flag (?m) in the regular expression controls whether the match is done line by line or with multiple lines.
|
|
65
63
|
This behaviour was added in ansible-core 2.14.
|
|
66
64
|
type: str
|
|
67
|
-
choices: [ BOF, '*regex*' ]
|
|
68
65
|
create:
|
|
69
66
|
description:
|
|
70
67
|
- Create a new file if it does not exist.
|
|
@@ -106,7 +103,7 @@ options:
|
|
|
106
103
|
default: no
|
|
107
104
|
version_added: '2.16'
|
|
108
105
|
notes:
|
|
109
|
-
- When using
|
|
106
|
+
- When using C(with_*) loops be aware that if you do not set a unique mark the block will be overwritten on each iteration.
|
|
110
107
|
- As of Ansible 2.3, the O(dest) option has been changed to O(path) as default, but O(dest) still works as well.
|
|
111
108
|
- Option O(ignore:follow) has been removed in Ansible 2.5, because this module modifies the contents of the file
|
|
112
109
|
so O(ignore:follow=no) does not make sense.
|
ansible/modules/command.py
CHANGED
ansible/modules/copy.py
CHANGED
|
@@ -28,8 +28,8 @@ options:
|
|
|
28
28
|
- Local path to a file to copy to the remote server.
|
|
29
29
|
- This can be absolute or relative.
|
|
30
30
|
- If path is a directory, it is copied recursively. In this case, if path ends
|
|
31
|
-
with
|
|
32
|
-
Otherwise, if it does not end with
|
|
31
|
+
with C(/), only inside contents of that directory are copied to destination.
|
|
32
|
+
Otherwise, if it does not end with C(/), the directory itself with all contents
|
|
33
33
|
is copied. This behavior is similar to the C(rsync) command line tool.
|
|
34
34
|
type: path
|
|
35
35
|
content:
|
|
@@ -44,7 +44,7 @@ options:
|
|
|
44
44
|
description:
|
|
45
45
|
- Remote absolute path where the file should be copied to.
|
|
46
46
|
- If O(src) is a directory, this must be a directory too.
|
|
47
|
-
- If O(dest) is a non-existent path and if either O(dest) ends with
|
|
47
|
+
- If O(dest) is a non-existent path and if either O(dest) ends with C(/) or O(src) is a directory, O(dest) is created.
|
|
48
48
|
- If O(dest) is a relative path, the starting directory is determined by the remote host.
|
|
49
49
|
- If O(src) and O(dest) are files, the parent directory of O(dest) is not created and the task fails if it does not already exist.
|
|
50
50
|
type: path
|
|
@@ -92,7 +92,7 @@ options:
|
|
|
92
92
|
description:
|
|
93
93
|
- Influence whether O(src) needs to be transferred or already is present remotely.
|
|
94
94
|
- If V(false), it will search for O(src) on the controller node.
|
|
95
|
-
- If V(true) it will search for O(src) on the managed (remote) node.
|
|
95
|
+
- If V(true), it will search for O(src) on the managed (remote) node.
|
|
96
96
|
- O(remote_src) supports recursive copying as of version 2.8.
|
|
97
97
|
- O(remote_src) only works with O(mode=preserve) as of version 2.6.
|
|
98
98
|
- Auto-decryption of files does not work when O(remote_src=yes).
|
ansible/modules/cron.py
CHANGED
|
@@ -18,19 +18,19 @@ description:
|
|
|
18
18
|
- Use this module to manage crontab and environment variables entries. This module allows
|
|
19
19
|
you to create environment variables and named crontab entries, update, or delete them.
|
|
20
20
|
- 'When crontab jobs are managed: the module includes one line with the description of the
|
|
21
|
-
crontab entry C("#Ansible: <name>") corresponding to the
|
|
22
|
-
which is used by future ansible/module calls to find/check the state. The
|
|
23
|
-
parameter should be unique, and changing the
|
|
21
|
+
crontab entry C("#Ansible: <name>") corresponding to the O(name) passed to the module,
|
|
22
|
+
which is used by future ansible/module calls to find/check the state. The O(name)
|
|
23
|
+
parameter should be unique, and changing the O(name) value will result in a new cron
|
|
24
24
|
task being created (or a different one being removed).'
|
|
25
25
|
- When environment variables are managed, no comment line is added, but, when the module
|
|
26
|
-
needs to find/check the state, it uses the
|
|
26
|
+
needs to find/check the state, it uses the O(name) parameter to find the environment
|
|
27
27
|
variable definition line.
|
|
28
|
-
- When using symbols such as
|
|
28
|
+
- When using symbols such as C(%), they must be properly escaped.
|
|
29
29
|
version_added: "0.9"
|
|
30
30
|
options:
|
|
31
31
|
name:
|
|
32
32
|
description:
|
|
33
|
-
- Description of a crontab entry or, if env is set, the name of environment variable.
|
|
33
|
+
- Description of a crontab entry or, if O(env) is set, the name of environment variable.
|
|
34
34
|
- This parameter is always required as of ansible-core 2.12.
|
|
35
35
|
type: str
|
|
36
36
|
required: yes
|
|
@@ -41,7 +41,7 @@ options:
|
|
|
41
41
|
type: str
|
|
42
42
|
job:
|
|
43
43
|
description:
|
|
44
|
-
- The command to execute or, if env is set, the value of environment variable.
|
|
44
|
+
- The command to execute or, if O(env) is set, the value of environment variable.
|
|
45
45
|
- The command should not contain line breaks.
|
|
46
46
|
- Required if O(state=present).
|
|
47
47
|
type: str
|
|
@@ -58,10 +58,10 @@ options:
|
|
|
58
58
|
The assumption is that this file is exclusively managed by the module,
|
|
59
59
|
do not use if the file contains multiple entries, NEVER use for /etc/crontab.
|
|
60
60
|
- If this is a relative path, it is interpreted with respect to C(/etc/cron.d).
|
|
61
|
-
- Many
|
|
61
|
+
- Many Linux distros expect (and some require) the filename portion to consist solely
|
|
62
62
|
of upper- and lower-case letters, digits, underscores, and hyphens.
|
|
63
|
-
- Using this parameter requires you to specify the O(user) as well, unless O(state)
|
|
64
|
-
- Either this parameter or O(name) is required
|
|
63
|
+
- Using this parameter requires you to specify the O(user) as well, unless O(state=absent).
|
|
64
|
+
- Either this parameter or O(name) is required.
|
|
65
65
|
type: path
|
|
66
66
|
backup:
|
|
67
67
|
description:
|
|
@@ -131,6 +131,9 @@ options:
|
|
|
131
131
|
version_added: "2.1"
|
|
132
132
|
requirements:
|
|
133
133
|
- cron (any 'vixie cron' conformant variant, like cronie)
|
|
134
|
+
notes:
|
|
135
|
+
- If you are experiencing permissions issues with cron and MacOS,
|
|
136
|
+
you should see the official MacOS documentation for further information.
|
|
134
137
|
author:
|
|
135
138
|
- Dane Summers (@dsummersl)
|
|
136
139
|
- Mike Grozak (@rhaido)
|
|
@@ -8,28 +8,28 @@ DOCUMENTATION = '''
|
|
|
8
8
|
author: 'Ansible Core Team (@ansible)'
|
|
9
9
|
short_description: 'Add and remove deb822 formatted repositories'
|
|
10
10
|
description:
|
|
11
|
-
- 'Add and remove deb822 formatted repositories in Debian based distributions'
|
|
11
|
+
- 'Add and remove deb822 formatted repositories in Debian based distributions.'
|
|
12
12
|
module: deb822_repository
|
|
13
13
|
notes:
|
|
14
|
-
- This module will not automatically update caches, call the apt module based
|
|
14
|
+
- This module will not automatically update caches, call the M(ansible.builtin.apt) module based
|
|
15
15
|
on the changed state.
|
|
16
16
|
options:
|
|
17
17
|
allow_downgrade_to_insecure:
|
|
18
18
|
description:
|
|
19
19
|
- Allow downgrading a package that was previously authenticated but
|
|
20
|
-
is no longer authenticated
|
|
20
|
+
is no longer authenticated.
|
|
21
21
|
type: bool
|
|
22
22
|
allow_insecure:
|
|
23
23
|
description:
|
|
24
|
-
- Allow insecure repositories
|
|
24
|
+
- Allow insecure repositories.
|
|
25
25
|
type: bool
|
|
26
26
|
allow_weak:
|
|
27
27
|
description:
|
|
28
|
-
- Allow repositories signed with a key using a weak digest algorithm
|
|
28
|
+
- Allow repositories signed with a key using a weak digest algorithm.
|
|
29
29
|
type: bool
|
|
30
30
|
architectures:
|
|
31
31
|
description:
|
|
32
|
-
-
|
|
32
|
+
- Architectures to search within repository.
|
|
33
33
|
type: list
|
|
34
34
|
elements: str
|
|
35
35
|
by_hash:
|
|
@@ -51,7 +51,7 @@ options:
|
|
|
51
51
|
components:
|
|
52
52
|
description:
|
|
53
53
|
- Components specify different sections of one distribution version
|
|
54
|
-
present in a Suite.
|
|
54
|
+
present in a C(Suite).
|
|
55
55
|
type: list
|
|
56
56
|
elements: str
|
|
57
57
|
date_max_future:
|
|
@@ -64,8 +64,8 @@ options:
|
|
|
64
64
|
type: bool
|
|
65
65
|
inrelease_path:
|
|
66
66
|
description:
|
|
67
|
-
- Determines the path to the InRelease file, relative to the normal
|
|
68
|
-
position of an InRelease file.
|
|
67
|
+
- Determines the path to the C(InRelease) file, relative to the normal
|
|
68
|
+
position of an C(InRelease) file.
|
|
69
69
|
type: str
|
|
70
70
|
languages:
|
|
71
71
|
description:
|
|
@@ -81,8 +81,8 @@ options:
|
|
|
81
81
|
type: str
|
|
82
82
|
pdiffs:
|
|
83
83
|
description:
|
|
84
|
-
- Controls if APT should try to use PDiffs to update old indexes
|
|
85
|
-
instead of downloading the new indexes entirely
|
|
84
|
+
- Controls if APT should try to use C(PDiffs) to update old indexes
|
|
85
|
+
instead of downloading the new indexes entirely.
|
|
86
86
|
type: bool
|
|
87
87
|
signed_by:
|
|
88
88
|
description:
|
|
@@ -97,21 +97,20 @@ options:
|
|
|
97
97
|
Suite can specify an exact path in relation to the URI(s) provided,
|
|
98
98
|
in which case the Components: must be omitted and suite must end
|
|
99
99
|
with a slash (C(/)). Alternatively, it may take the form of a
|
|
100
|
-
distribution version (
|
|
100
|
+
distribution version (for example a version codename like C(disco) or C(artful)).
|
|
101
101
|
If the suite does not specify a path, at least one component must
|
|
102
102
|
be present.
|
|
103
103
|
type: list
|
|
104
104
|
elements: str
|
|
105
105
|
targets:
|
|
106
106
|
description:
|
|
107
|
-
- Defines which download targets apt will try to acquire from this
|
|
108
|
-
source.
|
|
107
|
+
- Defines which download targets apt will try to acquire from this source.
|
|
109
108
|
type: list
|
|
110
109
|
elements: str
|
|
111
110
|
trusted:
|
|
112
111
|
description:
|
|
113
112
|
- Decides if a source is considered trusted or if warnings should be
|
|
114
|
-
raised before
|
|
113
|
+
raised before, for example packages are installed from this source.
|
|
115
114
|
type: bool
|
|
116
115
|
types:
|
|
117
116
|
choices:
|
|
@@ -123,7 +122,7 @@ options:
|
|
|
123
122
|
elements: str
|
|
124
123
|
description:
|
|
125
124
|
- Which types of packages to look for from a given source; either
|
|
126
|
-
binary V(deb) or source code V(deb-src)
|
|
125
|
+
binary V(deb) or source code V(deb-src).
|
|
127
126
|
uris:
|
|
128
127
|
description:
|
|
129
128
|
- The URIs must specify the base of the Debian distribution archive,
|
|
@@ -132,7 +131,7 @@ options:
|
|
|
132
131
|
elements: str
|
|
133
132
|
mode:
|
|
134
133
|
description:
|
|
135
|
-
- The octal mode for newly created files in sources.list.d.
|
|
134
|
+
- The octal mode for newly created files in C(sources.list.d).
|
|
136
135
|
type: raw
|
|
137
136
|
default: '0644'
|
|
138
137
|
state:
|
ansible/modules/debconf.py
CHANGED
|
@@ -29,24 +29,24 @@ notes:
|
|
|
29
29
|
- Several questions have to be answered (depending on the package).
|
|
30
30
|
Use 'debconf-show <package>' on any Debian or derivative with the package
|
|
31
31
|
installed to see questions/settings available.
|
|
32
|
-
- Some distros will always record tasks involving the setting of passwords as changed. This is due to debconf-get-selections masking passwords.
|
|
32
|
+
- Some distros will always record tasks involving the setting of passwords as changed. This is due to C(debconf-get-selections) masking passwords.
|
|
33
33
|
- It is highly recommended to add C(no_log=True) to the task while handling sensitive information using this module.
|
|
34
|
-
- The debconf module does not reconfigure packages, it just updates the debconf database.
|
|
34
|
+
- The M(ansible.builtin.debconf) module does not reconfigure packages, it just updates the debconf database.
|
|
35
35
|
An additional step is needed (typically with C(notify) if debconf makes a change)
|
|
36
36
|
to reconfigure the package and apply the changes.
|
|
37
|
-
debconf is extensively used for pre-seeding configuration prior to installation
|
|
37
|
+
C(debconf) is extensively used for pre-seeding configuration prior to installation
|
|
38
38
|
rather than modifying configurations.
|
|
39
|
-
So, while dpkg-reconfigure does use debconf data, it is not always authoritative
|
|
39
|
+
So, while C(dpkg-reconfigure) does use debconf data, it is not always authoritative
|
|
40
40
|
and you may need to check how your package is handled.
|
|
41
|
-
- Also note dpkg-reconfigure is a 3-phase process. It invokes the
|
|
41
|
+
- Also note C(dpkg-reconfigure) is a 3-phase process. It invokes the
|
|
42
42
|
control scripts from the C(/var/lib/dpkg/info) directory with the
|
|
43
43
|
C(<package>.prerm reconfigure <version>),
|
|
44
44
|
C(<package>.config reconfigure <version>) and C(<package>.postinst control <version>) arguments.
|
|
45
45
|
- The main issue is that the C(<package>.config reconfigure) step for many packages
|
|
46
46
|
will first reset the debconf database (overriding changes made by this module) by
|
|
47
47
|
checking the on-disk configuration. If this is the case for your package then
|
|
48
|
-
dpkg-reconfigure will effectively ignore changes made by debconf.
|
|
49
|
-
- However as dpkg-reconfigure only executes the C(<package>.config) step if the file
|
|
48
|
+
C(dpkg-reconfigure) will effectively ignore changes made by debconf.
|
|
49
|
+
- However as C(dpkg-reconfigure) only executes the C(<package>.config) step if the file
|
|
50
50
|
exists, it is possible to rename it to C(/var/lib/dpkg/info/<package>.config.ignore)
|
|
51
51
|
before executing C(dpkg-reconfigure -f noninteractive <package>) and then restore it.
|
|
52
52
|
This seems to be compliant with Debian policy for the .config file.
|
|
@@ -76,12 +76,12 @@ options:
|
|
|
76
76
|
value:
|
|
77
77
|
description:
|
|
78
78
|
- Value to set the configuration to.
|
|
79
|
-
- After Ansible 2.17, C(value) is of type
|
|
79
|
+
- After Ansible 2.17, C(value) is of type C(raw).
|
|
80
80
|
type: raw
|
|
81
81
|
aliases: [ answer ]
|
|
82
82
|
unseen:
|
|
83
83
|
description:
|
|
84
|
-
- Do not set
|
|
84
|
+
- Do not set C(seen) flag when pre-seeding.
|
|
85
85
|
type: bool
|
|
86
86
|
default: false
|
|
87
87
|
author:
|
ansible/modules/debug.py
CHANGED
|
@@ -14,7 +14,7 @@ description:
|
|
|
14
14
|
- This module prints statements during execution and can be useful
|
|
15
15
|
for debugging variables or expressions without necessarily halting
|
|
16
16
|
the playbook.
|
|
17
|
-
- Useful for debugging together with the
|
|
17
|
+
- Useful for debugging together with the C(when:) directive.
|
|
18
18
|
- This module is also supported for Windows targets.
|
|
19
19
|
version_added: '0.8'
|
|
20
20
|
options:
|