如何取得主機的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 的格式了。