August 6th, 2020
開発環境と本番環境で共通のplaybookを使い、inventoryで対象のホストを切り替える場合、inventoryにグループ変数を書いているとinventoryが肥大化していくのをどうにかしたいと思い調べてみました。
公式ドキュメントを読むとホストグループをさらにグルーピングできる記述がありました。この機能を使ってグループ変数を定義していけば良さそうです。実際に試してみます。
# 元のグループ
[hoge-server]
server1
server2
# グループのグループ
[new-hoge-server:children]
# ここに書いたグループが含まれる
hoge-server
- hosts: hoge-server
tasks:
- name: debug
debug:
var: hostvars[inventory_hostname]
開発環境用のinventoryではhoge-serverをhoge-server-developmentに含めます。
[hoge-server]
dev-server
[hoge-server-development:children]
hoge-server
本番環境用のinventoryではhoge-serverをhoge-server-productionに含めます。
[hoge-server]
prod-server
[hoge-server-production:children]
hoge-server
各環境で異なる値を設定したい変数hoge-group-var
に環境ごとの値を設定します。
hoge-group-var: development
hoge-group-var: production
実際にinventoryを切り替えて実行してみます。
ansible-playbook -i development.yml hoge-server.yml | grep hoge-group-var
"hoge-group-var": "development",
ansible-playbook -i production.yml hoge-server.yml | grep hoge-group-var
"hoge-group-var": "production",
環境ごとのグループ変数が出力されました。