Ansible如何从GitHub接口获取node_exporter最新版本tag_name值
Ansible 提取 node_exporter 最新版本号实现方法
方案1:最简实现(无需循环、无需额外注册变量)
GitHub 最新版本接口返回的是单个 JSON 对象,无需用 loop 遍历,可直接通过 Jinja 语法提取字段:
- name: 获取 node_exporter 最新版本 tag debug: msg: "最新版本为:{{ (lookup('url', 'https://api.github.com/repos/prometheus/node_exporter/releases/latest') | from_json).tag_name }}"
说明:from_json 过滤器用于将接口返回的 JSON 字符串转换为可直接取属性的对象,直接取 tag_name 字段即可得到版本标识。
方案2:基于你现有代码的提取方式
如果你要保留当前的 loop + 注册变量的写法,可通过注册变量的层级结构取值:
- name: 从已有注册变量提取版本号 debug: msg: "提取到的版本号为:{{ msgtest.results[0].item.tag_name }}"
说明:你添加了 wantlist=True 后 lookup 返回单元素列表,loop 遍历后注册的 msgtest 的 results 数组第一个元素的 item 字段就是接口返回的完整 JSON 对象,直接取 tag_name 即可。
可选:提取无前缀的纯版本号
如果需要去掉版本号开头的 v 前缀(比如得到 1.2.2 而非 v1.2.2),可搭配 replace 过滤器处理:
- name: 获取无v前缀的纯版本号 debug: msg: "纯版本号为:{{ (lookup('url', 'https://api.github.com/repos/prometheus/node_exporter/releases/latest') | from_json).tag_name | replace('v', '') }}"
内容的提问来源于stack exchange,提问作者MSchultz
相关产品推荐
相关产品推荐

