変数の種類を知る(Ansible)

課題

Ansibleには様々な種類の変数があって、状況によってどの変数を利用するべきかわからない。

解決策

以下に整理する。

参照範囲の観点での概観

種類 説明 変数例
Global領域の変数 Ansible実行の全体に対して定義される変数。プレイブックのどこからでも参照することが可能 環境変数 / エクストラ変数
Play単位の変数 個々のプレイ内で定義される変数。プレイ内で参照する場合に利用 プレイ変数 / タスク変数 / ロール変数 / マジック変数
Host単位の変数 各ターゲットノードに関連付ける変数。そのホストを対象とする インベントリ変数 / レジスタ変数 / ファクト変数

各変数の説明

エクストラ変数(extra variables)

コマンドラインから指定できる変数のこと。 具体的には ansible-playback コマンドに「-e」(--extra-vars)オプションを付けることによって定義できる。

環境変数(environment variables)

environment ディレクティブを利用して定義する変数のこと。 Ansibleを利用する際の環境変数であり、LANG、PATH、SHELL等が ansible_envに構成されている。

プレイ変数(play variables)

個々のプレイ内で定義される変数。 Vars セクションで指定した「vars」「vars_files」「vars_prompt」などが含まれる。 「vars」ディレクティブだけはタスク(tasks)やロール(roles)、ブロック(blocks)内でも利用できる。 これらはそれぞれ定義する場所によって名前が変わる(i.e. タスク変数、ロール変数、ブロック変数)。

マジック変数(magic variables)

Ansible による定義済みの変数。 主にインベントリに記載された情報や、Ansibleの環境情報を定義している。 基本的に変更することはできない。

インベントリ変数(inventory variables)

インベントリ内で定義される変数。 ターゲットノートごとに指定するホスト変数と、グループ全体に指定するグループ変数がある。

レジスタ変数(registered variables)

タスクの実行結果の戻り値を格納するための変数。 各タスク内に register ディレクティブを用意し、その後ろに変数名を定義することによって、タスクの戻り値をマッピング形式で格納できる。

ファクト変数(host facts)

ターゲットノードのシステム情報が格納されている変数。 Ansible はタスクを実行する前に、ファクトと呼ばれるシステム情報を各ターゲットノードから取得し、「ansible_facts」という変数名に格納している。

所感

それぞれの変数には適した役割があるため、この役割に沿わない利用方法をする変数が存在すると、運用・保守が困難になる。 あらかじめ定義方法の方針等は検討しておきたい。

参考