添加用户并强制更改密码,添加新用户时重置用户密码

时间:2019-09-03 12:03:05

标签: ansible

我在Ansible上遇到问题,正在向服务器添加新用户。 首先,我检查用户是否存在于系统上,如果不存在,则继续创建它们。

我在这里发现了一个类似的问题:ansible user module always shows changed 并且我能够通过添加简单的salt在文件用户列表中添加新用户时解决更改后的状态。 但是,始终执行最后一部分,即处理程序。

这是我的剧本的样子:

licence == "Na"

这是一个名为用户列表的简单文件:

---
- 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

当我运行剧本而不更改用户列表文件时,一切都很好。 但是,如果我向文件中添加新用户,则当现有用户尝试登录时,系统会强制他们更改其密码,因为始终会调用该处理程序。 是否可以通过仅在新创建的用户上执行立即更改密码的方式来更改代码?

1 个答案:

答案 0 :(得分:0)

您的剧本有两个主要问题:

  1. userexists分别注册每个结果,但是您仅引用整体“失败”结果。使用debug语句显示变量以了解我的意思
  2. 如果通知了处理程序,您将循环访问所有用户,而不是仅对那些已“更改”(即已创建)的用户进行循环

有两种方法可以解决此问题,但我认为这可能是最简洁的:

  tasks:
    - name: add user if it does not exist
      user:
        name: "{{ item }}"
        password: "{{ 'password' | password_hash('sha512', 'mysecretsalt')  }}"
        update_password: on_create
      loop: "{{ users }}"
      register: useradd
      notify: change password

  handlers:
    - name: change user password upon creation
      shell: chage -d 0 {{ item.name }}
      loop: "{{ useradd.results }}"
      when: item.changed
      listen: change password