ansible - 过滤对象并获取字段值
问题描述
我有以下事实
"ansible_facts": {
"facter_partitions": {
"sda1": {
"filesystem": "ext4",
"label": "BOOT",
"mount": "/boot",
"size": "1048576",
"uuid": "bfa6fa2e-2de5-48db-89ff-63df19e577bb"
},
"sda2": {
"filesystem": "LVM2_member",
"size": "82835456"
}
}
},
我想获得filesystem
带有标签的设备BOOT
我试着那样做
---
- hosts: localhost
tasks:
- debug: msg={{ facter_partitions.values() | selectattr("label","search","BOOT")| map(attribute="filesystem") | list}}
但我得到这个错误:
fatal: [localhost]: FAILED! => {"msg": "Unexpected templating type error occurred on ({{ facter_partitions.values() | selectattr(\"label\",\"search\",\"BOOT\") | map(attribute=\"filesystem\") | list }}): expected string or buffer"}
获得该领域的正确方法是什么?我不希望过滤器返回多个值。
# ansible --version
ansible 2.4.2.0
# rpm -qa | grep jinja2
python-jinja2-2.7.2-2.el7.noarch
Red Hat 7.4
编辑:
这不起作用的原因是因为我试图过滤一个未在所有项目上定义的字段。我首先需要过滤所有定义了“标签”的项目,然后应用我的过滤器。
{{ facter_partitions.values() | selectattr("label","defined") | selectattr("label","search","BOOT") | map(attribute="filesystem") | first }}
解决方案
推荐阅读
- vba - MSWord 上的 VBA:SAPI.SpVoice 对象是否有发言结束的事件?
- .htaccess - htaccess 重定向不起作用 - 重定向到错误的页面
- python - 当继承的类不是 __init__ 中的参数时,为它设置属性值
- sql - 根据另一行中的值更新行中的值
- python - 熊猫:新栏目;如果 A、B、C 列等于 0,则列等于 0。否则 1
- sql - 如何正确应用递归 CTE?
- java - 在 Jsch Session 中使用绑定地址
- sql - 将 R 连接到 MAC 中的 SQL Server
- java - 如何将矩阵保存在文本文件中
- excel - 有没有办法改变拖动函数的工作方式?