ansible - 如何在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 变量?
解决方案
我不确定这是最好的方法,但这是我最终的做法
- 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 }}"
让我知道是否有人能想到更好的方法。
推荐阅读
- c++ - 为什么我的 DLL 在给定绝对路径而不是相对路径时正确加载?
- python - 可视化面对面记录的最佳方式是什么?
- shell - 使用 shell 将一行中的第一个单词替换为另一个单词
- css - SVG 到 html 大小在不应该时放大
- java - GoldfishAddressSpaceHostMemoryAllocator:ioctl_ping 失败
- mysql - 我无法在 ubuntu 18.04 上安装 mysql
- reactjs - Redux 状态更改不会重新渲染数据表
- javascript - Vue Now UI Kit 中组件内的反应性
- arrays - 从 Racket 中的列表列表中获取具有最大值的列表
- php - 使用 PHP 运行查询时出现 SQL 脚本错误