如何在AnsiblePlaybooks中访问系统信息(事实)

来自菜鸟教程
跳转至:导航、​搜索

默认情况下,在执行 playbook 中定义的一组任务之前,Ansible 将花一些时间来收集有关正在配置的系统的信息。 此信息称为 facts,包含诸如网络接口和地址、远程节点上运行的操作系统和可用内存等详细信息。

Ansible 以 JSON 格式存储事实,项目按节点分组。 要检查您正在配置的系统有哪些类型的信息可用,您可以使用 ad hoc 命令运行 setup 模块:

ansible all -i inventory -m setup -u sammy

此命令将输出包含有关您的服务器信息的广泛 JSON。 要获取该数据的子集,您可以使用 filter 参数并提供模式。 例如,如果您想获取有关远程节点中所有 IPv4 地址的信息,可以使用以下命令:

ansible all -i inventory -m setup -a "filter=*ipv4*" -u sammy 

你会看到这样的输出:

Output203.0.113.10 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "203.0.113.10", 
            "198.51.100.23"
        ], 
        "ansible_default_ipv4": {
            "address": "203.0.113.10", 
            "alias": "eth0", 
            "broadcast": "203.0.113.255", 
            "gateway": "203.0.113.1", 
            "interface": "eth0", 
            "macaddress": "06:c7:91:16:2e:b7", 
            "mtu": 1500, 
            "netmask": "203.0.113.0", 
            "network": "203.0.113.0", 
            "type": "ether"
        }
    }, 
    "changed": false
}

一旦你找到了对你的比赛有用的事实,你就可以相应地更新你的剧本。 例如,以下 playbook 将打印出默认网络接口的 IPv4 地址。 从前面的命令输出中,我们可以看到这个值是通过 Ansible 提供的 JSON 中的 ansible_default_ipv4.address 得到的。

ansible-practice 目录中创建一个名为 playbook-03.yml 的新文件:

nano ~/ansible-practice/playbook-03.yml

然后将以下行添加到新的剧本文件中:

~/ansible-practice/playbook-03.yml

---
- hosts: all
  tasks:
    - name: print facts
      debug:
        msg: "IPv4 address: {{ ansible_default_ipv4.address }}"

完成后保存并关闭文件。

要从您的清单文件中在服务器上尝试此 playbook,请使用您之前在运行我们的第一个示例时使用的相同连接参数运行 ansible-playbook。 同样,我们将使用名为 inventory 的清单文件和 sammy 用户连接到远程服务器:

ansible-playbook -i inventory playbook-03.yml -u sammy

当您运行 playbook 时,您将在输出中看到您的远程服务器的 IPv4 地址,如预期的那样:

Output...

TASK [print facts] ***************************************************************************************************************************************************************************
ok: [server1] => {
    "msg": "IPv4 address: 203.0.113.10"
}

...

Facts 封装了重要的数据,您可以利用这些数据更好地自定义您的剧本。 要详细了解您可以通过事实获得的所有信息,请参阅官方 Ansible 文档