chef実践入門　実機にて実施メモ (1)　Chef Soloによるvagrant開発環境の構築


[Chef実践入門](http://www.amazon.co.jp/dp/477416500X "Chef実践入門") 第2章のChef Soloによるローカル開発環境の自動構築　を実機にて検証したメモ
#1.Vagrantにて環境準備
0.前提
ホストOSはMacOSX10
vagrant,birtualbox,ruby,gemはインストール済

1.適当な場所にcentosフォルダ作成

```bash:
mkdir centos
cd centos/
```

2.vagrantbox追加(centos7.1)

```bash:
vagrant box add opscode-centos-7.1 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-7.1_chef-provisionerless.box
```

3.仮想サーバ起動

```bash:
vagrant init opscode-centos-7.1
vagrant up
```

4.vagrant sshで接続確認

```bash:
vagrant ssh
```

5.ホスト名:webdbにてssh接続できるように設定

```bash:
vagrant ssh-config --host webdb >>~/.ssh/config
```

6.ssh接続の確認　→ OK

```bash:
ssh webdb
```

7.プライベートネットワークの設定

```ruby:Vagrantile
 config.vm.network "private_network", ip: "192.168.33.10"
```

8.vagrant再起動

```bash:
vagrant halt
vagrant up
```

#2.Chef Soloのインストール
1.ホストOS(Mac側）にknife soloとBerkshelfのインストール

```bash:
sudo gem install knife-solo
sudo gem install berkshelf
```

2.knife-soloでリポジトリ作成(centosディレクトリ内にchefディレクトリを作成してそこをリポジトリとする。）

```bash:
mkdir chef
cd chef
knife solo init .
```

3.ls でディレクトリ確認
![Kobito.9QJfnE.png](https://qiita-image-store.s3.amazonaws.com/0/72578/f5028b42-5511-8043-d6b6-6c83c1ff5cf2.png "Kobito.9QJfnE.png")

4.knife solo で　vagrantのゲストOS　webdbにChef Soloをインストール

```bash:
knife solo bootstrap webdb
```

5.ゲストOSにChef Soloがインストールされている事を確認

```bash:
ssh webdb
chef-solo -v
exit
```

#3.dstatをインストールするcookbookの作成とNode(ゲストOS側）への適用

1.cookbookを作成

```bash:
knife cookbook create dstat -o site-cookbooks
```


2.site-cookbooks/dstat/recipes/default.rb を編集

```ruby:site-cookbooks/dstat/recipes/default.rb
package "dstat" do
	action :install
end
```

3.Nodeオブジェクト設定ファイル(webdb.json)の編集

```json:nodes/webdb.json
{
  "run_list": [
  "recipe[dstat]"
  ],
}
```
4.knife-solo で　ChefSoloを実行し、Nodeをプロビジョニング

```bash:
  knife solo cook webdb
```

5.sshでwebdbに接続し、dtstatを実行してインストールを確認する。

```bash:
  ssh webdb 
  dstat
  exit
```

#4.Apache,MySQLインストールするcookbookの作成とNode(ゲストOS側）への適用
1.cookbookを作成

```bash:
knife cookbook create yumsetup -o site-cookbooks
knife cookbook create apache -o site-cookbooks
knife cookbook create mysql -o site-cookbooks
```

2.Nodeオブジェクト設定ファイル(webdb.json)の編集

```json:nodes/webdb.json
{
  "run_list": [
  "recipe[yumsetup]",
  "recipe[dstat]",
  "recipe[apache]",
  "recipe[mysql]"
  ]
}
```

3.cookbookの編集

```ruby:site-cookbooks/yumsetup/recipes/default.rb
yum_package "yum-fastestmirror" do
  action :install
end

execute "yum-update" do
  user "root"
  command "yum -y update"
  action :run
end
```


```ruby:site-cookbooks/apache/recipes/default.rb
#install
package "httpd" do
	action :install
end

#chkconfig,start
service "httpd" do
	action [ :enable, :start]
end
```

```ruby:site-cookbooks/mysql/recipes/default.rb
#install
package "mysql-server" do
	action :install
end
#chkconfig,start
service "mysqld" do
	action [ :enable, :start]
end
```

4.knife-solo で　ChefSoloを実行し、Nodeをプロビジョニング

```bash:
  knife solo cook webdb
```

5.エラー発生。mysqlのインストールができない
→ググったところ、centos7からyumリポジトリにmysqlを含んでいないとの事
→mysqlについては後日Berksherfで既存クックブックを使って作成する方針として一旦置いておく
→webdb.jsonから"recipe[mysql]"行を外す

```json:nodes/webdb.json
{
  "run_list": [
  "recipe[yumsetup]",
  "recipe[dstat]",
  "recipe[apache]"
  ]
}
```
6.プロビジョニングを再実行→OK

```bash:
  knife solo cook webdb
```


#5.vagrant destroyして環境を破棄した後、再度chefにて構築できる事を確認

1.vagrant destroy

```bash:
  vagrant destroy -f
```

2.vagrant up

```bash:
  vagrant up
```

＊vagrant sshで接続し、初期化された状態になっている事を確認

3.再度Chef実行

```bash:
knife solo bootstrap webdb
```

再度プロビジョニングされ、yum update, dsata install,apache installが走る事を確認