Ansible Advent Calendar 2023 21 日目の記事です。
Ansible で複数ホストで構成されるサービスの構成管理をしたいとき、 ホストごとに異なる変数はどのように定義すればよいでしょうか?
ホストごとに異なる変数定義が面倒くさい!
OpenLDAP サーバーホスト 3 台構成で、そのうち 2 台をマルチプロバイダー、
1 台をコンシューマーにする例で考えます。この構成では、
ホストごとに (1) ユニークなサーバー識別番号を割り当て、
(2) どのプロバイダーから LDAP データをレプリケーションするか、
を変える必要があります。この 2 つのパラメーターを Ansible の変数
openldap_server_id
と openldap_db_providers
で指示するものとします。
愚直に考えれば、下記のように host_vars/<ホスト名>/*.yml
ごとに記述するかと思います。
少し面倒くさかったり、見通しが悪いと思いませんか?
host_vars/ldap1/openldap.yml
:
openldap_server_id: 1
openldap_db_providers:
- ldaps://ldap2.example.com/
host_vars/ldap2/openldap.yml
:
openldap_server_id: 2
openldap_db_providers:
- ldaps://ldap1.example.com/
host_vars/ldap3/openldap.yml
:
openldap_server_id: 3
openldap_db_providers:
- ldaps://ldap1.example.com/
- ldaps://ldap2.example.com/
この例では openldap_server_id
はホスト名を元に決めることもできますが、
ホスト名が使えない構成もあるかもしれません。
インベントリーファイル一つにホストごとの変数を記述することもできますが、
ロールやプレイブック向けの変数定義は *_vars
に書きたいところ。
ホストごとに異なる変数定義を一つの変数ファイルで定義
私の考えた解は、別途インベントリーのホスト名をキーに値を持つ辞書型変数を定義し、 それを参照する方法です。
これなら先の例と同等の変数定義が一つのファイルで済みます:
host_vars/all/openldap.yml
:
openldap_server_id: "{{ openldap_server_id_by_hostname.get(inventory_hostname, 0) }}"
openldap_db_provider: "{{ openldap_db_provider_by_hostname.get(inventory_hostname, []) }}"
openldap_server_id_by_hostname:
ldap1: 1
ldap2: 2
ldap3: 3
openldap_db_providers_by_hostname:
ldap1:
- ldaps://ldap2.example.com/
ldap2:
- ldaps://ldap1.example.com/
ldap3:
- ldaps://ldap1.example.com/
- ldaps://ldap2.example.com/
ところで、12月25日はクリスマスな上に、
OSS 界隈で地味に活躍されているふみやすさんの誕生日ですね!
っ http://www.amazon.co.jp/registry/wishlist/27M7TV8CEEF6G?sort=priority
逆に、あなたの書いた OSS や Blog や Advent Calendar が気に入ったら何か送りたく なってしまうかもしれないので、プロフィールや Web サイトに あなたの Amazon 欲しいものリストの URL を貼っておいてくださいね!
私が勤める OSSTech っていう某弊社で社員募集しているようです。 人材紹介会社を介さなければ、入社後に 20万円のボーナス! 「ふみやすっていう人に紹介された」と言ってもらえると私にもボーナス!! → https://www.osstech.co.jp/recruit/
よろしければ、これまで参加した/参加予定のほかの Advent Calendar もどうぞ。
- Ansible Advent Calendar 2023
- シェル芸 Advent Calendar 2023
- 闇の魔術に対する防衛術 Advent Calendar 2023
- Ansible Advent Calendar 2023
- Ansible Advent Calendar 2020
- DNS温泉 Advent Calendar 2019
- OSSTech Advent Calendar 2019
- Ansible Advent Calendar 2018
- OSSTech Advent Calendar 2018
- Debian/Ubuntu Advent Calendar 2017
- Linux Advent Calendar 2017
- Shell Script Advent Calendar 2017
- Shell Script Advent Calendar 2016
- OpenLDAP と仲間たち Advent Calendar 2015
- Postfix Advent Calendar 2014
- 拡張 POSIX シェルスクリプト Advent Calendar 2013