【发布时间】:2023-01-24 01:11:45
【问题描述】:
Ansible user 模块的要求只是检查用户是否存在并且不采取任何行动。
check_mode 有帮助吗?这样的playbook任务应该怎么写呢?
此链接 Ansible playbook to check user exist or display error message 提供了另一种选择。是否可以使用内置的 user 模块来完成这项工作?
【问题讨论】:
标签: ansible
Ansible user 模块的要求只是检查用户是否存在并且不采取任何行动。
check_mode 有帮助吗?这样的playbook任务应该怎么写呢?
此链接 Ansible playbook to check user exist or display error message 提供了另一种选择。是否可以使用内置的 user 模块来完成这项工作?
【问题讨论】:
标签: ansible
由于 Ansible 主要是一种配置管理工具,可以在其中声明 Desired State
Ansible
user模块的要求只是检查用户是否存在并且不采取任何行动。这已经并且主要是
user模块的默认行为。如果用户已经存在并且不需要更改,模块将只返回changed: false并报告OK。所以它不会采取任何行动。对于仅当用户存在时的简单检查,您已经通过
getent模块找到了 Ansible playbook to check user exist。请注意,与user模块相比,它不是“替代品”。
check_mode有帮助吗?因为
check_mode主要是针对Validating tasks和检查模式只是一种模拟……它非常适合验证一次在一个节点上运行的配置管理剧本。
这将主要取决于您尝试实现的目标以及运行的行为方式。
进一步阅读和问答
【讨论】:
简而言之:
---
- name: Check if users exists
hosts: localhost
gather_facts: false
become: true
vars:
users_to_test:
- daemon # This one should exist, at least on ubuntu
- a_non_existing_user
tasks:
- name: Check if users exist
ansible.builtin.user:
name: "{{ item }}"
loop: "{{ users_to_test }}"
check_mode: true
register: test_users
- name: Report
ansible.builtin.debug:
msg: "User {{ item.item }} {{ 'exists' if item.state | d('') == 'present' else 'does not exist' }}"
loop: "{{ test_users.results }}"
loop_control:
label: "{{ item.item }}"
在我的 ubuntu 20 本地机器上给出:
$ ansible-playbook testuser.yml
PLAY [Check if users exists] ********************************************************************************************************************************************************
TASK [Check if users exist] *********************************************************************************************************************************************************
ok: [localhost] => (item=daemon)
changed: [localhost] => (item=a_non_existing_user)
TASK [Report] ***********************************************************************************************************************************************************************
ok: [localhost] => (item=daemon) => {
"msg": "User daemon exists"
}
ok: [localhost] => (item=a_non_existing_user) => {
"msg": "User a_non_existing_user does not exist"
}
【讨论】: