Chefに入門(4) 〜knife-soloの導入〜


[入門Chef Solo](http://www.amazon.co.jp/%E5%85%A5%E9%96%80Chef-Solo-Infrastructure-as-Code-ebook/dp/B00BSPH158)のお勉強ポスト4回目にして最終回です。
まだほんの序盤ですので、続きは書籍をチェックしていただければと思います。
説明がとても分かりやすく、「自分でもレシピ書いてみようかな！」という気持ちにさせてもらえます。

さて、話は戻りますが、
knife-soloを入れれば、ローカルからレシピの編集、サーバへの転送、Chef-soloの実行が可能になるらしいです。
というわけで、[前回](http://qiita.com/us10096698/items/12a8797c07465ed3552a)のnginxのレシピをknife-solo経由でVagrant VMにアップロード、Chef-soloを実行する手順を試してみました。


##インストール

以下のコマンド一発でインストールできます。

```
$ sudo gem install knife-solo
```

## Vagrantで立ち上げたサーバへのSSH設定
knife-soloから操作できるようにするために、サーバに対するSSHを設定しておきます。

Vagrantなら以下のコマンドでSSH用の設定ファイルを書き出してくれますので、以下のように実行すればOKです。`precise64`の部分は任意のホスト名です。

```
$ vagrant ssh-config --host precise64 >> ~/.ssh/config
$ ls ~/.ssh
config      id_rsa      id_rsa.pub  known_hosts
$ ssh precise64
Welcome to Ubuntu 12.04.1 LTS (GNU/Linux 3.2.0-29-virtual x86_64)

 * Documentation:  https://help.ubuntu.com/
Last login: Tue Oct 15 07:19:40 2013 from 172.16.215.1
vagrant@precise64:~$
```

入れました。

## Chefリポジトリの作成、Gitにコミット
お好きな場所にchefリポジトリを作成します。

```
$ knife solo init chef-repo
WARNING: No knife configuration file found
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...
```

折角なのでリポジトリはGitで管理してみます。

```
$ cd chef-repo/
$ git init
$ git add .
$ git commit -m "first commit"
[master (root-commit) baed1ff] first commit
 2 files changed, 8 insertions(+)
 create mode 100644 .chef/knife.rb
 create mode 100644 .gitignore
 create mode 100644 data_bags/.gitkeep
 create mode 100644 nodes/.gitkeep
 create mode 100644 roles/.gitkeep
 create mode 100644 site-cookbooks/.gitkeep
```

## Vagrant VMの準備
といっても`prepare`コマンド一発です。

```
$ knife solo prepare precise64
Bootstrapping Chef...
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6790  100  6790    0     0   7237      0 --:--:-- --:--:-- --:--:--  9672
Downloading Chef 11.6.2 for ubuntu...
Installing Chef 11.6.2
(Reading database ... 35979 files and directories currently installed.)
Preparing to replace chef 11.6.2-1.ubuntu.12.04 (using .../chef_11.6.2_amd64.deb) ...
Unpacking replacement chef ...
Setting up chef (11.6.2-1.ubuntu.12.04) ...
Thank you for installing Chef!
Generating node config 'nodes/precise64.json'...
```

precise64に対するノード設定ファイル(JSON)が出来上がるので、こちらもGit管理に加えます。

```
$ git add nodes/precise64.json
$ git commit -m 'add node json file'
[master 8230017] add node json file
 1 file changed, 1 insertion(+)
 create mode 100644 nodes/precise64.json
```

## クックブックおよび設定ファイル群の作成
nginx用のクックブックおよび設定ファイル群を作ります。
各設定ファイルの中身は[前回](http://qiita.com/us10096698/items/12a8797c07465ed3552a)コードを示した3ファイルと同じです。

```
$ knife cookbook create nginx -o site-cookbooks
** Creating cookbook nginx
** Creating README for cookbook: nginx
** Creating CHANGELOG for cookbook: nginx
** Creating metadata for cookbook: nginx
```

```
$ vi site-cookbooks/nginx/recipes/default.rb 
$ vi site-cookbooks/nginx/templates/default/nginx.conf.erb
$ vi nodes/precise64.json 
```

##Knife soloの実行

コマンド一発で実行できます。

```
$ knife solo cook precise64
```

これでprecise64のサーバ上でnginxが立ち上がりました。
Git管理に加えます。

```
$ git add site-cookbooks/nginx
$ git commit -m 'Add nginx recipe'
[master 51a5039] Add nginx recipe
 5 files changed, 135 insertions(+)
 create mode 100644 site-cookbooks/nginx/CHANGELOG.md
 create mode 100644 site-cookbooks/nginx/README.md
 create mode 100644 site-cookbooks/nginx/metadata.rb
 create mode 100644 site-cookbooks/nginx/recipes/default.rb
 create mode 100644 site-cookbooks/nginx/templates/default/nginx.conf.erb
```

基本はこの流れでクックブック、レシピを作成していくみたいです。
なるほど。。。