VirtualBox + Vagrant による Ansible 検証環境セットアップメモ

仮想マシンは centos7-02 (Ansible 実行側) と centos7-03 (ターゲット側) の 2 台が作成されるものとする。

## 参考文献
- [Oracle VM VirtualBox](https://www.virtualbox.org/)
- [Vagrant by HashiCorp](https://www.vagrantup.com/)
- [サクラエディタ](http://sakura-editor.sourceforge.net/)
   - [Sakura Editor - Browse /sakura2 at SourceForge.net](https://sourceforge.net/projects/sakura-editor/files/sakura2/)
- [Tera Term Open Source Project](https://ttssh2.osdn.jp/)

## 事前インストール
1. サクラエディタと Tera Term をインストールする。
   - ただし, UTF-8 + LF を扱えるエディタがあればサクラエディタは不要である。
   - また, SSH 鍵を生成するプログラム, 及び, SSH 接続可能なプログラムがあれば, Tera Term も不要である。
1. サクラエディタはパッケージ版をインストール後, 個別配布版の sakura.exe で上書きすることを推奨する。
   - 2018/02/13 時点で, パッケージ版のバージョンは 2-2-0-1, 個別配布版のバージョンは 2-3-2-0 である。
   - ただし, パッケージ版に含まれるキーワードファイルなどは個別配布版に含まれないため, 個別配布版のみのインストールは非推奨である。

## 初期設定 -> ホスト側ネットワークアドレス確認
1. VirtualBox -> Vagrant の順でダウンロード, インストールする。
   - ダウンロード時は OS と対応ビットに気を付けること。
1. **スタート メニュー** - **Oracle VM VirtualBox (フォルダー)** - **Oracle VM VirtualBox (ショートカット)** をクリックする。
1. **ファイル** - **ホストネットワークマネージャー** をクリックする。
1. IPv4 アドレスの第三オクテットまで: `192.168.xxx.` の部分を確認し, **閉じる** ボタンを押下する。
   - 今回は, *192.168.56.* とする。
1. **ファイル** - **終了** をクリックする。

## hosts 登録
1. **スタート メニュー** - **設定** をクリックする。
1. **個人用設定** ボタンを押下する。
1. 左ペインより **タスク バー** をクリックし, *[スタート] ボタンを右クリックするか Windows キー + X キーを押したときに表示されるメニューで, コマンドプロンプトを Windows PowerShell に置き換える* を **オフ** にする。
1. そのまま画面を閉じる。
1. **スタート メニュー** を右クリックし, **コマンド プロンプト (管理者)** をクリックする。
1. `> cd drivers\etc` と入力し, 作業ディレクトリーを変更する。
1. `> copy hosts hosts.YYYYMMDD` と入力し, hosts をバックアップする。
   - *YYYYMMDD* は実際の日付に読み替えること。
1. `> notepad hosts` と入力し, 以下のレコードを追記, 保存して閉じる。
   - IP アドレスが降順となっている理由は, VMware Player を使用していた際の事情である。

    ```text:hosts
    192.168.56.120	centos7-08	centos7-08.localdomain
    192.168.56.121	centos7-07	centos7-07.localdomain
    192.168.56.122	centos7-06	centos7-06.localdomain
    192.168.56.123	centos7-05	centos7-05.localdomain
    192.168.56.124	centos7-04	centos7-04.localdomain
    192.168.56.125	centos7-03	centos7-03.localdomain
    192.168.56.126	centos7-02	centos7-02.localdomain
    192.168.56.127	centos7-01	centos7-01.localdomain
    ```

1. `> exit` と入力し, コマンドプロンプトを閉じる。

## SSH 鍵生成 (元ネタ: [CentOS 6 向け PortForwarder 設定メモ - Qiita](https://qiita.com/ryo-sato/items/23ee8a515b6039c918d2))
1. Tera Term の **設定** - **SSH 鍵生成** をクリックする。
   - *TTSSH: 鍵生成* ウィンドウが開く。
1. 以下の通り設定し, **生成** ボタンを押下する。
   1. 鍵の種類: **ED25519** にチェックを入れる。
   1. ラウンド数: (初期値のままで OK.)
1. **公開鍵の保存** ボタン, 及び, **秘密鍵の保存** ボタンをそれぞれ押下し, 公開鍵 (id_ed25519.pub), 秘密鍵 (id_ed25519) を保存する。
   - *鍵のパスフレーズ* 及び *パスフレーズの確認* は空欄のままで OK.
   - 同様に, *コメント欄* は初期値のままで OK.

## Vagrant 設定
1. Windows キー + R キーを押下し, `%USERPROFILE%` と入力, **OK** ボタンを押下する。
1. 新しいフォルダーを作成し, 名前を `vagrant` とする。
1. [★ このリンク ★](https://github.com/sb3f-ryo-sato/vagrant-ansible) をクリックし, **Clone or download** - **Download ZIP** をクリック, ファイルをダウンロードする。
1. ダウンロードした ZIP ファイルを展開し, フォルダー名を **ansible** に変更する。
1. 先ほどのフォルダーを vagrant フォルダー内に移動させる。
1. ansible フォルダー内の Vagrantfile, bootstrap.sh をサクラエディタで開き, IP アドレスを先ほど確認したセグメントに置換する。
1. 先ほど保存した公開鍵 (id_ed25519.pub) も開き, 内容をコピー, bootstrap.sh 上部に記載されている PUB_KEY の値を上書きする。

## 仮想マシン起動
1. **スタート メニュー** を右クリックし, **コマンド プロンプト** をクリックする。
   - 今度は管理者で **ない** 方をクリックすること。
1. `> cd vagrant\ansible` と入力し, 作業ディレクトリーを変更する。
1. `> vagrant up` と入力し, 仮想マシンを起動する。
   - 初回は CentOS の Box がダウンロードされるため, 結構時間が掛かる。(10 分くらい?)
1. しばらく待機し, `target (centos7-03)` の NTP 情報が表示されたあたりで `ansible (centos7-02)` にもログイン可能となる。
1. Tera Term を起動し, centos7-02 に秘密鍵でログインできることを確認する。
   - ユーザー名: ansible

## Ansible 実行側のみ: SSH 秘密鍵, 設定ファイル設置
1. centos7-02 に秘密鍵を SCP する。
   - Tera Term にドラッグアンドドロップで OK.
1. `$ cd ~/.ssh; pwd` と入力し, 作業ディレクトリーを変更する。
1. `$ mv -iv ~/id_ed25519 .` と入力し, 秘密鍵を `~/.ssh` ディレクトリーに移動させる。
1. `$ echo 'StrictHostKeyChecking no' > config` と入力し, SSH 接続時のホスト鍵を確認しないようにする。
1. `$ chmod -v 0400 id_ed25519 config` と入力し, パーミッションを設定する。

## Ansible 実行テスト
1. `$ cd; pwd` と入力し, 作業ディレクトリーを変更する。
1. `$ vi hosts.yml` と入力し, 以下の内容を記載, 保存して閉じる。

    ```md:hosts.yml
    ---
    all:
      children:
        ansible:
          hosts:
            localhost.localdomain:
              ansible_connection:
                local
        targets:
          hosts:
            centos7-03.localdomain:
    ```

1. `$ ansible all -i hosts.yml -m ping` と入力し, `pong` と出力されることを確認する。

    ```
    localhost.localdomain | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    centos7-03.localdomain | SUCCESS => {
        "changed": false,
        "ping": "pong"
    }
    ```

## シャットダウン
1. `$ ssh centos7-03 sudo systemctl poweroff` と入力し, centos7-03 をシャットダウンする。
1. `$ sudo systemctl poweroff` と入力し, centos7-02 をシャットダウンする。
   - このタイミングで Tera Term も自動的に閉じる。
1. コマンドプロンプトに戻り, `> vagrant status` と入力, いずれの仮想マシンも `poweroff` と出力されることを確認する。
1. `> exit` と入力し, コマンドプロンプトを閉じる。

以上。