首页 > 解决方案 > 在 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

标签: ansible

解决方案


条件文件中所述

when 子句是一个没有双花括号的原始 Jinja2 表达式

此外,与字面真/假相比,ansible-lint 不良实践规则检查之一

考虑到上述情况,您可以将表达式修复为:

when: users[item].sudorights | bool

更进一步

您的users列表中可能有一些根本没有sudorights定义的用户。在这种情况下,一旦遇到这种情况,上述条件将触发错误并停止 ansible 处理item。为确保不会发生这种情况,您可以默认此参数的值(如果不存在):

when: users[item].sudorights | default(false) | bool

推荐阅读