GAGA LIFE.

インフラエンジニアブログ

スポンサーリンク

Ansible インベントリ

概要

インベントリの定義や基礎的な使用方法についてメモします。
インベントリは以下のいずれかでターゲットノードの接続情報を定義します。
- INI形式
- YAML形式
デフォルトのインベントリは、「/etc/ansible/hosts」が利用されます。
カスタマイズしたインベントリを利用する場合は、ansibleコマンド、
もしくはansible-playbookコマンド実行時にインベントリパスを明示的に指定(オプション「-i」)します。

ホストのグループ化

同様の設定を実行するサーバー群をグルーピングしておくことによって、グループ化されたターゲットノードに対して、同一の処理を実施可能です。
- グループ定義:"[]"でグループ名を囲む
- その下にIPアドレス・ホスト名を列挙
- グループには階層を付けることが可能
- 上位グループは"[グループ:children]"を表記後下位グループを記述する
上記により、個々のグループに処理を実施せずとも複数のグループ全体に処理を実施することも可能になります。
なお、各ターゲットノードは暗黙的に[all]グループに属します。

インベントリグループの例

例) group_inventory.ini

[web_servers]    ## Group Name
192.168.3.[8.10] ## Target Node

[oracle]
oracle122
oracle181

[mysql]
mysql-[a:d]      ## mysql-a, mysql-b, mysql-c, mysql-d

[db_servers:children]  ## oracle,mysqlの上位グループ
oracle
mysql

ホスト変数/グループ変数

インベントリ変数:各ノードやグループに対する固有の変数定義が可能。
以下のような状況の場合にはインベントリ変数の利用を考えます。
- 環境によって接続ユーザーや接続方法が異なる場合
- 特定のホストに対して固有の環境情報を指定したい場合
指定対象によって、以下の通り名称が分かれます。

Name Description
Host Variables ターゲットノード固有に適用される変数。インベントリではターゲットノードの後ろに定義する
Group Variables グループ全体に適用される変数。インベントリでは"[グループ名:vars]"というセクションを作成し、その下に変数を列挙する

インベントリ変数の例

var_inventory.ini

[web_servers]
192.168.3.[8:10]

[oracle]
oracle122 ansible_host=192.168.3.100  ##[ホスト変数]oracle122のSSH接続IP
oracle181 ansible_host=192.168.3.101  ##[ホスト変数]oracle181のSSH接続IP

[mysql]
mysql-[a:d]

[db_servers:children]
oracle
mysql

[web_server:vars]
http_port=8080    ##[グループ変数]"http_port"の設定

[all:vars]
ansible_port=1022 ##[グループ変数]すべてのサーバーのSSH接続ポート
ansible_user=ansible  ##[グループ変数]SSH接続ユーザー

ホスト変数/グループ変数には、以下が存在します。
- ユーザー定義変数:ユーザーが固有に設定可能 - 接続変数(Behaviral Inventory Parameters):ターゲットノードへの接続を制御する

接続変数

Category Variables Default Description
ターゲットノード接続 ansible_connection smart Connectionプラグインを利用したターゲットノードへの接続方法を設定する。SSHを利用しない、[local]や「docker」接続に変更可能
SSH接続 ansible_host - ターゲットノードの名前やエイリアス名を設定する
SSH接続 ansible_port 22 ターゲットノードのSSHポートを設定する
SSH接続 ansible_user コマンド実行ユーザー SSH接続するユーザー名を設定する
SSH接続 ansible_ssh_pass - SSHパスワード認証のパスフレーズを設定する
Private設定 ansible_become false 特権実行を行うかどうかを設定する
Private設定 ansiblebecome_user - タスクを実行する特権ユーザーを設定する
Private設定 ansible_become_pass - 特権ユーザーになるためのパスフレーズを設定する
ターゲットノード環境 ansible_shell_type sh ターゲットノードのShellのタイプを選択する
ターゲットノード環境 ansible_python_interpreter /usr/bin/python ターゲットノードのPythonのパスを指定する

インベントリ変数のファイル分割

インベントリの中で定義していたホスト変数やグループ変数はYAMLファイルに分割可能です。
これにより、INI形式で起債されたインベントリにはターゲットノードを起債し、ターゲットノードごとの変数はYAMLファイルにまとめることが可能です。
動的に読み込みを行うためには指定のディレクトリ構造とファイルの命名規則に則って定義する必要があります。

インベントリ変数のディレクトリ構造

Name Description
グループ変数 group_varsというディレクトリ配下に「group_vars/<グループ名>.yml」または「group_vars/<グループ名>/XXX.yml」という名前でYAMLを配置
ホスト変数 host_varsというディレクトリ配下に「group_vars/<ホスト>.yml」または「group_vars/<ホスト名/XXX.yml>」という名前でYAMLファイルを配置

インベントリの例

inventory.ini

[web_servers]   ## グループ名
192.168.3.[1-3] ## 192.168.3.1 ~ 192.168.3.3

[db_servers]    ## グループ名
mysql-[a-c]     ## mysql-a, mysql-b, mysql-c

スポンサーリンク