ゆるい感じのプログラムを書きたい。

プログラムの敷居を下げて、多くの人が開発出来るように色々書いていきます!

【インベントリー概要】構築方法 2章:変数の追加

インベントリーへの変数追加

特定のホストまたはグループに関連する変数の値をイベントリーに保存できます。
メインのイベントリーファイルのホスト及びグループに変数を直接追加することが出来ます。
管理ノードをAnsibleイベントリーに追加するため、変数を別々のホスト変数およびグループ変数のファイルに保存することが推奨されます。


2.あるマシンへの変数の割り当て:ホスト変数

1台のホスト変数を簡単に割り当てると、後でPlaybookで使用できます。 INIの場合は、以下のようになります。

[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909

YAMLの場合は、以下のようになります。

atlanta:
  host1:
    http_port: 80
    maxRequestsPerChild: 808
  host2:
    http_port: 303
    maxRequestsPerChild: 909

非標準のSSHポートなどの一意な値は、ホスト変数として機能します。
コロンを使用してポート番号をホスト名の後に追加することで、ホスト変数としてAnsibleイベントリーに追加できます。

badwolf.example.com:5309

接続数もホスト変数として機能します。

[targets]

localhost              ansible_connection=local
other1.example.com     ansible_connection=ssh        ansible_user=myuser
other2.example.com     ansible_connection=ssh        ansible_user=myotheruser

Note SSH設定ファイル内に非標準のSSHポートの一覧を表示した場合、openssh接続はそのポートを見つけて使用しますが、paramiko接続は行われません


2−1.インベントリーエイリアス

エイリアスをインベントリーに定義することも出来ます。
INIの場合は、以下のようになります。

jumper ansible_port=5555 ansible_host=192.0.2.50

YAMLの場合は、以下のようになります。

...
  hosts:
    jumper:
      ansible_port:5555
      ansible_host:192.0.2.50

上記の例では、ホストエイリアス「Jumper」に対してAnsibleを実行すると、ポート5555で192.0.2.50に接続します。
これは、静的IPがあるホスト、またはトンネル経由で接続しているホストでのみ機能します。

Note

key-value構文をしようしてINI形式で渡される値が解釈される方法は、宣言される場所に応じて異なります。

・ホストとインラインで宣言すると、INI値はPythonリテラル構造(文字列、数値、リスト、辞書、プール値、なし)として解釈されます。  ホスト業は、行ごとに複数のkey=valueパラメータを受け入れます。  そのため、空白文字を区切り文字ではなく値の一部であることを示す方法が必要になります。

:varsセクションで宣言すると、INI値は文字列として解釈されます。  例えば、var=FALSEは「FALSE」に等しい文字列を作成します。  ホスト行とは異なり、:varsセクションは行ごとにエントリーを1つしか受け入れないため、=に続くものはすべてエントリーの値である必要があります。

・INIイベントリーに設定された変数の値を特定のタイプ(文字列やプール値など)にする必要がある場合は、タスクで常にそのタイプをフィルターで指定します。  変数の使用時にINIインベントリーに設定されたタイプに依存しないでください

・変数の実際のタイプの混乱を避けるために、インベントリーソースにはYAML形式を使用することを検討してください。   YAMLイベントリープラグインは、変数の値を一貫して正しく処理します。

通常は、システムポリシーを記述する変数を定義するのが最適な方法ではありません。
メインのイベントリーファイルで変数を設定するのは簡単な方法です。
「hosts_vars」ディレクトリーの個別ファイルに変数の値を保存するガイドラインホスト変数とグループ変数の整理を参照してください。


3.多くのマシンへの変数の割り当て:グループ変数

グループのすべてのホストが変数値を共有している場合は、その変数をグループ全体に一度に適用できます。 INIの場合は以下のようになります。

[atlanta]
host1
host2

[atlanta:vars]
ntp_server=ntp.atlanta.example.com
proxy=proxy.atlanta.example.com

YAMLの場合は、以下のようになります。

atlanta:
  hosts:
    host1:
    host2:
  vars:
    ntp_server: ntp.atlanta.example.com
    proxy: proxy.atlanta.example.com

グループ変数は、変数を複数のホストに当時に適用する場合に便利

ただし、Ansibleを実行する前に、イベントリー変数などの変数は常にホストレベルにフラットにします。
ホストが複数グループのメンバーである場合、Ansibleは、そのすべてのグループからヘンスの値を読み取ります。
異なるグループ内の同じ変数に異なる値を割り当てる場合、Ansibleは内部のマージ用ルールに基づいて、使用する値を選択します。


4.変数値の継承:グループのグループ用グループ変数

INIの:children接尾辞またはYAMLchildren:エントリーを使用して、グループのグループ作成できます。
変数は、:varsまたはvars:を使用して、これらのグループのグループに適用できます。

INIの場合は、以下のようになります。

[atlanta]
host1
host2

[raleigh]
host2
host3

[southeast:children]
atlanta
raleigh

[southeast:vars]
some_server=foo.southeast.example.com
halon_system_timeout=30
self_destruct_countdown=60
escape_pods=2

[usa:children]
southeast
northeast
southwest
northwest

YAMLの場合は、以下のようになります。

all:
  children:
    usa:
      children:
        southeast:
          children:
            atlanta:
              hosts:
                host1:
                host2:
            raleigh:
              hosts:
                host2:
                host3:
          vars:
            some_server: foo.southeast.example.com
            halon_system_timeout: 30
            self_destruct_countdown: 60
            escape_pods: 2
        northeast:
        northwest:
        southwest:

一覧またはハッシュデータを保持する必要がある場合や
イベントリーファイルとは別にホスト及びグループ固有の変数を保持する必要がある場合
ホスト変数とグループ変数の整理を参照してください

  • 子グループのメンバーであるホストは、自動的に親グループのメンバーになります。
  • 子グループの変数は、親グループの変数よりも優先度が高くなります(オーバライド)
  • グループに複数の親と子を追加することは出来ますが、循環関係は設定できません。
  • ホストは複数のグループに属することもできますが、ホストのインスタンスは1つだけであり、複数のグループからのデータをマージします。