Memo/Ansible/Loops

https://dexlab.net:443/pukiwiki/index.php?Memo/Ansible/Loops
 

Loops: ループ制御


Loop Control


pause: ループ毎に数秒待つ

  • playbook.yml
    - hosts: localhost
      gather_facts: false
    
      vars:
        servers:
          - server1
          - server2
    
      tasks:
        - name: create servers, pause 3s before creating next
          debug:
            msg: "{{ item }}"
          with_items: "{{ servers }}"
          loop_control:
            pause: 3

with_subelements: サブ要素でループ

  • 以下のような多重ループで、「user03」に「groups:」が無いため、通常エラーになる。
    • 「- skip_missing: True」を付けると要素が無い場合にスキップされる
  • ansible v2.7.1
  • playbook.yml
    - hosts: localhost
      gather_facts: no
      connection: local
      vars:
        - users:
            - name: user01
              groups:
                - group01
            - name: user02
              groups:
                - group01
                - group02
            - name: user03
      tasks:
        - debug:
            msg: "name={{ item.0.name }}, group={{ item.1 }}"
          with_subelements:
            - "{{ users }}"
            - groups
            - skip_missing: True
  • 実行結果
    ansible-playbook playbook.yml
    ...
    TASK [debug] ************************************************************************************************************************************
    ok: [127.0.0.1] => (item=[{u'name': u'user01'}, u'group01']) => {
        "msg": "name=user01, group=group01"
    }
    ok: [127.0.0.1] => (item=[{u'name': u'user02'}, u'group01']) => {
        "msg": "name=user02, group=group01"
    }
    ok: [127.0.0.1] => (item=[{u'name': u'user02'}, u'group02']) => {
        "msg": "name=user02, group=group02"
    }

with_fileglob: ファイル名にワイルドカードを指定してループ

localに置いた不特定のファイルをワイルドカード(*,?)を使って処理したい時に使える。 remoteのファイルは非対応。


with_nested: 複数階層ループ

  • playbook
        - name: give users access to multiple databases
          debug: var="name={{ item[0] }} priv={{ item[1] }}"
          with_nested:
            - [ 'alice', 'bob' ]
            - [ 'clientdb', 'employeedb' ]
  • 実行結果
    TASK: [give users access to multiple databases] ******************************* 
    ok: [127.0.0.1] => (item=['alice', 'clientdb']) => {
        "item": [
            "alice",
            "clientdb"
        ],
        "var": {
            "name=alice priv=clientdb": "name=alice priv=clientdb"
        }
    }
    ok: [127.0.0.1] => (item=['alice', 'employeedb']) => {
        "item": [
            "alice",
            "employeedb"
        ],
        "var": {
            "name=alice priv=employeedb": "name=alice priv=employeedb"
        }
    }
    ok: [127.0.0.1] => (item=['bob', 'clientdb']) => {
        "item": [
            "bob",
            "clientdb"
        ],
        "var": {
            "name=bob priv=clientdb": "name=bob priv=clientdb"
        }
    }
    ok: [127.0.0.1] => (item=['bob', 'employeedb']) => {
        "item": [
            "bob",
            "employeedb"
        ],
        "var": {
            "name=bob priv=employeedb": "name=bob priv=employeedb"
        }
    }

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-05 (水) 18:08:35 (13d)