Ansible検証のための簡単なVM環境の作り方 with Virtual Box

# この記事の目的
メイン：Virtual Boxで仮想環境を構築して、Ansibleを検証できるようにする
サブ：環境の作り方を忘れないようにする

#1.背景
仕事でAnsibleを使い始めたが、動作検証を今すぐしたい！！！
検証しないと夜しか眠れない！！
でも環境はオフィスにしかない………

なければ作ればよいのでは？:thinking:？

#2.環境
**ハードウェア**
CPU : i7 3770　(インテル® バーチャライゼーション・テクノロジー (VT-x) 対応CPU)
メモリ ： 16GB

**ソフトウェア**
Windows 10 professional
Virtual Box 5.2.26 r128414 (Qt5.6.2)

#3.準備
##3.1 Virtual Boxのインストール
自分のPCの環境に合わせた[Virtual Boxをダウンロード](https://www.virtualbox.org/wiki/Download_Old_Builds_5_2)してインストール！

##3.2 仮想化支援機能の有効化
**Intel VT-x**を有効にしましょう！
やり方はgoogle先生に聞いてみよう！
[VirtualChecker](https://forest.watch.impress.co.jp/library/software/virtualcheck/)でVT-ｘが有効かどうかを調べることができるので活用すべし

##3.3 CentOSのOsイメージのダウンロード
[CentOSのホームページ](https://www.centos.org/download/)からOSイメージをダウンロードしましょう。
個人的にGUIは煩わしいので[Minimal ISO](http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1810.iso)をダウンロード！

#4.VMを作成
##4.1 環境のイメージ
![サーバイメージ.png](https://qiita-image-store.s3.amazonaws.com/0/180800/3698f5a7-d9a8-2c36-cade-82597b91444e.png)
ansible用のサーバとansible検証用のテストサーバを作成します。

両サーバは仮想NICとして**NAT**と**ホストオンリーアダプタ**を持ちます。
NATはyumのために使用します。
ホストオンリーアダプタはホストPCからのTeraTermと、VM間のansible用ネットワークのために使用します。

##4.2 ホストオンリーアダプタのためのネットワークの作成
あらかじめネットワークを作っておきましょう
File->Host Network Manager
![ホストオンリー.png](https://qiita-image-store.s3.amazonaws.com/0/180800/1e42e583-36ff-7da7-8696-c93c9d2157c1.png)

Create!
![create.png](https://qiita-image-store.s3.amazonaws.com/0/180800/bdf991a9-7bda-1a3a-ddbf-973d01bc4788.png)
作成したAdapterを選択してPropertiesボタンを選択！
お好みのIPアドレスとNWを設定しましょう。
今回は 192.168.111.1/255.255.255.0 を設定。そしてApply！！
![作成.png](https://qiita-image-store.s3.amazonaws.com/0/180800/e00d16cc-7636-22f6-3ffc-0f4cff829220.png)

##4.3 VMの設定
お待たせしました。ついにVMです。
NewボタンでVMを作っていきますぞ
![newボタン.png](https://qiita-image-store.s3.amazonaws.com/0/180800/86bbb0ac-448c-a7ad-4ee5-3ac34d288e7c.png)

設定は以下の通り。CentOSはRedHatのファミリーなのでRedhatでいいでしょ（違ったらごめんなさい）

| 設定 | 設定値 | 説明 | 
|:----:|:----:|:-----:|
|  Name  | AnsibleServer_CentOS7  | VMの名前 |
| Type   | Linux   |　CentOSなのでLinux   |
| Version   |  Red Hat(64-bit) | OSのタイプ |
| Memory size |  2048GB | メモリサイズ（自分のPCのスペックと要相談）　|
| Hard disk | Create a virtual hard disk now | Virtual Diskを新規作成する　|
一応キャプチャも掲載
![new設定.png](https://qiita-image-store.s3.amazonaws.com/0/180800/5fe4b88c-54e3-d80f-f7a6-9edab45b686e.png)

自分のPCのスペックと相談して設定しようね！
☆最小構成インストールの場合、Ansibleをインストールしても1.3GB程度しか使用しません。

| 設定 | 設定値 | 説明 | 
|:----:|:----:|:-----:|
|  File location| F:\VM\AnsibleServer_CentOS7\AnsibleServer_CentOS7.vdi  | Virtual diskの場所。空き容量と相談だ！ |
| File size | 10GB | Minimal ISOなら十分 |
| Hard disk file type  |  VDI | VirtualBoxのファイルタイプを使用 |
| Storage on physical hard disk | Dynamically allocated | 使用した分だけ容量を使用する |
![virsuldisk.png](https://qiita-image-store.s3.amazonaws.com/0/180800/a6c81551-c8d0-8d2d-33ec-fa4ac0d14990.png)

これでVMの枠ができました！！！！！
![VMできた.png](https://qiita-image-store.s3.amazonaws.com/0/180800/682b7259-1ec4-08b0-df1b-fad75eefcd5f.png)

次はNICの割り当て。作成したホストオンリーアダプタをVMに設定！
VMを選択してSetting->Network->Adapter2
![setting.png](https://qiita-image-store.s3.amazonaws.com/0/180800/34ccf2d4-4cd2-142b-00c2-5e1d26e908ca.png)
設定値はこう！

| 設定 | 設定値 | 説明 | 
|:----:|:----:|:-----:|
|  Enable Network Adapter  | ✔（チェックつける）  | NICの有効化 |
| Attached to   | Hots-only Adapter   |　4.2で作ったのはホストオンリーアダプター   |
| Name   |  VirtualBox Host-Only Ethernet Adapter #4 | 4.2で作ったホストオンリーアダプターを割り当てる！ |

OSインストールのために、OSのisoを仮想ドライブに割り当て！
Setting->Storage->Controller: IDE->Empty->Optical Drive->💿
![iso割り当て.png](https://qiita-image-store.s3.amazonaws.com/0/180800/4fe25247-07f7-1fc5-c9c5-2362650d95c0.png)
3.3でダウンロードしたisoファイルを指定しよう！！

##4.4 OSインストール
遂にきました、OSインストールです。
VMを起動させましょう。
VMを選択してダブルクリックか、![starrt.png](https://qiita-image-store.s3.amazonaws.com/0/180800/53fdc7a8-4518-d553-c38f-2a07912f57b6.png)を押す！

「Install CentOS　7」を選択してインストール開始！
![installCentOS.png](https://qiita-image-store.s3.amazonaws.com/0/180800/8aaa5037-f49a-6549-5be6-5353f60bb57f.png)

ちなみに、右の**Ctrl**ボタンでVMから離れることができます。

設定していきます。
インストール時に使用する言語はお好みで。

インストールの概要が出たら「インストール先(D)」を選択。設定しないとインストールが始まりません。
![インストール先.png](https://qiita-image-store.s3.amazonaws.com/0/180800/8240730a-7b66-69db-e310-ba9ff16f4cc1.png)

4.3で作成した仮想ディスクしかないはずなので、選択して完了！
![ディスク選択.png](https://qiita-image-store.s3.amazonaws.com/0/180800/4fe77cac-4273-42b4-9dcf-38b151d49aea.png)

さぁさぁインストール開始です！
![開始！.png](https://qiita-image-store.s3.amazonaws.com/0/180800/bc33a7ba-2c28-a965-e296-db2fd5baef2b.png)

インストール中にパスワードをroot設定しておきます。
パスワードはお好みで。
![パスワード.png](https://qiita-image-store.s3.amazonaws.com/0/180800/e9af8381-0c7a-64d3-dc1b-aadb94722c93.png)

後はインストール完了まで待つ！！！！！
（いっぱいリソースを割り当てたら早く終わるゾイ）
終わったら再起動![再起動.png](https://qiita-image-store.s3.amazonaws.com/0/180800/a3deec78-4e13-3798-d83f-e1ae3d35e1f7.png)

インストール完了です。
rootユーザで、インストール中に設定したパスワードを使ってログインできることを確認しましょう。
![完了です.png](https://qiita-image-store.s3.amazonaws.com/0/180800/d6276c51-4de6-b2c8-46b2-9fd4cbb8de1b.png)


#5.ネットワークの設定
Virtual Boxのコンソールでもよいのですが、個人的にTera Termの方が使いやすいのでTera Termで接続できるようにします。
## 5.1 ホストオンリーアダプターのMACアドレスの確認
各仮想NICのACアドレスはVMの設定から見れます。
Setting->Network->Adapter 2>Advanced->MAC Address:
![MACアドレス.png](https://qiita-image-store.s3.amazonaws.com/0/180800/3addce05-05a4-d6b4-8bca-a3282a39127f.png)
ホストオンリーアダプターはキャプチャの通りですね。

## 5.2 IPアドレスの設定
VM上でホストオンリーアダプターの仮想NICがどのIFに割り当てられているか確認しましょう。
**# ip addr**
今回は**enp0s8**に割り当てられているようです。
![ip addr.png](https://qiita-image-store.s3.amazonaws.com/0/180800/a1f29942-6d8f-323a-78a2-0e765cf12554.png)

4.2にて「192.168.111.1/255.255.255.0」を設定していたので、**enp0s8**には「192.168.111.10」を設定しましょう。
設定のやり方はもちろんnmcuiコマンドです。

```
# nmcli connection modify enp0s8 ipv4.method manual ipv4.addresses "192.168.111.10/24"
```

設定したらインターフェースをUPしましょう。

```
# nmcli connection up enp0s8
```
成功したら以下のように、DEVICEにCONNECTIONが追加されて、緑色になります。
**ip addr**コマンドでIPアドレスも確認しましょう。

```console
[root@localhost ~]# nmcli d
DEVICE  TYPE      STATE     CONNECTION
enp0s8  ethernet  ????  enp0s8
enp0s3  ethernet  ????  --
lo      loopback  ????  --
[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:da:ce:78 brd ff:ff:ff:ff:ff:ff
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:8a:60:d3 brd ff:ff:ff:ff:ff:ff
    inet 192.168.111.10/24 brd 192.168.111.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::c544:e75f:b0ab:d6e1/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
```
![設定完了.png](https://qiita-image-store.s3.amazonaws.com/0/180800/39de15ad-6ea9-3c31-7bbd-23de704be3b2.png)


## 5.3　Tera Termでアクセス
これでアクセスできますぞ！
Tera Termからログイン！！！！
![ログインteraterm.png](https://qiita-image-store.s3.amazonaws.com/0/180800/265fd2fa-a2de-6080-6629-57d7be0c79b9.png)

作業がやりやすくなりましたね！（個人的感想）

## 5.4 外部NWとの接続
yumでansibleをインストールできるように外部ネットワークに接続できるようにしましょう。
**enp0s3**のインタフェースがNATの仮想NICなので、リンクアップさせましょう。
リンクアップのコマンドは**enp0s8**と同じです。

```console
[root@localhost ~]# nmcli d
DEVICE  TYPE      STATE     CONNECTION
enp0s8  ethernet  connected     enp0s8
enp0s3  ethernet  disconnected  --
lo      loopback  unmanaged     --
[root@localhost ~]# nmcli c up enp0s3
?????????????????? (D-Bus ???????: /org/freedesktop/NetworkManager/ActiveConnection/2)
[root@localhost ~]# nmcli d
DEVICE  TYPE      STATE     CONNECTION
enp0s3  ethernet  connected    enp0s3
enp0s8  ethernet  connected    enp0s8
lo      loopback  unmanaged    --
```
何も設定していませんが、外部NWにpingが通るか確認してみましょう。（結果は一部マスクしています。）

```console
[root@localhost ~]# ping -c 3 google.com
PING google.com (XXX.XXX.XXX.XXX) 56(84) bytes of data.
64 bytes from XXXXXXXXXX.XXXXX.net (XXX.XXX.XXX.XXX): icmp_seq=1 ttl=54 time=6.13 ms
64 bytes from XXXXXXXXXX.XXXXX.net (XXX.XXX.XXX.XXX): icmp_seq=2 ttl=54 time=9.35 ms
64 bytes from XXXXXXXXXX.XXXXX.net (XXX.XXX.XXX.XXX): icmp_seq=3 ttl=54 time=6.10 ms

--- google.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2005ms
rtt min/avg/max/mdev = 6.103/7.195/9.352/1.526 ms
```
通りましたね。設定しなくてもつながります。
（補足：外部と繋がるご自宅のNW内で固定IPアドレスを使用したりしていると繋がらない可能性があります）

#6. Ansibleのインストール
yumさんがすべて解決してくれます。
yumは神。

最新のAnsibleをインストールするには、EPEL(Extra Package for Enterprise Linux)レポジトリが必要なようです。[^1]
そのため、**epel-release**をインストールしてから**Ansible**をインストール！
**Is this ok [y/d/N]:**はすべて「**y**」で継続

```console
# yum install epel-release
# yum install ansible --enablerepo=epel-testing
(省略)
 ansible                              noarch  2.7.7-1.el7        epel      11 M
(省略)
```
2019年2月11日時点では、2.7.7-1.el7がインストールされるようです。


インストールされているか確認

```console
[root@localhost ~]# rpm -qa | grep ansible
ansible-2.7.7-1.el7.noarch
```
ansibleがインストールできました！
完璧では！？


#7. テストサーバの作成
Ansibleの検証はローカルでやってもよいのですが、せっかくならVMももう一つ作りたいところ。
作ったAnsibleサーバをコピーしてテストサーバにしましょう。

## 7.1 VMコピー 
Ansilbeサーバをシャットダウンして、VirtualBoxManagerでVMを右クリックからのcloneを実行！
![クローン.png](https://qiita-image-store.s3.amazonaws.com/0/180800/026b852d-7ef5-1613-d5bc-26bd8787710c.png)

VM名はお好みで。
![名前はなんｄめお.png](https://qiita-image-store.s3.amazonaws.com/0/180800/c1f321ba-22e6-09d4-3270-3a084cea460e.png)
ディスクには余裕があるので「すべてをクローン」にしてしまいましょう。
![フルクローン.png](https://qiita-image-store.s3.amazonaws.com/0/180800/044b3690-016e-cdd1-a95b-e569278d2786.png)
###注意点
このやり方だとVirtualBoxデフォルトのフォルダにVMが作られてしまうので、ディスク容量がない場合はVMを移動させましょう。
移動方法は、[VirtualBoxの仮想マシンフォルダ変更手順メモ](https://qiita.com/sugard12/items/8b4f420b3afed79fe003)の「面倒くさいので手抜きすると」を参考に移動しましょう

## 7.2 VM起動
VMがコピーできました。
![VMコピー結果.png](https://qiita-image-store.s3.amazonaws.com/0/180800/e409ba15-166d-9263-8251-0eac3b4a5b7e.png)

VMの起動方法は4.3と同じ。
ホストオンリーアダプタはAnsibleサーバと同じものが割り当てられているので、5.1と5.2を参考にIPアドレスを設定しましょう。
今回は**192.168.111.11**を設定

```console
# nmcli connection modify enp0s8 ipv4.method manual ipv4.addresses "192.168.111.11/24"
```

Ansibleサーバは一度シャットダウンしたので起動させ、両VMの**enp0s8**のインタフェースをアップさせましょう。

```console
# nmcli c up enp0s8
```

これで、両者ともに通信ができるようになりました。
pingで確認しましょう

```console
# ping -c 3 192.168.111.10
# ping -c 3 192.168.111.11
```
pingが通れば環境構築は完了です。

##8. 残りの設定
環境はできましたが、いくつか設定したほうがよい設定が残っています。
ここでは何を設定したら良いか記載しますので、ご自身でやり方を調べてください。
（設定を失敗してもVMだからOSをぶっ壊しても問題なし！）

1. ホスト名の設定　→　どっちがテスト用サーバかわかるようにするため
2. ホストオンリーアダプタのインタフェース（この記事では**enp0s8**）のONBOOTをyesに設定　→　シャットダウンするたびにリンクを上げなおさなくて良いようにするため
3. テストサーバのCPU/メモリ量のリソース調整　→　検証用のサーバはリソースを減らしてホストPCのリソースを増やしておきましょう

#9. まとめ
Ansibleを検証できる環境ができたので、あとはAnsibleの使い方を調べてAnsibleを使ってみましょう:thumbsup::thumbsup::thumbsup::thumbsup::thumbsup:


[^1]: [Ansibleのインストールとサンプルコードの実行](https://thinkit.co.jp/article/9472)を参考にさせて頂きました。