天天看點

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

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

2.3 ansible指令用法詳解

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預設使用(筆者也建議各位使用)公私鑰認證方式,究其原因無非是出于安全的考慮,密碼不用明文存放。以本機為例,執行如下指令即可添加本機認證資訊。

 随機生成公私鑰對,ssh-keygen是linux下認證密鑰生成、管理和轉換工具,詳細用法可參考其man文檔

ssh-keygen  -n  -b

4096 -t rsa -c [email protected] -f root.sshstanley.rsa

 為本機添加密鑰認證

ssh-copy-id –i

root.sshstanley.rsa root@localhost

輸入的時候會有如下提示:

are you sure you

want to continue connecting (yesno)

輸入全小寫的英文字母yes即可。

而後會有類似如下提示輸入對應root使用者的密碼資訊:

root@localhost's

password

輸入正确的密碼資訊後結果認證,随後在目前指令行輸入如下指令嘗試免密碼登入:

ssh -i

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

ansible的指令使用格式如下:

ansible

host-pattern [options]

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

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

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

-m name,

--module-name=name:指定執行使用的子產品。

-u username,

--user=username:指定遠端主機以username運作指令。

-s, --sudo:相當于linux系統下的sudo指令。

-u

sudo_username, --sudo-user=sudo_username:使用sudo,相當于linux下的sudo指令。

具體示例如下:

 以bruce使用者執行ping存活檢測

ansible all -m

ping -u bruce

 以bruce sudo至root執行ping存活檢測

ping -u bruce --sudo

 以bruce sudo至batman使用者執行ping存活檢測

ping -u bruce --sudo --sudo-user batman

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

ping -u bruce -b

ping -u bruce -b --become-user batman

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

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

ansible-playbook

playbook.yml

ansible-playbook指令後跟事先編輯好的playbook.yml檔案即可。本節隻簡單介紹其用法,在第4、5、6章有大量内容介紹其寫法、進階用法及優化方向。ansible-playbook新增的功能參數如下:

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

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

-e extra_vars,

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

--flush-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的任務。

在日常工作中,大家經常會遇到批量添加認證的問題,而逐條添加認證方式,如機械地對每台主機都一條條添加認證,那是一件非常麻煩的事,也違反了我們期望的自動化方式。具體的批量添加認證方式請參考第9章。如前面所介紹,ansible不僅有ansible、ansible-playbook指令,還有ansible-galaxy、ansible-pull、ansible-doc、ansible-vault、ansible-console(2.0版本新增)指令,掌握ansible的基礎用法後,我們将更深一步學習ansible系列指令。

繼續閱讀