역할에서 현재 호스트의 IP 주소를 어떻게 얻습니까?
호스트가 구성원 인 그룹 목록과 호스트의 호스트 이름을 얻을 수 있다는 것을 알고 있지만 IP 주소를 얻는 방법을 찾을 수 없습니다.
사용하여 호스트 이름을 얻을 수 있고 사용 {{inventory_hostname}}
하여 그룹을 얻을 수 있습니다.{{group_names}}
내가 좋아하는 일을 시도 {{ hostvars[{{ inventory_hostname }}]['ansible_ssh_host'] }}
하고ip="{{ hostvars.{{ inventory_hostname }}.ansible_ssh_host }}"
답변
모든 주소 목록은 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
그런 다음 각 네트워크 인터페이스에 할당 된 주소가 있습니다. 이러한 경우 모든 사실을 표시하고 사용하려는 값이있는 사실을 찾을 수 있습니다.
답변
hostvars
, dict ansible_default_ipv4
및 key 에서 IP 주소를 가져올 수 있습니다.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']
답변
를 사용 {{ ansible_eth0.ipv4.address }}
하는 것과 동일한 방식으로 template.j2 에서 사용할 수 있습니다 {{inventory_hostname}}
.
추신 : ANSIBLE GATHERS 사실이있는 원격 호스트에 대한 정보를 수집하는 방법에
대한 자세한 내용은 다음 블로그 게시물을 참조하십시오 .
‘언젠가 누군가에게 도움이되기를 바라며 ッ
답변
외부 공용 IP 를 원하고 AWS 또는 Azure와 같은 클라우드 환경에있는 경우 ipify_facts 모듈을 사용할 수 있습니다 .
# 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
됩니다.
답변
공용 IP를 찾는 또 다른 방법은 uri
모듈 을 사용하는 것입니다 .
- name: Find my public ip
uri:
url: http://ifconfig.me/ip
return_content: yes
register: ip_response
귀하의 IP는 ip_response.content
답변
간단한 디버그 명령 :
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"
}
답변
http://docs.ansible.com/ansible/latest/plugins/lookup/dig.html
예를 들어 템플릿에서 :
{{ lookup('dig', ansible_host) }}
노트:
- 인벤토리에서 DNS 이름을 사용할 수있을뿐만 아니라 IP가 아닌지 확인하는 것이 좋습니다.
- 분명히이 영수증은 간접 호스트 사양 (예 : 점프 호스트 사용)에 대한 의도대로 작동하지 않을 것입니다.
그러나 여전히 사용 사례의 99 % (비상 적으로 말하면)를 제공합니다.