$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

knife-soloを0.2.0から0.3.0にした時の話

 この前vagrantに対してchefを適用しようとした時にハマった話です。

問題

 PrePANはvagrantでローカル開発環境を作ることができ、vagrantVMを作った後、それに対してknife-soloを使ってchefを適用するということをしています。先日Carton 1.0化を進めるかと思いやってみたところ、一度目のchefの適用は出来るのですが、二度目以降はknife solo cookが全く動かなくなりました。

 その時出たエラーとしては、rsyncをしていて/tmpのpermission errorが起こっているというものでした。knife-solo 0.2.0 で rsync エラーによって苦しまないためのたったひとつの方法 - Hack like a rolling stoneが参考になります。

修正

 まあ解決策としてはknife-soloを0.3.0にあげるということなので、ひとまずversionを上げます。今はgemに0.3.0があるのでそれを使います。

bundle update
# もしくはgem install knife-solo


 次にファイル構成を0.3.0のものに合わせます。Upgrading to 0.3.0 · matschaffer/knife-solo Wiki · GitHub に書かれたとおりにやるのが良いでしょう。

 まず、solo.rbは使わなくなったので消します。

 更にknife.rbは .chef/以下に作られるものを使うようになったので、もともとのものは消します。また.chefは.gitignoreに入れて、gitでは管理しないようにするそうです。つまり基本的にはいじらないという事なんですかね。

 librarian-chefを使ってcookbooksを管理していた場合は、librarian-chefを依存に追加する必要があります。もともとはknife-soloの依存に入っていたけど消えたって感じですかね。


 ここまで出来たらprepareやcookが使えるようになるはずです。localのPrePANの開発環境に適用するには、以下のようにします。

$ bundle exec knife solo prepare local.prepan.org
$ bundle exec knife solo cook local.prepan.org

まとめ

 versionが変わるたびにいろいろ変わるので、メインでruby使ってないと難しいですね。