『サーバごとにちょっと変えるだけ』、『似たような記述の繰り返し』、というようなコンフィグを作る時はできるだけテンプレート化するようにしてます。
ツールとしては使ってるのは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とかでちゃんと管理したいなぁ。