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
ansible/modules/user.py
CHANGED
|
@@ -37,19 +37,19 @@ options:
|
|
|
37
37
|
version_added: "2.6"
|
|
38
38
|
non_unique:
|
|
39
39
|
description:
|
|
40
|
-
- Optionally when used with the -u option, this option allows to change the user ID to a non-unique value.
|
|
40
|
+
- Optionally when used with the C(-u) option, this option allows to change the user ID to a non-unique value.
|
|
41
41
|
type: bool
|
|
42
42
|
default: no
|
|
43
43
|
version_added: "1.1"
|
|
44
44
|
seuser:
|
|
45
45
|
description:
|
|
46
|
-
- Optionally sets the seuser type (user_u) on
|
|
46
|
+
- Optionally sets the C(seuser) type C(user_u) on SELinux enabled systems.
|
|
47
47
|
type: str
|
|
48
48
|
version_added: "2.1"
|
|
49
49
|
group:
|
|
50
50
|
description:
|
|
51
51
|
- Optionally sets the user's primary group (takes a group name).
|
|
52
|
-
- On macOS, this defaults to V(
|
|
52
|
+
- On macOS, this defaults to V(staff).
|
|
53
53
|
type: str
|
|
54
54
|
groups:
|
|
55
55
|
description:
|
|
@@ -74,7 +74,8 @@ options:
|
|
|
74
74
|
Since Ansible 2.5, the default shell for non-system users on macOS is V(/bin/bash).
|
|
75
75
|
- On other operating systems, the default shell is determined by the underlying tool
|
|
76
76
|
invoked by this module. See Notes for a per platform list of invoked tools.
|
|
77
|
-
|
|
77
|
+
- From Ansible 2.18, the type is changed to I(path) from I(str).
|
|
78
|
+
type: path
|
|
78
79
|
home:
|
|
79
80
|
description:
|
|
80
81
|
- Optionally set the user's home directory.
|
|
@@ -95,7 +96,7 @@ options:
|
|
|
95
96
|
- To create an account with a locked/disabled password on OpenBSD, set this to V('*************').
|
|
96
97
|
- B(OS X/macOS:) Enter the cleartext password as the value. Be sure to take relevant security precautions.
|
|
97
98
|
- On macOS, the password specified in the C(password) option will always be set, regardless of whether the user account already exists or not.
|
|
98
|
-
- When the password is passed as an argument, the
|
|
99
|
+
- When the password is passed as an argument, the M(ansible.builtin.user) module will always return changed to C(true) for macOS systems.
|
|
99
100
|
Since macOS no longer provides access to the hashed passwords directly.
|
|
100
101
|
type: str
|
|
101
102
|
state:
|
|
@@ -153,7 +154,7 @@ options:
|
|
|
153
154
|
ssh_key_bits:
|
|
154
155
|
description:
|
|
155
156
|
- Optionally specify number of bits in SSH key to create.
|
|
156
|
-
- The default value depends on ssh-keygen.
|
|
157
|
+
- The default value depends on C(ssh-keygen).
|
|
157
158
|
type: int
|
|
158
159
|
version_added: "0.9"
|
|
159
160
|
ssh_key_type:
|
|
@@ -204,7 +205,7 @@ options:
|
|
|
204
205
|
- Lock the password (C(usermod -L), C(usermod -U), C(pw lock)).
|
|
205
206
|
- Implementation differs by platform. This option does not always mean the user cannot login using other methods.
|
|
206
207
|
- This option does not disable the user, only lock the password.
|
|
207
|
-
- This must be set to V(
|
|
208
|
+
- This must be set to V(false) in order to unlock a currently locked password. The absence of this parameter will not unlock a password.
|
|
208
209
|
- Currently supported on Linux, FreeBSD, DragonFlyBSD, NetBSD, OpenBSD.
|
|
209
210
|
type: bool
|
|
210
211
|
version_added: "2.6"
|
|
@@ -265,9 +266,32 @@ options:
|
|
|
265
266
|
description:
|
|
266
267
|
- Sets the umask of the user.
|
|
267
268
|
- Currently supported on Linux. Does nothing when used with other platforms.
|
|
268
|
-
- Requires O(local) is omitted or V(
|
|
269
|
+
- Requires O(local) is omitted or V(false).
|
|
269
270
|
type: str
|
|
270
271
|
version_added: "2.12"
|
|
272
|
+
password_expire_account_disable:
|
|
273
|
+
description:
|
|
274
|
+
- Number of days after a password expires until the account is disabled.
|
|
275
|
+
- Currently supported on AIX, Linux, NetBSD, OpenBSD.
|
|
276
|
+
type: int
|
|
277
|
+
version_added: "2.18"
|
|
278
|
+
uid_min:
|
|
279
|
+
description:
|
|
280
|
+
- Sets the UID_MIN value for user creation.
|
|
281
|
+
- Overwrites /etc/login.defs default value.
|
|
282
|
+
- Currently supported on Linux. Does nothing when used with other platforms.
|
|
283
|
+
- Requires O(local) is omitted or V(False).
|
|
284
|
+
type: int
|
|
285
|
+
version_added: "2.18"
|
|
286
|
+
uid_max:
|
|
287
|
+
description:
|
|
288
|
+
- Sets the UID_MAX value for user creation.
|
|
289
|
+
- Overwrites /etc/login.defs default value.
|
|
290
|
+
- Currently supported on Linux. Does nothing when used with other platforms.
|
|
291
|
+
- Requires O(local) is omitted or V(False).
|
|
292
|
+
type: int
|
|
293
|
+
version_added: "2.18"
|
|
294
|
+
|
|
271
295
|
extends_documentation_fragment: action_common_attributes
|
|
272
296
|
attributes:
|
|
273
297
|
check_mode:
|
|
@@ -356,6 +380,11 @@ EXAMPLES = r'''
|
|
|
356
380
|
ansible.builtin.user:
|
|
357
381
|
name: jane157
|
|
358
382
|
password_expire_warn: 30
|
|
383
|
+
|
|
384
|
+
- name: Set number of days after password expires until account is disabled
|
|
385
|
+
ansible.builtin.user:
|
|
386
|
+
name: jimholden2016
|
|
387
|
+
password_expire_account_disable: 15
|
|
359
388
|
'''
|
|
360
389
|
|
|
361
390
|
RETURN = r'''
|
|
@@ -582,9 +611,17 @@ class User(object):
|
|
|
582
611
|
self.password_expire_min = module.params['password_expire_min']
|
|
583
612
|
self.password_expire_warn = module.params['password_expire_warn']
|
|
584
613
|
self.umask = module.params['umask']
|
|
614
|
+
self.inactive = module.params['password_expire_account_disable']
|
|
615
|
+
self.uid_min = module.params['uid_min']
|
|
616
|
+
self.uid_max = module.params['uid_max']
|
|
585
617
|
|
|
586
|
-
if self.
|
|
587
|
-
|
|
618
|
+
if self.local:
|
|
619
|
+
if self.umask is not None:
|
|
620
|
+
module.fail_json(msg="'umask' can not be used with 'local'")
|
|
621
|
+
if self.uid_min is not None:
|
|
622
|
+
module.fail_json(msg="'uid_min' can not be used with 'local'")
|
|
623
|
+
if self.uid_max is not None:
|
|
624
|
+
module.fail_json(msg="'uid_max' can not be used with 'local'")
|
|
588
625
|
|
|
589
626
|
if module.params['groups'] is not None:
|
|
590
627
|
self.groups = ','.join(module.params['groups'])
|
|
@@ -757,6 +794,10 @@ class User(object):
|
|
|
757
794
|
else:
|
|
758
795
|
cmd.append(time.strftime(self.DATE_FORMAT, self.expires))
|
|
759
796
|
|
|
797
|
+
if self.inactive is not None:
|
|
798
|
+
cmd.append('-f')
|
|
799
|
+
cmd.append(int(self.inactive))
|
|
800
|
+
|
|
760
801
|
if self.password is not None:
|
|
761
802
|
cmd.append('-p')
|
|
762
803
|
if self.password_lock:
|
|
@@ -781,6 +822,14 @@ class User(object):
|
|
|
781
822
|
if self.system:
|
|
782
823
|
cmd.append('-r')
|
|
783
824
|
|
|
825
|
+
if self.uid_min is not None:
|
|
826
|
+
cmd.append('-K')
|
|
827
|
+
cmd.append('UID_MIN=' + str(self.uid_min))
|
|
828
|
+
|
|
829
|
+
if self.uid_max is not None:
|
|
830
|
+
cmd.append('-K')
|
|
831
|
+
cmd.append('UID_MAX=' + str(self.uid_max))
|
|
832
|
+
|
|
784
833
|
cmd.append(self.name)
|
|
785
834
|
(rc, out, err) = self.execute_command(cmd)
|
|
786
835
|
if not self.local or rc != 0:
|
|
@@ -946,6 +995,10 @@ class User(object):
|
|
|
946
995
|
cmd.append('-e')
|
|
947
996
|
cmd.append(time.strftime(self.DATE_FORMAT, self.expires))
|
|
948
997
|
|
|
998
|
+
if self.inactive is not None:
|
|
999
|
+
cmd.append('-f')
|
|
1000
|
+
cmd.append(self.inactive)
|
|
1001
|
+
|
|
949
1002
|
# Lock if no password or unlocked, unlock only if locked
|
|
950
1003
|
if self.password_lock and not info[1].startswith('!'):
|
|
951
1004
|
cmd.append('-L')
|
|
@@ -1459,6 +1512,14 @@ class FreeBsdUser(User):
|
|
|
1459
1512
|
else:
|
|
1460
1513
|
cmd.append(str(calendar.timegm(self.expires)))
|
|
1461
1514
|
|
|
1515
|
+
if self.uid_min is not None:
|
|
1516
|
+
cmd.append('-K')
|
|
1517
|
+
cmd.append('UID_MIN=' + str(self.uid_min))
|
|
1518
|
+
|
|
1519
|
+
if self.uid_max is not None:
|
|
1520
|
+
cmd.append('-K')
|
|
1521
|
+
cmd.append('UID_MAX=' + str(self.uid_max))
|
|
1522
|
+
|
|
1462
1523
|
# system cannot be handled currently - should we error if its requested?
|
|
1463
1524
|
# create the user
|
|
1464
1525
|
(rc, out, err) = self.execute_command(cmd)
|
|
@@ -1709,6 +1770,17 @@ class OpenBSDUser(User):
|
|
|
1709
1770
|
cmd.append('-K')
|
|
1710
1771
|
cmd.append('UMASK=' + self.umask)
|
|
1711
1772
|
|
|
1773
|
+
if self.inactive is not None:
|
|
1774
|
+
cmd.append('-f')
|
|
1775
|
+
cmd.append(self.inactive)
|
|
1776
|
+
if self.uid_min is not None:
|
|
1777
|
+
cmd.append('-K')
|
|
1778
|
+
cmd.append('UID_MIN=' + str(self.uid_min))
|
|
1779
|
+
|
|
1780
|
+
if self.uid_max is not None:
|
|
1781
|
+
cmd.append('-K')
|
|
1782
|
+
cmd.append('UID_MAX=' + str(self.uid_max))
|
|
1783
|
+
|
|
1712
1784
|
cmd.append(self.name)
|
|
1713
1785
|
return self.execute_command(cmd)
|
|
1714
1786
|
|
|
@@ -1779,6 +1851,10 @@ class OpenBSDUser(User):
|
|
|
1779
1851
|
cmd.append('-s')
|
|
1780
1852
|
cmd.append(self.shell)
|
|
1781
1853
|
|
|
1854
|
+
if self.inactive is not None:
|
|
1855
|
+
cmd.append('-f')
|
|
1856
|
+
cmd.append(self.inactive)
|
|
1857
|
+
|
|
1782
1858
|
if self.login_class is not None:
|
|
1783
1859
|
# find current login class
|
|
1784
1860
|
user_login_class = None
|
|
@@ -1875,6 +1951,10 @@ class NetBSDUser(User):
|
|
|
1875
1951
|
cmd.append('-p')
|
|
1876
1952
|
cmd.append(self.password)
|
|
1877
1953
|
|
|
1954
|
+
if self.inactive is not None:
|
|
1955
|
+
cmd.append('-f')
|
|
1956
|
+
cmd.append(self.inactive)
|
|
1957
|
+
|
|
1878
1958
|
if self.create_home:
|
|
1879
1959
|
cmd.append('-m')
|
|
1880
1960
|
|
|
@@ -1886,6 +1966,14 @@ class NetBSDUser(User):
|
|
|
1886
1966
|
cmd.append('-K')
|
|
1887
1967
|
cmd.append('UMASK=' + self.umask)
|
|
1888
1968
|
|
|
1969
|
+
if self.uid_min is not None:
|
|
1970
|
+
cmd.append('-K')
|
|
1971
|
+
cmd.append('UID_MIN=' + str(self.uid_min))
|
|
1972
|
+
|
|
1973
|
+
if self.uid_max is not None:
|
|
1974
|
+
cmd.append('-K')
|
|
1975
|
+
cmd.append('UID_MAX=' + str(self.uid_max))
|
|
1976
|
+
|
|
1889
1977
|
cmd.append(self.name)
|
|
1890
1978
|
return self.execute_command(cmd)
|
|
1891
1979
|
|
|
@@ -1961,6 +2049,10 @@ class NetBSDUser(User):
|
|
|
1961
2049
|
cmd.append('-L')
|
|
1962
2050
|
cmd.append(self.login_class)
|
|
1963
2051
|
|
|
2052
|
+
if self.inactive is not None:
|
|
2053
|
+
cmd.append('-f')
|
|
2054
|
+
cmd.append(self.inactive)
|
|
2055
|
+
|
|
1964
2056
|
if self.update_password == 'always' and self.password is not None and info[1] != self.password:
|
|
1965
2057
|
cmd.append('-p')
|
|
1966
2058
|
cmd.append(self.password)
|
|
@@ -2087,6 +2179,17 @@ class SunOS(User):
|
|
|
2087
2179
|
cmd.append('-R')
|
|
2088
2180
|
cmd.append(self.role)
|
|
2089
2181
|
|
|
2182
|
+
if self.inactive is not None:
|
|
2183
|
+
cmd.append('-f')
|
|
2184
|
+
cmd.append(self.inactive)
|
|
2185
|
+
if self.uid_min is not None:
|
|
2186
|
+
cmd.append('-K')
|
|
2187
|
+
cmd.append('UID_MIN=' + str(self.uid_min))
|
|
2188
|
+
|
|
2189
|
+
if self.uid_max is not None:
|
|
2190
|
+
cmd.append('-K')
|
|
2191
|
+
cmd.append('UID_MAX=' + str(self.uid_max))
|
|
2192
|
+
|
|
2090
2193
|
cmd.append(self.name)
|
|
2091
2194
|
|
|
2092
2195
|
(rc, out, err) = self.execute_command(cmd)
|
|
@@ -2204,6 +2307,10 @@ class SunOS(User):
|
|
|
2204
2307
|
cmd.append('-R')
|
|
2205
2308
|
cmd.append(self.role)
|
|
2206
2309
|
|
|
2310
|
+
if self.inactive is not None:
|
|
2311
|
+
cmd.append('-f')
|
|
2312
|
+
cmd.append(self.inactive)
|
|
2313
|
+
|
|
2207
2314
|
# modify the user if cmd will do anything
|
|
2208
2315
|
if cmd_len != len(cmd):
|
|
2209
2316
|
cmd.append(self.name)
|
|
@@ -2301,7 +2408,7 @@ class DarwinUser(User):
|
|
|
2301
2408
|
|
|
2302
2409
|
super(DarwinUser, self).__init__(module)
|
|
2303
2410
|
|
|
2304
|
-
# make the user hidden if option is set or
|
|
2411
|
+
# make the user hidden if option is set or defer to system option
|
|
2305
2412
|
if self.hidden is None:
|
|
2306
2413
|
if self.system:
|
|
2307
2414
|
self.hidden = 1
|
|
@@ -2689,6 +2796,17 @@ class AIX(User):
|
|
|
2689
2796
|
cmd.append('-K')
|
|
2690
2797
|
cmd.append('UMASK=' + self.umask)
|
|
2691
2798
|
|
|
2799
|
+
if self.inactive is not None:
|
|
2800
|
+
cmd.append('-f')
|
|
2801
|
+
cmd.append(self.inactive)
|
|
2802
|
+
if self.uid_min is not None:
|
|
2803
|
+
cmd.append('-K')
|
|
2804
|
+
cmd.append('UID_MIN=' + str(self.uid_min))
|
|
2805
|
+
|
|
2806
|
+
if self.uid_max is not None:
|
|
2807
|
+
cmd.append('-K')
|
|
2808
|
+
cmd.append('UID_MAX=' + str(self.uid_max))
|
|
2809
|
+
|
|
2692
2810
|
cmd.append(self.name)
|
|
2693
2811
|
(rc, out, err) = self.execute_command(cmd)
|
|
2694
2812
|
|
|
@@ -2757,6 +2875,10 @@ class AIX(User):
|
|
|
2757
2875
|
cmd.append('-s')
|
|
2758
2876
|
cmd.append(self.shell)
|
|
2759
2877
|
|
|
2878
|
+
if self.inactive is not None:
|
|
2879
|
+
cmd.append('-f')
|
|
2880
|
+
cmd.append(self.inactive)
|
|
2881
|
+
|
|
2760
2882
|
# skip if no changes to be made
|
|
2761
2883
|
if len(cmd) == 1:
|
|
2762
2884
|
(rc, out, err) = (None, '', '')
|
|
@@ -3021,6 +3143,14 @@ class BusyBox(User):
|
|
|
3021
3143
|
if self.system:
|
|
3022
3144
|
cmd.append('-S')
|
|
3023
3145
|
|
|
3146
|
+
if self.uid_min is not None:
|
|
3147
|
+
cmd.append('-K')
|
|
3148
|
+
cmd.append('UID_MIN=' + str(self.uid_min))
|
|
3149
|
+
|
|
3150
|
+
if self.uid_max is not None:
|
|
3151
|
+
cmd.append('-K')
|
|
3152
|
+
cmd.append('UID_MAX=' + str(self.uid_max))
|
|
3153
|
+
|
|
3024
3154
|
cmd.append(self.name)
|
|
3025
3155
|
|
|
3026
3156
|
rc, out, err = self.execute_command(cmd)
|
|
@@ -3130,7 +3260,7 @@ def main():
|
|
|
3130
3260
|
groups=dict(type='list', elements='str'),
|
|
3131
3261
|
comment=dict(type='str'),
|
|
3132
3262
|
home=dict(type='path'),
|
|
3133
|
-
shell=dict(type='
|
|
3263
|
+
shell=dict(type='path'),
|
|
3134
3264
|
password=dict(type='str', no_log=True),
|
|
3135
3265
|
login_class=dict(type='str'),
|
|
3136
3266
|
password_expire_max=dict(type='int', no_log=False),
|
|
@@ -3165,6 +3295,9 @@ def main():
|
|
|
3165
3295
|
authorization=dict(type='str'),
|
|
3166
3296
|
role=dict(type='str'),
|
|
3167
3297
|
umask=dict(type='str'),
|
|
3298
|
+
password_expire_account_disable=dict(type='int', no_log=False),
|
|
3299
|
+
uid_min=dict(type='int'),
|
|
3300
|
+
uid_max=dict(type='int'),
|
|
3168
3301
|
),
|
|
3169
3302
|
supports_check_mode=True,
|
|
3170
3303
|
)
|
|
@@ -16,11 +16,11 @@ version_added: "2.11"
|
|
|
16
16
|
options:
|
|
17
17
|
argument_spec:
|
|
18
18
|
description:
|
|
19
|
-
- A dictionary like AnsibleModule argument_spec. See R(argument spec definition,argument_spec)
|
|
19
|
+
- A dictionary like AnsibleModule argument_spec. See R(argument spec definition,argument_spec).
|
|
20
20
|
required: true
|
|
21
21
|
provided_arguments:
|
|
22
22
|
description:
|
|
23
|
-
- A dictionary of the arguments that will be validated according to argument_spec
|
|
23
|
+
- A dictionary of the arguments that will be validated according to argument_spec.
|
|
24
24
|
author:
|
|
25
25
|
- Ansible Core Team
|
|
26
26
|
extends_documentation_fragment:
|
|
@@ -51,7 +51,7 @@ attributes:
|
|
|
51
51
|
EXAMPLES = r'''
|
|
52
52
|
- name: verify vars needed for this task file are present when included
|
|
53
53
|
ansible.builtin.validate_argument_spec:
|
|
54
|
-
|
|
54
|
+
argument_spec: '{{ required_data }}'
|
|
55
55
|
vars:
|
|
56
56
|
required_data:
|
|
57
57
|
# unlike spec file, just put the options in directly
|
|
@@ -14,7 +14,8 @@ description:
|
|
|
14
14
|
- Waits for a total of O(timeout) seconds.
|
|
15
15
|
- Retries the transport connection after a timeout of O(connect_timeout).
|
|
16
16
|
- Tests the transport connection every O(sleep) seconds.
|
|
17
|
-
- This module makes use of internal ansible transport (and configuration) and the ping/win_ping
|
|
17
|
+
- This module makes use of internal ansible transport (and configuration) and the M(ansible.builtin.ping)/M(ansible.windows.win_ping)
|
|
18
|
+
modules to guarantee correct end-to-end functioning.
|
|
18
19
|
- This module is also supported for Windows targets.
|
|
19
20
|
version_added: '2.3'
|
|
20
21
|
options:
|