概要
インベントリの定義や基礎的な使用方法についてメモします。
インベントリは以下のいずれかでターゲットノードの接続情報を定義します。
- 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