使用 Ansible 获取主机的 IP 地址和主机名非常简单。Ansible 提供了丰富的内置变量和模块,可以轻松获取这些信息。以下是几种常用的方法:
Ansible 在执行任务时会自动收集一些基本的主机信息,并将其存储在特定的变量中。你可以在 setup
模块执行后访问这些变量。
---
- name: 获取主机IP和主机名
hosts: all
tasks:
- name: 显示主机名
debug:
msg: "主机名: {{ ansible_fqdn }}"
- name: 显示IPv4地址
debug:
msg: "IPv4地址: {{ ansible_default_ipv4.address }}"
- name: 显示所有IPv4地址
debug:
msg: "所有IPv4地址: {{ ansible_all_ipv4_addresses }}"
ansible_fqdn
:完全限定域名(Fully Qualified Domain Name)。ansible_default_ipv4.address
:默认网络接口的IPv4地址。ansible_all_ipv4_addresses
:所有网络接口的IPv4地址列表。保存上述内容到一个文件,例如 get_host_info.yml
,然后运行:
ansible-playbook -i your_inventory_file get_host_info.yml
setup
模块setup
模块可以收集目标主机的详细信息,并将其存储在变量中。你可以使用 debug
模块来查看这些信息。
---
- name: 使用 setup 模块获取主机信息
hosts: all
tasks:
- name: 收集主机信息
setup:
- name: 显示主机名
debug:
msg: "主机名: {{ ansible_fqdn }}"
- name: 显示IPv4地址
debug:
msg: "IPv4地址: {{ ansible_default_ipv4.address }}"
运行上述 Playbook 后,Ansible 会自动收集目标主机的详细信息,并通过 debug
模块输出主机名和 IP 地址。
hostvars
变量在多主机 Playbook 中,你可以使用 hostvars
变量来访问其他主机的信息。
---
- name: 获取多个主机的IP和主机名
hosts: all
tasks:
- name: 显示当前主机的信息
debug:
msg: "主机名: {{ ansible_fqdn }}, IP: {{ ansible_default_ipv4.address }}"
- name: 显示其他主机的信息
debug:
msg: "主机 {{ item }} 的主机名: {{ hostvars[item].ansible_fqdn }}, IP: {{ hostvars[item].ansible_default_ipv4.address }}"
loop: "{{ groups['all'] }}"
loop_control:
label: "{{ item }}"
groups['all']
获取所有主机的列表。hostvars[item]
访问每个主机的变量。root
用户或具有适当权限的用户运行 Playbook。通过上述方法,你可以轻松地使用 Ansible 获取主机的 IP 地址和主机名。根据具体需求选择合适的方法,并结合 debug
模块输出所需的信息。如果需要更详细的主机信息,可以使用 setup
模块收集更多数据。
领取专属 10元无门槛券
手把手带您无忧上云