如何使用通配符输出Ansible

时间:2019-07-04 08:52:29

标签: variables ansible wildcard

我正在尝试对我的ansible变量使用通配符,但似乎我无法设法使用它。

我尝试了here中的某些内容,但还是一样。

Ansible输出

"reboot_required": false,
"updates": {
    "0720a128-90b1-4b21-a8cf-3c5c86239435": {
        "kb": [
            "2267602"
        ],
        "installed": false,
        "id": "0720a128-90b1-4b21-a8cf-3c5c86239435",
        "categories": [
            "Definition Updates",
            "Windows Defender"
        ],
        "title": "Definition Update for Windows Defender Antivirus - KB2267602 (Definition 1.297.412.0)"
    },
    "60bbf4af-afd3-45fe-aad2-6d72beddeba2": {
        "kb": [
            "4509475"
        ],
        "installed": false,
        "id": "60bbf4af-afd3-45fe-aad2-6d72beddeba2",
        "categories": [
            "Updates",
            "Windows Server 2016"
        ],
        "title": "2019-06 Cumulative Update for Windows Server 2016 for x64-based Systems (KB4509475)"

我正在尝试获取标题或ID

- name: debug
  debug:  
    msg: "{{ item.updates.*.id }}"
  with_items:
    - "{{ result }}"

感谢帮助

3 个答案:

答案 0 :(得分:0)

他在您链接的示例中使用的通配符是json_query过滤器的一部分。他将管道传递到json_query过滤器,然后将通配符用作该语法的一部分。

results | json_query('[].block_device_mapping.*.snapshot_id')

您在示例中未使用json_query,因此,此语法不可用并且不起作用。

尝试将结果传递到json_query,然后包括要获取的路径。如果已经创建了{{results}},则可以放弃with_items并使用类似以下内容:

{{ results | json_query('updates.*.id') }}

我在这里猜测确切的语法,但是您绝对必须从json_query开始。

要弄清楚所需的确切语法,请从小管道开始到json_query,然后获取最上面的元素(在您的情况下为更新),在过滤器中添加部分,直到将其缩小为所需的信息为止。我已经链接到下面的探路者了。

参考:

edit:弗拉基米尔(Vladimir)答案的第一部分中的语法看起来比我猜测的要性感。尝试使用他的语法来了解有效的方法,并使用我的答案来了解问题所在。然后将他标记为正确答案。

答案 1 :(得分:0)

鉴于上面的可行输出将以下任务存储在变量 result

- set_fact:
    id_list: "{{ result.updates|
                 json_query('*.id')
                 }}"
- debug:
    var: id_list

给出 id (类似标题)的列表

  id_list:
  - 0720a128-90b1-4b21-a8cf-3c5c86239435
  - 60bbf4af-afd3-45fe-aad2-6d72beddeba2

以及下面的任务

- set_fact:
    my_list: "{{ result.updates|
                 json_query('*.{ id: id, title: title }')
                 }}"
- debug:
    var: my_list

给出 id,标题散列的列表

  my_list:
  - id: 0720a128-90b1-4b21-a8cf-3c5c86239435
    title: Definition Update for Windows Defender Antivirus - KB2267602 (Definition 1.297.412.0)
  - id: 60bbf4af-afd3-45fe-aad2-6d72beddeba2
    title: 2019-06 Cumulative Update for Windows Server 2016 for x64-based Systems (KB4509475)

答案 2 :(得分:0)

请尝试以下。我还没有测试过。

- name: debug
  debug:
    msg: "{{ item|first }}:{{ item[item|first].title }}"
  with_items:
    - "{{ result.updates }}"