Playbook内でのスコープ(Play, Host, Task)の定義方法
Play スコープ
-
範囲:その Play(
- hosts:
から始まるひとまとまり)全体。 -
影響:同じ Play 内のすべてのターゲットホストに共有される。
-
変数の定義場所の例
-
vars:
セクション(Playレベルで定義) -
vars_files:
やinclude_vars
で読み込まれた変数
-
-
特徴
-
変数はPlay開始時に全ホストに読み込まれる。
-
別のPlayに移るとスコープは切れる。
-
- hosts: webservers vars: app_version: "1.2.3" # Playスコープ tasks: - debug: msg: "Version is {{ app_version }}"
2. Host スコープ
-
範囲:1台のホストに紐づくスコープ。
-
影響:そのホストの処理中は全タスクで使える。
-
変数の定義場所の例
-
インベントリファイル (
inventory.ini
) やhost_vars/
ディレクトリ -
PlayやTaskで
set_fact
を使って定義した変数(ホスト単位で保持)
-
-
特徴
-
同じPlay内でも、ホストごとに別の値を持てる。
-
Playをまたいでも保持される(同じPlaybook実行中に限る)。
- hosts: all tasks: - set_fact: my_host_var: "{{ inventory_hostname }}_data" # Hostスコープ - debug: msg: "This host var is {{ my_host_var }}"
3. Task スコープ
-
範囲:そのタスク実行中のみ。
-
影響:タスクが終われば消える。
-
変数の定義場所の例
-
with_items
やloop
のループ変数 -
register
で得られた一時変数(ただしHostスコープに昇格する場合あり)
-
-
特徴
-
ループ変数 (
item
) やansible_facts
など、タスク終了後には原則再利用しない想定。 -
register
はホストスコープに格納されるため、タスク後も参照可能(やや例外)。- hosts: all tasks: - shell: "echo Hello" register: result # Hostスコープに保存 - debug: msg: "{{ result.stdout }}" # 後続タスクでも使える
-
-
-
-
-