如何从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 %}
关键细节说明
- 变量逻辑修正:
hostvars[host]会直接调用循环中每台目标主机的变量集合,而非当前执行节点的变量,这样就能精准获取对应Azure服务器的默认IPv4地址。 - Facts收集前提:确保你的Playbook已经收集过目标主机的Facts(Ansible默认自动收集,除非手动设置
gather_facts: no)。如果ansible_default_ipv4不存在,可先执行setup模块手动收集主机信息。 - 动态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
相关产品推荐
相关产品推荐

