Ansible : 현재 대상 호스트의 IP 주소 가져 오기
역할에서 현재 호스트의 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
http://docs.ansible.com/ansible/latest/plugins/lookup/dig.html
예를 들어 템플릿에서 :
{{ lookup('dig', ansible_host) }}
메모:
- 인벤토리에서 DNS 이름을 사용할 수있을뿐만 아니라 IP가 아닌지 확인하는 것이 좋습니다.
- 분명히이 영수증은 간접 호스트 사양 (예 : 점프 호스트 사용)에 대한 의도대로 작동하지 않을 것입니다.
그러나 여전히 사용 사례의 99 % (비상 적으로 말하면)를 제공합니다.
다음 스 니펫은 원격 시스템의 공개 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'] }}"
참고 URL : https://stackoverflow.com/questions/39819378/ansible-get-current-target-hosts-ip-address
'Nice programing' 카테고리의 다른 글
프로그래밍 방식으로 스토리 보드 ID를 얻습니까? (0) | 2020.10.28 |
---|---|
포인터 값은 다르지만 동일하게 비교됩니다. (0) | 2020.10.28 |
람다 미적분을 아는 것이 얼마나 도움이됩니까? (0) | 2020.10.28 |
디버거 란 무엇이며 문제를 진단하는 데 어떻게 도움이됩니까? (0) | 2020.10.27 |
MAX_PATH 문제가 Windows 10에 여전히 존재합니까? (0) | 2020.10.27 |