LoginSignup
6
7

More than 5 years have passed since last update.

【Ansible】一連の処理をループ (loop_control)

Last updated at Posted at 2016-09-23

ひとまとめの処理をループする

ことのはじまり

開発サーバに、開発環境を、開発ユーザ分だけ整える、というロールを構築する機会があったのですが、
ユーザごとに、一連の処理をループしたいな。。。
でもwith_itemsたくさん書くのもやだし、registerとか使うとごちゃごちゃになるなぁ。。。

とか、変に悩みました。
悩んだ結果、loop_controlという機能をつかうことで解決できました。

前提

  • Ansible 2
  • ベスト・プラクティスに倣い、roleを利用
  • role名はuser_envとする。

方法

Playbookのrolesには、通常通りの指定でOKです。

user_env.yml
---
- hosts: dev
  become: True
  roles:
    - user_env

はい。いつも通りですね。
こうして、roles/user_env/tasks/main.ymlが、
tasksとして自動で読み込まれるわけですが、
この、roles/user_env/tasks/main.ymlが、ループの親となります。

roles/user_env/tasks/main.yml
---
- name: ユーザごとに一連の環境設定
  include: user_env.yml
  with_items:
    - name: user_1
    - name: user_2
  loop_control:
    loop_var: user

includeには、user_env.ymlが指定されています。
これで、単純なループと同様に、with_itemsの要素分だけincludeしたtasksが実行されます。

また、loop_control下に、loop_varuserとして記述しています。
こうしておくことで、呼び出されたuser_env.ymlの内部で、ループの要素をuserとして展開できます。

roles/user_env/tasks/user_env.yml
- name: ユーザディレクトリがあるか確認
  command: ls -la chdir=/home/{{ user.name }}
  ignore_errors: True
  changed_when: False

まとめ

これで、何重にもループ処理が可能です。
やったぜ。

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7