Ansible Setup 模塊實(shí)戰(zhàn),如何使用 Setup 模塊收集主機(jī)信息
在Ansible中,setup模塊是一個(gè)非常有用的工具,可以幫助你輕松地收集目標(biāo)主機(jī)的各種系統(tǒng)信息。無(wú)論是想了解操作系統(tǒng)的版本、內(nèi)存容量、CPU性能還是網(wǎng)絡(luò)配置,setup模塊都能為你提供詳盡的硬件和軟件資源數(shù)據(jù)。在這篇文章中,我們將一步步帶你了解如何使用setup模塊來(lái)收集主機(jī)信息,并且還會(huì)對(duì)比一下使用ansible命令和ansible-playbook這兩種不同方法的優(yōu)劣。
一、什么是Setup模塊?
Ansible的setup模塊可以幫你收集遠(yuǎn)程主機(jī)的各種信息,比如操作系統(tǒng)、硬件配置和網(wǎng)絡(luò)設(shè)置等。這樣你就能在自動(dòng)化運(yùn)維過(guò)程中隨時(shí)了解目標(biāo)主機(jī)的狀態(tài)。這個(gè)模塊支持很多不同的系統(tǒng)平臺(tái),并且收集到的數(shù)據(jù)格式統(tǒng)一,方便你后續(xù)處理。
setup 模塊收集的信息包括:
- 操作系統(tǒng)信息:如版本、發(fā)行版等
- 網(wǎng)絡(luò)信息:如IP地址、網(wǎng)關(guān)、DNS配置等
- 內(nèi)存、CPU配置:如內(nèi)存總量、CPU核心數(shù)等
- 存儲(chǔ)信息:如磁盤設(shè)備、文件系統(tǒng)等
- 主機(jī)名、架構(gòu)等基本信息。
二、如何使用setup 模塊
如果不知道setup的具體用法,可以通過(guò)執(zhí)行ansible-doc setup查看幫助文檔,如下圖所示:
1. 命令行使用 setup 模塊
最簡(jiǎn)單的方式是直接使用 ansible 命令行工具,調(diào)用setup 模塊收集目標(biāo)主機(jī)的信息。
示例 1:收集所有主機(jī)的系統(tǒng)信息
假設(shè)你希望對(duì) all 組中的所有主機(jī)收集信息,使用以下命令:
ansible all -m setup
這條命令將會(huì)通過(guò)SSH登錄到目標(biāo)主機(jī),并返回一個(gè)包含各類系統(tǒng)信息的JSON 輸出。輸出將包括目標(biāo)主機(jī)的操作系統(tǒng)、內(nèi)存、CPU、網(wǎng)絡(luò)配置等詳細(xì)信息。
示例 2:限制收集特定主機(jī)組的信息
如果你只對(duì)aliyun-server組的主機(jī)感興趣,可以這樣寫:
ansible aliyun-server -m setup
該命令只會(huì)收集 aliyun-server 組中所有主機(jī)的系統(tǒng)信息。結(jié)果如下圖所示:
2. 命令行使用 setup 模塊收集特定信息
你還可以通過(guò) filter 參數(shù)來(lái)只收集某些特定的事實(shí)數(shù)據(jù)。例如,如果你只關(guān)心主機(jī)的操作系統(tǒng)版本或內(nèi)存信息,可以使用如下命令:
示例 3:只收集操作系統(tǒng)信息
ansible aliyun-server -m setup -a "filter=ansible_distribution*"
該命令會(huì)僅返回主機(jī)的操作系統(tǒng)相關(guān)信息,例如:
web | SUCCESS => {
"ansible_facts": {
"ansible_distribution": "Ubuntu",
"ansible_distribution_file_parsed": true,
"ansible_distribution_file_path": "/etc/os-release",
"ansible_distribution_file_variety": "Debian",
"ansible_distribution_major_version": "22",
"ansible_distribution_release": "jammy",
"ansible_distribution_version": "22.04",
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false
}
示例 4:只收集內(nèi)存信息
ansible aliyun-server -m setup -a "filter=ansible_memory_mb"
輸出將僅顯示目標(biāo)主機(jī)的內(nèi)存信息:
web | SUCCESS => {
"ansible_facts": {
"ansible_memory_mb": {
"nocache": {
"free": 276,
"used": 1409
},
"real": {
"free": 76,
"total": 1685,
"used": 1609
},
"swap": {
"cached": 0,
"free": 0,
"total": 0,
"used": 0
}
},
"discovered_interpreter_python": "/usr/bin/python3"
},
"changed": false
}
三、使用Playbook 調(diào)用setup模塊
除了使用Ansible命令行之外,你還可以借助Ansible Playbook來(lái)收集系統(tǒng)信息。Playbook是Ansible中非常重要的工具,用于配置管理和自動(dòng)化任務(wù)。它能夠幫助你輕松地安排和執(zhí)行多個(gè)任務(wù),并且整個(gè)過(guò)程會(huì)非常清晰有序。希望這個(gè)方法對(duì)你有幫助!
1. Playbook示例:收集系統(tǒng)信息
以下是一個(gè)基本的Playbook示例,演示如何在Playbook中調(diào)用setup模塊收集信息:
---
-name:Gathersysteminformation
hosts:test
tasks:
-name:Collectsystemfacts
setup:
-name:DisplayOSversion
debug:
msg:"The OS version is {{ ansible_distribution_version }}"
該P(yáng)laybook會(huì)在目標(biāo)主機(jī)上執(zhí)行setup模塊,收集系統(tǒng)信息,然后使用 debug模塊顯示操作系統(tǒng)的版本。你可以通過(guò)以下命令運(yùn)行該P(yáng)laybook:
ansible-playbook gather_system_facts.yml
成功執(zhí)行后返回如下圖所示:
2. Playbook 示例:過(guò)濾特定信息
你也可以通過(guò)filter參數(shù)來(lái)優(yōu)化Playbook,只收集特定的系統(tǒng)信息。例如,以下 Playbook僅收集目標(biāo)主機(jī)的內(nèi)存信息:
---
-name:Gathersystemmemoryfacts
hosts:test
tasks:
-name:Collectmemoryfacts
setup:
filter:ansible_memory_mb
-name:Displaytotalmemory
debug:
msg:"Total memory is {{ ansible_memory_mb.real.total }} MB"
運(yùn)行該P(yáng)laybook后,它只會(huì)返回并顯示內(nèi)存信息。
3. 綜合案例
為了根據(jù)遠(yuǎn)程服務(wù)器的具體架構(gòu)上傳相應(yīng)的軟件包,我們可以利用Ansible的setup模塊來(lái)獲取服務(wù)器的架構(gòu)信息。然后,通過(guò)使用條件判斷(例如when子句),我們可以靈活地根據(jù)這些信息執(zhí)行不同的操作。這樣不僅提高了效率,還讓整個(gè)過(guò)程變得更加智能和自動(dòng)化。
以下Playbook實(shí)現(xiàn)了上述功能:
---
-name:Uploadsoftwarepackagebasedonarchitecture
hosts:all
gather_facts:yes
tasks:
-name:Collectsystemarchitecture
debug:
msg:"The architecture of the server is {{ ansible_architecture }}"
-name:Uploadx86_64softwarepackage
copy:
src:./packages/software_x86_64.rpm
dest:/tmp/software.rpm
when:ansible_architecture=="x86_64"
-name:Uploadaarch64softwarepackage
copy:
src:./packages/software_aarch64.rpm
dest:/tmp/software.rpm
when:ansible_architecture=="aarch64"
-name:Uploadi386softwarepackage
copy:
src:./packages/software_i386.rpm
dest:/tmp/software.rpm
when:ansible_architecture=="i386"
如果軟件包的文件名和架構(gòu)信息一致,可以使用變量動(dòng)態(tài)構(gòu)造路徑,上面的yaml文件可以簡(jiǎn)化如下:
---
-name:Uploadsoftwarepackagebasedonarchitecture
hosts:all
gather_facts:yes
tasks:
-name:Collectsystemarchitecture
debug:
msg:"The architecture of the server is {{ ansible_architecture }}"
-name:Uploadsoftwarepackagedynamically
copy:
src:"./packages/software_{{ ansible_architecture }}.rpm"
dest:/tmp/software.rpm
when:ansible_architecturein["x86_64","aarch64","i386"]
執(zhí)行以下命令運(yùn)行該P(yáng)laybook:
ansible-playbook upload_package.yml
成功執(zhí)行如下圖所示:
四、ansible和playbook那個(gè)更好用?
在Ansible中,對(duì)setup模塊的調(diào)用可以通過(guò)直接使用Ansible命令行工具或通過(guò)Playbook來(lái)實(shí)現(xiàn)。這兩種方法各有特點(diǎn),在實(shí)際應(yīng)用中根據(jù)具體需求選擇合適的方式至關(guān)重要。
- 直接使用Ansible命令行工具:這種方式適用于需要快速獲取目標(biāo)主機(jī)信息的情況。通過(guò)執(zhí)行類似 ansible <host> -m setup 的命令,可以直接查看指定主機(jī)上的系統(tǒng)信息、安裝軟件包等詳細(xì)數(shù)據(jù)。這種方法簡(jiǎn)單快捷,適合于調(diào)試或是偶爾需要查看特定主機(jī)信息的場(chǎng)景。
- 通過(guò)Playbook調(diào)用:當(dāng)涉及到更復(fù)雜的配置管理任務(wù)時(shí),推薦使用Playbook來(lái)組織和自動(dòng)化整個(gè)過(guò)程。在這種情況下,可以在Playbook中定義一個(gè)或多個(gè)任務(wù)來(lái)調(diào)用setup模塊,從而收集所需的信息。這種方法不僅能夠更好地集成到自動(dòng)化流程中,而且還支持更高級(jí)的功能如條件判斷、循環(huán)處理等,使得信息收集過(guò)程更加靈活可控。
五、總結(jié)
setup模塊是Ansible里的一個(gè)重要工具,用來(lái)收集目標(biāo)主機(jī)的各種信息,比如操作系統(tǒng)、硬件配置和網(wǎng)絡(luò)設(shè)置等,讓你能快速了解主機(jī)的情況。 無(wú)論是命令行還是Playbook,它們都能夠通過(guò)filter 參數(shù)精確收集所需的信息,避免不必要的數(shù)據(jù)冗余。