Chef の Cookbooks を一発で NIFTYCloud クラウドストレージにアップロードする ncss-cookbooks コマンド

ニフティクラウド上で手軽に Chef を試したいときには、ニフティクラウドストレージへ tgz 形式でアップロードした上で chef-solo コマンドの -r オプションで URL を指定する方法が便利です。

$ chef-solo -j node.json -r https://my-bucket.ncss.nifty.com/v0.0.0/cookbooks.tgz

上記コマンドを打つと、chef-solo は -r に指定された tgz アーカイブファイルをウェブ経由で取得し、ローカルへ展開した上で cookbooks を実行してくれます。

chef-solo -r で取得できるのは便利なのですが、いちいち cookbooks を tgz に書庫化してニフティクラウドストレージへアップロードする部分が面倒なので、これを自動化するコマンドを作りました。

インストール

$ gem install ncss-cookbooks

使い方

管理している cookbooks レポジトリの直下に VERSION というファイルを作成してバージョンを書き込みます。

$ echo "0.0.0" > VERSION

環境変数ニフティクラウドストレージの API キーを設定します。

$ export ACCESS_KEY_ID=XXXXXXXXXXXXXXXXXXXX
$ export SECRET_ACCESS_KEY=YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY

あとはバケットを作成するコマンドと、作成したバケットに cookbooks.tgz をアップロードするコマンドを叩くだけです。

$ ncss-cookbooks create my-bucket
$ ncss-cookbooks upload my-bucket
Version is v0.0.0
Creating directory /tmp/ncss-cookbooks-20130519-30448-2im9m1/cookbooks/
Copying files from /home/tily/dev/ncss-cookbooks to /tmp/ncss-cookbooks-20130519-30448-2im9m1/cookbooks/
  Excluded /home/tily/dev/ncss-cookbooks/.git
Archiving /tmp/ncss-cookbooks-20130519-30448-2im9m1/cookbooks/ to /tmp/ncss-cookbooks-20130519-30448-2im9m1/cookbooks.tgz
Uploading /tmp/ncss-cookbooks-20130519-30448-2im9m1/cookbooks.tgz to bucket:my-bucket, object:v0.0.0/cookbooks.tgz
Temporary directory /tmp/ncss-cookbooks-20130519-30448-2im9m1 will be deleted automatically
Uploaded to https://my-bucket.ncss.nifty.com/v0.0.0/cookbooks.tgz

発行された URL は chef-solo -r から利用できます。

$ chef-solo -j node.json -r https://my-bucket.ncss.nifty.com/v0.0.0/cookbooks.tgz

あとがき

  • 特に大したことはやっていないのですが、バージョン管理の運用と組み合わせて使えるので結構便利なのではないかと思います
  • 最初 knife コマンドに組み込もうと思ったのですが、knife は色々なファイルをロードして結構重いので単体のコマンドにしてみました
  • 個人的には前に作ったニフティクラウドを vagrant のように使える some コマンドと組み合わせて使おうと思っています
  • そもそも chef-solo -r が BASIC 認証等に対応していないので cookbooks.tgz を認証なしの URL に置かなければならないのが少し厳しい感じがします、やはり本格的に運用するなら Chef サーバーでしょうか