首页 > 解决方案 > 如何在ansible中搜索具有匹配属性的任何变量

问题描述

我有一个名为myvar的变量,定义如下

- debug: var=myvar

ok: [127.0.0.1] => {
    "myvar": {
        "name": "george"
        "description": "blah blah"
    }
}

我想根据 name 属性搜索该变量。例如,我想提供名称“george”并检索上层 myvar 变量。

- name: search
  set_fact:
    list_of_matched_vars: "{{ vars | json_query(query) }}"
  vars:
    query: "[?[].name=='george']"

上面返回一个空结果。我需要以某种方式表示我想搜索任何变量名,它的属性“name”与值“george”匹配。事实上,我想搜索一个匹配值的列表,比如“george, helen”,但是,我想这会更棘手,所以让我们先来看看更简单的情况。

如何根据它的“名称”属性搜索上面的 myvar 变量?

标签: ansibleansible-factsjson-query

解决方案


我不确定这是最好的方法,但这是我最终的做法

- name: search
  set_fact:
    list_of_matched_vars: "{{ vars | dict2items | selectattr('value.name', 'defined') | selectattr('value.name', 'in', list_of_names_to_search_for) | list }}"

让我知道是否有人能想到更好的方法。


推荐阅读