天天看點

《Ansible權威指南 》一2.4 Ansible系列指令用法詳解與使用場景介紹

本節書摘來自華章出版社《ansible權威指南 》一書中的第2章,第2.4節,李松濤 魏 巍 甘 捷 著更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

2.4 ansible系列指令用法詳解與使用場景介紹

如何擷取ansible的系列指令呢?在終端鍵入ansible後連續按兩次tab鍵,會補全所有以ansible字母開頭的指令,這些指令均是ansible系列指令。本節我們來逐一介紹ansible的系列指令使用。

指令ansible是日常工作中使用率非常高的指令之一,man中是如此定義其功能的:run a command somewhere else,可見其靈活性。ansible指令主要在如下場景使用:

非固化需求

臨時一次性操作

二次開發接口調用

那麼什麼是非固化需求和臨時一次性操作呢?簡單來講,比如工作中我臨時想檢視web1伺服器組是否存活,或我想臨時複制本地的/etc/fstab到web伺服器組的/tmp目錄下做測試,類如這些沒有規律的、臨時需要做的任務,我們稱之為非固化需求、臨時一次性操作。具體的指令使用如下:

ansible的傳回結果都非常友好,一般會用3種顔色來表示執行結果:紅色、綠色、橘黃色。其中紅色表示執行過程有異常,一般會中止剩餘所有的任務,如圖2-2所示的ansible執行結果錯誤的結果傳回;綠色和橘黃色表示執行過程沒有異常,所有任務均正常執行,但橘黃色表示指令執行結束後目标有狀态的變化。如圖2-3所示,ansible執行結果正确的結果傳回中的圓圈1為橘黃色顯示;而綠色表示指令執行結束後目标沒有狀态變化,如圖2-3中的圓圈2顯示。

《Ansible權威指南 》一2.4 Ansible系列指令用法詳解與使用場景介紹

不僅ansible指令的執行結果如此設定,ansible系列指令均如此設定,是以判斷ansible系列指令的執行結果是否正常是一件非常容易的事情,隻要看顔色即可。

這裡的galaxy和三星手機沒有任何關系。ansible-galaxy的功能可以簡單地了解為github或pip的功能,通過ansible-galaxy指令,我們可以根據下載下傳量和關注量等資訊,查找和安裝優秀的roles。roles是ansible非常重要的一項功能,關于roles的詳細功能會在第6章介紹。在ansible-galaxy上,我們可以上傳和下載下傳roles,這裡也是優秀roles的聚集地。

ansible-galaxy指令使用格式如下:

ansible-galaxy指令分三大部分:

(1)[init|info|install|list|remove]

ansible 2.0版本中,針對ansible-galaxy增加了login、import、delete、setup等功能,但這些功能需基于login在galaxy認證成功後方可執行,主要為了友善對galaxy上已有的roles的配置工作。

(2)help用法顯示[--help]

針對第一部分的init、info等功能,其後跟--help可單獨顯示該項用法。例如:

執行後會傳回ansible-galaxy init選項的用法說明。

其他選項與help用法一樣。

(3)參數項[options]

該部分結合第一部分的參數完成ansible-galaxy完整的功能用法,如:

ansible-galaxy init [options] role_name即ansible-galaxy init後跟[-f|-h|-c|-p|--off?line|-s server|-v|--version]參數,後跟role-name成為一條完整的指令。

具體可參考如下:

the api server (galaxy.ansible.com) is not responding, please try again later.

該指令的使用涉及ansible的另一種工作模式:pull模式(ansible預設使用push模式)。這和通常使用的push模式工作機理剛好相反,其适用于以下場景:①你有數量巨大的機器需要配置,即使使用高并發線程依舊要花費很多時間;②你要在剛啟動的、沒有網絡連接配接的主機上運作anisble。

ansible-pull指令使用格式如下:

通過ansible-pull結合git和crontab一并實作,其原理如下:通過crontab定期拉取指定的git版本到本地,并以指定模式自動運作預先制訂好的指令。

具體示例參考如下:

ansible-pull通常在配置大批量機器的場景下會使用,靈活性稍有欠缺,但效率幾乎可以無限提升,對運維人員的技術水準和前瞻性規劃有較高要求。

ansible-doc是ansible子產品文檔說明,針對每個子產品都有詳細的用法說明及應用案例介紹,功能和linux系統man指令類似。該指令使用方式如下:

ansible-doc [options] [module...]

ansible-doc指令後跟[options]參數或[子產品名],顯示子產品用法說明,具體示例如下:

ansible-playbook是日常應用中使用頻率最高的指令,其工作機制是:通過讀取預先編寫好的playbook檔案實作批量管理。要實作的功能與指令ansible一樣,可以了解為按一定條件組成的ansible任務集。

ansible-playbook指令後跟yml格式的playbook檔案,執行事先編排好的任務集,指令使用方式如下:

具體示例如下:

playbook具有編寫簡單、可定制性高、靈活友善,以及可固化日常所有操作的特點,運維人員應熟練掌握。

ansible-vault主要用于配置檔案加密,如編寫的playbook配置檔案中包含敏感資訊,不希望其他人随意檢視,ansible-vault可加密/解密這個配置檔案,具體使用方式如下:

具體示例如下。

設定如下密碼,加密a.yml檔案。

ansible-vault encrypt a.yml

會有以下輸入加密密碼提示:

這時,再打開a.yml檔案後會發現該檔案亂碼,隻有通過如下指令解密後方可正常檢視。

ansible-vault decrypt a.yml

輸入預設的密碼後方可解密。

此時a.yml檔案可正常檢視。

到此,我們對ansible的用法及系列指令已經有了概念性的了解和掌握,接下來我們進一步了解ansible inventory檔案的配置管理。

ansible-console是ansible為使用者提供的一款互動式工具,使用者可以在ansible-console虛拟出來的終端上像shell一樣使用ansible内置的各種指令,這為習慣于使用shell互動方式的使用者提供了良好的使用體驗。ansible-console主要是針對1.x版本中ansible-shell工具而研發的,目前官網還沒有對ansible-console進行詳細的用法說明,最新版本的ansible軟體包也沒有對應的man文檔說明。經筆者實測,ansible-console指令的使用格式如下。

在終端鍵入ansible-console指令後,會進入如圖2-4所示的類似shell一樣的互動式終端環境。

《Ansible權威指南 》一2.4 Ansible系列指令用法詳解與使用場景介紹

圖2-4中的“root@all (4)[f:5]$”是提示符,該提示符表示“目前的使用使用者@目前所在的inventory中定義的組,預設是all分組(inventory中all組所有主機的數量)[forks:線程數]$”。

使用cd指令可切換至指定hosts或分組,同時提示符的相應資訊也會随之變動,如圖2-5所示。

《Ansible權威指南 》一2.4 Ansible系列指令用法詳解與使用場景介紹

如圖2-5中的ansible-console指令用法2所示,cd至webs分組後,原來的root@all (4)[f:5]$也相應地變更為root@webs (3)[f:5],表示目前分組為webs分組,該分組所擁有的主機總數為3台。執行forks 2後,提示符再次變更為root@webs (3)[f:2]$,表示設定并發的線程數為2。

所有的操作與shell類似,而且支援tab鍵補全,如啟動httpd服務時,鍵入service後連續按兩次tab鍵後會自動補全剩餘的指令選項。ansible-console指令用法3如圖2-6所示。

《Ansible權威指南 》一2.4 Ansible系列指令用法詳解與使用場景介紹

如需啟動httpd服務,使用指令service name=httpd state=started,指令用法與ad-hoc一緻,隻是格式上的使用習慣不同而已。如想擷取service子產品更詳細的用法,輸入help service指令即可。ansible-console指令用法4如圖2-7所示。

《Ansible權威指南 》一2.4 Ansible系列指令用法詳解與使用場景介紹

使用完畢如希望退出,按快捷鍵ctrl+d或ctrl+c即可退出目前的虛拟終端。

ansible-console指令在實際工作中用于ad-hoc和ansible-playbooks之間的場景,常用于集中一批臨時操作或指令,使用ad-hoc要鍵入很多次但整體操作的複雜度又不至于使用playbooks時,這時ansible-console是最佳選擇。

繼續閱讀