如何获得角色中当前主机的IP地址?
我知道您可以获取主机所属的组列表以及主机的主机名,但我无法找到获取IP地址的解决方案。
您可以使用{{inventory_hostname}}
获取主机名,使用{{group_names}}
我尝试了{{ hostvars[{{ inventory_hostname }}]['ansible_ssh_host'] }}
之类的内容
和ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"
答案 0 :(得分:83)
所有地址的列表都存储在事件ansible_all_ipv4_addresses
中,ansible_default_ipv4.address
中的默认地址。
---
- hosts: localhost
connection: local
tasks:
- debug: var=ansible_all_ipv4_addresses
- debug: var=ansible_default_ipv4.address
然后为每个网络接口分配了地址......在这种情况下,您可以显示所有事实并找到具有您想要使用的值的事实。
答案 1 :(得分:45)
您可以从hostvars
获取IP地址,dict ansible_default_ipv4
和密钥address
hostvars[inventory_hostname]['ansible_default_ipv4']['address']
和IPv6地址分别为
hostvars[inventory_hostname]['ansible_default_ipv6']['address']
示例剧本:
---
- hosts: localhost
tasks:
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv6']['address']
答案 2 :(得分:23)
您可以像使用{{ ansible_eth0.ipv4.address }}
一样在template.j2 {{inventory_hostname}}
中使用。
ps:请参阅以下博客文章以获取有关HOW TO COLLECT INFORMATION ABOUT REMOTE HOSTS WITH ANSIBLE GATHERS FACTS 的更多信息。
'希望有一天能帮助某人ッ
答案 3 :(得分:5)
简单的调试命令:
ansible -i inventory/hosts.yaml -m debug -a "var=hostvars[inventory_hostname]" all
输出:
"hostvars[inventory_hostname]": {
"ansible_check_mode": false,
"ansible_diff_mode": false,
"ansible_facts": {},
"ansible_forks": 5,
"ansible_host": "192.168.10.125",
"ansible_inventory_sources": [
"/root/workspace/ansible-minicros/inventory/hosts.yaml"
],
"ansible_playbook_python": "/usr/bin/python2",
"ansible_port": 65532,
"ansible_verbosity": 0,
"ansible_version": {
"full": "2.8.5",
"major": 2,
"minor": 8,
"revision": 5,
"string": "2.8.5"
},
获取主机IP地址:
ansible -i inventory/hosts.yaml -m debug -a "var=hostvars[inventory_hostname].ansible_host" all
zk01 | SUCCESS => {
"hostvars[inventory_hostname].ansible_host": "192.168.10.125"
}
答案 4 :(得分:4)
如果您想要外部公共IP 并且您处于AWS或Azure等云环境中,则可以使用ipify_facts module:
# TODO: SECURITY: This requires that we trust ipify to provide the correct public IP. We could run our own ipify server.
- name: Get my public IP from ipify.org
ipify_facts:
这会将公共IP放入变量ipify_public_ip
。
答案 5 :(得分:3)
查找公共IP的另一种方法是使用uri
模块:
- name: Find my public ip
uri:
url: http://ifconfig.me/ip
return_content: yes
register: ip_response
您的IP将位于ip_response.content
答案 6 :(得分:3)
只需使用ansible_ssh_host
变量
playbook_example.yml
- hosts: host1
tasks:
- name: Show host's ip
debug:
msg: "{{ ansible_ssh_host }}"
hosts.yml
[hosts]
host1 ansible_host=1.2.3.4
结果
TASK [Show host's ip] *********************************************************************************************************************************************************************************************
ok: [host1] => {
"msg": "1.2.3.4"
}
答案 7 :(得分:1)
http://docs.ansible.com/ansible/latest/plugins/lookup/dig.html
所以在模板中,对于e。 G:
{{ lookup('dig', ansible_host) }}
注意:
但它仍然有99%(比喻说)用例。
答案 8 :(得分:0)
以下代码段将返回远程计算机的公共IP以及默认IP(即LAN)
这还将在引号中显示ip的名称,以避免在使用配置文件时造成混淆。
>> main.yml
---
- hosts: localhost
tasks:
- name: ipify
ipify_facts:
- debug: var=hostvars[inventory_hostname]['ipify_public_ip']
- debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address']
- name: template
template:
src: debug.j2
dest: /tmp/debug.ansible
>> templates/debug.j2
public_ip={{ hostvars[inventory_hostname]['ipify_public_ip'] }}
public_ip_in_quotes="{{ hostvars[inventory_hostname]['ipify_public_ip'] }}"
default_ipv4={{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}
default_ipv4_in_quotes="{{ hostvars[inventory_hostname]['ansible_default_ipv4']['address'] }}"
答案 9 :(得分:0)
平原ansible_default_ipv4.address
可能与您在some cases中的想法不同,请使用:
ansible_default_ipv4.address|default(ansible_all_ipv4_addresses[0])