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_caching
爲jsonfile
,則此處應配置存儲緩存文件的目錄; - 如果
fact_caching
爲redis
,則此處應按照host:port:database的格式配置redis的信息。
- 如果
-
gather_timeout
:收集超時時間,默認爲86400; -
fact_caching_timeout
:設置facts緩存的過期時間,默認是86400秒。
總結
這篇文章對Ansible facts進行了一些簡單的總結,在後面的文章中,還會涉及到facts的一些內容,希望通過這篇文章,大家能明白Ansible facts的一些簡單用法和配置即可!希望對大家有幫助!
果凍想,認真玩技術的地方。
2019年10月5日,於內蒙古呼和浩特。