1.使用以下指令給用戶端安裝httpd服務:
2.執行以下指令啟動httpd服務:
注:這裡的name是centos系統裡的服務名,可以通過chkconfig --list檢視到。
其他控制服務的指令:
3.在name後面還可以加上state=installed或removed,加上removed的話,表示解除安裝這個服務,如果不指定state的值預設是installed:
然後到用戶端上通過rpm -qa httpd指令檢視是否已解除安裝成功:
Ansible文檔的使用:
1.列出所有可用的子產品指令:
ansible-doc -l
2.檢視指定子產品的文檔,例如我要檢視cron子產品的文檔,可使用以下指令:
ansible-doc cron
ansible-doc後面跟子產品名就可以檢視該子產品的文檔。
playbook相當于可以把子產品指令都寫入到配置檔案裡面,這樣就可以直接執行配置檔案了,有點腳本的意思:
檔案格式說明:
第一行需要有三個杠,hosts參數指定了對哪些主機進行參作,如果是多台機器可以用逗号作為分隔,也可以使用主機組,在/etc/ansible/hosts裡定義;
user參數指定了使用什麼使用者登入遠端主機操作;
tasks指定了一個任務,其下面的name參數同樣是對任務的描述,在執行過程中會列印出來,shell是ansible子產品名字
編輯完成之後,使用ansible-playbook指令執行該檔案:
然後到用戶端上看看是否有建立test.txt檔案:
如上,代表執行成功。
我們通過一個建立使用者的例子,來示範一下playbook裡的變量使用方式:
說明:
name參數對該playbook實作的功能做一個概述,後面執行過程中,會列印 name變量的值 ,可以省略;
gather_facts參數指定了在以下任務部分執行前,是否先執行setup子產品擷取主機相關資訊,如果需要在後面的tasks裡擷取setup收集到的資訊,就需要把這個參數設定為True;
vars參數,指定了變量,這裡聲明了一個user變量,其值為test ,需要注意的是,變量值一定要用引号引住;
user提定了調用user子產品,name是user子產品裡的一個參數,而增加的使用者名字調用了上面user變量的值。
執行該檔案:
到用戶端上看看使用者是否已建立:
playbook除了有變量,還有循環語句,以下通過一個簡單的例子來示範一下循環的使用方式:
說明:
file子產品可以對檔案進行相關的操作,例如建立檔案或者更改檔案權限等,具體可以檢視該子產品的文檔
with_items為循環的對象,相當于是一個數組或集合,寫在下面的1.txt、2.txt以及3.txt是該集合的元素。而item則表示的是周遊出來的元素,也就是說item指代的是1.txt、2.txt以及3.txt。
state的值設定為touch表示如果該檔案不存在就進行建立
path表示檔案的路徑
mode設定權限
到用戶端上看看檔案是否已建立:
我們都知道在腳本中循環和條件判斷是必不可少的語句,是以在playbook裡這兩種語句也是有的,循環我們已經介紹完了,接下來我們通過一個簡單的建立檔案的例子示範一下條件判斷語句的使用方式。
我們一般以setup子產品收集到的主機資訊,來作為判斷條件。是以在編寫代碼之前,我們需要先擷取相應的資訊,例如我要以ip位址來作為判斷條件,那麼我就得先從setup裡擷取主機ip的相關資訊。
執行以下指令可以檢視到setup收集到的所有的facter資訊,輸出的資訊是JSON格式的:
ansible testhost -m setup
編寫檔案内容如下:
ansible_eno16777736是一個數組存儲着網卡相關資訊,ipv4屬于該數組的子元素,但是ipv4也是一個數組,而address則是ipv4數組的子元素。我們需要使用address 來作為判斷條件。
是以要通路address就需要使用這樣的格式:ansible_eno16777736.ipv4.address,address表示的是鍵,而"192.168.77.128"則是值,when為判斷語句相當于if,是以其判斷條件為:該鍵的值為"192.168.77.128"時就執行shell子產品裡定義的語句。
有一種情況就是執行了tasks裡面的内容之後,伺服器發生了變化,這時我們可能需要執行一些相關的操作。例如我們修改了某個服務的配置檔案後,則需要重新開機一下服務。而handlers就是完成這樣的事情的,它相當于程式設計中的回調函數,當tasks裡的内容執行成功後,就會執行handlers裡定義的内容。也類似于shell腳本中的&&符号,例如 cat 1.txt && rm -f 1.txt ,當cat 1.txt指令執行成功之後就會執行rm -f 1.txt指令,否則不執行。
下面用一個簡單的例子來示範一下handlers的使用方式:
隻有copy子產品執行成功後,才會去調用下面的handlers裡定義的内容。也就是說如果/etc/passwd和/tmp/test_passwd.txt内容是一樣的話,就不會去執行handlers裡面的shell相關指令,因為copy沒有被執行。 這種比較适合配置檔案發生更改後,重新開機服務的操作。
notify用于指定handlers的name參數的值,因為handlers可以定義多個,是以需要使用notify來進行指定調用哪一個。
到用戶端上看看檔案末尾的那一行是否是我們echo進去的那一行内容:
<code>[root@client ~]#</code>
<code></code>
<code>本文轉自 ZeroOne01 51CTO部落格,原文連結:http://blog.51cto.com/zero01/2066913,如需轉載請自行聯系原作者</code>