Windows上にVagrant VMを使ったChefの開発環境を作る

| コメントをどうぞ

前回の記事では、公開されているChefのCookbookを利用して簡単なサーバー環境を構築しました。

しかし公開されているものだけでは望みの環境は作れません。自前で開発する必要も出てきます。

Chef Development Kit というものが公式で配布されていましたが、Windows版はComing Soonとのこと。 なので自力で開発環境を作成します。

Windows上に開発に必要なツールをインストールして、実際に作成したChefレシピをVagrant VMに適用するところまでやってみます。

1. knife-soloのセットアップ

knife-soloは、Chefをリモート実行するためのツールです。

RubyGemsを使ってインストールを行うため、Rubyをインストールする必要があります。

1.1 Rubyのインストール

RubyInstaller for Windowsからインストーラをダウンロードし、インストールを行います。バージョンは1.9.3を利用します。

「インストール先とオプションの指定」で、「Ruby の実行ファイルへ環境変数 PATH を設定する」にチェックを入れておけば、自身でRubyのパスを環境変数に追加する手間が省けます。

1.2 Development Kitの適用

通常のRubyだけではknife-soloをインストールすることができません。Development Kitの適用が必要です。

RubyInstaller for WindowsからRuby 1.9.3用のDevelopment Kitをダウンロードし、適当なディレクトリに展開します。

コマンドプロンプトで該当のディレクトリに移動し、以下のコマンドを順に実行することで適用されます。

> ruby dk.rb init
> ruby dk.rb install

 1.3 knife-soloのインストール

RubyGemsでknife-soloのインストールを行います。

> gem install knife-solo

 1.4 cwRsyncのインストール

Chefレシピをリモート転送するために必要です。

こちらからフリー版をダウンロードします。

アーカイブを適当なフォルダに展開します。環境変数に追加するので、 C:\cwRsync あたりで良いでしょう。展開後、環境変数PATHに該当フォルダを追加してください。

ここまででknife-soloのセットアップは完了です。

2. Cookbookを作る

ここからはChefのCookbook作成について記述します。

2.1 Chefリポジトリの作成

knife-soloを使って、Chefのリポジトリを作成します。以下のコマンドを実行すると、コマンド実行ディレクトリにリポジトリのディレクトリが作成されます。

> knife solo init chef-repo

“chef-repo” はリポジトリ名で、任意の名前を指定可能です。

2.2 Cookbookのひな形を作る

以下のコマンドでCookbookのひな形を作ることができます。

Chefリポジトリに移動し、以下のコマンドを実行します。

> knife cookbook create sample -o site-cookbooks

“sample” はCookbook名で、任意の名前を指定可能です。

ひな形はsite-cookbooksディレクトリに出力されます。

2.3 レシピのファイルの編集

出力されたひな形をいじります。

今回はサンプルとして、/tmp/hogehogeディレクトリを作成するだけのレシピを作成することにします。

site-cookbooks/sample/recipes/default.rb を以下のように編集します。

directory "/tmp/hogehoge" do
 mode 0755
 action :create
end

上記の “directory” はリソースと呼ばれます。directory リソースはディレクトリの作成や削除、オーナーの指定などを行うことができます。

リソースには他にも様々なタイプがあり、パッケージのインストールやユーザの作成なども行うことができます。

3. Vagrant VMに作成したレシピを適用する

knife-soloを使って、Vagrant VMに対して、作成したCookbookを適用します。

Vagrantのインストール、VM起動方法については前回の記事を参照してください。

 3.1 knife-soloの実行準備

以下のコマンドを実行することで、knife-soloによるChef実行のための準備が行われます。

> knife solo prepare -i <秘密鍵のパス> -p <sshポート> <ユーザ>@<実行先ホスト名>

Windows の場合、vagrantの秘密鍵は C:\Users\<ユーザディレクトリ>.vagrant.d\insecure_private_key にあります。

sshポートが2200、ユーザ名がvagrantの場合、以下のようになります。

> knife solo prepare -i "C:\Users\<ユーザディレクトリ>\.vagrant.d\insecure_private_key" -p 2200 vagrant@127.0.0.1

コマンドを実行すると、<Chefリポジトリ>/nodes 直下に <ホスト名>.json が出力されます。(上記のとおり実行した場合は 127.0.0.1.json)

3.2 実行するCookbookを指定する

<ホスト名>.json を以下のように編集し、作成したCookbookを適用対象にします。

{"run_list":["sample"]}

“sample”は作成したCookbookの名称です。

3.3 knife-soloでchefをリモート実行する

knife-soloを使ってVagrant VMにレシピを転送し、Chefを実行します。

以下のコマンドを入力します。

> knife solo cook -i <秘密鍵のパス> -p <sshポート> <ユーザ>@<実行先ホスト名>

Chef Client finished, 1/1 resources updated.. のような文言が表示されれば成功です。

puttyなどのsshクライアントでVMにログインし、/tmp以下を確認します。hogehogeディレクトリが作成されているはずです。

レシピを変更して適用する場合は、上記のcookコマンドを再度実行します。これで開発したレシピを試せる環境が出来上がりました。

その他補足等

  • レシピを何度も適用する場合は、vagrant-vbox-snapshot プラグインを使って初期インストール時のスナップショットを取っておくと便利
  • 次はこの環境を使ってinfoScoopのレシピを作ってみるかもしれない

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>