如何用Ansible获取JSON子键最大值并将其存入变量?
优化Ansible获取JSON子键最大值并存储变量的方案
可以完全用Ansible原生模块和过滤器实现,无需依赖curl、jq等外部工具,具体实现如下:
- name: get latest checkmk version hosts: localhost gather_facts: no tasks: - name: fetch stable downloads json ansible.builtin.uri: url: https://download.checkmk.com/stable_downloads.json return_content: yes register: checkmk_downloads - name: extract and get latest version ansible.builtin.set_fact: latest_checkmk_version: "{{ checkmk_downloads.content | from_json | json_query('checkmk[].version') | sort(reverse=True) | first }}" - name: verify latest version (optional) ansible.builtin.debug: var: latest_checkmk_version
关键说明:
- uri模块:替代
curl,原生获取JSON内容并自动处理HTTP状态,比command模块更可靠,支持超时、认证等扩展配置。 - 过滤器链:
from_json:将返回的JSON字符串解析为Ansible可操作的字典结构json_query('checkmk[].version'):提取checkmk数组中所有元素的version字段,生成版本列表sort(reverse=True):对版本列表进行降序排序first:取排序后的第一个元素(即最大版本号)
- 变量存储:结果直接存入
latest_checkmk_version变量,后续任务可直接引用
这种方式完全依赖Ansible原生能力,无需目标主机安装额外工具,跨平台兼容性更好,且便于后续维护和扩展。
内容的提问来源于stack exchange,提问作者dan
相关产品推荐
相关产品推荐

