loop 迴圈

  1. ansible 2.5 前使用 with_* 關鍵字,例如 with_items 來運作迴圈。ansible 2.6 版後官方推薦 loop 關鍵字代替 with_*,一般而言,關鍵字 with_* 大多可用 loop 代替,兩者差異及迴圈詳細用法請參考 ansible 官方文件。
  2. loop 類似程式的 for 迴圈,腳本 deploy2.yml,在 dev 群組主機安裝套件,套件名稱變數 item,此為 loop 迴圈的預設變數,loop 迴圈列出 php 及 mariadb 兩個套件。
    [deyu1@kvm19 ansible]$ vim deploy2.yml
    [deyu1@kvm19 ansible]$ cat deploy2.yml
    ---
    - hosts: dev
      tasks:
      - name: install package
        yum: pkg={{item}} state=latest
        loop:
        - php
        - mariadb
    
  3. 命令列使用 ansible-playbook 執行 deploy2.xml 腳本,回傳 php 已經安裝,mariadb 成功安裝。
    [deyu1@kvm19 ansible]$ ansible-playbook deploy2.yml
    
    PLAY [dev] *********************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [kvm11]
    
    TASK [install package] *********************************************************
    ok: [kvm11] => (item=php)
    changed: [kvm11] => (item=mariadb)
    
    PLAY RECAP *********************************************************************
    kvm11 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
    
  4. deploy2.yml 使用 loop 提供 yum 安裝套件名稱,每個套件安裝都獨立執行 yum。目前的 ansible 版本建議改用 yum 模組內建的 name,一次指定多個套件,如下 deploy2a.yml。
    [deyu1@kvm19 ansible]$ cat deploy2a.yml
    ---
    - hosts: dev
      user: root
      tasks:
      - name: install package
        yum:
          name:
          - php
          - mariadb
          state: latest
    
  5. 命令列使用 ansible-playbook 執行 deploy2a.xml 腳本,回傳 php 已經安裝,mariadb 成功安裝。
    [deyu1@kvm19 ansible]$ ansible-playbook deploy2a.yml 
    
    PLAY [dev] *********************************************************************
    
    TASK [Gathering Facts] *********************************************************
    ok: [kvm11]
    
    TASK [install package] *********************************************************
    ok: [kvm11]
    
    PLAY RECAP *********************************************************************
    kvm11 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0