Ansible構築から実行まで

##Ansible構築

###1.EPEL追加
ansibleはEPELにあるらしい
EPEL(<FONT COLOR=RED>Extra Packages</FONT> for Enterprise Linux)を追加する.

```
yum install epel-release
```

###2.Ansible Install

```
yum install ansible
```

##Ansible実行

###1.localhost向けにpingテスト
ping moduleを使ってlocalhost向けに実行

```
[root@ansible ansible]# ansible -m ping localhost
localhost | SUCCESS => {
    "changed": false, 
    "ping": "pong"
}

-m:実行したいモジュール名を指定 
```
[Module一覧](https://docs.ansible.com/ansible/latest/modules/modules_by_category.html)

###2.remoteサーバ向けにpingテスト

####事前にAnsible実行サーバとremote間でssh key接続を有効化する
下記参考に実施
[SSH公開鍵認証で接続するまで](https://qiita.com/kazokmr/items/754169cfa996b24fcbf5)

また、今回は検証環境のためRootUserでのLoginを許可

```config:/etc/ssh/sshd_config
PermitRootLogin yes
```

config変更後プロセスRestart

```shell-session
systemctl restart sshd
```

あとfingerprintの確認が出るとAnsibleがコケるので以下変更

```file:/etc/ansible/ansible.cfg
host_key_checking = False
```

####hostsファイル編集
hostsファイルはAnsibleのplaybookやmoduleを実行する際に実行ノード情報を記載するファイル
<FONT COLOR=RED>インベントリファイル</FONT>と呼ばれる
[]でホストグループを指定し、その下に対応するIPアドレスやFQDNを記載する
[Ansibleのインベントリファイル](https://qiita.com/RyoMa_0923/items/d54da43573849586f5a4)を参考にしました

```file:/etc/ansible/hosts
[parent]
192.168.0.220

[grafana]
192.168.0.202

[zabbix]
192.168.0.204

[parent:children]
grafana
zabbix

```

####ようやく実行

```
[root@ansible ansible]# ansible -m ping grafana
192.168.0.202 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
[root@ansible ansible]# ansible -m ping zabbix
192.168.0.204 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
[root@ansible ansible]# ansible -m ping parent
192.168.0.202 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.0.204 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
192.168.0.220 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": false, 
    "ping": "pong"
}
```

### 3.playbook動作確認

#### playbook作成
今回は指定したホストグループで
wget/httpd/bash-completion/bind-utilsの
最新をinstallする

```file:/etc/ansible/simple.yml
- hosts: parent
  gather_facts: no

  tasks:
    - name: install modules
      yum:
        name: "{{ packages }}"
        disable_gpg_check: no
        state: latest
      vars:
        packages:
          - wget
          - httpd
          - bash-completion
          - bind-utils



hosts:インベントリファイルに記載されるホストグループ名を指定
tasks以下が実際の処理
name:task実行時の出力なので任意
yum:yum moduleを使用
yum-name:yum操作を行うpackages名 ※今回は変数で指定している
disable_gpg_check:パッケージの署名チェックを無効化
state:latest(最新ファイルをinstall) / absent(インストールされていない状態)
```

#### 実行

```
[root@ansible ansible]# ansible-playbook -i hosts simple.yml

PLAY [parent] ***********************************************************************************************************************************************************************

TASK [install modules] **************************************************************************************************************************************************************
ok: [192.168.0.204]
ok: [192.168.0.202]
ok: [192.168.0.220]

PLAY RECAP **************************************************************************************************************************************************************************
192.168.0.202              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.0.204              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
192.168.0.220              : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

```