THINKING MEGANE

Chef-Solo + Knife-Solo + Berkshelf 環境のつくりかた

Chef-Solo + Knife-Solo + Berkshelf 環境を構築するときに少しはまったので、まとめておきます。

ブログ投稿時点(2013/08/20)では knife-solo のバージョンだけ気をつけておけば大丈夫です。 knife-solo のバージョンが古いと2回目以降の実行時にうまくいかないためです。 その他の構築自体は難しくありません。

以下、構築手順です。

1. 前提

構築対象となるリモート側のサーバへはすでにSSHによるログインが可能であるものとします。

2. chef, knife-solo, berkshelf のインストール

以下のGemfileを用意してbundle installを行います。

Gemfile

source "https://rubygems.org"

gem 'chef'
gem 'knife-solo', '>= 0.3.0.pre5'
gem 'berkshelf'

** knife-solo のバージョンについて **

指定しない場合、0.2.0系がインストールされますが、2回目以降の実行時にエラーとなります。 原因などはこちらが詳しいです。

Hack like a rolling stone - knife-solo 0.2.0 で rsync エラーによって苦しまないためのたったひとつの方法

3. cookbookの準備

Chefのリポジトリをつくる

$ knife solo init chef-repo

chef-repo内に以下の構成が生成されます。必要に応じてGit管理を行ってください。

 $ tree chef-repo/
 chef-repo/
 ├── cookbooks
 ├── data_bags
 ├── nodes
 ├── roles
 └── site-cookbooks

** Cookbookを置く場所について **

自分でつくるCookbookはsite-cookbooks以下に、公開Cookbookはcookbooks以下に置きます。

knife-soloではcookbooks配下は.gitignoreで除外対象となっており、後述のBerkshelfなどの利用を前提としているようです。

** knife-solo はsshコマンドのオプションが使えます。証明書の指定などがある場合に便利です。 **

4. Cookbookの作成

自分でCookbookをつくる場合

今回は環境構築をメインにするので、雛形作成の手順のみ。

$ knife cookbook create xxx -o site-cookbooks/

公開Cookbookを利用する場合

リポジトリ直下にBerksfileを作成する

site :opscode
cookbook "public_cookbook_name"

5. リモート側でChef-Soloを実行する

実行するレシピの指定

nodes以下にsevername.jsonが作成されているので、run_list に実行したいレシピを指定する。

{
  "run_list": [
    "public_cookbook_name::recipe_name", "cookbook_name::recipe_name"
  ]
}

** 公開Cookbookも忘れずに追加しておきます **

リモート側でのChef-Solo実行準備

$ knife solo prepare username@servername

これにより、リモート側にChefがインストールされます。

リモート側でのChef-Solo実行

$ knife cook username@servername

これによりリモート側にCookbookが送信され、run_listで指定したレシピが実行されます。

6. Tipsなど

knife-soloでattributesを使う

nodes/servername.jsonに追加

{
  "run_list": [
    "cookbook_name::recipe_name"
  ],
  "hoge": {
    "fuga": "piyo"
  }
}

この例ではrecipe内でnode.hoge.fugaとして値を利用できます。


Vagrant + Chef-Solo の環境構築は手軽にできますが、いざVagrant以外に適用しようとすると意外と面倒です。

今回のようにknife-soloをかませておくことで、対象のサーバを選ばずにChef-Soloを実行でき、とても便利です。

環境構築を行うときは、Berkshelfによる公開Cookbookの管理とあわせた今回の構成をおすすめします。

このエントリーをはてなブックマークに追加