Ansible:未设置时保持密码不变

Ansible:未设置时保持密码不变

我正在尝试使用 with_dict 在 Ansible 中创建一组用户。问题是有时用户已经存在,而我没有密码。在这种情况下,我只想跳过设置密码,但管理其余的用户属性。这是一个丑陋的解决方法,但一定有更好的方法来做到这一点:

- name: create FTP users (password known)
  user:
    name: "{{ item.key }}"
    comment: "{{ item.value.comment | default('') }}"
    password: "{{ item.value.password }}"
    shell: "{{ item.value.shell | default('/sbin/nologin') }}"
    home: "{{ item.value.home | default('/var/ftp/' + item.key) }}"
    createhome: "{{ item.value.createhome | default('no') }}"
  with_dict: "{{ ftp_users }}"
  when: item.value and item.value.password is defined

- name: create FTP users (password unknown)
  user:
    name: "{{ item.key }}"
    comment: "{{ item.value.comment | default('') }}"
    shell: "{{ item.value.shell | default('/sbin/nologin') }}"
    home: "{{ item.value.home | default('/var/ftp/' + item.key) }}"
    createhome: "{{ item.value.createhome | default('no') }}"
  with_dict: "{{ ftp_users }}"
  when: item.value.password is not defined

我还发现我可以从 /etc/shadow 将每个用户的密码拉入 ansible,但这也有点丑陋。如果 dict 值未设置,有没有办法简单地不尝试管理密码属性?

答案1

摘录自用户模块文档:

update_passwordalways/ on_createalways如果密码不同,将会更新密码。on_create只会为新创建的用户设置密码。

要跳过未知参数,请使用忽略

password: "{{ item.value.password | default(omit) }}"

答案2

通过“密码未知”剧本运行所有帐户。

使用单独的剧本来设置新账户的密码。

相关内容