ansible - 如何访问结果数组以获取返回的对象中的特定值
问题描述
当我调试从命令模块注册的变量时,我无法访问 ansible 返回的结果数组中的某些值。
我正在使用 with_items 运行多个命令,并将结果注册到“registeredVar”中。我试图访问这样的结果,registeredVar.results.stdout
但我得到“变量未定义!” 错误。
我还尝试在调试任务中循环遍历结果数组,但出现“对象”没有属性“stdout”错误
以下是我正在运行的任务
- name: check configuration
shell: "{{ item }}"
register: falcon_config
with_items:
- /opt/CrowdStrike/falconctl -g --aph
- /opt/CrowdStrike/falconctl -g --cid
- /opt/CrowdStrike/falconctl -g --app
下面是输出变量的调试任务
- debug:
var: falcon_config['results'].stdout
替代方法:
- debug:
var: '{{ item.stdout }}'
with_items: falcon_config['results']
这是运行时结果数组的调试输出falcon_config['results']
"falcon_config['results']": [
{
"_ansible_ignore_errors": null,
"_ansible_item_result": true,
"_ansible_no_log": false,
"_ansible_parsed": true,
"changed": true,
"cmd": "/opt/CrowdStrike/falconctl -g --aph",
"delta": "0:00:00.006724",
"end": "2019-07-29 10:36:05.481672",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "/opt/CrowdStrike/falconctl -g --aph",
"_uses_shell": true,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"item": "/opt/CrowdStrike/falconctl -g --aph",
"rc": 0,
"start": "2019-07-29 10:36:05.474948",
"stderr": "",
"stderr_lines": [],
"stdout": "aph=crowdstrike.domain.",
"stdout_lines": [
"aph=crowdstrike.intra.absaafrica."
]
},
{
"_ansible_ignore_errors": null,
"_ansible_item_result": true,
"_ansible_no_log": false,
"_ansible_parsed": true,
"changed": true,
"cmd": "/opt/CrowdStrike/falconctl -g --cid",
"delta": "0:00:00.006716",
"end": "2019-07-29 10:36:05.662173",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "/opt/CrowdStrike/falconctl -g --cid",
"_uses_shell": true,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"item": "/opt/CrowdStrike/falconctl -g --cid",
"rc": 0,
"start": "2019-07-29 10:36:05.655457",
"stderr": "",
"stderr_lines": [],
"stdout": "cid=\"185d26e78791sksdasd9d1033sa4\".",
"stdout_lines": [
"cid=\"185d26e78791sksdasd9d1033sa4\"."
]
},
{
"_ansible_ignore_errors": null,
"_ansible_item_result": true,
"_ansible_no_log": false,
"_ansible_parsed": true,
"changed": true,
"cmd": "/opt/CrowdStrike/falconctl -g --app",
"delta": "0:00:00.006617",
"end": "2019-07-29 10:36:05.840573",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "/opt/CrowdStrike/falconctl -g --app",
"_uses_shell": true,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"warn": true
}
},
"item": "/opt/CrowdStrike/falconctl -g --app",
"rc": 0,
"start": "2019-07-29 10:36:05.833956",
"stderr": "",
"stderr_lines": [],
"stdout": "app=8080.",
"stdout_lines": [
"app=8080."
]
}
]
}
我无法获得每个对象的标准输出值。
解决方案
您可以使用json_query
过滤器:
- debug:
var: falcon_config | json_query('results[*].stdout')
这也可以作为循环的输入
推荐阅读
- apache-spark - 从 s3 传递自定义 log4j.properties 文件
- linux - 如何在linux中使用join命令将两个不同长度和不同列的文本文件与标题匹配
- apache-spark - Spark Streaming 的实时推理
- node.js - 在一定时间后使 Mongodb 文档处于非活动状态
- laravel - 带有 addSelect 的 laravel elequent 查询
- react-native - 如何为 flexWrap 设置自动高度
- security - 如何处理 shellcode 缓冲区溢出中的坏字符?
- flutter - Flutter GestureDetector 不在 if else 表达式中调用该函数
- unity3d - WebGL 发布者未在 Unity 中包管理器的统一注册表中列出
- firebase - 颤振和火力基地和子集合