ウェブサイト検索

Ansibleにおける静的および動的インベントリの使用方法 - パート4


Ansibleシリーズのパート4では、Ansibleでホストのグループを定義するために、静的および動的インベントリの使用方法を説明します。

Ansibleでは、Ansibleコントロールノードによって制御される管理ホストまたはサーバーは、ホストインベントリファイルに定義されています。ホストインベントリファイルは、管理ホストまたはリモートサーバーのホスト名またはIPアドレスから成るテキストファイルです。

管理されたホストは、個別のエントリとしてリストされるか、後で見るようにグループ名の下で分類されることができます。Ansible には、静的ファイルと動的ファイルの2種類のインベントリファイルがあります。

これらのそれぞれを見て、どのように管理できるか見てみましょう。今の時点で、すでに制御ノードにAnsibleをインストールし、管理対象ホストへのパスワードなしSSH接続を設定していることを前提としています。

静的ホスト在庫ファイル

Ansibleでは、静的インベントリファイルは、ホスト名またはIPアドレスを使用してホストグループの下に宣言された管理対象ホストのリストを含むプレーンテキストファイルです。

ホストグループ名は角括弧で囲まれています、すなわち [グループ名] 。管理されたホストのエントリは、グループ名の下にリストされ、それぞれが独自の行にあります。以前に話したように、ホストはホスト名またはIPアドレスのいずれかを使用してリストされます。

[group name]

Host A ip_address 
Host B ip_address
Host c ip_address

例のために、静的な在庫ファイルを作成します。

# mkdir test_lab && cd test_lab
vim hosts
[webservers]
173.82.115.165

[database_servers]
173.82.220.239

[datacenter:children]
webservers
database_servers

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

上記のインベントリファイルに示されているように、webserversとdatabase_serversの2つのホストグループを作成しました。また、上記に示されているように、': children'という接尾辞で示されるホストグループのグループを含むdatacenterという追加のグループも作成しました。

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

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

173.82.202.239
172.82.115.165
load_balancer.pnl.com

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

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

例えば、

$ ansible all -i /root/test_labs/hosts --list-hosts

あるいは、ワイルドカード文字*を使用して‘all’引数を置き換えることもできます。

$ ansible * -i /root/test_labs/hosts --list-hosts

ホストグループの代わりにホストパターンを指定することで、グループ内のホストを一覧表示できます。

$ ansible webservers -i /root/test_labs/hosts --list-hosts

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

特にAWSのようなクラウド設定では、インベントリファイルがサーバーの追加や廃止に伴って常に変化しているため、インベントリファイルに定義されたホストを管理することが本当に難しくなります。ホストファイルに戻ってIPアドレスでホストのリストを更新するのが不便になります。

そして、ここで動的インベントリが登場します。では、動的インベントリとは何でしょうか?動的インベントリとは、Python、PHP、または他のプログラミング言語で書かれたスクリプトのことです。これは、AWSのようなクラウド環境で役立ちます。なぜなら、仮想サーバーが停止されたり再起動されたりするとIPアドレスが変わるからです。

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

動的在庫の利点は何ですか?
  • 動的インベントリは、スクリプトを使用して情報を収集することで人為的なエラーを完璧に減少させます。
  • 在庫管理には最小限の努力が必要です。

お好きなプログラミング言語で、カスタマイズ可能なダイナミックインベントリを作成できます。インベントリは、適切なオプションが渡されたときにJSON形式で返す必要があります。

既存の動的在庫スクリプトを利用する

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

動的インベントリスクリプト内のホストに関する情報を取得するには、単に実行してください。

# ./script --list 

前に指摘したように、出力は以下の形式のJSONである必要があります。

グループ(つまり、ウェブサーバー、データベースサーバー)を含む辞書
  • グループごとの管理されたホストのリスト
  • 変数の辞書
メタ辞書
  • ホストとホスト変数
サンプル出力
{
  "webservers": {
    "hosts": [
      "webserver1.example.com",
      "webserver2.example.com"
    ],
    "vars": {}
  },
  "database_servers": {
    "hosts": [
      "mysql_db1",
      "mysql_db2"
    ],
    "vars": {}
  },
  "_meta": {
    "hostvars": {
      "mysql_db2": {},
      "webserver2.example.com": {},
      "webserver1.example.com": {}, 
      "mysql_db1": {}
    }
  }
}
結論

この記事では、静的および動的インベントリの作成方法を示しました。まとめると、静的インベントリファイルは、管理対象ホストやリモートノードのリストを含むプレーンテキストファイルであり、その数とIPアドレスは比較的変わらないことが特徴です。

一方、動的ホストファイルは、新しいホストを追加したり古いホストを廃止したりするにつれて変化し続けます。ホストのIPアドレスも動的で、新しいホストシステムを停止したり開始したりすると変わります。このチュートリアルが有益であったことを願っています。

関連記事: