Ansibleにおける静的および動的インベントリの使い方 – 第4回

Ansibleシリーズ第4回は、Ansibleでホストのグループを定義するために静的および動的インベントリを使用する方法を説明します。 ホストインベントリファイルは、管理対象ホストまたはリモートサーバーのホスト名またはIPアドレスからなるテキストファイルです。

管理対象ホストは、後で説明するように、個々のエントリとして一覧表示することも、グループ名の下に分類することもできます。 Ansible では、2 種類のインベントリ ファイルがあります。 Static と Dynamic です。

それぞれを見て、どのように管理するかを見てみましょう。

静的ホストインベントリファイル

Ansible では、静的インベントリファイルは、ホスト名または IP アドレスを使ってホストグループ下で宣言された管理ホストの一覧を含むプレーンテキストファイルです。 管理されるホストのエントリは、グループ名の下にそれぞれ一行で表示されます。

# mkdir test_lab && cd test_lab# vim hosts
Static Inventory File
173.82.115.165173.82.220.239webserversdatabase_servers

ファイルを保存して終了します。

上記のインベントリファイルでわかるように、Webサーバーとデータベースサーバーの2つのホストグループを作成しました。 また、上記のように ': children' サフィックスで示されるホスト グループのグループを含む datacenter というグループを追加で作成しました。

Ansible では、ホスト グループをグループ名の下に配置することもできます。 上記のインベントリ ファイルでは、webservers および database_servers グループは datacenter の下に配置されています。

NOTE: ホスト グループに管理対象ホストを配置することは必須ではありません。 例えば、ホスト名または IP アドレスを使用して、単にそれらをリストすることができます。

173.82.202.239172.82.115.165load_balancer.pnl.com

次に、ホスト・インベントリ・ファイルを参照するためにいくつかの Ansible コマンドを使用しましょう。 インベントリ管理の基本構文は次のとおりです。

$ ansible {host-pattern} -i /path/of/inventory/file --list-hosts

たとえば、

$ ansible all -i /root/test_labs/hosts --list-hosts
List Ansible Hosts

あるいは、'all' 引数をワイルドカード文字 * で置換することが可能です。

$ ansible * -i /root/test_labs/hosts --list-hosts
List Ansible Hosts Using Wildcards

グループ内のホストをリストアップするには、host-patternの代わりにホストグループを指定します。

$ ansible webservers -i /root/test_labs/hosts --list-hosts
List Ansible Hosts in Group

Dynamic Host Inventory File

構成、特にサーバーの追加や廃棄によりインベントリ ファイルが常に変化し続ける AWS などのクラウド設定では、インベントリ ファイルで定義されているホストを追跡することは非常に困難な作業となっています。 ホスト ファイルに戻って、IP アドレスのあるホストのリストを更新するのが面倒になります。 動的インベントリとは何でしょうか。 動的インベントリとは、Python、PHP、またはその他のプログラミング言語で記述されたスクリプトです。 AWS のようなクラウド環境では、仮想サーバーを一度停止して再度起動すると IP アドレスが変わるので便利です。

Ansible はすでに、Google Compute Engine、Amazon EC2 インスタンス、OpenStack、RackSpace、cobbler など、パブリック クラウド プラットフォーム向けのインベントリ スクリプトを開発しています。

静的インベントリに対する動的インベントリの利点は何ですか?
  • 動的インベントリは、スクリプトを使用して情報を収集するため、人的エラーを減らすのに完璧な仕事をします。
    Utilize an existing Dynamic Inventory Script

    Ansible が使用できるように、動的インベントリを作成するために使用するスクリプトを実行可能にする必要があります。

    動的インベントリスクリプト内のホストに関する情報を取得するには単に run.

    # ./script --list 

    前述のように、出力は以下の形式の JSON でなければなりません。

    グループからなる辞書 (すなわち.グループ (例: Web サーバー、データベース サーバー)
    • グループごとの管理対象ホストのリスト
    • 変数の辞書
    メタ辞書
    • ホストおよびホストバー
    サンプル出力
    まとめ

    この記事で、静的および動的インベントリの作成方法について実証してきました。 要約すると、静的インベントリ ファイルは、番号と IP アドレスがほぼ一定である管理対象ホストまたはリモート ノードのリストを含むプレーン テキスト ファイルです。

    一方、動的ホスト ファイルは、新しいホストを追加するか古いホストを破棄すると常に変更されます。 ホストの IP アドレスも、新しいホストシステムを停止したり起動したりすると、動的に変化します。 このチュートリアルが有益なものであったことを願っています。