Debugging 使用Ansible时访问标准输出线

Debugging 使用Ansible时访问标准输出线,debugging,ansible,Debugging,Ansible,假设我在安装了varsonarqube\u plugins\u的目录中使用shell任务“注册”了文件,当我使用 - name: Debug debug: var: sonarqube_plugins_installed.results 例如,我明白了 TASK [sonarqube : Debug] ************************************************************************ ok: [sonarqube] =

假设我在安装了var
sonarqube\u plugins\u的目录中使用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
?在另一个任务中,我想使用
和\u items
处理
结果中的每个项目,并输出
标准输出


如何做到这一点?

以下应该是一个良好的开端:

- name: show stdout for each result
  debug:
    var: item.stdout
  loop: "{{ sonarqube_plugins_installed.results }}"
正如您所猜测的,这将贯穿
结果
列表中的每个元素

如果要同时打印所有行,另一种方法是使用相关表达式处理数据结构,以仅提取所需信息

- name: show sdtout list for all results
  debug:
    msg: "{{ sonarqube_plugins_installed | json_query('results[].stdout[]') }}"
您还可以将两者结合起来,只在简单的标准输出列表上循环

- name: show stdout for each result
  debug:
    var: item
  loop: "{{ sonarqube_plugins_installed | json_query('results[].stdout[]') }}"
您还可以使用过滤器提取所需的属性:

- name: show stdout list of all results
  debug:
    msg: "{{ sonarqube_plugins_installed.results | map(attribute='stdout') | list }}"

我相信您会在和文档中找到其他可以使用的解决方案

sonarqube_插件如何安装。结果[0]。stdout?@itiic这只会得到列表中第一个元素的
stdout
。虽然示例列表只有一个元素,但OP表示他希望处理
结果中的每个项目