如何在Ansible中执行用户创建任务

时间:2016-04-26 19:34:30

标签: ansible ansible-playbook

我想通过Ansible自动创建/维护用户。我希望每个新用户在第一次登录后都必须选择新密码。

想象一下,我在vars文件中有一个用户名列表,密码,组等。然后,我有一个角色,这样做:

---
- name: Add/maintain users
  user:
    name: "{{ item.name }}"
    password: "{{ item.password }}"
    update_password: on_create
    createhome: true
    generate_ssh_key: true
    groups: "{{ item.groups}}"
    shell: /bin/bash
    state: present
  register: users_added
  with_items: "{{ users }}"
- name: Force created users to change password
  shell: "chage -d 0 {{ item.name }}"
  when: "{{ item.changed }}"
  with_items: "{{ users_added.results }}"
- name: Set authorized keys
  authorized_key:
    user: "{{ item.name }}"
    key: "{{ item.item.authorized_key }}"
    manage_dir: yes
  when: "{{ item.changed }}"
  with_items: "{{ users_added.results }}"

我希望仅为新创建的用户触发第二个任务(“强制创建的用户更改密码”)。到目前为止,我发现的最好的事情是检查它是否为changed

不幸的是,如果用户没有SSH密钥,则会触发此操作。运行此任务的用户在配置计算机时没有SSH密钥。 Ansible将其密码过期,并且每个后续命令都会失败,因为它需要sudo。

任何人都知道只有在创建用户后才能使任务工作?类似于generate_ssh_key的{​​{1}}选项。

1 个答案:

答案 0 :(得分:0)

system:布尔值 选择:否←是 创建帐户状态=存在时,将其设置为“是”会使用户成为系统帐户。 无法在现有用户上更改此设置

- name: Force created users to change password
  shell: "chage -d 0 {{ item.name }}"
  when: **item.changed and item.system is defined and not item.system**
  with_items: "{{ users_added.results }}"