anisble變量二(針對默認收集的信息處理)

當我們運行一個playbook時,默認都會運行一個名爲”[Gathering Facts]“的任務,前文中已經大致的介紹過這個默認的任務。ansible通過”[Gathering Facts]“這個默認任務收集遠程主機的相關信息(例如遠程主機的IP地址,主機名,系統版本,硬件配置信息),其實,這些被收集到遠程主機信息回保存在對應的變量中,當我們想要使用這些信息時,我們可以獲取對應的變量,從而使用這些信息。

如果想要查看”[Gathering Facts]“任務收集的信息內容,我們可以藉助一個模塊:setup模塊

當執行playbook時,playbook其實就是自動調用了setup模塊從而執行了”[Gathering Facts]“任務,所以我們可以通過手動執行setup模塊查看”[Gathering Facts]“任務收集到的信息。示例如下:

#ansible  pro -m setup

上面的命令表示收集pro主機的相關信息,執行上述命令後,遠程主機pro的相關信息將會輸出到ansible主機的控制檯上,返回的信息的格式是json格式。

返回的信息很多,並不是我們每一次都需要這麼多信息,如果你只是想要查看某一些信息,你可以通過關鍵字對信息進行過濾,比如,我只是想要查看遠程主機的內存配置信息,那麼我使用如下命令:

image.png

除此之外還可以使用通配符進行相對模糊的過濾。


其實,除了這些信息以外,我們還能在遠程主機中寫入一些自定義的信息,這些自定義信息也可以被setup模塊收集到。

那麼我們應該在哪些定義這些信息呢?

ansible默認會去目標主機的/etc/ansible/facts.d目錄下查找主機中的自定義信息,並且規定,自定義信息需要寫在以”.fact“爲後綴的文件中,同時,這些以”.fact"爲後綴的問句中的內容需要是INI格式或者是json格式的。

我們創建一個測試文件,測試文件路徑爲pro主機的/etc/ansible/facts.d/testinfo.fact,在文件中寫入INI格式,如下:

INI格式如下:

image.png

json格式:

image.png


通過上述方式,我們可以在目標主機的本地自定義信息,這些在遠程主機本地自定義的信息被成爲”local facts“,當我們運行setup模塊時,遠程主機的”local facts“信息也會被收集,我們可以通過”ansible_local“關鍵字過濾遠程主機的”local facts“信息,示例命令如下:

image.png

當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小示例,如下:

image.png

當然,使用debug的msg參數時也可以引用變量的值,這樣我們自定義的信息就更加靈活了,示例如下:

image.png


之前說過playbook在運行默認都會運行"Gathering Facts"任務,然後會收集遠程主機的相關信息,這些信息會保存在對應的變量中,我們在playbook中可以使用這些變量,比如“ansible_memory_mb”就是一個變量名,我們可以在playbook中直接引用名爲"ansible_memory_mb",從而獲取到遠程主機的內存信息,示例如下:

image.png

執行效果如下:

image.png

如上述返回信息所以,ansible_memory_mb中其實包含了”nocache“,”real“,”swap“三個部分的信息,如果我們只想獲得’readl‘部分的信息,在playbook中引用變量時可以使用如下兩種語法:

語法一:

image.png

語法二:

image.png

其實這些遠程主機的信息不僅僅能夠用於輸出,我們通過會獲取這些信息以後,對這些信息的值進行判斷,如果符合我們條件,然後再執行下一步動作,比如:先獲得遠程主機的系統發行版信息,然後判斷是什麼系統,然後根據不同的系統進行不同的操作。


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