以前Puppetを使っていた時に、
Facter変数を利用してサーバーによって個別の情報を埋め込んだりしていました。
Facter変数はデフォルトで用意されているものももちろんあるのですが、
自作することも出来ました。
その時のエントリーです。
↓
Puppetのカスタムfact(ListenAddress) - tsunokawaのはてなダイアリー
PuppetはFacterでしたが、
ChefではOhaiというものを使ってサーバーの情報を取得出来ます。
Ohaiでもプラグインを自作出来ますのでやってみました。
やりたいこと
テンプレートファイルにそのサーバーの利用サービスを埋め込みたいという要件がありました。
例えば、ブログサービスで運用しているサーバーはホスト名が
web01.blog.example.com |
cache01.blog.example.com |
db01.blog.example.com |
のようにしています。
.(ドット)
区切りで2番目に利用サービス名をいれています。
この場合だとblog
でこれらのサーバーはブログのサービスで使っているサーバー達だと分かります。
このホスト名からblog
だけを抽出したいと思いそのOhaiプラグインを作りました。
Ohaiプラグインファイル作成
Chefリポジトリディレクトリの
chef/repo/ohai_plugins/
に
service.rb
というファイルを準備します。
provides "service" service `hostname | cut -d "." -f 2`
単純にhostnameで出力されるホスト名からサービス名を抜き出しているだけです。
自作Ohaiプラグイン読み込み設定
Chef-Soloを使う時に
chef-solo -c /root/chef/solo.rb -j /root/chef/node.json
このように設定ファイルを読み込んで実行しています。
この設定ファイル
solo.rb
に自作Ohaiプラグインを読み込むよう
Ohai::Config[:plugin_path] << "/root/chef/repo/ohai_plugins"
を追加します。
テンプレートに埋め込む
テンプレートに変数を埋め込む場合、
自作プラグインもデフォルトのOhai変数も同じ書き方でOKです。
<%= node['service'] %>
こんな感じです。
自作Ohai変数のチェック
ohai -d /root/chef/repo/ohai_plugins
※フルパスで指定する必要有り。
出力例
"service": "blog\n"
無事出力されました。