MacにVagrantでCentOS+FuelPHPの環境を作成する（その2. Ansibleを使ってみる） 


[その1](http://qiita.com/negibouze/items/8ff4deb2e25b890d7827)で作成したshellをAnsibleに変えてみる

## 実施環境
* OS: OS X Yosemite (10.10.5)
* Vagrant: 1.7.4
* Virtualbox: 5.0.8 r103449
* Ansible: 1.9.4

## 目標
Ansible + Vagrantを使用して下記環境を構築する

* OS: CentOS6.6
* Server: Apache
* PHP: PHP5.6
* FuelPHP: FuelPHP1.7.3

## 今回のゴール
`vagrant up`だけでFuelPHPのWelcomeが表示できるようにする

## 今回の成果物
こちらに置いてあります
[negibouze/vagrant-fuelphp_part2](https://github.com/negibouze/vagrant-fuelphp_part2)

## 1. 各ツールの準備（インストール済みの場合不要）
#### step1. Homebrewをインストールする  
（省略）
#### step2. Homebrew Caskをインストールする
（省略）
#### step3. VirtualBoxをインストールする
（省略）
#### step4. Vagrantをインストールする
（省略）
#### step5. Vagrant-vbguest pluginをインストールする
（省略）
#### step6. Ansibleをインストールする

```
$ brew install ansible
```

## 2. Vagrantfileの編集
#### step1. $scriptを削除  
下記は不要になるため削除

```
$script = <<SCRIPT
  # 中略
SCRIPT
```

#### step2. provisionを編集

```
config.vm.provision "ansible" do |ansible|
  ansible.playbook = "provisioning/site.yml"
  ansible.inventory_path = "provisioning/hosts"
  ansible.limit = 'all'
end
```

ここまででこんな感じになります

```
Vagrant.configure(2) do |config|

  config.vm.box = "puppetlabs/centos-6.6-64-nocm"
  config.vm.box_url = "https://vagrantcloud.com/puppetlabs/boxes/centos-6.6-64-nocm/versions/1.0.2/providers/virtualbox.box"

  config.vm.define :"web1" do |host|
    host.vm.hostname = "web1"
    host.vm.network :private_network, ip: "192.168.100.11", netmask: "255.255.255.0"
  end

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provisioning/site.yml"
    ansible.inventory_path = "provisioning/hosts"
    ansible.limit = 'all'
  end
end
```

## 3. Ansibleのファイルを作成 
#### step1. Ansible用のディレクトリ作成（任意）
```
$ mkdir provisioning && cd $_
```
#### step2. inventory fileを作成
```
$ touch hosts
```
#### step3. Playbookを作成
```
$ touch site.yml
```
## 4. hostsを編集する
#### step1. 対象サーバのIPアドレスを追加
```
[server]
192.168.100.11
```
## 5. Playbookを編集する  
[その1](http://qiita.com/negibouze/items/8ff4deb2e25b890d7827)で記述したshellの内容をYAMLに書き換える 
#### step1. 書き始め
```
---
- hosts: server
  sudo: true
  user: vagrant
  tasks:
    # 処理は後で追加
  handlers:
    # 処理は後で追加
``` 
#### step2. Timezoneを変更
```
- name: change timezone
  command: cp -p /usr/share/zoneinfo/Japan /etc/localtime
```
#### step3. iptablesを無効にする
```
- name: remove all rules from iptables
  command: /sbin/iptables -F
- name: iptables stop
  command: /sbin/service iptables stop
- name: iptables off
  command: /sbin/chkconfig iptables off
```
#### step4. httpd(apache)をインストールする
notifyを使用してhttpd.confをコピーと起動設定を行う

**tasks**

```
- name: install httpd
  yum: name=httpd state=present
  notify:
    - copy httpd.conf
    - enable launch settings
```

**handlers**

```
  - name: copy httpd.conf
    copy: src=../httpd.conf dest=/etc/httpd/conf/httpd.conf
  - name: enable launch settings
    command: /sbin/chkconfig httpd on
```

#### step5. Gitをインストールする（やらなくても良い） 
！FuelPHPをgitで持ってくるのをやめたためこの手順は不要でした（ここは時間がかかるのでやらない方が良いです）
* 多少古くても良い場合

```
- name: install old version git
  yum: name=git state=present
```

* 最新版を入れる場合

```
- name: install dependency packages
  yum: pkg={{item}} state=present
  with_items:
    - curl-devel
    - expat-devel
    - gettext-devel
    - openssl-devel
    - zlib-devel
    - perl-ExtUtils-MakeMaker
- stat: path=/usr/local/src/git
  register: git_repo
- name: temporary install old version git
  yum: name=git state=present
  when: not git_repo.stat.exists
- name: clone(or pull) latest version git
  git: repo=https://git.kernel.org/pub/scm/git/git.git dest=/usr/local/src/git
- name: remove old git
  yum: name=git state=absent
  when: not git_repo.stat.exists
- name: compile git
  shell: "{{ item }}"
  args:
    chdir: /usr/local/src/git
  with_items:
    - make prefix=/usr/local all
    - make prefix=/usr/local install
```

#### step6. PHP5.6をインストールする
notifyを使用してphp.iniをコピーする  

**tasks**

```
- name: install epel
  yum: name=http://ftp.iij.ad.jp/pub/linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm state=present
- name: install remi
  yum: name=http://rpms.famillecollet.com/enterprise/remi-release-6.rpm state=present
- name: install php & packages (& dependencies)
  yum: pkg={{item}} state=present enablerepo=remi,remi-php56
  with_items:
    - php
    - php-common
    - php-cli
  notify: copy php.ini
```

**handlers**

```
- name: copy php.ini
  copy: src=../php.ini dest=/etc/php.ini
```

#### step7. curlを更新する（やらなくても良い）

```
- name: install latest version curl
  yum: pkg={{item}} state=present
  with_items:
    - http://www.city-fan.org/ftp/contrib/yum-repo/city-fan.org-release-1-13.rhel6.noarch.rpm
    - libcurl
```

#### step8. FuelPHPをインストールする  
* gitプロトコルが使える場合はこちらでいけるかも

```
$ oil create <project_name>
```

* gitプロトコルが使えない場合  
notifyを使用してhttpdを再起動する  

**tasks**

```
- stat: path=/usr/local/src/fuelphp-1.7.3.zip
  register: fuelphp_zip
- name: download fuelphp1.7.3
  get_url: url=http://fuelphp.com/files/download/34 dest=/usr/local/src/fuelphp-1.7.3.zip
  when: not fuelphp_zip.stat.exists
- stat: path=/srv/example/fuelphp
  register: fuelphp
- name: create target directory
  command: mkdir -p /srv/example
- name: unzip fuelphp
  command: unzip -o /usr/local/src/fuelphp-1.7.3.zip -d /srv/example
  when: not fuelphp.stat.exists
- name: rename unzip directory
  command: mv fuelphp-1.7.3 fuelphp
  args:
    chdir: /srv/example/
  when: not fuelphp.stat.exists
- name: install oil
  shell: get.fuelphp.com/oil | sh
- name: refine install
  command: php oil refine install
  args:
    chdir: /srv/example/fuelphp
  notify: restart httpd
```

**handlers**

```
- name: restart httpd
  service: name=httpd state=restarted
```

## 6. 動作確認
#### step1. 仮想マシンを作成する

```
$ vagrant up
```

#### step2. 動作確認
ブラウザで「192.168.100.11」を開いて下記画面が表示されればOK  
![welcome.png](https://qiita-image-store.s3.amazonaws.com/0/37319/61f43247-ebad-91c9-4678-7b7e921d1292.png)