Ansible之handler和notify結合觸發條件


handlers和notify結合使用觸發條件

·Handlers(觸發器)

  是task列表,這些task與前述的task並沒有本質上的不同,用於當關注的資源發生變化時,才會采取一定的操作。

·Notify(通知)

  此action可用於在每個play的最后被觸發,這樣可以避免多次有改變發生時每次都執行指定的操作,僅在所有的變化發生完成最后一次性地執行指定操作。在notify中列出的操作稱為handler,也即notify中調用handler中定義的操作。

·以http服務為例

---
- hosts: websrvs
  remote_ user: root

  tasks :
     - name: install httpd package
       yum: name=httpd
     - name: copy conf file 
       copy: src=files/httpd. conf de st=/etc/httpd/conf/ backup=yes
       notify: 
      - restart service#起到通知作用
- name: start service service: name=httpd state=started enab led=yes handlers:#這個是觸發器 - name: restart service service: name=httpd state=restarted

 ·playbook中的tags使用(創建標簽)

 

---
- hosts: websrvs
  remote_ user: root

  tasks :
     - name: install httpd package
       yum: name=httpd
     - name: copy conf file 
       copy: src=files/httpd. conf de st=/etc/httpd/conf/ backup=yes
       notify: 
      - restart service#起到通知作用
       tags: inshttpd#創建便簽,可以通過名字調用上面的內容
     - name: start service
       service: name=httpd state=started enab led=yes
  handlers:#這個是觸發器
     - name: restart service
       service: name=httpd state=restarted

 

···可以通過調用標簽單獨執行角色里面的內容···

ansible-playbook -t inshttpd httpd.yml#-t是指定要執行的標簽,多個標簽用逗號隔開,多個標簽可以定義一樣的名字

playbook中的變量

  變量名:僅能由字母、數字和下划線組成,且只能以字母開頭

  變量來源:

    1.ansible setup facts 遠程主機的所有變量都可以直接調用

    2.在/etc/ansible/hosts中定義

      普通變量:主機組中的主機單獨定義,優先級高於公共變量

      公共組變量:針對主機組中所有主機定義統一變量

[webserver]
192.168.157.1
192.168.157.2 hosts1=25#普通變量
[webserver:vars]#定義組變量
nodname=www
dom=magendu.com

    3.通過命令行執行指定變量,優先級最高 

---
- hosts: websrvs
  remote_ user: root

  tasks :
     - name: install httpd package yum: name={{變量}}
     - name: start service service: name={{變量}} state=started enabled=yes
ansible-playbook -e '變量=httpd' http.yml#多個變量執行時,用空格隔開

    4.在playbook中定義

    vars:

    - var1:value1

    - var2:value2

---
- hosts: websrvs
  remote_ user: root
  vars:
     - pkname1: httpd
     - pkname1: vsftp

  tasks :
     - name: install httpd package
       yum: name={{pkname1}}
     - name: start service
       service: name={{pkname2}} state=started enabled=yes

    5.在role中定義

    6.可以在一個文件中定義許多變量

vim vasr.yml
var1: httpd
var2: vsftp

在使用的時候需要指定

---
- hosts: 10.6.12.56
  remote_user: root
  vars_files: 
      - vars.yml

  tasks:
     - name:install package
       yum: name={{ var1 }}

模板templates

·文本文件,嵌套由有腳本(使用模板編程語言編寫)

·jinja2語言,使用字面量,有下面形式

  字符串:使用單引號或雙引號

  數字:整數,浮點數

  列表:[item1,item2,。。。]

  元組:(item1,item2,。。。)

  字典:{item1,item2,。。。}

  布爾型:true/false

·算數運算:+,-,*,/,//,%,**

·比較操作:==,!=,>,>=,<,<=

·邏輯運算:and,or,not

·流表達式:For If When

·在選取文件當模板的時候需要改名,一般以j2當文件后綴,並將文件放在templates文件目錄下

  以管理nginx為例

---
- hosts: 10.6.12.53
  renout_user: root

  tasks:
     - name:  install package
        yum: name=nginx
     - name: copy template
        templates:  src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
     - name: start service
       service: name=nignx start=stared enabled=yse

when

  條件測試:如果需要根據變量,facts或此前任務的執行結果來作為某task執行與否的前提時要用到條件測試,通過when語句實現,在task中使用,jinja2的語法式。

·when語句

·在task后添加wen子句即可使用條件測試;when語句支持jinja2表達式語法

---
- hosts: 10.6.12.53
  renout_user: root

  tasks:
     - name:  install package
        yum: name=nginx
     - name: copy template
        templates:  src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
        when: ansible_distribution_major_version=="7"#當符合這個條件就執行上面
     - name: start service
       service: name=nignx start=stared enabled=yse


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM