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 内で変数を定義するよりも、グループ変数やホスト変数で定義していた方が、メンテナンスがしやすいと思います。