Ansible loopの使い方

本サイトは広告収入およびアフィリエイト収益を受けております。

スポンサーリンク
スポンサーリンク

お疲れ様です。きざきまるおです。

今回はAnsibleのloopの使い方について解説していこうと思います。
こちらは同じコマンドを別パラメーターで何度も実行するケースでよく使いますので是非見ていってください。

それではどうぞ。

シーケンス内のloop

早速ですがまずはコード全文を書きます。

- name: loop check
  hosts: all
  gather_facts: no

  tasks:
    - name: loop check at debug
      debug:
        msg: "{{ count }} >> {{ item['number'] }}"
      loop_control:
        index_var: count
      loop:
        - number: 1
          string: A
        - number: 2
          string: B
        - number: 3
          string: C

実行結果

# ansible-playbook -i hosts loop-get-playbook.yml

PLAY [loop check] **************************************************************

TASK [loop check at debug] *****************************************************
ok: [192.168.0.2] => (item={'number': 1, 'string': 'A'}) => {
    "msg": "0 >> 1"
}
ok: [192.168.0.2] => (item={'number': 2, 'string': 'B'}) => {
    "msg": "1 >> 2"
}
ok: [192.168.0.2] => (item={'number': 3, 'string': 'C'}) => {
    "msg": "2 >> 3"
}

PLAY RECAP *********************************************************************
192.168.0.2                : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

varsセクションの情報をloopで取得

ではまたコード全文を見ていきましょう。

- name: loop check
  hosts: all
  gather_facts: no

  vars:
    check:
      - number: 1
        string: A
      - number: 2
        string: B
      - number: 3
        string: C

  tasks:
    - name: loop check at debug
      debug:
        msg: "{{ count }} >> {{ item['string'] }}"
      loop_control:
        index_var: count
      loop: "{{ check }}"

実行結果

# ansible-playbook -i hosts loop-vars-playbook.yml

PLAY [loop check] **************************************************************

TASK [loop check at debug] *****************************************************
ok: [192.168.0.2] => (item={'number': 1, 'string': 'A'}) => {
    "msg": "0 >> A"
}
ok: [192.168.0.2] => (item={'number': 2, 'string': 'B'}) => {
    "msg": "1 >> B"
}
ok: [192.168.0.2] => (item={'number': 3, 'string': 'C'}) => {
    "msg": "2 >> C"
}

PLAY RECAP *********************************************************************
192.168.0.2                : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

vars_files内データの取得

またコード全文を見てみましょう。

- name: loop check
  hosts: all
  gather_facts: no

  vars_files:
    - ./loop_check.yml

  tasks:
    - name: loop check at debug
      debug:
        msg: "{{ count }} >> {{ item['number'] }}"
      loop_control:
        index_var: count
      loop: "{{ check }}"

そしてvars_filesセクションで呼び出されているファイルは以下のような内容になってます。

check:
  - number: 1
    string: A
  - number: 2
    string: B
  - number: 3
    string: C

実行結果

# ansible-playbook -i hosts loop-file-playbook.yml

PLAY [loop check] **************************************************************

TASK [loop check at debug] *****************************************************
ok: [192.168.0.2] => (item={'number': 1, 'string': 'A'}) => {
    "msg": "0 >> 1"
}
ok: [192.168.0.2] => (item={'number': 2, 'string': 'B'}) => {
    "msg": "1 >> 2"
}
ok: [192.168.0.2] => (item={'number': 3, 'string': 'C'}) => {
    "msg": "2 >> 3"
}

PLAY RECAP *********************************************************************
192.168.0.2                : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

それではまた。

タイトルとURLをコピーしました