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_itemsloop のループ変数

            • register で得られた一時変数(ただしHostスコープに昇格する場合あり)

          • 特徴

            • ループ変数 (item) や ansible_facts など、タスク終了後には原則再利用しない想定。

            • register はホストスコープに格納されるため、タスク後も参照可能(やや例外)。

              - hosts: all
                tasks:
                  - shell: "echo Hello"
                    register: result   # Hostスコープに保存
                  - debug:
                      msg: "{{ result.stdout }}"   # 後続タスクでも使える
              

               

Ansible

Posted by arkgame