Ansible facts詳解

Ansible是一個系列文章,我會盡量以通俗易懂、詼諧幽默的總結方式給大家呈現這些枯燥的知識點,讓學習變的有趣一些。
Ansible系列博文直達鏈接:Ansible入門系列

前言

如果你跟着前面的文章在自己的測試環境進行了操作的話,你會發現在Ansible執行完成後,在輸出內容中都包含以下這麼一項:

TASK [Gathering Facts] ****************************************
ok: [192.168.1.3]

從內容來看,這是執行了一個名爲Gathering Facts的TASK,但是即使在我們的命令中或者YAML中沒有定義這個TASK,也會執行這個任務,這是什麼道理?下面我就帶着大家對Ansible中的facts一探究竟。

Ansible facts簡介

大家肯定疑問,這個facts是個啥?

facts組件是Ansible用於採集被管理機器設備信息的一個功能,採集的機器設備信息主要包含IP地址,操作系統,以太網設備,mac 地址,時間/日期相關數據,硬件信息等。

那話又說回來了,採集這些信息有什麼用呢?有的時候我們需要根據遠程主機的信息作爲執行條件操作,例如,根據遠程服務器使用的操作系統版本,可以安裝不同版本的軟件包;或者也可以顯示與每臺遠程計算機相關的一些信息,例如每臺設備上有多少RAM可用。

所以,在一些業務場景中,facts對我們是很有幫助的,省去了我們好多工作,大大提高了工作效率。

Ansible facts用法

我們可以使用setup模塊獲取被管理機器的所有facts信息,可以使用filter來查看指定的信息。setup模塊獲取的整個facts信息被包裝在一個JSON格式的數據結構中,ansible_facts是最外層的值。我們可以通過以下Ansible Ad-Hoc命令查看facts信息:

ansible server1 -m setup

由於輸出內容實在太多,這裏只貼出部分內容:

192.168.1.3 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.1.3"
        ],
        "ansible_all_ipv6_addresses": [
            "2409:8a10:72:1c10:c59e:af39:7c72:6afb",
            "fe80::7107:62de:8cf8:db00"
        ],
        "ansible_apparmor": {
            "status": "disabled"
        },
        "ansible_architecture": "x86_64",
        "ansible_bios_date": "12/01/2006",
        "ansible_bios_version": "VirtualBox",
        "ansible_cmdline": {
            "BOOT_IMAGE": "/vmlinuz-3.10.0-957.el7.x86_64",
            "LANG": "en_US.UTF-8",
            "crashkernel": "auto",
            "quiet": true,
            "rd.lvm.lv": "centos/swap",
            "rhgb": true,
            "ro": true,
            "root": "/dev/mapper/centos-root"
        },
......

由於輸出的內容實在是太多了,我們可以使用filter參數來查看指定的信息,比如這樣:

ansible server1 -m setup -a 'filter=ansible_all_ipv4_addresses'

輸出內容如下:

192.168.1.3 | SUCCESS => {
    "ansible_facts": {
        "ansible_all_ipv4_addresses": [
            "192.168.1.3"
        ]
    },
    "changed": false
}

到這裏,話又說回來!我們沒有配置Gathering Facts的TASK,但是依然自動的就執行了這個任務,這個默認是在哪裏配置的呢?

Ansible facts配置

在Ansible的配置文件中,關於facts的重要配置項有以下幾個:

  • gathering:facts的開關,默認是開啓的;有以下三個取值:

    • smart:開啓facts信息收集,但是會優先使用facts緩存信息,可以使用gather_facts: False禁用facts收集;
    • implicit:開啓facts信息收集,要禁止收集,必須使用gather_facts: False
    • explicit:關閉facts信息收集,要顯式收集,必須使用gather_facts: Ture
  • fact_caching:緩存facts信息的方式;可以配置成jsonfile或者redis

  • fact_caching_connection:緩存插件的配置,針對不同的fact_caching方式,取值含義則不同:

    • 如果fact_cachingjsonfile,則此處應配置存儲緩存文件的目錄;
    • 如果fact_cachingredis,則此處應按照host:port:database的格式配置redis的信息。
  • gather_timeout:收集超時時間,默認爲86400;

  • fact_caching_timeout:設置facts緩存的過期時間,默認是86400秒。

總結

這篇文章對Ansible facts進行了一些簡單的總結,在後面的文章中,還會涉及到facts的一些內容,希望通過這篇文章,大家能明白Ansible facts的一些簡單用法和配置即可!希望對大家有幫助!

果凍想,認真玩技術的地方。

2019年10月5日,於內蒙古呼和浩特。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章