3

在播放 ansible 剧本期间,我有一个由 consul 从 consul 返回的数组:

[
       { 
        "Node": {
            "Node": "test-eu-west-2-staging-0"
        },  
        "Node": {
            "Node": "test-nyc1-staging-0"
        },
        "Node": {
            "Node": "test-sfo1-staging-0"
        }
       }
]

我想"Node": {"Node" : "hostname"}在 ansible playbook中对其进行排序

- name: Set TEST vars, servers info and number
    set_fact:
      TEST_SERVERS="{{ test.json | json_query('SOME SORTING QUERY') }}"
      TEST_SRV_NUM="{{ test.json | length }}"

我已经阅读了 JMESPath 和 ansible 文档一整天,但仍然不知道如何实现它(顺便说一句,在 jq 中很容易,sort_by(.Node.Node)但这个技巧不适用于 ansible)

4

1 回答 1

4

正如@techraf 所指出的,您的示例 JSON 格式不正确。我可以猜测您有一个Node.Node内部对象列表,在这种情况下您可以使用sort Jinja2 过滤器:

---
- hosts: localhost
  gather_facts: no
  vars:
    myvar: [
       { "Node": { "Node": "test-c" } },
       { "Node": { "Node": "test-b" } },
       { "Node": { "Node": "test-a" } }
      ]
  tasks:
    - debug:
        msg: "{{ myvar | sort(attribute='Node.Node') }}"
于 2018-01-26T06:47:23.670 回答