鉴于我已经使用var sonarqube_plugins_installed
中的shell任务在目录中“注册”了文件,
- name: Debug
debug:
var: sonarqube_plugins_installed.results
例如,我看到
TASK [sonarqube : Debug] ************************************************************************
ok: [sonarqube] => {
"sonarqube_plugins_installed.results": [
{
"ansible_loop_var": "item",
"changed": true,
"cmd": "ls /opt/sonarqube/sonarqube-6.7/extensions/plugins/sonar-build-breaker-plugin-*.jar",
"delta": "0:00:00.003748",
"end": "2019-09-18 04:04:54.355667",
"failed": false,
"invocation": {
"module_args": {
"_raw_params": "ls /opt/sonarqube/sonarqube-6.7/extensions/plugins/sonar-build-breaker-plugin-*.jar",
"_uses_shell": true,
"argv": null,
"chdir": null,
"creates": null,
"executable": null,
"removes": null,
"stdin": null,
"stdin_add_newline": true,
"strip_empty_ends": true,
"warn": true
}
},
"item": "build_breaker",
"rc": 0,
"start": "2019-09-18 04:04:54.351919",
"stderr": "",
"stderr_lines": [],
"stdout": "/opt/sonarqube/sonarqube-6.7/extensions/plugins/sonar-build-breaker-plugin-2.2.jar",
"stdout_lines": [
"/opt/sonarqube/sonarqube-6.7/extensions/plugins/sonar-build-breaker-plugin-2.2.jar"
]
}
]
}
如何在另一个任务中访问例如stdout
?在另一个任务中,我想使用results
处理with_items
中的每个项目并输出stdout
。
这怎么办?
答案 0 :(得分:0)
以下应该是一个好的开始:
- name: show stdout for each result
debug:
var: item.stdout
loop: "{{ sonarqube_plugins_installed.results }}"
正如您所猜测的,这正在遍历results
列表中的每个元素。
如果要一次打印所有行,另一种方法是通过json_query
处理数据结构,并使用相关的jmespath表达式以仅提取所需的信息
- name: show sdtout list for all results
debug:
msg: "{{ sonarqube_plugins_installed | json_query('results[].stdout[]') }}"
您还可以将两者结合起来,并仅在简单的stdout列表上循环
- name: show stdout for each result
debug:
var: item
loop: "{{ sonarqube_plugins_installed | json_query('results[].stdout[]') }}"
您还可以使用map
过滤器提取所需的属性:
- name: show stdout list of all results
debug:
msg: "{{ sonarqube_plugins_installed.results | map(attribute='stdout') | list }}"
还有其他可以使用的解决方案,我相信您可以在specific ansible filters和general jinja2 filters文档中找到