この前vagrantに対してchefを適用しようとした時にハマった話です。
問題
PrePANはvagrantでローカル開発環境を作ることができ、vagrantでVMを作った後、それに対して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使ってないと難しいですね。