如何取得主機的IP

Ansible 本身在連線時,就會取得主機的相關資訊,這裏面就包含了 IP。

---
- name: Get IP address of the host
  hosts: all

  tasks:
  - name: Display IP
    debug:
      var: ansible_default_ipv4['address']

那如果要取得 inventory 裡每台主機的 IP 或指定群組裡的 IP 呢?這時候可以用 hostvars,舉個例子,比如要把 db_servers 這個群組裡的主機與 IP 的對應都放到本機的 /tmp/hosts 裡。

先撰寫 template,命名為 hosts.tmpl

{% for host in groups['ubuntu'] %}
{{ hostvars[host]['ansible_default_ipv4']['address'] }} {{ hostvars[host]['ansible_hostname'] }}
{% endfor %}
- name: Collect IP address and save as /tmp/hosts
  hosts: all

  tasks:
  - template:
      src: hosts.tmpl
      dest: /tmp/hosts
    delegate_to: localhost

在執行以後,可以看看本地端的 /tmp/hosts,就會是類似 /etc/hosts 的格式了。

參考資料