LoginSignup
42
41

More than 5 years have passed since last update.

cookbook開発環境をchef dkで作成する

Last updated at Posted at 2014-05-22

概要

Chef Development Kit (chef-dk)
https://downloads.chef.io/chef-dk/
https://github.com/opscode/chef-dk
は、chef及びchefの開発ツールをまとめてインストールし、統一されたインタフェースで使えるようにしたものです。
ここでは、chef-dkの大雑把な内容、chef-dkで何が使えるようになるのか、インストールする際の注意点について紹介します。

chef-dkの内容

chef-dkには、おなじみchef-clientやknife, chef-soloなどの他に、以下の開発用ツールが含まれています。

  • Berkshelf : cookbook間の依存関係を管理するツール(cookbook用のbundlerのようなもの)
  • Test Kitchen : VMを使ってcookbookの動作テストが行えるツール (VagrantやVirtualBoxは別途インストールする必要あり)
  • ChefSpec : VMは使わずにcookbookのユニットテストが行えるツール
  • Foodcritic : 静的にcookbookを解析し、文法チェックや望ましくない書き方をしている箇所を検出するツール

上記ツールの他に、cookbookの雛形を作成するツールもあります。

インストール

http://www.getchef.com/downloads/chef-dk
からMac, Linux(Ubuntu, RHEL), Windows(Comming soon...)用のパッケージがダウンロードできます。

ダウンロード後、ダブルクリックするなりdpkg -iでインストールするなりしてください。

chef dkの構成

chef-dkは、最近のchefパッケージと同様omnibus-chef形式になっており、chef-dkで使うruby環境をchef-dkの内部に持っています。このため、rubyを別途インストールせずにまたマシンのruby環境を汚さずにchefの開発環境を入れることができます。

Macの場合、/opt/chefdk以下にchefや先ほど挙げた開発ツールの他にruby本体もインストールされ、chefやknife, foodcriticなどのコマンドへの/usr/bin以下にシンボリックリンクが張られます。
簡単に構造を説明すると、

/opt/chefdk
      ├── bin # chef, knife, berks, foodcritic, kitchen等chef-dkのコマンド類が置かれ、
      │          /usr/bin/chefにsymlinkが張られる
      ├── embedded
               ├── bin # ruby, rake, bundler, rspecなどの
                           chef-dkのruby環境で使うコマンド類が置かれる
                           (/usr/binにsymlinkは張られない)

ここで注意したい点として、/usr/binにchefやknifeなどのコマンドへのsymlinkが張られるため、
すでにgemで上記コマンドを入れている場合は、PATHの設定によってはchefdkのほうのコマンドが使われず、gemで入れたほうが使われてしまうことがあります。which knifeコマンドで確認してみてください。
chefdkの方を使う場合は、gemで入れたchefを消すか、/usr/bin以下が優先して使われるようにPATHの設定を変えてみてください。

chefコマンド

chef dkをインストールすると、chefコマンドが使えるようになります。
githubのREADMEによると、このコマンドはcookbookの開発・テスト・イテレーションを簡単に行えるようにためのコマンドになるようです。
今のところchefコマンドで可能なのは以下の通りです。詳細はgithubのREADMEを見てください。

chef generate

cookbookやrecipe, LWRP等を雛形から作成できます

chef gem

前述の通りchef-dkはruby環境をその内部に持っています。そのruby環境にgemを入れたり消したりするためのコマンドがchef gemです。
このコマンドでインストールしたgemは~/.chefdk/gem以下にインストールされます。

chef exec

chef dk内部のruby環境にPATHを通してコマンドを実行するためのコマンドです。
主な用途として、chefspecがあります。
chef dkにはchefspecが入ってはいるものの、chef dkのruby環境にインストールされたrspecからしか使えません。
さらに/usr/binにはそのrspecへのsymlinkは張られていないため、chefspecを使いたい場合は、
/opt/chefdk/embedded/bin/rspecを直接叩かなくてはいけませんでした。
https://github.com/opscode/chef-dk/issues/18
chef execコマンドはchefdk内のrubyやgem環境にPATHを通してコマンドを実行するため、
chef exec rspecと打ってやれば、chefspec入りのrspecが使えるようになります。
rspecだけでなく、chefdk内のrubyを使って何かしたい場合にも使えます。

42
41
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
41