Ansible系列命令用法與使用
在上一個文章中已經完成了Ansible的安裝,這片文章主要的用來記錄Ansible一些命令的用法詳解及其使用場景。好了非話不多說,‘上菜吧’。
Ansible命令行執行方式有Ad-hoc、Ansible-playbook兩種方式。Web化執行方式其官方提供了付費產品Tower(10臺以內免費),個人的話可以基於API開發類似的Web化產品。此篇文章主要針對於Ad-hoc、Ansible-playbook兩種方式做詳細介紹。
什麼是Ad-hoc、Ansible-playbook?Ad-hoc主要用於臨時命令的執行,而Ansible-playbook可以簡單理解爲Ad-hoc的集合,通過一定的規則編排在一起。兩者操作起來比較簡單、方便易懂。
以下爲Ansible的部分命令:
- ansible
- ansible-galaxy
- ansible-pull
- ansib-doc
- ansible-playbook
- ansible-valut
- ansible-console
下面就是ansible、ansible-playbook、ansible-doc的詳解及其使用1.Ansible Inventory配置及詳解
Inventory是Ansible管理主機信息的配置文件,存放於hosts文件中
-
- Inventory可以指定主機和組(如需端口直接在ip或者hostname後面+:port級即可)
192.168.1.12 或者是hostname[haha] 192.168.1.11 192.168.1.10:8080
[lala] web1 pwd[1:10](指pwd1、pwd2.....pwd10)
- Inventory可以指定主機和組(如需端口直接在ip或者hostname後面+:port級即可)
- 2 定義主機變量
[webservers] web1 http-port=8080
-
- 定義組變量
[heihei] 192.168.1.11 192.168.1.10:8080 [hah:vars] ansible_ssh_root=‘root’
2.Ansible與正則
正則匹配:Ansible支持正則表達式,但是開頭需要加上“~”纔可以
All全量匹配:ansible all -m -a ‘ping’ OR ansible “*” -m -a ‘ping’ ansible 192.168.1.* -m -a ‘ping’
邏輯或(or)匹配:指的是同時對多組或者多臺主機同時執行時,相互之間用“:(冒號)”分隔開:ansible web1:web2 -m ping
邏輯非匹配:主要針對多重條件的匹配規則:(所有web組中的機器但是不在tom組中的主機):ansible web:!tom -m ping
邏輯與的匹配:也是針對多重條件匹配的:(web跟tom組同時存在的主機):ansible web&tom -m ping
多條件支持:在web和tom組中的所有機器存在於haha組中且在huhu組中不存在的主機:ansible web:tom&haha:!huhu
模糊匹配: 所有以web開頭的主機:^web*
域切割:[WEB] Luna Liuli Webo WEB[0]:代表:Luna
正則匹配:Ansible支持正則表達式,但是開頭需要加上“~”纔可以
*Ansible “~(haha|huhu|yiyi)”\.hehe\.(com.org) -m ping *
檢測haha.hehe.com.org、huhu.hehe.com、yiyi.hehe.com、haha.hehe.org、huhu.hehe.org、yiyi.hehe.org的存在**3.ansible-doc
ansible-doc是Ansible模塊文檔說明,針對每個模塊都會有詳細的用法說明以及應用案例介紹,功能。類似於Linux系統的man命令,使用方式如下:
`ansible-doc [options] [module...] 列出支出的模塊: `ansible-doc -l` 模塊功能說明: `ansible-doc ping`
4. Ad-Hoc命令集介紹
Ansible <host-pattern> [options] 常用選項: -v,--verbose:輸出更詳細的執行過程信息 -i PATH,--inventory=PATH:指定inventory信息 -f NUM,--fork NUM:指定線程數 --private-key=PRIVATE_KEY_FILE:指定祕鑰文件 -M DIRECTORY,--module-path=DIRECTORY:指定模塊存放路徑 -a ’ARGUMECTORY’,--args=’ARGUMENTS’:模塊參數 -k,--ask-pass SSH:認證密碼(通常在node機器上沒有做過免祕鑰的時候用) -K,--ask-sudo-pass sudo:用戶密碼(--sudo時用) -t DIRECTORY,--tree=DIRECTORY:輸出信息至DIRECTORY目錄下,結果文件以遠程主機名命名 -t SECONDS,--timeout=SECONDS:指定遠程主機最大超時,單位是秒 -u USERNAME,--username:指定遠程主機以username運行命令 -l SUBSET,--limit=SUBSET:指定運行主機 -l ~REGEX:指定運行主機(正則) --list-hosts:列出符合條件的主機列表,不執行任何命令 ansible和ansible-playbook默認會fork5個線程併發執行命令此時可使用-k num,根據自己主機硬件配置做調整,建議併發數是CPU的偶數倍
5. Ansible的模塊使用
想要詳細瞭解Ansible的模塊信息通過ansible-doc [option] [module]即可
例如ansible-doc -l:列出所有可用模塊
ansible-doc yum:獲取yum模塊的help信息
命令行模塊:command模塊
文件傳輸模塊:copy模塊、fetch模塊、template模塊
Copy模塊:複製本機文件到各節點上,可修改屬豬、屬組、權限(src=ansibefile dest=nodefile owner= greoup=groupname mode=777)
copy模塊還可以實現備份功能:ansible all -m copy -a ‘src=file dest=file.bak backup=yes’
Fetch模塊:複製節點文件傳輸到本機(僅支持傳輸文件,如果是個目錄的話可以歸檔壓縮後傳輸)
Ansible all -m fetch -a ‘src=nodefile dest=ansiblefile backup=yes’
ansible批量複製祕鑰到各節點並實現免祕鑰登錄
ansible all -m copy -a ‘src=/root/.ssh/id_rsa.pub dest=/home/’
ansible all -m shell -a ‘cat /home/id_rsa.pub >> /root/.ssh/au’
command模塊與shell模塊的區別2
Shell功能全面但是執行率低
command不支持:邏輯運算符、條件判斷符號、重定向命令或者是管道命令,但是使用shell模塊的就不會報錯
cron模塊
ansible srvs -m cron -a 'name="disk check loger" minute=15 hour=3 job="df -hT >> /tpm/df.log"
Yum模塊
安裝epel源:ansinle all -m yum -a ‘name=epel-release state=latest’
安裝應用:ansible all -m yum -a ‘name=vsftpd state=latest’
Service模塊
Service模塊中的state支持的選擇有一下幾種:started、stopped、restarted、reloaded
Ansible all -m service -a ‘name=vsftpd state=stop’
Setup模塊
自動從遠程主機獲取可用於playbook中的變量
Ansible all -m setup -a ‘fileter=*distribut’ 或者是ansible all -m setup | grep -i distribut
debug模塊
此處暫時不用省略
Script模塊
Ansible all -m script -a ‘/home/test.sh’(在節點服務器上執行test.sh腳本)6. Ansible-playbook
ansible-playbook是日常應用使用次數最多的,其工作機制是“讀取預先編寫好的playbook文件實現批量管理”,使用如下:
ansible-playbook restartservice.yaml
* 1)、子串不一定要用雙引號標識
2)、在縮排中空白字符的數目並不重要,只要相同階層的元素左對齊就OK了(yaml裏面不可以使用Tab字符)
3)、允許在文件中加入選擇性的空行,以增加可讀性;
4)選擇性的符號“...”可以用來表示檔案結尾(在利用串流的通信中,這非常的有用,可以在選擇不關閉串流的情況下發送結束信號)
- 定義組變量
-