Ansible自動化運維之Playbook詳解及體驗(二)

Handlers介紹:

  • Handlers也是一些task的列表,和一般的task並沒有什麼區別。是由通知者進行的notify,如果沒有被notify,則Handlers不會執行,假如被notify了,則Handlers被執行;
  • 不管有多少個通知者進行了notify,等到play中的所有task執行完成之後,handlers也只會被執行一次
  • “notify”這個action可用於在每個play的最後被觸發,這樣可以避免多次有改變發生時每次都執行指定的操作,取而代之,僅在所有的變化發生完成後一次性地執行指定操作。在notify中列出的操作稱爲handler,也即notify中調用handler中定義的操作。

通過部署一個實驗來看一下:

  • 實驗項目:通過ansible劇本對被管理端進行部署httpd服務,並且修改配置文件,啓動服務。
  • 實驗環境
主機 操作系統 IP地址
ansible管理端 Centos7 192.168.72.128 /
ansible被管理端 Centos7 192.168.72.155 webserver
ansible被管理端 Centos7 192.168.72.156 mysql
  • 實驗步驟
1.現在管理端安裝Apache,提取其配置文件作爲模板:
  * yum install -y httpd
  * cp /etc/httpd/conf/httpd.conf /opt/httpd.conf.j2

Ansible自動化運維之Playbook詳解及體驗(二)

2.修改HTTP配置文件模板:
  * vim /opt/httpd.conf.j2

Ansible自動化運維之Playbook詳解及體驗(二)
Ansible自動化運維之Playbook詳解及體驗(二)

3.修改ansible的hosts文件
  * vim /etc/ansible/hosts

Ansible自動化運維之Playbook詳解及體驗(二)

4.編寫一個劇本:
* vim /opt/httpd.yml
- hosts: webserver
  remote_user: root
  vars:                   #定義變量
  - package: httpd
  - server: httpd
  tasks:                #任務
   - name: installed apache
     yum: name={{package}} state=latest          #調用變量
   - name: copy httpd temp
     template: src=/opt/httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf         #模板路徑和目標路徑
     notify:               #調用參數handlers
       - restart httpd
   - name: start httpd
     service: name={{server}} enabled=true state=started
  handlers:           #被notify調用的參數
     - name: restart httpd
       service: name={{server}} state=restarted

Ansible自動化運維之Playbook詳解及體驗(二)
5.執行ansible-play劇本:
Ansible自動化運維之Playbook詳解及體驗(二)
6.被控制端檢查:
Ansible自動化運維之Playbook詳解及體驗(二)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章