Chefのお勉強 〜Vagrant & Chef 導入編〜

# 概要
立派な Chef になりたいので、Vagrant を導入し、仮想環境で Chef Solo のお勉強をしてみたいと思います。
まずは Vagrant と Chef の導入を行ってみます。

Chef とか全く触ったことない！とりあえず触ってみたいけど、試しに触るための導入ってどうしたら良いの！？と言った人向けです。

環境は OS X Yosemite 10.10.4 で行っています。

# Vagrant
まずは Vagrant を導入します。環境構築を便利にしてくれる素敵なツールです。

## インストール
以下の2つのソフトを公式サイトからダウンロードしインストールします。

- VirtualBox
- Vagrant


インストールができているかどうか`vagrant -v`を叩いてみて確認してみます。

```bash
$ vagrant -v
Vagrant 1.7.3
```

入りました！

## Vagrant box add
仮想イメージ [Bento](https://github.com/opscode/bento) から Vagrant に追加します。
Vagrant 用 OS イメージは「box」と呼ばれるているそうです。

今回は CentOS 7.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
```

## Vagrant up
まずは`vagrant init`を叩き Vagrantfile という設定ファイルをカレントディレクトリに作成します。
カレントディレクトリにできるとのことだったので、`~/work/chef-exercise`というディレクトリを作ってそこで実行しました。

```bash
$ vagrant init opscode-centos-7.1
```

Vagrantfile のファイルの中身な以下のコードと大量のコメントとなっていました。

```ruby:Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "opscode-centos-7.1"
end
```

ちゃんと設定したくなったら色々読んでみます。

`vagrant up`を叩けば仮想サーバが起動します。

```bash
$ vagrant up
```

仮想サーバへのログインは`vagrant ssh`で行えます。

```bash
$ vagrant ssh
Last login: Sat Apr  4 08:04:39 2015 from 10.0.2.2
[vagrant@localhost ~]$
```

入れました！

ちなみに、サーバの停止は`vagrant halt`、サーバの破棄は`vagrant destroy`で行えるそうです。

## SSH configuration
`ssh <hostname>`でログインしたいので、`~/.ssh/config`に設定を記載します。
ssh config 用の設定は`vagrant ssh-config`で出力できるそうです。

```bash
$ vagrant ssh-config
Host default
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/necojackarc/work/chef-exercise/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
```

下記の通り叩けば、`~/.ssh/config`に設定を追記できます。
今回はホスト名を`chef-ex`としました。

```bash
$ vagrant ssh-config --host chef-ex >> ~/.ssh/config
```

試しに入ってみます。

```bash
$ ssh chef-ex
Last login: Thu Jul 16 05:12:38 2015 from 10.0.2.2
[vagrant@localhost ~]$
```

ログイン大成功！

## Network configuration
現在 localhost の 2222番ポートに接続しているので、プライベートネットワーク設定を行い、Private IP を割り当てます。

Vagrant のプライベートネットワーク設定に関する説明は以下の記事が良さそうでした。

- [Vagrantのネットワーク周りのあれこれ](http://labs.septeni.co.jp/?p=966)

Vagrantfile 内で network で検索したら該当箇所が見つかったため、これのコメントアウトを外します。

```ruby:Vagrantfile
  # Create a private network, which allows host-only access to the machine
  # using a specific IP.
  config.vm.network "private_network", ip: "192.168.33.10"
```

設定反映のために再起動します。

```bash
$ vagrant halt
$ vagrant up
```

試しに接続してみます。

```bash
$ ssh -i /Users/necojackarc/work/chef-exercise/.vagrant/machines/default/virtualbox/private_key vagrant@192.168.33.10
Last failed login: Thu Jul 16 05:34:15 UTC 2015 from 192.168.33.1 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Thu Jul 16 05:33:18 2015 from 10.0.2.2
[vagrant@localhost ~]$
```

できましたー！！

# Chef Solo
仮想マシンにログインし、Chef をインストールします。
Chef Solo は Chef に付属しているそうです。

```bash
$ vagrant ssh
$ curl -L https://www.opscode.com/chef/install.sh | sudo bash
```

動作確認します。

```bash
$ chef-solo -v
Chef: 12.4.1
```

入った入った！

# まとめ
導入はあっさり終わりました。
次は資料を参考に実際に Chef を触ってみたいと思います。

立派なシェフ目指して進み始めます……！

# 次回
[ChefでCentOS7にMySQLを導入する方法](http://qiita.com/necojackarc/items/552f0bb43ae07789362d)

# 参考
- [Chef実践入門――コードによるインフラ構成の自動化](http://gihyo.jp/book/2014/978-4-7741-6500-4)