Chef-solo on windows¶
このチュートリアルは、 Chef-solo を Windows にインストールして使いこなすことを目的とします。
Warning
作者が Chef を理解するために作成しているので、使用方法や概念に間違いがあるかもしれません。 もし気付いたら、 Twitter (id:toruuetani) でご連絡いただけると助かります。
チュートリアルは Sphinx で作成しています。 ソースコードのバージョン管理は Mercurial / TortoiseHg で行い、 リポジトリは BitBucket 上で管理しています。
また、公開は Read the Docs 上で行なっています。
- https://readthedocs.org/projects/chefsoloonwindowstutorial/
- https://chefsoloonwindowstutorial.readthedocs.org/en/latest/
事前準備¶
はじめに¶
Chef はサーバー構成管理ツールで、クライアント/サーバー形式のソフトウェアです。 まずは Chef の構成要素について解説します。
Server, Client, Node¶
サーバー構成を記述した設定ファイルを Chef Server にて管理し、 Chef Client はその設定を使用して Node の構成を変更します。

Hint
Node は設定を管理したいサーバーまたはマシンのことです。 Node は Client を複数持つことができます。
Cookbook, Recipe¶
Recipe は Node をどのように設定するかを記述した Ruby スクリプトです。 Recipe を1つまたは複数まとめたディレクトリを Cookbook と呼びます。

Role¶
Node に与える役割を表すのが Role です。 1つの Node が複数の Role を持つことができ、 Role にはどの Recipe を使うのかが記述されます。 また、 Role で使用する Recipe のデフォルト設定も記述することができます。

Role は Ruby または JSON フォーマットで記述します。たとえば Ruby ではこのように記述します。 (Role Data Formats — Chef Docs から引用)
1 2 3 4 5 6 | name "webserver"
description "The base role for systems that serve HTTP traffic"
run_list "recipe[apache2]", "recipe[apache2::mod_ssl]", "role[monitor]"
env_run_lists "prod" => ["recipe[apache2]"], "staging" => ["recipe[apache2::staging]"], "_default" => []
default_attributes "apache2" => { "listen_ports" => [ "80", "443" ] }
override_attributes "apache2" => { "max_children" => "50" }
|
Attribute¶
Attribute は実際に設定するパラメータです。 Cookbook / Recipe には Node 固有の設定を持たせないのが原則なので、可変にしたい設定は Attribute として外出しします。 Recipe にある Attribute はその Recipe のデフォルト値で、 必要に応じて Role や Node に記述した Attribute で上書きします。

Resource¶
Resource は Recipe で使用する、具体的な操作を表します。 たとえばディレクトリ操作を行う Resource directory は次のようになります。
1 2 3 4 5 6 7 | node['apache']['dir'] = '/etc/apache2'
directory node['apache']['dir'] do
owner 'apache'
group 'apache'
action :create
end
|

Hint
Recipe は Resource を組み合わせて記述し、記述した順番に実行されます。
Chef Solo¶
Chef Solo は Chef Server なしでも Chef の機能を使うためのものです。

Cookbook の動作確認をしたり、 Node が1つしかない場合に便利です。 なお、必要な Cookbook をローカル上にすべて持つ必要があり、 Node 固有の設定は JSON で指定します。たとえば次のようになります。
1 2 3 4 5 6 7 | {
"resolver": {
"nameservers": [ "10.0.0.1" ],
"search":"int.example.com"
},
"run_list": [ "recipe[resolver]" ]
}
|
本チュートリアルでは、この Chef Solo を使いこなすことを目的とします。
Chef-solo のインストール¶
Hint
これは 2013/03/06 時点の最新版 Ver.11.4.0 をベースにしています。
まずは ここ に移動して、 Step2 に移動します。
Step 2 にあるリンクから、インストーラをダウンロードします。
chef-client-11.4.0-1.windows.msi
をダウンロードしたら、実行しましょう。
特に変更は必要なく、デフォルトインストールで構いません。
インストール完了後、コマンドラインで chef-solo --version
を実行してバージョンが表示されれば成功です。
Github for Windows のインストール¶
Hint
これは 2013/03/06 時点の最新版 Ver.1.0.38.1 をベースにしています。
まずは ここ に移動します。
Set Up Git をクリックします。
上部にある Download リンクをクリックして、
GitHubSetup.exe
をダウンロード後実行します。インストールが完了するのを待ちます。
デスクトップに
Github
ショートカットができるので、実行します。GitHub のアカウントを入力して、
LOG IN
ボタンをクリックします。Git で使用するユーザー名とメールアドレスを入力し、
CONTINUE
ボタンをクリックします。リポジトリは設定しないので、
SKIP
ボタンをクリックします。以上でインストールは完了です。
Chef-solo の設定¶
Chef-solo をインストールすると、 chef-solo
コマンドが使えるようになります。
ただし、現時点では何も設定していないので、以下のようにエラーが発生して終了します。
まずは Chef-solo を動作させるために必要な設定をしましょう。
Chef リポジトリの作成¶
Chef で使用するファイルは、ソースコードのようにバージョン管理することが推奨されています。 このチュートリアルでは Git でバージョン管理します。
Hint
ディレクトリは任意の場所で構いません。このチュートリアルでは、 C:\chef-repo
にリポジトリを作成します。以降は自分のディレクトリに読み替えてください。
GitHub for Windows を起動して、 add
ボタンをクリックします。
以下のように入力して、 create
ボタンをクリックします。
- リポジトリ名 :
chef-repo
- 説明 :
chef-solo repository
- ディレクトリ :
C:\chef-repo
(右の…
ボタンをクリックして、C:\
を選択します)
現時点のディレクトリは以下のようになっているはずです。
まだリポジトリを作成しただけでコミットしてないので、コミットしておきましょう。 GitHub for Windows で作成したリポジトリを選択します。
最初のコミットなので、コミットメッセージとして Init
を入力します。これは好きなメッセージで構いません。
リポジトリの作成は以上です。
solo.rb¶
Chef-solo の設定は C:\chef-repo\solo.rb
に記述します。
最低限必要なのは file_cache_path
と cookbook_path
です。
以下のように記述しましょう。
1 2 | file_cache_path File.join(Dir.pwd, 'cache')
cookbook_path File.join(Dir.pwd, 'cookbooks')
|
以上で Chef-solo の設定は終わりですが、 Windows 向けにもう少し設定を続けましょう。
Windows 用 Resource 有効化¶
参考リンクにもあるとおり、 Windows にはパッケージマネージャーがありません。それを補う Resource を有効化するため、 opscode が公開している recipe から Cookbook をダウンロードしましょう。
- opscode-cookbooks/chef_handler · GitHub
- opscode-cookbooks/windows · GitHub
- opscode-cookbooks/powershell · GitHub
ダウンロードした ZIP を解凍してできた chef_handler
と windows
を C:\chef-repo\cookbooks
に移動します。
次にこの Cookbook / Recipe を使うような設定ファイル win_default.json
を作成します。
1 2 3 | cd C:\chef-repo
echo >> win_default.json
notepad.exe win_default.json
|
win_default.json
は以下のように記述します。
1 2 3 4 5 | {
"run_list" : [
"recipe[windows]"
]
}
|
管理者権限でコマンドプロンプトを立上げ、 Chef-solo を実行しましょう。以下 Chef-solo 実行時は同様に管理者権限で実行してください。
1 2 | cd C:\chef-repo
chef-solo -c solo.rb -j win_default.json
|
これで準備完了です。この状態の Chef リポジトリを忘れずにコミットしておきましょう。
次は実際に Recipe を実行してみます。
参考リンク¶
Chef
- Chef clientとWindows向け便利コマンドのインストールをする - ハードコイルド・ワンダーランド
- chef-soloを用いてWindowsにソフトウェアをインストールしてみよう - ハードコイルド・ワンダーランド
- さようならPuppet、こんにちはChef - Masatomo Nakano Blog
- Chefを最速で使いこなすためのいくつかのポイント - Masatomo Nakano Blog
- Rubyist Magazine - Chef でサーバ管理を楽チンにしよう! (第 1 回)
- Rubyist Magazine - Chef でサーバ管理を楽チンにしよう! (第 2 回)
- chef-solo と knife-solo を使う - ああああ
Read the Docs