Ansible遍历注册的SQL查询结果并筛选指定节点的方法
你可以借助Jinja2的selectattr过滤器实现动态属性筛选,不需要依赖固定索引,写法如下:
实现代码
- name: 仅输出CHID为M0005的节点内容 debug: var: m0005_item vars: # 逐层筛选匹配项,无匹配时默认返回None m0005_item: "{{ result.query_result[0] | selectattr('CHID', 'equalto', 'M0005') | first | default(None) }}" # 仅当存在匹配项时执行输出,无匹配时任务自动跳过 when: m0005_item is not none
代码逻辑说明
result.query_result[0]:获取SQL返回的所有行数据所在的内层列表selectattr('CHID', 'equalto', 'M0005'):遍历列表,筛选出CHID字段值为M0005的所有元素first:取第一个匹配的元素(如果存在多个匹配项也仅返回第一个)default(None):无匹配结果时默认返回None,避免筛选为空时抛出异常when条件:保证只有匹配到目标节点时才输出内容,无匹配时任务直接跳过
如果需要直接提取目标节点的指定字段,比如要获取VALUE的值,可以参考以下写法:
- name: 提取M0005节点的VALUE值 debug: msg: "M0005对应的VALUE为:{{ m0005_value }}" vars: m0005_value: "{{ result.query_result[0] | selectattr('CHID', 'equalto', 'M0005') | map(attribute='VALUE') | first | default('') }}" when: m0005_value != ''
内容的提问来源于stack exchange,提问作者Andrew Ramnikov
相关产品推荐
相关产品推荐

