【发布时间】:2019-09-03 12:03:05
【问题描述】:
我在使用 Ansible 并将新用户添加到服务器时遇到问题。 首先,我检查用户是否存在于系统上,如果没有,则继续创建它们。
我在这里发现了一个类似的问题:ansible user module always shows changed 当在文件用户列表中添加一个新用户并添加一个简单的盐时,我能够修复更改的状态。 然而,最后一部分,即处理程序,总是被执行。
这就是我的剧本的样子:
---
- hosts: all
become: yes
vars_files:
- /home/ansible/userlist
tasks:
- name: check user exists #check if user exists in system, using the username and trying to search inside passwd file
getent:
database: passwd
key: "{{ item }}"
loop: "{{ users }}"
register: userexists
ignore_errors: yes
- name: add user if it does not exit
user:
name: "{{ item }}"
password: "{{ 'password' | password_hash('sha512', 'mysecretsalt') }}"
update_password: on_create
loop: "{{ users }}"
when: userexists is failed
notify: change password
handlers:
- name: change user password upon creation
shell: chage -d 0 "{{ item }}"
loop: "{{ users }}"
listen: change password
这是一个名为 userlist 的简单文件:
users:
- testuser1
- testuser2
- testuser3
- testuser22
当我运行剧本而不更改用户列表文件时,一切都很好。 但是,如果我将新用户添加到文件中,那么当现有用户尝试登录时,系统会强制他们更改密码,因为始终调用处理程序。 有没有办法改变代码,使立即更改密码的强制执行只对新创建的用户执行?
【问题讨论】:
-
您可以使用阻止和救援。请在此处查找示例。 stackoverflow.com/questions/35892455/…
-
所以,据我了解,我应该尝试在块语句中循环,当用户失败时,将调用救援任务。但是,在上面的示例中,如何更改代码以使命令
chage -d 0 "{{ item }}"仅在“失败”用户上运行?
标签: ansible