わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

chef-DK触ってみた

しばらくchefを触ってないうちにまたchefの環境が変わってた。
というわけでchef-DKを使ってみた。

chef-DKとは

Chef Development Kit、chefの関連gemとか全部のせパッケージのこと。Berkshelfも今はchef-DKに入るようになっていて、推奨インストールはchef-DKでのインストールですよーとある。今までのgem install berkshelfが使えなくなったわけではないが、さまざまな依存関係を考慮しなくて良くなるのでこっちの方が楽だと思う。

macでのインストール方法は公式サイトからdmgファイルを落としてきたらいいだけ。
インストールされたかどうかの確認は以下。

$ chef --version
Chef Development Kit Version: 0.3.5

アンインストール方法はドキュメントが死ぬと困る原則に従ってコピペすると以下のようになる。

$ sudo rm -rf /opt/chefdk
$ sudo pkgutil --forget com.getchef.pkg.chefdk
$ find /usr/bin -lname '/opt/chefdk/*' -delete

使い方

Chef Development Kit 0.3.2を使ってみよう:基本編 #opschef_ja #getchef_ja - クリエーションライン株式会社
これはubuntuでchef-DKを使う方法を記載した記事だが、よくまとまっているのでまずここを読むといいと思う。

で、ここでBerkshelfもインストールされてるからberksコマンドを打てばいいかなと思ったら、

$ berks
rbenv: berks: command not found

The `berks' command exists in these Ruby versions:
  2.0.0-p451

システムのrubyではなく、あくまでもchef-DKで展開したパッケージのgemの一つに登録されているからで、次のコマンドでシステムとchef-DKで入るrubyを比較してみる。

$ ruby -v
ruby 2.0.0p598 (2014-11-13 revision 48408) [x86_64-darwin13.4.0]
$ chef exec 'ruby -v'
ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-darwin12.0]

なのでrbenvと直接的な競合は起こさずに利用できる。
Berkshelfを使うには

$ chef exec 'berks -v'
3.2.1

こんな感じ。

もしシステムのrubyをchef-DKのrubyに置き換えてしまって問題ないというなら

$ echo 'eval "$(chef shell-init zsh)"' >> ~/.zshrenv

としてやれば良い。さっきのようにchef execコマンドを用いなくてもberksコマンドが一発で叩けるようになる。

knife-soloとかどうやってインストールするの?

実はchef-DKにはデフォルトではknife-soloが入っておらず、もし使うなら別途インストールの必要がある。しかしgem install knife-soloと叩いてしまうとシステムのrubyのgemとしてknife-soloがインストールされてしまって意味がないので、

$ chef gem install knife-solo

と叩いてやる必要がある。だが、

簡単!MacOSXやLinuxにChef,Knife,Berkshelfを一発でインストールしてくれるChefDKの紹介 · DQNEO起業日記

の記事に書いてあるようにknife-soloをインストールしなくても、chefのレシピを使用したいサーバで直接chef-DKを展開してやればいい。knife solo prepareコマンドというのはレシピを流し込みたい先のサーバにchef(正確にはchef-solo)をインストールしてレシピが適応できる準備を整えるコマンドになる。レシピを流したいサーバに全くログインしないような使い方ってあんまない*1と思うので、chef-DKに初めから入ってるものを上手に使えるようになることを考えたい。

あとそもそもchef社が書いてるブログ記事

Although we have no immediate plans to deprecate Chef Solo, we will eventually remove it from Chef.

すぐにChef Soloをなくす予定はないけども、いつかはChefから消す。

とはっきり言っちゃってるので、knife-soloが使えなくなることは念頭に置いといたほうがいい。

じゃあknife-soloの代わりは?というとChef Zeroを使う、knife-zeroというものがあるらしい。

参考リンク

*1:あるかもしれないけど、少なくとも私がちょっと遊ぶ分には入らないことが考えられない