chef-solo

もっとより良いChef-SoloのHello World

More than 3 years have passed since last update.

問題提起:chef-soloのHello Worldは手順が多すぎる

「入門Chef-Solo」に書いてあるHello Worldを馬鹿正直に実行しようとすると下記のような作業をしなければなりません。

$ curl -L http://www.opscode.com/chef/install.sh | sudo bash
$ git clone git://github.com/opscode/chef-repo.git
$ cd chef-repo
$ knife configure
# 質問聞かれたらエンターキーを押下
$ knife cookbook create hello -o cookbooks

cookbooks/hello/recipes/default.rb を編集

default.rb
log "Hello World"

localhost.json を作成

localhost.json
{
  "run_list": [
    "recipe[hello]"
  ]
}

solo.rb を作成

solo.rb
file_cache_path "/tmp/chef-solo"
cookbook_path ["/home/ec2-user/chef-repo/cookbooks"]

ここまで来てやっとhello worldが実行できます。

$ sudo chef-solo -c solo.rb -j ./localhost.json

しかしこの手順、覚えられるでしょうか?
私は覚えられません。
Hello Worldの手順が、暗記できないほど多いというのは、Chefの初学者にとって非常に大きな障壁であると思います。
それぞれのコマンドが裏側で何をやっているのか、作成するファイルが何のためにあるのかが初心者にはわからないので、いわゆる「おまじない」だらけに見えます。

もっと簡単にならんのか。

そこで考えてみました。

よりよいchef-soloのHello World

(まだ模索中なので随時更新します)

$ curl -L http://www.opscode.com/chef/install.sh | sudo bash
$ mkdir chef-repo
$ cd chef-repo

solo.rb を作成

solo.rb
file_cache_path "/tmp/chef-solo"

base = File.expand_path('..', __FILE__);
cookbook_path [ base + '/cookbooks', base + '/site-cookbooks']
$ mkdir -p cookbooks/hello/recipes
$ echo "log 'Hello World'" > cookbooks/hello/recipes/default.rb
$ sudo chef-solo -c solo.rb -o hello

改善のポイント

  • "recipe[hello]" は "hello"と書ける
  • localhost.jsonは不要。-j ./localhost.jsonの代わりに-o helloで十分
  • solo.rbのcookbook_pathに絶対パスをベタ書きしない。
  • git clone git://github.com/opscode/chef-repo.gitはいらない。mkdirで十分。
  • knife cookbook create hello -o cookbooksが覚えられない。mkdirで十分で。
  • knife configureはいるのか?