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

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

- 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中移出来,但是这样也很糟糕。 有没有办法只是不尝试pipe理密码属性,如果字典值未设置?

从用户模块摘录文档:

update_passwordalways / on_create – 如果密码不同, always会更新密码。 on_create只会为新创build的用户设置密码。

要跳过未知参数,请使用omit :

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

通过“密码未知”操作手册运行所有帐户。

使用单独的手册来设置新帐户的密码。