在播放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') }}"
关于json - 如何在 ansible 剧本中使用 JMESPath 进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48455566/