如何解决使用 password_hash() 过滤器链接省略
我想创建用户,但可以省略现有用户的密码。 password_hash() 过滤器在尝试将其与 omit 链接时给我带来了一些麻烦。
带有 OR 的方法来自 ansible 文档。 Docu
- name: "Ensure users exist"
user:
name: "{{item.name}}"
password: "{{ item.pampass | default(None) | password_hash('sha512') or omit }}"
groups: "{{item.groups | default(omit) }}"
state: present
append: yes
shell: /bin/bash
with_items: "{{ users }}"
这给了我:
"msg": "Unexpected templating type error occurred on ({{ item.pampass | default(None) | password_hash('sha512') or omit }}): secret must be unicode or bytes,not None"
我也试过这个:
password: "{{ item.pampass | default(omit) | password_hash('sha512') }}"
这不会失败,但似乎散列一个空字符串并将我锁定在系统之外。
解决方法
现在可以了。 它在 VARS 中提供时设置密码并且不碰它, 当变量未在 VARS 中定义时
default(omit) 用占位符定义变量, 所以你不能用 password_hash() 过滤器链接它。 与默认值(无)相同。
代码有点长,更明确,但按预期工作
- name: "Ensure users exists"
user:
name: "{{item.name}}"
password: "{{ item.pampass | password_hash('sha512') if (item.pampass is defined) else omit}}"
groups: "{{item.groups | default(omit) }}"
state: present
append: yes
shell: /bin/bash
with_items: "{{ users }}"
您可以通过向 password_hash() 过滤器添加一致的盐(此处为“ndqui7Ywog6/hk”)来使其具有幂等性。
- name: "Ensure users exists"
user:
name: "{{item.name}}"
password: "{{ item.pampass | password_hash('sha512','ndqui7Ywog6/hk') if (item.pampass is defined) else omit}}"
groups: "{{item.groups | default(omit) }}"
state: present
append: yes
shell: /bin/bash
with_items: "{{ users }}"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。