當咱們運行一個playbook時,默認都會運行一個名爲」[Gathering Facts]「的任務,前文中已經大體的介紹過這個默認的任務。ansible經過」[Gathering Facts]「這個默認任務收集遠程主機的相關信息(例如遠程主機的IP地址,主機名,系統版本,硬件配置信息),其實,這些被收集到遠程主機信息回保存在對應的變量中,當咱們想要使用這些信息時,咱們能夠獲取對應的變量,從而使用這些信息。json
若是想要查看」[Gathering Facts]「任務收集的信息內容,咱們能夠藉助一個模塊:setup模塊bash
當執行playbook時,playbook其實就是自動調用了setup模塊從而執行了」[Gathering Facts]「任務,因此咱們能夠經過手動執行setup模塊查看」[Gathering Facts]「任務收集到的信息。示例以下:ide
#ansible pro -m setup測試
上面的命令表示收集pro主機的相關信息,執行上述命令後,遠程主機pro的相關信息將會輸出到ansible主機的控制檯上,返回的信息的格式是json格式。debug
返回的信息不少,並非咱們每一次都須要這麼多信息,若是你只是想要查看某一些信息,你能夠經過關鍵字對信息進行過濾,好比,我只是想要查看遠程主機的內存配置信息,那麼我使用以下命令:3d
除此以外還可使用通配符進行相對模糊的過濾。調試
其實,除了這些信息之外,咱們還能在遠程主機中寫入一些自定義的信息,這些自定義信息也能夠被setup模塊收集到。blog
那麼咱們應該在哪些定義這些信息呢?內存
ansible默認會去目標主機的/etc/ansible/facts.d目錄下查找主機中的自定義信息,而且規定,自定義信息須要寫在以」.fact「爲後綴的文件中,同時,這些以」.fact"爲後綴的問句中的內容須要是INI格式或者是json格式的。it
咱們建立一個測試文件,測試文件路徑爲pro主機的/etc/ansible/facts.d/testinfo.fact,在文件中寫入INI格式,以下:
INI格式以下:
json格式:
經過上述方式,咱們能夠在目標主機的本地自定義信息,這些在遠程主機本地自定義的信息被成爲」local facts「,當咱們運行setup模塊時,遠程主機的」local facts「信息也會被收集,咱們能夠經過」ansible_local「關鍵字過濾遠程主機的」local facts「信息,示例命令以下:
當setup收集遠程主機的」local facts「時,默認會查找遠程主機的/etc/ansible/facts.d目錄,若是將facts信息文件放在了其餘自定義路徑,在使用setup模塊時,須要使用fact_path參數指定對應的路徑,假設咱們放在了目錄主機的’/testdir‘目錄下:命令以下:
#ansible pro -m setup -a "fact_path=/testdir"
另外一個模塊,debug模塊。
見名知意,debug模塊的做用就是幫助咱們進行調試,debug模塊能夠幫助咱們把信息輸出到ansible控制檯,以便定位問題。
debug模塊的playbook小示例,以下:
固然,使用debug的msg參數時也能夠引用變量的值,這樣咱們自定義的信息就更加靈活了,示例以下:
以前說過playbook在運行默認都會運行"Gathering Facts"任務,而後會收集遠程主機的相關信息,這些信息會保存在對應的變量中,咱們在playbook中可使用這些變量,好比「ansible_memory_mb」就是一個變量名,咱們能夠在playbook中直接引用名爲"ansible_memory_mb",從而獲取到遠程主機的內存信息,示例以下:
執行效果以下:
如上述返回信息因此,ansible_memory_mb中其實包含了」nocache「,」real「,」swap「三個部分的信息,若是咱們只想得到’readl‘部分的信息,在playbook中引用變量時可使用以下兩種語法:
語法一:
語法二:
其實這些遠程主機的信息不單單可以用於輸出,咱們經過會獲取這些信息之後,對這些信息的值進行判斷,若是符合咱們條件,而後再執行下一步動做,好比:先得到遠程主機的系統發行版信息,而後判斷是什麼系統,而後根據不一樣的系統進行不一樣的操做。