Ansible之路——第五章:Ansible的幾個命令


 

 

安裝完ansible后,發現ansible一共為我們提供了七個指令:ansible、 ansible-doc、ansible-galaxy、ansible-console、ansible-playbook、ansible-pull、ansible-vault。

下面簡單介紹一下這幾個命令的用法。相應命令的詳細用法可以通過man來查詢。

 

5.1 ansible

Ansible是指令核心部分,其主要用於執行ad-hoc命令。 Ad-Hoc 是指ansible下臨時執行的一條命令,並且不需要保存的命令。

一個ad-hoc命令的執行,需要按以下格式進行執行:

ansible  主機或組  -m  模塊名  -a "模塊參數"  ansible參數

其中:

  • 主機和組,是在/etc/ansible/hosts 里進行指定的部分,當然動態Inventory 使用的是腳本從外部應用里獲取的主機;
  • 模塊名,可以通過ansible-doc -l 查看目前安裝的模塊,默認不指定時,使用的是command模塊,具體可以查看/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,默認模塊可以在該配置文件中進行修改;
  • 模塊參數,可以通過 “ansible-doc 模塊名” 查看具體的用法及后面的參數;
  • ansible參數,可以通過ansible命令的幫忙信息里查看到,這里有很多參數可以供選擇,如是否需要輸入密碼、是否sudo等。

 

5.2 ansible-doc

  

該指令用於查看模塊信息,常用參數有-l ,具體如下:

//列出所有已安裝的模塊

ansible-doc -l

//查看某個模塊的具體用法

ansible-doc <module>

 

5.3 ansible-galaxy

ansible-galaxy 指令用於方便的從https://galaxy.ansible.com/ 站點下載第三方擴展模塊,我們可以形象的理解其類似於centos下的yum、python下的pip或easy_install 。

 

5.4 ansible-console

ansible-console是ansible為我們提供的一款交互式工具,類似於Windows中的cmd及Linux中的shell。可以在ansible-console虛擬出來的終端上像shell一樣使用ansible內置的各種命令,這為習慣於shell交互方式的用戶提供了良好的使用體驗,所有的操作與shell類似,而且支持tab鍵補全。

如:

  

5.5 ansible-playbook

該指令是使用最多的指令,其通過讀取playbook 文件后,執行相應的動作。

 

5.6 ansible-pull

該指令使用需要談到Ansible的另一種工作模式:pull模式(Ansible默認使用push模式)。

前面的學習使用都是基於Ansible 的push 模式來工作,即不要在遠程主機做任何操作只需要在控制機編排playbook,push 到遠程主機即可完成任務,另外一個工作模式就是pull這和通常使用的push模式工作機理剛好相反,其適用於以下場景:

1)   被控節點在配置時不可用,比如自動伸縮的服務池

2)   被控節點較多,控制機資源有限無法滿足高線程和低時間的運行效率

 

 

 

 

Ansible 基於pull 模式的工作流程:

1)    每台被控端需要安裝Ansible 和git(svn)

2)    所有的配置及playbooks 都存放在git 倉庫

3)    被控端的ansible-pull 計划任務會定期檢查給定的git 的tag 或者分支

4)    ansible-pull 執行特定的playbooks 即local.yml 或者hostname.yml

5)    每次更改playbooks 只需要提交到git 即可

 

將Ansible設置為從節點pull而不是push,是有一些缺點,例如要求在節點上安裝軟件,但是也存在一些優點:

  • 不需要中央管理服務器(取決於repository的類型)
  • 分散存儲庫是可能的。(再次:取決於repository的類型。)
  • 連接可以由節點啟動(如果不允許您更改防火牆策略,則可能很重要)
  • 增加並行度
  • 節點可用時可以pull。(在基於push的模型中,如果節點不可用,則無法對其進行配置。)
  • 非常快,因為避免了每個任務的SSH連接開銷。

5.6.1測試:

在GitHub上創建一個新的庫:pull-test

本地將這個庫下載下來,並提交ansible腳本:

# git clone git@10.152.35.204:root/pull-test.git
# cd pull-test/
# vim main.yml
# git add main.yml
# git commit -m "show route info"
# git push -u origin master

這里的main.yml只是打印了本地的路由信息,實際上可以執行任何操作:

編輯host inventory:

127.0.0.1 ansible_ssh_pass=root123

 

開始測試:

 

注意,ansible-pull的本地主機清單里面的ip地址必須是127.0.0.1,否則會報錯:

ERROR! Specified hosts and/or --limit does not match any hosts

如果不提供任何主機清單(/etc/ansible/hosts里面也為空),那么倉庫中的ansible腳本里面需要使用127.0.0.1或者localhost作為hosts。

5.6.2 周期執行

在實際應用中,ansible-pull一般與linux下的crontab協作,用於定期檢查倉庫中的配置或者腳本是否更新:

# -C 分支 -d 目的地  -i  主機路徑  -e 添加參數 -o 只有git倉庫發生改變才執行playbook

如:

*/5 * * * * ansible-pull  -C master -d /root/test -i /opt/ansible-pull-test/hosts -U <github倉庫> -e "role=db" shenchan.yml -o

 

5.7 ansible-vault

ansible-vault主要應用於配置文件中含有敏感信息,又不希望他能被人看到,vault可以幫你加密/解密這個配置文件,屬高級用法。

主要對於playbooks里比如涉及到配置密碼或其他變量時,可以通過該指令加密,這樣我們通過cat看到的會是一個密碼串類的文件,編輯的時候需要輸入事先設定的密碼才能打開。這種playbook文件在執行時,需要加上 --ask-vault-pass參數,同樣需要輸入密碼后才能正常執行。

5.7.1 用法:

 

5.7.2 加密:

5.7.3 解密:

5.7.4 加密時編輯(輸入密碼后可以看到加密前的實際內容):

5.7.5 加密時運行:

 

5.7.6 還可以將加密的密碼存在文件中,這樣在運行的時候就不需要輸入密碼了:

 注:從ansible2.4開始,官方就不再推薦使用--vault-password-file選項了,開始推薦使用--vault-id來代替--vault-password-file指定密碼文件。

5.7.7 創建加密文件,編輯退出后自動對文件進行加密:

5.7.8 查看加密文件原內容:

5.7.9 修改加密文件的密碼:

 

同樣的,在更新密碼的時候,推薦使用--new-vault-id來代替--new-vault-password-file指定新的密碼文件。

5.7.10 加密字符串:encrtpt_string

前面的命令都是對整個文件進行加密,但是通常我們並不需要加密整個文件,因為這樣反而會對我們的閱讀造成困擾,有時我們只是想把“密碼”等敏感信息隱藏起來而已。

從ansible2.3開始,使用encrypt_string命令,可以加密字符串,通過加密字符串的功能,能夠有效的隱藏敏感信息的值。

比如,有如下的playbook:

我們覺得password這個密碼變量以明文的方式存儲在playbook中不太安全,因為所有有權限查看該playbook的人都能看到密碼,我們需要對密碼字符串的值進行加密,以保證它不會明文出現在這里。操作如下:

先對字符串進行加密,加密時,會提示輸入密碼:

 這一長串文本就是1234加密后的文本。現在,復制這串文本,用這串文本替換playbook中的密碼,如:

這里的密碼已經被替換為了加密后的字符串了,下面來運行這個playbook:

 

5.8 ansible-lint

除了上述幾個命令之外,還有ansible-lint這個命令,不過需要安裝ansible-lint的軟件包

ansible-lint 是一個對playbook的語法進行檢查的工具。

 

如果沒有安裝ansible-lint,也可以使用 ansible-playbook --syntax-check對劇本進行語法的檢查。

ansible-playbook --syntax-check + 劇本名
(對劇本語法進行檢查但不執行)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM