如何在 ansible 剧本中使用 JMESPath 进行排序?

How to sort with JMESPath in ansible playbook?

我在玩ansible playbook时有一个curl从consul返回的数组:

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

我想在ansible playbook

中按"Node": {"Node" : "hostname"}排序
- 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)

正如@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') }}"