Chef-solo on windows

このチュートリアルは、 Chef-solo を Windows にインストールして使いこなすことを目的とします。

Warning

作者が Chef を理解するために作成しているので、使用方法や概念に間違いがあるかもしれません。 もし気付いたら、 Twitter (id:toruuetani) でご連絡いただけると助かります。

チュートリアルは Sphinx で作成しています。 ソースコードのバージョン管理は Mercurial / TortoiseHg で行い、 リポジトリは BitBucket 上で管理しています。

また、公開は Read the Docs 上で行なっています。

事前準備

はじめに

Chef はサーバー構成管理ツールで、クライアント/サーバー形式のソフトウェアです。 まずは Chef の構成要素について解説します。

Server, Client, Node

サーバー構成を記述した設定ファイルを Chef Server にて管理し、 Chef Client はその設定を使用して Node の構成を変更します。

_images/chef-architecture-01.png

Hint

Node は設定を管理したいサーバーまたはマシンのことです。 Node は Client を複数持つことができます。

Cookbook, Recipe

Recipe は Node をどのように設定するかを記述した Ruby スクリプトです。 Recipe を1つまたは複数まとめたディレクトリを Cookbook と呼びます。

_images/chef-architecture-02.png

Role

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

_images/chef-architecture-03.png

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 で上書きします。

_images/chef-architecture-04.png

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
_images/chef-architecture-05.png

Hint

Recipe は Resource を組み合わせて記述し、記述した順番に実行されます。

run_list

run_list は Node に対して適用する Role を指定したり、 実行する Recipe を指定するものです。

_images/chef-architecture-06.png

Chef Solo

Chef Solo は Chef Server なしでも Chef の機能を使うためのものです。

_images/chef-architecture-07.png

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 に移動します。

_images/chef-solo-install-00a.JPG

Step 2 にあるリンクから、インストーラをダウンロードします。

_images/chef-solo-install-00b.JPG

chef-client-11.4.0-1.windows.msi をダウンロードしたら、実行しましょう。 特に変更は必要なく、デフォルトインストールで構いません。

_images/chef-solo-install-01.JPG _images/chef-solo-install-02.JPG _images/chef-solo-install-03.JPG _images/chef-solo-install-04.JPG _images/chef-solo-install-05.JPG _images/chef-solo-install-06.JPG

インストール完了後、コマンドラインで chef-solo --version を実行してバージョンが表示されれば成功です。

_images/chef-solo-install-07.JPG

Github for Windows のインストール

Hint

これは 2013/03/06 時点の最新版 Ver.1.0.38.1 をベースにしています。

  1. まずは ここ に移動します。

    _images/github-install-01.JPG
  2. Set Up Git をクリックします。

    _images/github-install-02.JPG
  3. 上部にある Download リンクをクリックして、 GitHubSetup.exe をダウンロード後実行します。

    _images/github-install-03.JPG
  4. インストールが完了するのを待ちます。

    _images/github-install-04.JPG
  5. デスクトップに Github ショートカットができるので、実行します。

    _images/github-install-05.JPG
  6. GitHub のアカウントを入力して、 LOG IN ボタンをクリックします。

    _images/github-install-06.JPG
  7. Git で使用するユーザー名とメールアドレスを入力し、 CONTINUE ボタンをクリックします。

    _images/github-install-07.JPG
  8. リポジトリは設定しないので、 SKIP ボタンをクリックします。

    _images/github-install-08.JPG
  9. 以上でインストールは完了です。

    _images/github-install-09.JPG

Chef-solo の設定

Chef-solo をインストールすると、 chef-solo コマンドが使えるようになります。 ただし、現時点では何も設定していないので、以下のようにエラーが発生して終了します。

_images/chef-first-start.JPG

まずは Chef-solo を動作させるために必要な設定をしましょう。

Chef リポジトリの作成

Chef で使用するファイルは、ソースコードのようにバージョン管理することが推奨されています。 このチュートリアルでは Git でバージョン管理します。

Hint

ディレクトリは任意の場所で構いません。このチュートリアルでは、 C:\chef-repo にリポジトリを作成します。以降は自分のディレクトリに読み替えてください。

GitHub for Windows を起動して、 add ボタンをクリックします。

_images/chef-repo-create-01.JPG

以下のように入力して、 create ボタンをクリックします。

  • リポジトリ名 : chef-repo
  • 説明 : chef-solo repository
  • ディレクトリ : C:\chef-repo (右の ボタンをクリックして、 C:\ を選択します)
_images/chef-repo-create-02.JPG

現時点のディレクトリは以下のようになっているはずです。

_images/chef-repo-create-03.JPG

まだリポジトリを作成しただけでコミットしてないので、コミットしておきましょう。 GitHub for Windows で作成したリポジトリを選択します。

_images/chef-repo-create-04.JPG

最初のコミットなので、コミットメッセージとして Init を入力します。これは好きなメッセージで構いません。

_images/chef-repo-create-05.JPG

リポジトリの作成は以上です。

_images/chef-repo-create-06.JPG

solo.rb

Chef-solo の設定は C:\chef-repo\solo.rb に記述します。 最低限必要なのは file_cache_pathcookbook_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 をダウンロードしましょう。

_images/opscode-win-recipe-01.JPG

ダウンロードした ZIP を解凍してできた chef_handlerwindowsC:\chef-repo\cookbooks に移動します。

_images/opscode-win-recipe-02.JPG

次にこの 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 を実行してみます。