You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从Ansible动态Inventory获取Azure服务器IP配置Prometheus

解决Ansible动态Inventory提取Azure主机IP用于Prometheus配置的问题

你的问题核心是误用了inventory_hostname变量——这个变量指向的是当前执行任务的主机(也就是你运行Playbook的本地虚拟机),而非你遍历的目标Azure服务器。只要把inventory_hostname替换成循环中的host变量,就能正确获取每台目标主机的IP了。

修正后的代码

{% for host in groups['all'] %}
 - targets: ['{{ hostvars[host]['ansible_default_ipv4']['address'] }}']
   labels: {'host': '{{ host }}' }
{% endfor %}

关键细节说明

  1. 变量逻辑修正:hostvars[host]会直接调用循环中每台目标主机的变量集合,而非当前执行节点的变量,这样就能精准获取对应Azure服务器的默认IPv4地址。
  2. Facts收集前提:确保你的Playbook已经收集过目标主机的Facts(Ansible默认自动收集,除非手动设置gather_facts: no)。如果ansible_default_ipv4不存在,可先执行setup模块手动收集主机信息。
  3. 动态Inventory验证:可以先运行ansible-inventory --list命令,确认Azure动态Inventory已正确加载所有目标主机,且主机变量中包含ansible_default_ipv4相关数据。

如果遇到部分主机没有ansible_default_ipv4的情况(比如仅使用IPv6或私网IP),可以改用动态Inventory返回的连接IP变量ansible_host,代码如下:

{% for host in groups['all'] %}
 - targets: ['{{ hostvars[host]['ansible_host'] }}']
   labels: {'host': '{{ host }}' }
{% endfor %}

内容的提问来源于stack exchange,提问作者Michael B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 11:52:44