『サーバごとにちょっと変えるだけ』、『似たような記述の繰り返し』、というようなコンフィグを作る時はできるだけテンプレート化するようにしてます。
ツールとしては使ってるのはeRubyとYAML、どちらもRubyいれればパーサがついてくるはず。
差分のある部分はYAMLで定義して、eRubyテンプレートとガッチャンコ。
例としてkeepalivedの振り分け設定ファイルを作ってみます
パースプログラム
#!/usr/bin/ruby require 'yaml' require 'erb' tpl, yaml = ARGV v = YAML.load(File.read(yaml)) puts ERB.new(File.read(tpl)).result
サンプルYAMLファイル
domain: test.jp vip: 192.168.0.1 rips: - 192.168.0.11 - 192.168.0.12
サンプルテンプレート
virtual_server <%= v['vip'] %> 80 { delay_loop 5 lb_algo wrr lb_kind DR protocol TCP virtualhost <%= v['domain'] %> <% v['rips'].each do |rip| %> real_server <%= rip %> 80 { weight 10 HTTP_GET { url { path /healthcheck.html status_code 200 } } } <% end %> }
実行結果
$ ruby parse.rb test.tpl test.yaml virtual_server 192.168.0.1 80 { delay_loop 5 lb_algo wrr lb_kind DR protocol TCP virtualhost test.jp real_server 192.168.0.11 80 { weight 10 HTTP_GET { url { path /healthcheck.html status_code 200 } } } real_server 192.168.0.12 80 { weight 10 HTTP_GET { url { path /healthcheck.html status_code 200 } } } }
最近はZabbixの設定インポート用ファイルの作成にも使ってます。
こういうのPuppetとかでちゃんと管理したいなぁ。