Ansible/Jinja2获取项目文件管理器

Ansible/Jinja2获取项目文件管理器,ansible,jinja2,Ansible,Jinja2,假设我有一个列表: vpcs: - name: myvpc1 description: bla zone: Enterprise cidr: "10.5.0.0/16" - name: vpc2 description: bla zone: Private cidr: "10.6.0.0/16" 我想选择vpc1区域。所以下面的过滤器应该返回 企业 我的实际过滤器 {{ vpcs | selectattr('name', 'match'

假设我有一个列表:

vpcs:
  - name: myvpc1
    description: bla
    zone: Enterprise
    cidr: "10.5.0.0/16"

  - name: vpc2
    description: bla
    zone: Private
    cidr: "10.6.0.0/16"
我想选择
vpc1
区域。所以下面的过滤器应该返回
企业

我的实际过滤器

{{ vpcs | selectattr('name', 'match', 'myvpc1') | first | attr('zone') }}
由于以下原因而无法工作:

获取对象的属性。foo | attr(“bar”)的工作原理与foo.bar类似 始终返回一个属性,并且不查找项目

所以它说
找不到键


我将如何描述此筛选器

您应该将筛选器更改为下面的值,以便它获取zone的值

  tasks:
    -  set_fact:
         myvar: "{{ (vpcs | selectattr('name', 'match', 'myvpc1') | first)['zone'] }}"

    - debug: var=myvar

原因可以在Ansible的github问题中找到,由jctanner(Ansible的成员)回答。

您应该将过滤器更改为下面的值,以便它获取zone的值

  tasks:
    -  set_fact:
         myvar: "{{ (vpcs | selectattr('name', 'match', 'myvpc1') | first)['zone'] }}"

    - debug: var=myvar

原因可以在Ansible的github问题中找到,由jctanner(Ansible的成员)回答。

是的,原因是字典键与字典属性不同。attr()只返回对象的属性。@IgnacioMillán这是我问题中的引号。奇怪的是,
getitem
Yes似乎没有过滤器,原因是字典键与字典属性不同。attr()只返回对象的属性。@IgnacioMillán这是我问题中的引号。奇怪的是,
getitem