Ansible 如何访问结果数组以在返回的对象中获取特定值

Ansible 如何访问结果数组以在返回的对象中获取特定值,ansible,Ansible,在调试从命令模块注册的变量时,访问ansible返回的结果数组中的某些值时遇到问题 我正在使用with_项运行多个命令,并将结果注册到“registeredVar”中。我试图像这样访问结果registeredVar.results.stdout,但我得到“变量未定义!”错误 我还尝试在调试任务中循环遍历结果数组,但得到一个“object”没有属性“stdout”的错误 下面是我正在运行的任务 - name: check configuration shell: "{{ item }}"

在调试从命令模块注册的变量时,访问ansible返回的结果数组中的某些值时遇到问题

我正在使用with_项运行多个命令,并将结果注册到“registeredVar”中。我试图像这样访问结果registeredVar.results.stdout,但我得到“变量未定义!”错误

我还尝试在调试任务中循环遍历结果数组,但得到一个“object”没有属性“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
alternativley:

- 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\u查询
过滤器:

    - debug:
        var: falcon_config | json_query('results[*].stdout')

这也将作为循环的输入

您可以使用
json\u查询
过滤器:

    - debug:
        var: falcon_config | json_query('results[*].stdout')

这也将作为循环的输入

问题是,当您注册循环上模块的输出时,您会得到一个列表。因此,在行
var:falcon_config['results'].stdout
上,它失败了,因为
falcon_config['results']
是一个列表,没有
stdoud
键。您必须在循环中访问此结果

您包含的代码片段应该可以工作:

- debug:
    var: '{{ item.stdout }}'
  with_items: falcon_config['results']
我使用以下
剧本
测试了您的代码,它确实做到了:

---
- hosts: local
  connection: local
  gather_facts: no
  tasks:
    - name: Run all shell commands
      shell: '{{ item }}'
      register: falcon_config
      with_items:
        - 'echo Hello World'
        - 'echo Something'
        - 'echo lorem ipsum'

    - name: Debug the results
      debug:
        var: item["stdout"]
      with_items: '{{ falcon_config["results"] }}'

我希望它能有所帮助

您遇到的问题是,当您在循环中注册模块的输出时,您最终会得到一个列表。因此,在行
var:falcon_config['results'].stdout
上,它失败了,因为
falcon_config['results']
是一个列表,没有
stdoud
键。您必须在循环中访问此结果

您包含的代码片段应该可以工作:

- debug:
    var: '{{ item.stdout }}'
  with_items: falcon_config['results']
我使用以下
剧本
测试了您的代码,它确实做到了:

---
- hosts: local
  connection: local
  gather_facts: no
  tasks:
    - name: Run all shell commands
      shell: '{{ item }}'
      register: falcon_config
      with_items:
        - 'echo Hello World'
        - 'echo Something'
        - 'echo lorem ipsum'

    - name: Debug the results
      debug:
        var: item["stdout"]
      with_items: '{{ falcon_config["results"] }}'

我希望它能有所帮助

在循环中运行时,最好在调试中定义键,例如
-debug:msg:{{item.stdout}}循环:{{falcon_config | json_query('results[*]')}}
在循环中运行时,最好在调试中定义键,例如
-debug:msg:{{item.stdout}{{falcon_config | json_query('results[*]')}”