Windowsユーザのための Vagrant 入門 [利用編:プロビジョニングで ansible 最新環境を構築する]

# Windowsユーザのための Vagrant 入門 [利用編:プロビジョニング]


## Update Info:

* paramiko のインストールに失敗するようになってたようなので加筆しましたm(_ _)m (2016/06/18 21:27)
  * libpython2.7-dev libffi-dev libssl-dev のインストールを追加
* 2.2.0 対応を確認したので文言などを変更しました

## 目的

* Windows ユーザにも Unix ユーザ同様に vagrant を利用してもらいたい
  * Unix ユーザの方で CentOS Box を使う場合も、PowerShell 部分を読み替えて頂くだけで大丈夫かと思います

## 前提条件

* Windows 10 Pro VM 上で作業しています
  * Windows 上のシェルは PowerShell を利用しています
  * PowerShell のプロンプトは PS> と表記します
* Box は今回は ubuntu/trusty64 を使用します
* here document(ヒア ドキュメント)利用時は Cygwin 上での作業を想定
* その他は前記事[環境構築編]を参照ねがいます http://qiita.com/hirofumihida/items/3c75d45f0e6178d49aa1

## 前回までのおさらい

* 以下の2記事をすでに実施済みか相応の経験があると躓きにくいと思います
  * [環境構築]http://qiita.com/hirofumihida/items/3c75d45f0e6178d49aa1
  * [ローカルファイルの共有] http://qiita.com/hirofumihida/items/01f244320ccac714261b

## 今回やること

* 前回同様に特徴的な使い方から Provisioning(プロビジョニング) をやってみます

## Provisioning とは?

ref. https://www.vagrantup.com/docs/getting-started/provisioning.html

* 簡単に言うと、通常 OS にログインしてから yum, apt-get などのパッケージマネージャで個別にインストールしている作業を自動で行えます
* これの何が嬉しいかというと、一例として
  * 自動化で手間を省ける
  * だれが作っても同じ環境を構築できる

などがあげられます
でははじめましょう

## Ansible2.2 環境を Ubuntu/trusty 上に自動で構築する

* Virtual Box と PowerShell, Here Document を使う場合は Cygwin を開いておいてください

### 1. Box の追加

#### 1-1. ubuntu/trusty64 box を追加します

* 通信状況にも依存しますが 2-30 分かかるかもしれません

```shell-session:共通
PS> vagrant box add ubuntu/trusty64
```

#### 1-2. 追加直後では不要ですが、追加後に時間がたっているときは update しておきます

```shell-session:共通
PS> vagrant box update --box ubuntu/trusty64
```

### 2. Box の初期化

#### 2-1. 作業フォルダの作成と移動

```shell-session:PS
PS> ni vagrant\ubuntu\trusty64\ansible2.2-test01 -ItemType Directory
PS> cd .\vagrant\ubuntu/trusty64\ansible2.2-test01
```

```shell-session:cygwin
$ mkdir -p ./vagrant/ubuntu/trusty64/ansible2.2-test01
$ cd ./vagrant/ubuntu/trusty64/ansible2.2-test01
```

#### 2-2. Box を初期化する

```shell-session:共通
PS> vagrant init ubuntu/trusty64
```

### 3. Provisioning の設定をする

#### 3-1. bootstrap.sh ファイルの作成

```shell-session:PS
PS> notepad.exe bootstrap.sh
```
* 以下の内容をコピペしてください

```shell-session:PS
#!/usr/bin/env bash

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8

dpkg-reconfigure locales
export DEBIAN_FRONTEND=noninteractive
sudo apt-get -y update
sudo apt-get -y install python-setuptools git libpython2.7-dev libffi-dev libssl-dev

sudo easy_install pip
sudo -H pip install paramiko PyYAML Jinja2 httplib2 six

git clone git://github.com/ansible/ansible.git --recursive
sudo chown -R vagrant: /home/vagrant/ansible
  echo "source /home/vagrant/ansible/hacking/env-setup > /dev/null" >> /home/vagrant/.bashrc
```
* cygwin のひとは Here Document を使って作成してもよいでしょう

```shell-session:cygwin
$ cat << EOF > bootstrap.sh
#!/usr/bin/env bash

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8

dpkg-reconfigure locales
export DEBIAN_FRONTEND=noninteractive

sudo apt-get -y update
sudo apt-get -y install python-setuptools git libpython2.7-dev libffi-dev libssl-dev

sudo easy_install pip
sudo -H pip install paramiko PyYAML Jinja2 httplib2 six

git clone git://github.com/ansible/ansible.git --recursive
sudo chown -R vagrant: /home/vagrant/ansible
echo "source /home/vagrant/ansible/hacking/env-setup > /dev/null" >> /home/vagrant/.bashrc
EOF
```
```shell-session:cygwin
$ cat bootstrap.sh
```

#### 3-2. Vagrantfile ファイルの編集

* 最終行の end の前に以下の1行を追記します

```shell-session:PS
PS> notepad.exe Vagrantfile
```

```shell-session:cygwin
$ vi Vagrantfile
```

```shell-session:編集前
  # SHELL
end
```
```shell-session:編集後
  # SHELL
  config.vm.provision :shell, path: "bootstrap.sh"
end
```

```shell-session:PS
PS> gc .\Vagrantfile | where { $_ | Select-String -Pattern "#" -NotMatch } | where { $_ | Select-String -Pattern "[^\r\n$]" }
```

```shell-session:cygwin
$ grep -v \# Vagrantfile | grep -v ^$
```

```shell-session:出力例
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision :shell, path: "bootstrap.sh"
end
```

もしくはHereDocumentで
```shell-session
$ cat << EOF > Vagrantfile
Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.provision :shell, path: "bootstrap.sh"
end
EOF
cat Vagrantfile
```

### 4. Box の起動

#### 4-1. Box を起動する

```shell-session:共通
PS> vagrant up
```

#### 4-2. Box に接続する

```shell-session:共通
PS> vagrant ssh
```

### 5. ansible がインストールされていることを確認

```shell-session:共通
$ ansible --version
```

```shell-session:出力例
ansible 2.2.0 (devel 20754c1094) last updated 2016/06/18 12:50:40 (GMT +000)
  lib/ansible/modules/core: (detached HEAD f0f5272f90) last updated 2016/06/18 12:50:57 (GMT +000)
  lib/ansible/modules/extras: (detached HEAD 6cb6829384) last updated 2016/06/18 12:51:13 (GMT +000)
  config file =
  configured module search path = Default w/o overrides
```

## 終了