【備忘録】初心者がAnsibleを触ってみた。

# Ansibleを触ってみた。
興味本位でAnsibleを触ってみた。

## 試してみたこと
- Ansible Pingを通す。
- Ansible-playbook で簡単なコンフィグを流し込む

## 必要なもの
- Virtul Box（環境）
- Ansible Server (Ubuntu16.04)
- Ansible Client (Ubuntu16.04)

## Ansible Server

```
# apt -y install ansible  
```
※Ubuntu16.04の場合、playbook使用時に、python-aptがないと怒られたので、python-aptをインストールしておく。
## Ansible Client
```
# apt -y install python--simplejson
```
AnsibleのClientは、エージェントレスというのが売りだが、Python2.7が入ってる必要がある。
Ubuntu16.04の場合は、デフォルトでPython３系がはいっていて、肝心のPython2.7がないのでインストールしておく。

## Ansible Server（準備）
- 宛先クライアントの指定
- 宛先クライアントへの鍵の設定
- Playbookの作成（簡単なymlファイル）

#### 宛先クライアントの指定
自分でファイルを作成することもできるが、今回はデフォルトで容易されているもの使用する。
ファイルのパスは`/etc/ansible/hosts`

```shell

# vi /etc/ansible/hosts
[dbservers]
#Clientのアドレス　    sudo時のパスワード
192.168.99.20 ansible_become_pass=ubuntu
```
#### 宛先クライアントへの鍵の設定
事前に鍵の共有をしていおいた方がよいとの事。

```shell

$cd .ssh/
~/.ssh/$ ssh-keyge
//全てEnterでOK
~/.ssh/$ ssh-copy-id 192.168.99.20
//ubuntu@192.168.99.20という指定でも可
```
#### Playbookの作成（簡単なymlファイル)

```shell
# vi mariadb.yml
- hosts: dbservers
  user: ubuntu
  tasks:
    - name: "apt-get -y install mariadb "
      apt: pkg=mariadb-server state=latest
      become: yes
```
※ちなみにpkg名を正式に書かないと怒られる。
私の場合は、mariadbだけにしてしまってはまった。orz

## Ansible Pingによる疎通確認
PingとはいうもののSSHに近いものだと思っている。

```shell-session

$ ansible dbservers -m ping
192.168.99.20 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
```
pongってなんだよ（笑）SUCESSなのでOK。

## Ansible-playbookで簡単なコンフィグを流し込む
いよいよ、本番

```shell-session
$ ansible-playbook mariadb.yml --check
PLAY [dbservers]*********************************************************************************

TASK [Gathering Facts] ***************************************************************************
ok: [192.168.99.20]

TASK [apt-get -y install mariadb] ****************************************************************
fatal: [192.168.99.20]: FAILED! => {"changed": false, "failed": true, "msg": "python-apt must be installed to use check mode. If run normally this module can auto-install it."}
        to retry, use: --limit @/home/ubuntu/mariadb.retry

PLAY RECAP ***************************************************************************************
192.168.99.20              : ok=1    changed=0    unreachable=0    failed=1
```
--checkオプションをつけて結果をcheckしてみるが、失敗⁈
Way？詳細な情報が必要なため　-vvvv　オプションをつけて実行。

```shell-session
$ ansible-playbook mariadb.yml --check -vvvv
略
"msg": "python-apt must be installed to use check mode. If run normally this module can auto-install it."
```
server側にpythonのaptをいれたのだが、client側に
Python-aptが必要とのこと。。
クライアント側にいれ再度チェック

```shell-session
$ ansible-playbook mariadb.yml --check

PLAY [dbservers]*********************************************************************************

TASK [Gathering Facts]***************************************************************************
ok: [192.168.99.20]

TASK [apt-get -yinstallmariadb-server]*********************************************************
changed: [192.168.99.20]

PLAYRECAP***************************************************************************************
192.168.99.20              : ok=2    changed=1    unreachable=0    failed=0
```
よし、きた。これで--checkオプションなしで実行すると、クライアント側で`apt-get -y install mariadb-server`が実行されます。