如何在Ansible Jinja模板中提取指定用户的密码
在Jinja模板中提取指定用户的密码
问题说明
给定YAML格式的输入数据:
postgres_create_users: - {role: user1, password: password1} - {role: user2, password: password2} - {role: user3, password: password3} - {role: user4, password: password4}
需要在Jinja模板中提取user4对应的密码,当前模板代码片段为:
insights.jdbc.password={% for item in {{ postgres_create_users }} ??? %}
解决方案
方法1:循环筛选匹配项
直接通过循环遍历列表,判断角色匹配后输出密码,注意Jinja中引用变量无需额外嵌套{{ }}:
insights.jdbc.password={% for item in postgres_create_users %} {% if item.role == 'user4' %}{{ item.password }}{% endif %} {% endfor %}
方法2:使用过滤器简化代码
利用Jinja的selectattr和map过滤器,一步筛选并提取密码,更简洁高效:
insights.jdbc.password={{ postgres_create_users | selectattr('role', 'equalto', 'user4') | map(attribute='password') | first }}
解释:
selectattr('role', 'equalto', 'user4'):筛选出role字段等于user4的列表项map(attribute='password'):从筛选结果中提取password属性first:取结果列表的第一个元素(确保唯一匹配时可用)
方法3:调整数据结构(如果允许)
如果可以修改输入数据的结构,将列表改为键值对字典,能直接通过键名获取密码:
修改后的YAML输入:
postgres_create_users: user1: password1 user2: password2 user3: password3 user4: password4
对应的Jinja代码:
insights.jdbc.password={{ postgres_create_users.user4 }}
内容的提问来源于stack exchange,提问作者dzbeda
相关产品推荐
相关产品推荐

