VirtualBoxでAnsibleの環境を構築する

## 概要
 - VirtualBoxに仮想マシンを2台作る
 - Ansibleをダウンロードする
 - 簡単なAnsibleコマンドを流す
 - 流したコマンドがサーバーに設定されているかの確認

## やらないこと
 - VirtualBoxのダウンロード
 - CentOSなどイメージのダウンロードやセットアップ
 - ローカルの固定IPを使わない　※DHCPを利用
 - YAMLの説明

## 構成の設定
 - VirchalBoxにCentOSのイメージとした仮想マシンを二台作成し、1台を`Ansible管理用サーバー`とし、もう一台を`被Ansibleサーバー`（管理用サーバーがスクリプトを流す対象）とする。
 - 二台作る方法は一台目作成後に一台目をクローンすればOK。

## ネットワークの要件
 - ネットワークはホストOSからTeratermなどのコマンドライン使ってSSHできる必要がある。
 - `Ansible管理用サーバー`は`被Ansibleサーバー`にSSHできる必要がある

### 上記を踏まえた設定
二台のサーバーの設定は、ネットワークで`アダプター1`は`NAT`に設定し、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329178/f4e4e881-242d-1106-7316-57c78f7ec65c.png)

`アダプター2`は`ブリッジアダプター`を設定する。
※Wifiの場合は`wireless~~`を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329178/0e70f087-6306-d920-6bee-e2f831662ab7.png)

設定した2台のサーバー起動させ、IPを調べ（`ip -a コマンド`）SSHができるかを確認する。 
## Ansibleの設定
### Ansibleのインストール
最小構成のCentOS7のyumコマンドにはAnsibleは入っていないので先に`epel-release`をインストールする。

```
sudo yum install -y epel-release
sudo yum install -y ansible
```
#### バージョンの確認

```
[root@centos702 ~]# ansible --version
ansible 2.9.27
  config file = /etc/ansible/ansible.cfg
  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python2.7/site-packages/ansible
  executable location = /usr/bin/ansible
  python version =
```
### 疎通確認
#### 準備1　hostsファイルの編集
`/etc/ansible/hosts`に`被AnsibleサーバーのIPアドレス`を下記のように記述する。

```
[targets]
{被AnsibleサーバーのIPアドレス}
```
#### 準備2　公開鍵の作成と鍵を渡す
```
//すでに作成済みならば必要ない
sshkey-gen
ssh-copy-id {被AnsibleサーバーのIPアドレス}
```
### 疎通実施

```
ansible -i hosts {被AnsibleサーバーのIPアドレス} -m ping

//成功
192.168.0.50 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
```
## PlayBookの作成と実行と確認

### PlayBookの作成
`user`を追加するためのPlaybookを作成した。
```user1.yml
---
- hosts: targets                    
  become: yes                     　
  tasks:
   - name: add a new user
     user: name=user1
```
### PlayBookの実行

```
ansible-playbook -i hosts user1.yml

[root@centos701 ansible]# ansible-playbook -i hosts tasks/user1.yml
 
PLAY [targets] *********************************************************************************************************************************************************
 
TASK [Gathering Facts] *************************************************************************************************************************************************
ok: [192.168.0.50]
 
TASK [add a new user] **************************************************************************************************************************************************
ok: [192.168.0.50]
 
PLAY RECAP *************************************************************************************************************************************************************
192.168.0.50               : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

```

### PlayBookの確認
正しく実行されたかの確認

```
//sshで被Ansibleサーバーに接続
ssh root@192.168.0.50

//ユーザーが追加されているかの確認
cat /etc/passwd

//追加されていることの確認
user1:x:1001:1001::/home/user1:/bin/bash
```

### 参考
https://hiyo-ac.hatenablog.com/entry/2019/06/08/182931
https://qiita.com/brighton0725/items/9c3b205fdc3234298928
https://qiita.com/SummerTree/items/ea86c71a6ad594a8c0ab#%E4%BD%9C%E6%A5%AD%E7%94%A8vm%E4%BD%9C%E6%88%90