Chef-Server環境で使うCookbookをVagrantとChef-zeroで開発する
最近はChef-Severの導入も簡単になりました。 パッケージから導入はもちろん、aws marketplaceからすぐ使用できたりと。
とはいえテスト環境にChef-Serverを強いるのも大変なので、Chef-Zeroで代わりをしてもよいでしょう。
Chef-zero
Chef-zeroはChef-Serverのホットモックのようなものです。ほぼChef-Serverとして動作する小さなプロセスですが次の特徴があります。
- 認証はするフリで全部OK
- データはメモリに保存、永続化なし
Chef-Serverを使ったCookbookの開発をする際に、データをクリアしたい場合もありますが意外と後処理が面倒です。 Chef-zeroならプロセスのリスタートで綺麗な状態になるので、knifeで必要な要素を戻すだけで再度テストを行なうことができます。
詳細は次のリンクが参考になります。
VagrantでChef-zero
ではChef-zeroのプロセスをどこに立てるか。test-kitchenではCookbookをテストするVMで直接Chef-zeroを起動して、ダミーのChef要素を入れることができますが、現時点ではそのままシームレスにChef-Server環境に持って行こうとするにはいまいち感があります。
じゃあVagrantだろうなということで、一式書いてリポジトリに登録しました。
Vagrant with Chef-Zero
これならvagrant up chefzeroするだけでChef-zeroをほぼChef-Serverとして使い放題です。
chefzeroのVMだけはChef-Soloで構築しますが、ほかのVMはChef-zeroに対するChef-ClientとしてProvisioningすることができます。
最初は手元だけ直して、Cookbookのアップロードを忘れることもありますが、すぐ慣れるでしょう。
通常操作はknifeを使えるので、他の環境に持っていく際にknife.rb指定の切り替えで済むのが助かりますね。
開発作業用のRakefile
レシピ開発&テストを効率よく行なうには、とりあえずRakeのタスクを作っておくとよいです。
task :default => 'upload'
$stdin.sync = true
desc 'upload chef-repos to chefzero vm'
task :upload do
system('knife cookbook upload --all')
system('knife upload environments/ ')
system('knife upload roles/ ')
end
desc 'reset chefzero'
task :reset do
system('vagrant reload chefzero')
Rake::Task['chefzero:upload'].invoke
end
それぞれこんな作業をやらせています。
rake upload # Chef要素のアップロード
rake reset # Chef-zero内容クリア&要素の再アップロード
その他
ちなみにvagrant-chefzeroというプラグインもあり、これはEnvやRole要素の投入までVagrantファイル内でやるようです。
knifeを使わないのが逆に気になるので今回はCookbookでChef-zeroをセットアップしてます。
最近はChef-Severの導入も簡単になりました。 パッケージから導入はもちろん、aws marketplaceからすぐ使用できたりと。
とはいえテスト環境にChef-Serverを強いるのも大変なので、Chef-Zeroで代わりをしてもよいでしょう。
Chef-zero
Chef-zeroはChef-Serverのホットモックのようなものです。ほぼChef-Serverとして動作する小さなプロセスですが次の特徴があります。
- 認証はするフリで全部OK
- データはメモリに保存、永続化なし
Chef-Serverを使ったCookbookの開発をする際に、データをクリアしたい場合もありますが意外と後処理が面倒です。 Chef-zeroならプロセスのリスタートで綺麗な状態になるので、knifeで必要な要素を戻すだけで再度テストを行なうことができます。
詳細は次のリンクが参考になります。
VagrantでChef-zero
ではChef-zeroのプロセスをどこに立てるか。test-kitchenではCookbookをテストするVMで直接Chef-zeroを起動して、ダミーのChef要素を入れることができますが、現時点ではそのままシームレスにChef-Server環境に持って行こうとするにはいまいち感があります。
じゃあVagrantだろうなということで、一式書いてリポジトリに登録しました。

これならvagrant up chefzeroするだけでChef-zeroをほぼChef-Serverとして使い放題です。
chefzeroのVMだけはChef-Soloで構築しますが、ほかのVMはChef-zeroに対するChef-ClientとしてProvisioningすることができます。
最初は手元だけ直して、Cookbookのアップロードを忘れることもありますが、すぐ慣れるでしょう。
通常操作はknifeを使えるので、他の環境に持っていく際にknife.rb指定の切り替えで済むのが助かりますね。
開発作業用のRakefile
レシピ開発&テストを効率よく行なうには、とりあえずRakeのタスクを作っておくとよいです。
task :default => 'upload'
$stdin.sync = true
desc 'upload chef-repos to chefzero vm'
task :upload do
system('knife cookbook upload --all')
system('knife upload environments/ ')
system('knife upload roles/ ')
end
desc 'reset chefzero'
task :reset do
system('vagrant reload chefzero')
Rake::Task['chefzero:upload'].invoke
end
それぞれこんな作業をやらせています。
rake upload # Chef要素のアップロード
rake reset # Chef-zero内容クリア&要素の再アップロード
その他
ちなみにvagrant-chefzeroというプラグインもあり、これはEnvやRole要素の投入までVagrantファイル内でやるようです。
knifeを使わないのが逆に気になるので今回はCookbookでChef-zeroをセットアップしてます。