天天看點

Ansible的幾個基本語句

如約簽約了新東家,環境很不錯,同僚人都很随和,上司也很好說話,加班福利很贊,總而言之,新的開始,好好工作,多多掙錢。

批處理工具我最早接觸的是pssh,因為它實在很簡單粗暴,但是它由于太簡單粗暴了,應付十台二十台機器還OK,應付五十台一百台伺服器就心有餘力不足了(而且xshell右鍵有一個“發送鍵入到所有會話”的功能,與pssh效果幾乎一樣),而且我還不太喜歡puppet,總覺得那玩意跟我八字不合,于是乎,在新頭頭的推薦下,我把目光放在了Ansible。

Ansible的安裝很簡單,在Redhat環境下直接#yum install ansible -y就行。Redhat已經将Ansible公司收購了,是以在安裝上提供了不小的便利。

Ansible在安裝完畢之後,會在/etc/ansible/目錄下看見一個叫hosts的檔案,這裡是所有你要控制的伺服器的ip們,可以排列寫,比如:

192.168.1.122

192.168.1.133

192.168.1.144

也可以分組寫,比如:

[aliyun]

10.22.33.44

10.22.33.45

[jinshanyun]

121.23.45.66

121.23.45.67

121.23.45.68:2222  (這個不是使用ssh預設的22端口,就需要特别指出)

預設情況下,Ansible會把指令全用于這個hosts檔案,比如

#ansible all -m ping  -u ashin

這句話意思是整個hosts裡的機器以ashin賬戶啟動,而且都要ping 一下目前本機。

怎麼連接配接主機與要控制的遠端機器請按之前寫的“http://chenx1242.blog.51cto.com/10430133/1763978”一文進行操作,這裡先說幾個指令語句:

1)#ansible all -m shell -a "/bin/echo hello"

對hosts裡所有的機器一起使用"輸出hello這個文字"。-m shell可以忽略不寫,但是不是shell而是其他的子產品就要寫出來;

2)#ansible aliyun -m copy -a "src=~/projects/tests/t.py dest=~"

把hosts裡aliyun組的機器的/projects/tests/t.py複制到~目錄下;

[注意!]copy子產品不支援變量路徑,也就是說如果目标伺服器的部署路徑不同,copy不會很智能的去通路.bash_profile來得到使用者的自定義變量,寫變量替換路徑是不會達到目的的。

3)#ansible jinshanyun[0:9] -i -m file -a "dest=~/tests state=absent"

把hosts裡jinshanyun組中從0~9這十台機器的/tests檔案夾删除掉,absent是“缺席,不在”的意思;

4)#ansible 192.168.1.133 -m ping

這句話=#ping 192.168.1.133;

5)#ansible v1 -m service -a "name=mysql state=started" -u ashin --sudo -K

以使用者名為ashin登陸hosts裡所有v1組的機器,然後檢查mysql是否是started狀态,若不是就start,同時要輸入root的密碼作為确認;

6)#ansible 10.11.22.* -m user -a "name=foo password=foo" --sudo -K

hosts檔案裡所有10.11.22開頭的機器,都要添加一個新的使用者名foo,同時密碼是foo,并且輸入root密碼确認身份;

7)#ansible v1:!v2 -m apt -a "name=git state=latest"

檢查所有屬于v1組同時還不屬于v2組的機器裡的git檔案是否是最新版本;

8)#ansible webservers:&dbservers -a "/sbin/reboot" -f 10 --sudo -K

重新啟動既是webservers組又是dbservers組的所有機器;

9)#ansible webservers -m raw -a 'yum -y install python-simplejson'

用ansible去連結低版本的centos時,就乎出現“ansible requires a json module, none found! ”的錯誤,需要遠端機安裝samplejson包。raw子產品是靠底層ssh的通訊,不依靠python的子產品,是以如果碰到低版本的系統,如果command和shell子產品無法使用,可以先用這條指令安裝完需要的包。

10)# ansible all -m synchronize -a "src=/chenshuo/1.sh dest=/chenshuo delete=yes" 

synchronize原意是“同步”,而這個子產品是分發子產品,這句話的意思是把控制端的/chenshuo/1.sh分發給host檔案裡的所有ip伺服器,delete=yes意思是以控制端伺服器的檔案為準。

11)# ansible 10.168.194.89 -m synchronize -a "mode=pull src=/chenshuo/nba.txt dest=/chenshuo/a.txt"

将10.168.194.89這台伺服器上的/chenshuo/nba.txt拉到控制伺服器的/chenshuo檔案夾下,順便改名叫a.txt。

12)# ansible all -m get_url -a "url=https://pypi.python.org/packages/56/2b/9c9c113fb88082950067a42cc99e3c61f1df72035f89bb0bdf0a60308ca0/pexpect-4.1.0.tar.gz#md5=562a1a21f2a60b36dfd5d906dbf0943e dest=/chenshuo"

把那一大串網址的下載下傳連接配接下載下傳到host檔案裡的所有ip的/chenshuo檔案夾下。

13)# ansible 10.117.14.37 -m script -a "/chenshuo/free.sh"

在10.117.14.37上執行操作端的free.sh,注意操作端必須要有free.sh這個腳本,而14.37這台機器上并不一定要有。

參考資料:http://blog.csdn.net/iloveyin/article/details/46982023

 本文轉自 蘇幕遮618 51CTO部落格,原文連結:http://blog.51cto.com/chenx1242/1792509