天天看點

《Ansible權威指南 》一Ansible指令用法詳解

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

ansible指令行執行方式有ad-hoc、ansible-playbook兩種方式,web化執行方式其官方提供了付費産品tower(10台以内免費),個人的話可以基于其提供的api開發類似的web化産品。關于指令行執行的兩種方式ad-hoc和ansible-playbooks、什麼是ad-hoc及ad-hoc與ansible-playbook的差別我們在第3章有詳細介紹,這裡不再贅述。需簡要說明的是兩者沒有本質上的差別,ad-hoc主要用于臨時指令的執行,ansibel-playbook可以了解為ad-hoc的集合,通過一定的規則編排在一起。兩者的操作也極其簡便,且提供了如with_items、failed_when、changed_when、until、ignore_errors等豐富的邏輯條件和dry-run的check mode。但在chceck mode下并不真正執行指令,即将執行的操作不會對端伺服器産生任何影響,隻模拟指令的執行過程是否能正常執行。

通過第1章的學習我們知道,ansible的通信預設基于ssh,是以我們需要對主機先進行認證。ansible認證方式有密碼認證和公私鑰認證兩種方式,其實完全等同于ssh的認證,是以這裡關于這兩種認證方式不做過多介紹。ansible預設使用(筆者也建議各位使用)公私鑰認證方式,究其原因無非是出于安全的考慮,密碼不用明文存放。以本機為例,執行如下指令即可添加本機認證資訊。

如不提示輸入密碼即可直接登入則表示密鑰驗證成功。當然,這裡隻是為大家簡要示範密鑰認證的過程,實際應用中為友善起見,一般會使用非root使用者生成預設檔案名為id_rsa、id_rsa.pub的密鑰對,在使用時通過sudo的方式擷取權限。

ansible的指令使用格式如下:

是inventory中定義的主機或主機組,可以為ip、hostname、inventory中的group組名、具有“.”或“*”或“:”等特殊字元的比對型字元串,<>表示該選項是必須項,不可忽略。

[options]是ansible的參數選項,[]表示該選項中的參數任選其一。

ansible指令可用選項非常多,這裡列舉如下會用到的選項,詳細選項可參考man或第3章。

具體示例如下:

但在新版本中ansible的sudo指令廢棄,改為--become或-b,如上指令需改為如下:

ansible-playbook的指令用法和ansible略有不同,雖然參數選項與ansible有很多相同的地方,但也新增了針對ansible-playbook特有的參數。

ansible-playbook的指令使用格式如下:

--ask-vault-pass:加密playbook檔案時提示輸入密碼。

-d, --diff:當更新的檔案數及内容較少時,該選項可顯示這些檔案不同的地方,該選項結合-c用會有較好的效果。

-e extra_vars, --extra-vars=extra_vars:在playbook中引入外部變量。

--f?lush-cache:将fact清除到的遠端主機緩存。

--force-handlers:強制運作handlers的任務,即使在任務失敗的情況下。

-i inventory:指定要讀取的inventory檔案。

--list-tags:列出所有可用的tags。

--list-tasks:列出所有即将被執行的任務。

--skip-tags=skip_tags:跳過指定的tags任務。

--start-at-task=start_at_task:從第幾條任務開始執行。

--step:逐漸執行playbook定義的任務,并經人工确認後繼續執行下一步任務。

--syntax-check:檢查playbook中的文法書寫。

-t tags, --tags=tags:指定執行該tags的任務。