默认情况下,在执行剧本中定义的任务集之前,Ansible将花费一些时间来收集有关正在配置的系统的信息。此信息称为_facts_,包含网络接口和地址、远程节点上运行的操作系统和可用内存等详细信息。
Ansible以JSON格式存储事实,并将项分组在节点中。要检查哪些类型的信息可用于您正在配置的系统,您可以使用ad hoc命令运行setup
模块:
1ansible all -i inventory -m setup -u sammy
该命令将输出包含有关您的服务器的信息的大量JSON。要获取该数据的子集,可以使用filter
参数并提供一个模式。例如,如果您想要获取有关远程节点中所有IPv4地址的信息,您可以使用以下命令:
1ansible all -i inventory -m setup -a "filter=*ipv4*" -u sammy
您将看到如下输出:
1[secondary_label Output]
2203.0.113.10 | SUCCESS => {
3 "ansible_facts": {
4 "ansible_all_ipv4_addresses": [
5 "203.0.113.10",
6 "198.51.100.23"
7 ],
8 "ansible_default_ipv4": {
9 "address": "203.0.113.10",
10 "alias": "eth0",
11 "broadcast": "203.0.113.255",
12 "gateway": "203.0.113.1",
13 "interface": "eth0",
14 "macaddress": "06:c7:91:16:2e:b7",
15 "mtu": 1500,
16 "netmask": "203.0.113.0",
17 "network": "203.0.113.0",
18 "type": "ether"
19 }
20 },
21 "changed": false
22}
一旦您找到了对您的游戏有用的事实,您就可以相应地更新您的攻略。例如,以下攻略将打印出默认网络接口的IPv4地址。从前面的命令输出可以看出,这个值可以通过Ansible提供的JSON中的ansible_default_ipv4.Address
获取。
在您的anable-practie
目录下创建一个名为playbook-03.yml
的新文件:
1nano ~/ansible-practice/playbook-03.yml
然后将以下行添加到新剧本文件中:
1[label ~/ansible-practice/playbook-03.yml]
2---
3- hosts: all
4 tasks:
5 - name: print facts
6 debug:
7 msg: "IPv4 address: {{ ansible_default_ipv4.address }}"
完成后保存并关闭该文件。
要在您的清单文件中的服务器上试用此剧本,请使用您之前在运行第一个示例时使用的相同连接参数运行anable-playbook
。同样,我们将使用名为inventory
的清单文件和sammy 用户连接到远程服务器:
1ansible-playbook -i inventory playbook-03.yml -u sammy
当您运行攻略时,您将在输出中看到您的远程服务器的IPv4地址,不出所料:
1[secondary_label Output]
2...
3
4TASK [print facts] ***************************************************************************************************************************************************************************
5ok: [server1] => {
6 "msg": "IPv4 address: 203.0.113.10"
7}
8
9...
事实封装了重要的数据,您可以利用这些数据来更好地自定义您的行动手册。要了解更多关于您可以通过事实获得的所有信息,请参阅官方Ansible文档。