如何在 Ansible Playbooks 中访问系统信息(Facts)

默认情况下,在执行剧本中定义的任务集之前,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文档

Published At
Categories with 技术
comments powered by Disqus