ansibleの勉強メモ


[ドットインストールのAnsible入門](http://dotinstall.com/lessons/basic_ansible)の学習メモ

## 公式サイト
http://www.ansible.com/home

## vagrantでcentos環境を構築する
###その前に、vagrantとは・・
[vagrantとは](http://dev.classmethod.jp/server-side/virtual-box-vagrant/)、[Vagrant1.6のDocker provider](http://deeeet.com/writing/2014/05/08/vagrant-docker-provider/)を読んでみるに、vagrantとは仮装マシン(virtualbox、AWS..)を操作するためのTool(=interfaceを提供）のようだ。対象レイヤーは、CPU、メモリといったところから、OS、ミドルウェアもプロビジョニングできるのかもしれない。実際は、OSくらいまでで、それ以降はansibleのような構成管理ツールに任せることになるのだろう。Dockerを組み合わせた場合は、Vagrant上のOSがDocker HostOSになってコンテナを動かすことになる。これはリンクの後者の方に該当。

### Mac OSにvagrantをインストールする
#### brewでインストールする
```zsh
% brew install caskroom/cask/brew-cask
% brew cask install vagrant
```

#### vagrantのセットアップ
```
% vagrant init chef/centos-6.5
```

Vagrantfileを編集して、`host`、`web`、`db`の3台構成にする。

```Vagrantfile
 17   config.vm.define "host" do |node|
 18     node.vm.box = "chef/centos-6.5"
 19     node.vm.hostname = "host"
 20     node.vm.network :private_network, ip: "192.168.43.51"
 21   end
 22
 23   config.vm.define "web" do |node|
 24     node.vm.box = "chef/centos-6.5"
 25     node.vm.hostname = "web"
 26     node.vm.network :private_network, ip: "192.168.43.52"
 27   end
 28
 29   config.vm.define "db" do |node|
 30     node.vm.box = "chef/centos-6.5"
 31     node.vm.hostname = "db"
 32     node.vm.network :private_network, ip: "192.168.43.53"
 33   end
```
 
```zsh
 % vagrant up
 % vagrant status
Current machine states:

host                      running (virtualbox)
web                       running (virtualbox)
db                        running (virtualbox)

This environment represents multiple VMs. The VMs are all listed
above with their current state. For more information about a specific
VM, run `vagrant status NAME`.
```

### ansibleを導入
hostへアクセス

```
% vagrant ssh host
```

```
[vagrant@host ~]$ wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
[vagrant@host ~]$ sudo rpm -ivh epel-release-6-8.noarch.rpm
警告: epel-release-6-8.noarch.rpm: ヘッダ V3 RSA/SHA256 Signature, key ID 0608b895: NOKEY
準備中...                ########################################### [100%]
   1:epel-release           ########################################### [100%]
[vagrant@host ~]$ sudo yum -y install ansible
[vagrant@host ~]$ ansible --version
ansible 1.9.0.1
  configured module search path = None
```

### sshでHostからWeb,DBへアクセスできるようにする

鍵認証を設定

```ssh/config
[vagrant@host ~]$ cat ~/.ssh/config
Host web
  HostName 192.168.43.52
Host db
  HostName 192.168.43.53
```

```
[vagrant@host ~]$ ssh-keygen -t rsa
[vagrant@host ~]$ ssh-copy-id web
[vagrant@host ~]$ ssh-copy-id db
```

### ansibleを使ってみよう

```
[vagrant@host ~]$ ansible all -i hosts -m ping
192.168.43.53 | success >> {
    "changed": false,
    "ping": "pong"
}

192.168.43.52 | success >> {
    "changed": false,
    "ping": "pong"
}

[vagrant@host ~]$ cat hosts
[web]
192.168.43.52

[db]
192.168.43.53
```

ansible.cfgをセットしてみる

```
[vagrant@host ~]$ cat ansible.cfg
[defaults]
hostfile = ./hosts
[vagrant@host ~]$ ansible all -m ping
192.168.43.52 | success >> {
    "changed": false,
    "ping": "pong"
}

192.168.43.53 | success >> {
    "changed": false,
    "ping": "pong"
}
```

#### playbookを作ってみる

```zsh
[vagrant@host ~]$ ansible-playbook playbook.yml

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.43.52]
ok: [192.168.43.53]

TASK: [add a new user] ********************************************************
changed: [192.168.43.53]
changed: [192.168.43.52]

PLAY RECAP ********************************************************************
192.168.43.52              : ok=2    changed=1    unreachable=0    failed=0
192.168.43.53              : ok=2    changed=1    unreachable=0    failed=0

[vagrant@host ~]$ ansible-playbook playbook.yml

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.43.52]
ok: [192.168.43.53]

TASK: [add a new user] ********************************************************
ok: [192.168.43.53]
ok: [192.168.43.52]

PLAY RECAP ********************************************************************
192.168.43.52              : ok=2    changed=0    unreachable=0    failed=0
192.168.43.53              : ok=2    changed=0    unreachable=0    failed=0

[vagrant@host ~]$ cat playbook.yml
---
- hosts: all
  sudo: yes
  tasks:
    - name: add a new user
      user: name=osamunmun
```

#### Module Index

http://docs.ansible.com/modules_by_category.html

ここを見て、どういうモジュールがあるか、またそのインタフェース仕様を確認できる。

#### playbookの実行オプション

```
[vagrant@host ~]$ ansible-playbook playbook.yml --syntax-check

playbook: playbook.yml

[vagrant@host ~]$ ansible-playbook playbook.yml --list-task

playbook: playbook.yml

  play #1 (all):	TAGS: []
    add a new user	TAGS: []

[vagrant@host ~]$ ansible-playbook playbook.yml --check

PLAY [all] ********************************************************************

GATHERING FACTS ***************************************************************
ok: [192.168.43.52]
ok: [192.168.43.53]

TASK: [add a new user] ********************************************************
changed: [192.168.43.52]
changed: [192.168.43.53]

PLAY RECAP ********************************************************************
192.168.43.52              : ok=2    changed=1    unreachable=0    failed=0
192.168.43.53              : ok=2    changed=1    unreachable=0    failed=0
```