[ansible] 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


답변

간단한 디버그 명령 :

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 % (비상 적으로 말하면)를 제공합니다.