Ansible-playbookのwith_itemsでblock内をまとめて回したい
立ちはだかった壁
普段 ansibleAWX を使用して環境構築することが多いです。
ある日のこと「with_itemsをblock全体に適用っと。」思ったがダメだった。
どうやらblockに対してwith_itemsは指定できないらしい。
# main.yml(動きそうだが動かない) --- name: ユーザ作って云々 block: - name: userグループ作成 group: name: "{{ item.name }}" gid: "{{ item.gid }}" - name: user作成 user: name: "{{ item.name }}" uid: "{{ item.uid }}" groups: "{{ item.gid }},wheel" password: "{{ item.pw | password_hash('sha512') }}" update_password: on_create generate_ssh_key: yes - name: 貼付用ユーザ鍵テキスト取得 shell: "cat /home/{{ item.name }}/.ssh/id_rsa.pub" register: key_text - name: 鍵で云々 shell: "echo {{ key_text }}" with_items: - { name: "admin_a", uid: "1001", gid: "1001", pw: "password" } - { name: "admin_b", uid: "1002", gid: "1002", pw: "password" }
解決策
with_itemsで繰り返し実行する内容を別ファイルに切り出します。
切り出したファイルをincludeで呼び出せば無事解決!
with_items毎にregisterを生成したい場合も対応可能という、素晴らしい。
# main.yml --- - name: ユーザ作って云々 include: user_create.yml with_items: - { name: "admin_a", uid: "1001", gid: "1001", pw: "password" } - { name: "admin_b", uid: "1002", gid: "1002", pw: "password" } loop_control: loop_var: user
# user_create.yml --- - name: userグループ作成 group: name: "{{ user.name }}" gid: "{{ user.gid }}" - name: user作成 user: name: "{{ user.name }}" uid: "{{ user.uid }}" groups: "{{ user.gid }},wheel" password: "{{ user.pw | password_hash('sha512') }}" update_password: on_create generate_ssh_key: yes - name: 貼付用ユーザ鍵テキスト取得 shell: "cat /home/{{ user.name }}/.ssh/id_rsa.pub" register: key_text - name: 鍵で云々 shell: "echo {{ key_text }}"
終わりに
ansibleさん、
block+with_itemsが実現できる日をお待ちしております。