block 區塊

  1. 當定義的任務只有符合條件的群組或主機才需要執行時,會把這部分任務定義成 block,配合 when 條件判斷,決定是否執行此 block。
  2. 腳本 deploy3.yml,在 dev 及 test 群組主機安裝套件,block 定義安裝 Development Tools 群組套件,when 內縮位置對齊 block,表示條件 test 在 group_names 時才執行 block,group_names 變數是指目前執行的主機群組。
    [deyu1@kvm19 ansible]$ vim deploy3.yml
    [deyu1@kvm19 ansible]$ cat deploy3.yml
    ---
    - hosts: dev test
      tasks:
      - name: install package
        yum: 
          name:
          - php
          - mariadb
          state: latest
      - block:
        - name: install the '@RPM Development Tools' package group
          yum:
            name: "@RPM Development Tools"
            state: present
        when: "'test' in group_names"
    
  3. 命令列使用 ansible-playbook 執行 deploy3.xml 腳本,回傳 kvm11 已安裝 php 及 mariadb,kvm12 成功安裝 php 及 mariadb。block 部分,kvm11 跳過,kvm12 成功安裝 Development Tools 群組套件。
    [deyu1@kvm19 ansible]$ ansible-playbook deploy3.yml
    
    PLAY [dev test] ****************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [kvm11]
    ok: [kvm12]
    
    TASK [install package] *********************************************************
    ok: [kvm11]
    changed: [kvm12]
    
    TASK [install the '@RPM Development Tools' package group] **********************
    skipping: [kvm11.deyu.wang]
    changed: [kvm12]
    
    PLAY RECAP *********************************************************************
    kvm11 : ok=2 changed=0 unreachable=0 failed=0 skipped=1 rescued=0 ignored=0
    kvm12 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0