【问题标题】:How to execute a task on user creation in Ansible如何在 Ansible 中执行用户创建任务
【发布时间】:2016-04-26 19:34:30
【问题描述】:

我想通过 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_keyon_create 选项。

【问题讨论】:

  • 不是一个正确的答案,但您可以将user 拆分为两部分,一部分用于创建用户,另一部分用于添加 ssh 密钥。这样您就可以注册第一个结果并对其采取行动。

标签: ansible ansible-playbook


【解决方案1】:

系统:布尔值 选择:否←是 创建帐户 state=present 时,将其设置为 yes 会使用户成为系统帐户。 现有用户无法更改此设置

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

【讨论】:

    猜你喜欢
    • 2022-10-22
    • 2018-05-19
    • 2017-04-14
    • 2016-07-03
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多