Ansible 七(ad hoc任務)
ansible任務
ad hoc任務就是執行shell指令、或shell腳本。
ansible ad-hoc指令
可以執行一些簡單的指令,不需要将這些執行的指令特别儲存下來。
适合執行簡單的指令。
ansible playbook
可以解決比較複雜的任務,可以将指令儲存下來。
适合執行配置管理或部署客戶機。
并行性和shell指令
重新開機webservers主機組裡的是以機器,每次重新開機10台
<code>ansible webservers </code><code>-</code><code>a </code><code>"/sbin/reboot"</code> <code>-</code><code>f </code><code>10</code>
以test01使用者身份在webservers組的是以主機運作foo指令
<code>ansible webservers </code><code>-</code><code>a </code><code>"/usr/bin/foo"</code> <code>-</code><code>u test01</code>
以test01使用者身份sudo執行foo(如果有sudo密碼加上--ask-sudo-pass(-k))
<code>ansible webservers </code><code>-</code><code>a </code><code>"/usr/bin/foo"</code> <code>-</code><code>u test01 </code><code>-</code><code>-</code><code>sudo [</code><code>-</code><code>-</code><code>ask</code><code>-</code><code>sudo</code><code>-</code><code>pass</code><code>]</code>
也可以sudo到其他使用者執行指令非root
<code>ansible webservers </code><code>-</code><code>a </code><code>"/usr/bin/foo"</code> <code>-</code><code>u username </code><code>-</code><code>U otheruser [</code><code>-</code><code>-</code><code>ask</code><code>-</code><code>sudo</code><code>-</code><code>pass</code><code>]</code>
前面指令用到的-f 10選項表示使用10個并行的程序。
這個選項也可以在ansible的配置檔案中設定,預設是5。
如果主機數大于設定的并發數,ansible會自行協調,花的時間稍微長一點。
ansible有許多子產品,預設是指令子產品:“command” ,這個子產品不支援shell變量和管道等。
我們可以通過-m選項來指定不同的子產品。例如shell子產品
使用shell子產品在客戶主機上執行指令
<code>ansible webservers </code><code>-</code><code>m shell </code><code>-</code><code>a </code><code>"echo $TERM"</code> <code>#檢視目前系統是linux</code>
檔案傳輸(file transfer)
拷貝本地的/etc/hosts檔案到webservers主機組是以主機的/tmp/hosts;
<code>ansible webservers </code><code>-</code><code>m copy </code><code>-</code><code>a </code><code>"src=/etc/hosts dest=/tmp/hosts"</code>
若使用playbooks,則可以利用template子產品來做到跟進一步的事情:(請參見 module 和 playbook 的文檔)
使用file子產品修改檔案的屬主和權限(在這裡可替換為copy子產品是等效的)
<code>ansible webservers </code><code>-</code><code>m </code><code>file</code> <code>-</code><code>a </code><code>"dest=/tmp/hosts mode=600"</code>
<code>ansible webservers </code><code>-</code><code>m </code><code>file</code> <code>-</code><code>a </code><code>"dest=/tmp/hosts mode=600 owner=test01 group=test01"</code>
#修改遠端客戶機/tmp/hosts權限為600,屬主和屬組都為test01
使用file子產品建立目錄,與執行mkdir -p 效果類似
<code>ansible webservers </code><code>-</code><code>m </code><code>file</code> <code>-</code><code>a </code><code>"dest=/tmp/abc mode=755 owner=test01 group=test01 state=directory"</code>
#在webservers組裡的是以主機上建立abc目錄,權限為755,屬主和屬組都為test01
使用file子產品删除目錄(遞歸的删除)和删除檔案
<code>ansible webservers </code><code>-</code><code>m </code><code>file</code> <code>-</code><code>a </code><code>"dest=/tmp/abc state=absent"</code>
管理軟體包(managing packages)
ansible提供對yum和apt的支援,這裡是關于yum的示例。
确認httpd軟體包安裝,不更新(如果已安裝不更新)
<code>ansible webservers </code><code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd state=present"</code>
<code>傳回如下:</code>
<code>1.1</code><code>.</code><code>1.2</code> <code>| SUCCESS </code><code>=</code><code>> {</code>
<code> </code><code>"changed"</code><code>: false, </code>
<code> </code><code>"msg"</code><code>: "", </code>
<code> </code><code>"rc"</code><code>: </code><code>0</code><code>, </code>
<code> </code><code>"results"</code><code>: [</code>
<code> </code><code>"httpd-2.4.6-45.el7.centos.4.x86_64 providing httpd is already installed"</code>
<code> </code><code>]</code>
<code>}</code>
<code>1.1</code><code>.</code><code>1.3</code> <code>| SUCCESS </code><code>=</code><code>> {</code>
确認httpd軟體包的版本
<code>ansible webservers </code><code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd-2.4* state=present"</code>
确認httpd軟體包更新到最新版本
<code>ansible webservers </code><code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd state=latest"</code>
<code> </code><code>"All packages providing httpd are up to date"</code><code>, </code>
<code> </code><code>""</code>
<code> </code><code>"All packages providing httpd are up to date"</code><code>, </code><code>#所有的軟體包提供的伺服器是最新的</code>
确認httpd軟體包還沒有安裝(解除安裝httpd)
<code>ansible webservers </code><code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd state=absent"</code>
使用者群組(user and groups)
使用user子產品可以友善的建立使用者、删除使用者、或管理現有的使用者
#建立使用者test02
<code>ansible </code><code>all</code> <code>-</code><code>m user </code><code>-</code><code>a </code><code>"name=test02 password=123456789"</code>
#删除使用者test02
<code>ansible </code><code>all</code> <code>-</code><code>m user </code><code>-</code><code>a </code><code>"name=test02 state=absent"</code>
源碼部署
直接使用 git 部署 webapp:
ansible子產品能夠通知變更,當代碼更新時,可以告訴ansible做一些特定的任務。
比如從git部署代碼然後重新開機apache服務等
<code>ansible webservers </code><code>-</code><code>m git </code><code>-</code><code>a </code><code>"repo=git://foo.example.org/repo.git dest=/srv/myapp version=HEAD"</code>
服務管理(managing services)
安裝httpd服務
<code>ansible </code><code>all</code> <code>-</code><code>m yum </code><code>-</code><code>a </code><code>"name=httpd state=present"</code>
啟動httpd服務
<code>ansible </code><code>all</code> <code>-</code><code>m service </code><code>-</code><code>a </code><code>"name=httpd state=started"</code>
重新開機httpd服務
<code>ansible </code><code>all</code> <code>-</code><code>m service </code><code>-</code><code>a </code><code>"name=httpd state=restarted"</code>
關閉httpd服務
<code>ansible </code><code>all</code> <code>-</code><code>m service </code><code>-</code><code>a </code><code>"name=httpd state=stopped"</code>
解除安裝httpd服務
背景運作(需要長時間運作的指令Time Limited Background Operations)
背景執行指令3600s,-B表示背景執行的時間
<code>ansible </code><code>all</code> <code>-</code><code>B </code><code>3600</code> <code>-</code><code>a </code><code>"/usr/bin/long_running_operation --do-stuff"</code>
檢查任務的狀态
<code>ansible </code><code>all</code> <code>-</code><code>m async_status </code><code>-</code><code>a </code><code>"jid=123456789"</code>
背景執行指令最大時間是1800s 即30 分鐘,-P 每60s 檢查下狀态預設15s
<code>ansible </code><code>all</code> <code>-</code><code>B </code><code>1800</code> <code>-</code><code>P </code><code>60</code> <code>-</code><code>a </code><code>"/usr/bin/long_running_operation --do-stuff"</code>
搜集系統資訊(gathering facts)
搜集主機的是以系統資訊
<code>ansible webservers </code><code>-</code><code>m setup</code>
搜集系統資訊并以主機名為檔案名分别儲存在/tmp/facts目錄
<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>-</code><code>tree </code><code>/</code><code>tmp</code><code>/</code><code>facts</code>
#搜集系統版本資訊
<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>a </code><code>"filter=ansible_distribution*"</code>
搜集和記憶體相關的資訊
<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>a </code><code>"filter=ansible_*_mb"</code>
搜集和cpu相關的資訊
<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>a </code><code>"filter=ansible_processor*"</code>
搜集網卡資訊
<code>ansible webservers </code><code>-</code><code>m setup </code><code>-</code><code>a </code><code>"filter=ansible_eth*"</code>
本文轉自506554897 51CTO部落格,原文連結:http://blog.51cto.com/506554897/1955210,如需轉載請自行聯系原作者