天天看點

Ansible 七(ad hoc任務)

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>&gt; {</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>&gt; {</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,如需轉載請自行聯系原作者