ansible - 在 Ansible 中使用列表键值
问题描述
如何在when
不使用 jinja2 模板的情况下使用列表键值?
下面是一个不起作用的例子:
- name: "Give sudo rights"
user:
group: "{{users[item].username}}"
groups: sudo
append: yes
name: "{{ users[item].username }}"
become: true
when: {{ users[item].sudorights }} == yes
with_items: "{{addusers}}"
列表:
users:
john:
username: john
sudorights: yes
解决方案
when 子句是一个没有双花括号的原始 Jinja2 表达式
此外,与字面真/假相比,ansible-lint 不良实践规则检查之一
考虑到上述情况,您可以将表达式修复为:
when: users[item].sudorights | bool
更进一步
您的users
列表中可能有一些根本没有sudorights
定义的用户。在这种情况下,一旦遇到这种情况,上述条件将触发错误并停止 ansible 处理item
。为确保不会发生这种情况,您可以默认此参数的值(如果不存在):
when: users[item].sudorights | default(false) | bool
推荐阅读
- postgresql - 选择不返回值 Postgres-11.4
- jquery - 在 jQuery 中使用 find().slice() 时如何解决 attr("class") 的奇怪行为
- c++ - C++ 从模板中获取函数名
- arrays - 根据构造函数参数对飞镖列表进行排序
- visual-studio-code - VSCode 代码段插入可变颜色
- c# - 如何使用 DictionaryModelBinder?
- docker - 在出现问题之前,GKE 容器映像可以有多大?
- r - 跨日期汇总数据
- vb.net - 程序在从 arduino VB.net 接收数据时丢弃 com 端口
- java - 通过 kubernetes 和 helm 部署为 2 个不同服务的单个 docker 映像。更改应用程序的上下文路径