# 2. インベントリ の作成

# インベントリとは何か?

Ansibleを実行する為にはまずインベントリを作成しなければなりません。 では、Ansibleインベントリとはなんでしょうか。

Ansibleのインベントリは、管理対象のノード(ホスト)のリストまたはリストのグループです。 インベントリを使用することで、複数のホストに対して同時にタスクを実行できます。 インベントリは、静的ファイルとして定義することも、動的に生成することも可能です。

インベントリでは管理ホストをグループに割り当てることが可能なほか グループは子グループを含むことも可能で、ホストは複数のグループのメンバーになることができます。 また、インベントリでは、それが定義するホストとグループに適用される、変数の設定も行います。

# インベントリを作成する

では、実際に Inventory ファイルと呼ばれる物を作成します。 Ansible において、Inventory ファイルは対象を示していて実行に欠かせない要素です。

教材 (opens new window)のフォルダには ansible フォルダの配下にインベントリファイルを置くためのフォルダ(inventories)があります。 試しに開いてみましょう。

Ansible の Inventory ファイルは INI 形式に近い記述によって作成されます。 インベントリファイルの括弧内の見出し([app]など)はグループ名を表し、 ホストをグルーピングすることができます。 なお、[]に属さないホストはデフォルトであるallグループに属することになります。

# [演習]インベントリの作成

では、実際にインベントリファイルを作成してみましょう。 hosts というファイルを作成し host00, host01 を追加します。 グループ名はexerciseとして下さい。

  • inventoryファイルを作成する
    vi hosts
    
    1
  • 記載内容
    [exercise]
    host00
    host01
    
    1
    2
    3
  • インベントリの動作確認
    • 先ほど作成したインベントリが正しいことを確かめるために、ansibleコマンドで ping モジュールを実行してみます。 コマンドと実行結果は下記のようになるはずです。
      ansible -i hosts exercise -m ping -k
      
      1
    • パスワードを聞かれるため事前準備で設定したパスワード(ansible)を入力します
  • 出力結果
    host01 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    host00 | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/bin/python"
        },
        "changed": false,
        "ping": "pong"
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14

正しく実行されれば SUCCESS と出力されます。

# [発展演習] 不要エントリのコメントアウト

# 想定シナリオ

先ほど作ったインベントリファイルですが、こんなケースは考えられないでしょうか。 あるプロジェクトで、インベントリファイルに不要なホストエントリが含まれていることが判明しました。 これらのホストは現在使用されておらず、誤ってタスクが実行されるのを防ぐためにコメントアウトする必要があります。

デプロイの対象から特定のホストを除外するのはエントリを削除すれば良いのですが 一時的な除外のためにエントリを削除してしまったのでは、元に戻すときに苦労してします。 従って、そのような時のためにコメントアウトによる除外を試してみましょう。

  • インベントリファイルの確認:
    • 現在のインベントリファイルを確認し、不要なホストエントリを特定します。
      [exercise]
      host00
      host01
      
      1
      2
      3
  • 不要なホストエントリをコメントアウトします。
    [exercise]
    host00
    # host01
    
    1
    2
    3
  • コメントアウトしたホストが正しく実行対象から外れていることを確認します。
    • 以下のコマンドを使用して、インベントリの内容を確認します。
      ansible-inventory --list -i hosts
      
      1
  • 出力結果に host01 が含まれていないことを確認します。

# [発展演習] インベントリを YAML で書く

Ansible のターゲットホストの情報を定義するインベントリファイルは、INI 形式の他にも YAML 形式でも定義できす。

先ほど利用した INI 形式の Inventory ファイルを YAML 形式で記述すると以下の通りになります。 YAML 形式で記述すると全てのグループがallグループの配下にあることが分かります。

all:
  children:
    exercise:
      hosts:
        host00:
        host01:
1
2
3
4
5
6

なお、YAML書式についてはiniファイルのインベントリファイルがあれば以下のようなコマンドで作成することが可能です

ansible-inventory -i inventories/hosts --list -y
1