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

标签 json ansible ansible-facts jmespath

在播放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/

相关文章:

ios - 当 JSON 输入表示 Codable 类型的多个子类时使用 Codable

jquery - 使用 .val 时,Highchart 不会从隐藏输入加载数据

javascript - 无法从 handsontable 访问返回的 json 数据

docker - 使用Ansible,如果docker pull抛出404错误,有没有办法拉另一个docker镜像?

Ansible AWX - AWX 代表什么?

linux - 使用 Ansible provisioner 重启 Vagrant 机器时同步文件夹丢失

Ansible concat vars 到字符串

javascript - 如何使用 Joi 检查范围对象数组中是否存在任何重叠

Ansible:ansible_domain 或 facter_domain - 如何获取 list 文件中提到的主机名的域值

ansible - 使用 with_items 连接字符串并分配给 Ansible 中的变量