inventory ファイル

2019/02/10

Ansible

 inventory ファイル

管理サーバーで管理する対象ホストの情報を記述したファイルです。基本的な構成は下記のとおりです。
  • グループ名:
  •  hosts:
  •   inventory ファイル内のホスト名:
  •    パラメータ
 1 つの inventory ファイル内に複数のグループを登録できます。グループ名は慣例的に all を使用することが多いのですが、自由につけることができます。例えば、対象ホストがすべて Web サーバーであれば web 、OS が CentOS であれば centos などです。 1 つのグループ内に対象ホストが複数の場合「 inventory ファイル内のホスト名: - パラメーター」部分を繰り返し記述します。「 inventory ファイル内のホスト名」は inventory ファイル内で対象ホストを識別するためのラベルです。そのため、実際のホスト名と異なっていても問題ありません。しかし、メンテナンスを考えると同じ名前にしておく方がよいと思います。

 パラメータ

パラメータ設定値
ansible_host対象ホストの IP アドレス、または DNS などで名前解決できる場合はホスト名
ansible_user対象ホストにログインするときのユーザーアカウント
ansible_password対象ホストにログインするときのパスワード
ansible_ssh_private_key_file鍵認証時に使用する秘密鍵ファイルのパス
ansible_python_interpreter対象ホストの python のパス名。対象ホストが python3 の場合 ansible_python_interpreter: /usr/bin/python3 と指定する

 具体例

対象ホストの情報です。
項目
ホスト名 node1.exam.local
IP アドレス 192.168.101.11
ログインアカウント root
ログインパスワード root@node1
上記情報を元に inventory ファイルに記述する内容です。
all:
  hosts:
    node1:
      ansible_host: 192.168.101.11
      ansible_user: root
      ansible_password: root@node1
ansible_host にホスト名を指定した場合です。
all:
  hosts:
    node1:
      ansible_host: node1.exam.local
      ansible_user: root
      ansible_password: root@node1

 host_vars ディレクトリ

 inventory ファイル内に 3 台の対象ホスト( node1 , node2 , node3 )を定義した例です。
all:
  hosts:
    node1:
      ansible_host: 192.168.101.11
      ansible_user: root
      ansible_password: root@node1
    node2:
      ansible_host: 192.168.101.12
      ansible_user: root
      ansible_password: root@node2
    node3:
      ansible_host: 192.168.101.13
      ansible_user: root
      ansible_password: root@node3
 Ansible では ansible_host など対象ホストのホスト変数を inventory ファイル内に記述しないことを推奨しています。このルールに従った inventory ファイルの内容です。
all:
  hosts:
    node1:
    node2:
    node3: 
inventory ファイルから押し出された ansible_host などの対象ホストごとの情報(ホスト変数で定義)の記述ルールです。
  • ansible_host などの対象ホストごとの情報は「 inventory ファイル内のホスト名.yml 」ファイルに記述する
  • ファイルは host_vars ディレクトリ内に配置する
このルールに従い次のように記述します。
■ host_vars/node1.yml
ansible_host: 192.168.101.11
ansible_user: root
ansible_password: root@node1
■ host_vars/node2.yml
ansible_host: 192.168.101.12
ansible_user: root
ansible_password: root@node2
■ host_vars/node3.yml
ansible_host: 192.168.101.13
ansible_user: root
ansible_password: root@node3
■ファイルの配置
.
├── hosts.yml
└── host_vars
      ├── node1.yml
      ├── node2.yml
      └── node3.yml

 group_vars ディレクトリ

host_vars ディレクトリの説明の最初に提示した inventory ファイルの内容です。
all:
  hosts:
    node1:
      ansible_host: 192.168.101.11
      ansible_user: root
      ansible_password: root@node1
    node2:
      ansible_host: 192.168.101.12
      ansible_user: root
      ansible_password: root@node2
    node3:
      ansible_host: 192.168.101.13
      ansible_user: root
      ansible_password: root@node3
all グループ内の 3 台の対象ホスト( node1, node2, node3 )すべてに次の定義が含まれています。
 ansible_user: root
このように 1 つのグループ内ですべての対象ホストに共通する定義の記述ルールです。
  • 1 つのグループ内ですべての対象ホストに共通する定義は「グループ名.yml 」ファイルに記述する
  • ファイルは group_vars ディレクトリ内に配置する
このルールに従い次のように記述します。
■ inventory ファイル : hosts.yml
all:
  hosts:
    node1:
      ansible_host: 192.168.101.11
      ansible_password: root@node1
    node2:
      ansible_host: 192.168.101.12
      ansible_password: root@node2
    node3:
      ansible_host: 192.168.101.13
      ansible_password: root@node3
■ group_vars/all.yml
ansible_user: root
■ファイルの配置
.
├── group_vars
│    └── all.yml
└── hosts.yml

 まとめ

inventory ファイルの書き方のルールです。
  • inventory ファイルはグループと対象ホストのホスト名( inventory ファイル内のホスト名)を記述する
  • 対象ホストごとの定義は host_vars ディレクトリ内に記述する
  • グループ内のすべての対象ホストに共通する定義は group_vars ディレクトリ内に記述する
《 ルールの適用前 》
■ inventory ファイル : hosts.yml
all:
  hosts:
    node1:
      ansible_host: 192.168.101.11
      ansible_user: root
      ansible_password: root@node1
    node2:
      ansible_host: 192.168.101.12
      ansible_user: root
      ansible_password: root@node2
    node3:
      ansible_host: 192.168.101.13
      ansible_user: root
      ansible_password: root@node3

《 ルールの適用後 》
■ inventory ファイル : hosts.yml
all:
  hosts:
    node1:
    node2:
    node3: 
■ host_vars/node1.yml
ansible_host: 192.168.101.11
ansible_password: root@node1
■ host_vars/node2.yml
ansible_host: 192.168.101.12
ansible_password: root@node2
■ host_vars/node3.yml
ansible_host: 192.168.101.13
ansible_password: root@node3
■ group_vars/all.yml
ansible_user: root
■ファイルの配置
.
├── group_vars
│    └── all.yml
├── hosts.yml
└── host_vars
      ├── node1.yml
      ├── node2.yml
      └── node3.yml

 変更履歴

2019/02/24 全体の見直し
2019/03/02  inventory ファイルの配置場所の記述を「ファイルの配置場所 = ディレクトリレイアウト」へ移動した
2019/03/02  host_vars と group_vars を追記した
2019/05/01  ansible_ssh_private_key_file を追記した
2019/05/12  ansible_python_interpreter を追記した

カテゴリー

目次

QooQ