天天看點

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

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

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

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

ansible

ansible-galaxy

ansible-pull

ansible-doc

ansible-playbook

ansible-vault

ansible-console

2.4.1 ansible

指令ansible是日常工作中使用率非常高的指令之一,man中是如此定義其功能的:run a

command somewhere else,可見其靈活性。ansible指令主要在如下場景使用:

非固化需求

臨時一次性操作

二次開發接口調用

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

 檢查伺服器存活

ansible web1 –m

ping

 複制本地檔案到遠端

copy –a src=etcfstab dest=tmpfstab owner=root group=root mode=644 backup=yes

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

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

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

2.4.2 ansible-galaxy

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

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

[initinfoinstalllistremove] [--help] [options] ...

ansible-galaxy指令分三大部分:

(1)[initinfoinstalllistremove]

init:初始化本地的roles配置,以備上傳roles至galaxy。

info:清單指定role的詳細資訊。

install:下載下傳并安裝galaxy指定的roles到本地。

list:列出本地已下載下傳的roles。

remove:删除本地已下載下傳的roles。

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

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

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

init ––help

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

usage

ansible-galaxy init [options] role_name

options

    -f, --force           force overwriting an existing role

    -h, --help 

          show this help message

and exit

    -c, --ignore-certs    ignore ssl certificate validation errors.

    -p init_path, --init-path=init_path

                          the path in which the

skeleton role will be created.

                          the default is the

current working directory.

    --offline             don't query the galaxy api when

creating roles

    -s api_server, --server=api_server

                          the api server

destination

    -v, --verbose         verbose mode (-vvv for more, -vvvv to

enable

                          connection debugging)

    --version             show program's version number and

exit

其他選項與help用法一樣。

(3)參數項[options]

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

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

具體可參考如下:

 下載下傳使用者hectcastro的nginx這個role到本地并忽略錯誤(預設存放在etcansibleroles)

--ignore-errors install azavea.git

因為ansible-galaxy是對httpsgalaxy.ansible.com網站的上傳、下載下傳、配置類工作,如有類似如下報錯,請確定該網站可正常通路。

the api server

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

2.4.3 ansible-pull

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

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

[options] [playbook.yml]

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

具體示例參考如下:

20     root usrlocalbinansible-pull -o -c 2.1.0

-d srvwwwking-gw -i etcansiblehosts -u git

git.kingifa.comking-gw-ansiblepull 

varlogansible-pull.log 2&1

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

2.4.4 ansible-doc

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

[options] [module...]

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

 列出支援的子產品

ansible-doc –l

 子產品功能說明

ansible-doc ping

2.4.5 ansible-playbook

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

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

playbook.yml

具體示例如下:

 執行gw.yml這個playbook中定義的所有任務集

gw.yml

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

2.4.6 ansible-vault

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

ansible-vault [createdecrypteditencryptrekeyview] [--help] [options] file_name

具體示例如下。

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

ansible-vault   encrypt a.yml

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

vault password

confirm vault

password

encryption

successful

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

decrypt a.yml

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

decryption

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

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

2.4.7 ansible-console

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)[f5]$”是提示符,該提示符表示“目前的使用使用者@目前所在的inventory中定義的組,預設是all分組(inventory中all組所有主機的數量)[forks線程數]$”。

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

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

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