ansible第四篇(經典用法)

ansible- handlers用法

  • 清單配置:

    cat /etc/ansible/hosts 
    [test]
    18.18.23.102 ansible_become_pass='123.cn'
  • 配置文件配置:

    cat /etc/ansible/ansible.cfg 
    [defaults]
    inventory = /etc/ansible/hosts
  • handlers介紹和用法

    handlers是另一種'任務列表',handlers中的任務會被tasks中的任務進行調用。當tasks中的任務真正執行後,handlers中被調用的任務纔會執行。如果tasks中的任務並沒有做出真正的操作,handlers中的任務即使被調用,也並不會被執行。handlers可以有多個任務,並被tasks中不同的任務notify.

    handlers和tasks是對齊的。通過notify關鍵字通知handlers中的任務。

    所有task執行完畢後,纔會執行各個handler.

    如果在執行完某些task以後立即執行對應的handler,需要使用meta模塊。

    meta任務是一種特殊任務,meta任務可影響ansible的內部運行方式。meta:flush_handlers表示立即執行之前的task所對應handler.

  例如: cat meta.yaml 
  ---
  - hosts: test
    remote_user: yuan
    tasks:
    - name: task1
      file: 
        path: /php7/osspull
        state: touch
      notify: handler1
    - name: task2
      file: 
        path: /php7/ossupload
        state: touch
      notify: handler2

    - meta: flush_handlers

    - name: task3
      file: 
        path: /python/smtposs
        state: touch
      notify: handler3

    handlers:
    - name: handler1
      file: 
        path: /php7/video.txt
        state: touch
    - name: handler2
      file: 
        path: /php7/video2.txt
        state: touch
    - name: handler3
      file: 
        path: /python/smtpemail.txt
        state: touch

在每個task執行後立馬執行對應handlers,可以在每個任務後都添加一個meta任務,並將其值設置爲flush_handlers.

如果一次notify多個handler,需要藉助關鍵字: listen.

可將listen理解爲組名。 一次notify多個handler時,把多個handler分爲"一組",使用相同組名即可。

  例如: cat listen.yaml 
  ---
  - hosts: test
    remote_user: yuan
    tasks:
    - name: taskone
      file:
        path: /php7/wordpress.txt
        state: touch
      notify: handler group 1

    handlers:
    - name: handler1
      listen: handler group 1
      file:
        path: /php7/wp1
        state: touch
    - name: handler2
      listen: handler group 1
      file:
        path: /php7/wp2
        state: touch

tags的用法

當你想要執行一個playbook腳本其中的一部分任務時,該怎麼辦呢?
這個時候tags就派上用場了。

tags可以對任務進行"打標籤", 根據標籤,我們可以指定哪些任務可以執行,哪些任務不執行。

例如:

  cat tags.yaml 
  ---
  - hosts: test
    remote_user: yuan
    tasks:
    - name: one
      file:
        path: /dockerfile/alpine-nginx
        state: directory
      tags: a1
    - name: two
      file: 
        path: /dockerfile/alpine-mysql
        state: directory
      tags: a2
    - name: three
      file:
        path: /dockerfile/alpine-python
        state: directory
      tags: a3

只執行a2的任務:
ansible-playbook -S -R root --tags=a2 tags.yaml

ansible第四篇(經典用法)

使用--tags選項指定某個標籤,當指定標籤後,標籤對應的任務就會被執行,其他任務則不會被執行。

也可以使用--skip-tags選項指定"不執行的任務".

可以爲每個任務添加多個標籤。如果不同的多個任務之間有關聯性,也可以使用相同的標籤。

語法示例:

  語法1:
  tags:
    - n1
    - nginx
  語法2:
  tags: n1,nginx

調用標籤時,可一次性指定多個標籤,調用多個標籤用逗號隔開。

查看tags.yaml中有哪些標籤,執行:
ansible-playbook -S -R root --list-tags tags.yaml
ansible第四篇(經典用法)

  • ansible預置的5個特殊tag

    • always : 這個任務總是會被執行。
    • never : 這個任務從不執行。
    • tagged: 表示只執行有標籤的任務。
    • untagged : 表示只執行沒有標籤的任務。
    • all : 表示所有任務會被執行,默認標籤.不用指定。

    如果多個任務的tags標籤的值中,存在always關鍵字,會執行所有有always關鍵字對應的任務。

    不執行標籤中包含always的任務,可以使用--skip-tags選項跳過。
    例如:

    該命令跳過所有包含always關鍵字的任務:
    ansible-playbook -S -R root --skip-tags always tags.yaml
    
    只執行有標籤的任務:
    ansible-playbook -S -R root --tags tagged tags.yaml
    
    跳過包含標籤和always關鍵字的任務:
    ansible-playbook -S -R root --skip-tags tagged tags.yaml
    
    只執行沒有標籤的任務,若包含always關鍵字,任務也會執行:
    ansible-playbook -S -R root --tags untagged tags.yaml
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章