Ansible Playbook中基于名称提取完整磁盘规则的JMESPath查询问题
解决方法
1. 调整JMESPath查询语句
如果原始JSON是规则列表结构,要匹配指定名称的完整规则条目,只需移除原查询末尾的.value即可。
比如原查询可能是:
[?name == '(SUP) Filesystem usage /var >85%'].value
修改为:
[?name == '(SUP) Filesystem usage /var >85%']
若需返回单个对象而非数组,可追加[0]:
[?name == '(SUP) Filesystem usage /var >85%'][0]
2. Ansible Playbook示例
以下是完整的提取逻辑示例:
- name: 定义磁盘规则数据集 set_fact: disk_rules: | [ { "schemaId": "disk-rule-001", "name": "(SUP) Filesystem usage /var >85%", "value": { "path": "/var", "threshold": 85, "metric": "usage" }, "enabled": true }, { "schemaId": "disk-rule-002", "name": "(SUP) Filesystem usage /tmp >90%", "value": { "path": "/tmp", "threshold": 90, "metric": "usage" }, "enabled": true } ] - name: 提取指定名称的完整磁盘规则 set_fact: target_rule: "{{ disk_rules | json_query('[?name == `(SUP) Filesystem usage /var >85%`][0]') }}" - name: 验证提取结果 debug: var: target_rule
执行后,target_rule会包含schemaId、name、value等所有外层字段的完整数据。
3. 注意事项
- 名称含特殊字符时,JMESPath查询需用反引号(`)包裹字符串,避免语法错误。
- 若匹配到多条规则,去掉
[0]会返回数组形式结果,可根据后续需求调整。
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

