Nice programing

Ansible : 현재 대상 호스트의 IP 주소 가져 오기

nicepro 2020. 10. 28. 20:58
반응형

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

반응형