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 }}" # 後続タスクでも使える
-
-
-
-
-