在 Ansible 的字典列表中搜索键

Set*_*nta 4 jinja2 ansible

我有一个类似于以下内容的字典列表:

"subnets": [
        {
            "name": "subnet1-name34554",
            "address": "192.168.1.100"
            "id: "id1"
        },
        {
            "name": "subnet2-name67678",
            "addr": "192.168.1.200"
            "id":   "id2"
        },
        {
            "name": "subnet3-name23345",
            "addr": "192.168.1.300"
            "id":   "id3"
        }
    ]
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用部分名称搜索字典并返回全名。例如搜索subnet1应该返回subnet1-name34554

如果我做这样的事情:

- name: test
  debug: msg="{{ subnets |  selectattr("name", "search", "subnet1") | list  }}"
Run Code Online (Sandbox Code Playgroud)

我得到一个带有单个 dict 的列表:

 [
   {
     "name": "subnet1-name34554",
     "address": "192.168.1.100"
     "id: "id1"
    }
 ]
Run Code Online (Sandbox Code Playgroud)

我不确定只提取“名称”键的下一步是什么,或者是否有更好的方法?

Kon*_*rov 6

结果,您将获得字典列表(单个字典)。

因此,将其输入first过滤器以仅获取第一个元素,然后获取地址name属性。

- name: test
  debug:
    msg: "{{ (subnets |  selectattr('name', 'search', 'subnet1') | list | first).name }}"
Run Code Online (Sandbox Code Playgroud)