如何在 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') }}"
我在玩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') }}"