Ansible: おすすめディレクトリ構造・変数の設定

Ansible でサーバーを管理する場合の、Ansible Controller 側のディレクトリ構造や、変数の設定について、管理や運用の面からおすすめする方法を説明します。

下の図のように、複数の管理対象サーバー (Target) と、それをまとめた複数のグループを管理する場合についての内容です。

ディレクトリ構造

結論から言うと、ディレクトリ構造は下記のようにします。

プロジェクトのディレクトリを作成し、プロジェクトごとに ansible.cfg と inventory ファイルを作成するのがおすすめです。

各ディレクトリ、ファイルの説明

ansible.cfg ファイル

Ansible の設定ファイルで複数の場所に置かれます。優先順位は高い方から下記のとおりで、最初に見つかったファイルの内容が適用されます。
 1. 環境変数 ANSIBLE_CONFIG で定義されたパス (定義されている場合)
 2. ansible コマンドが実行されたディレクトリにある ansible.cfg
 3. /home/[ユーザー]/.ansible.cfg
 4. /etc/ansible/ansible.cfg
 5. Ansible で定義されたデフォルト値
/etc/ansible/ansible.cfg を各プロジェクト ディレクトリにコピーし、上記の2を適用するのがおすすめです。

ただしansible-core 2.11以降の場合は、下記のコマンドを実行して、ansible.cfgのテンプレートを作成します。

ansible-config init --disabled > ansible.cfg

Pluginの設定もすべて含めたテンプレートを作成する場合は下記のコマンドです。

ansible-config init --disabled -t all > ansible.cfg


ansible.cfg

 ・
 ・
 ・
[default]
inventory = inventory
 ・
 ・
 ・

inventory ファイル

inventory ファイルの場所は、ansible.cfg で定義します。
inventory ファイルでは、下記のように、どのサーバーがどのグループに属するかをの定義をします。
inventory ファイル内に変数を定義することもできますが、メンテナンス性の観点から、ここではなく、この後のグループ変数やホスト変数で定義することをおすすめします。

inventory

[group01]
192.168.1.1
192.168.1.2

[group02]
192.168.1.3
192.168.1.4

group_vars/<グループ名> ファイル

group_vars ディレクトリ (名前は固定) の下の [グループ名] ファイルでは、そのグループのみに適用される変数 (グループ変数) を定義します。

host_vars/<ホスト名 or IP アドレス> ファイル

host_vars ディレクトリ (名前は固定) の下の [ホスト名 or IP アドレス] ファイルでは、そのホストのみに適用される変数 (ホスト変数) を定義します。

test_playbook.yml ファイル

このプロジェクトで実行する Playbook です。group_vars や host_vars で定義された変数を使用可能です。

Target への接続方法の定義

Target への接続方法の定義は、グループ変数かホスト変数で、次のように定義します。

ansible_user: Administrator
ansible_password: password
ansible_connection: winrm
ansible_winrm_transport: credssp
ansible_winrm_server_cert_validation: ignore

変数の詳細は、公式ページを参照してください。
>> https://docs.ansible.com/ansible/2.9_ja/user_guide/windows_winrm.html#id2

まとめ

inventory ファイルをプロジェクトごとに分ける方が管理しやすいため、それを定義する ansible.cfg もプロジェクトごとに作成しています。
また、Playbook 内で変数を定義するよりも、グループ変数やホスト変数で定義していた方が、メンテナンスがしやすいと思います。