VirtualBoxのインスタンス間でAnsibleを動かしてみる！

VirtualBox上の２つのインスタンス間でAnsibleを動かすために行った作業の記録です。

# サマリ

* `Vagrant` を使用して２つのインスタンスを内部ネットワークに接続し
* `ssh` でインスタンス間で接続できるようにし
* `ansible all -m ping` を通してみました。

# 環境

* Vagrant 2.2.9
* VirtualBox 6.0.22r137980
* Ansible 2.9.9

# Vagrant でインスタンスを作成

Vagrantを使って２つのインスタンスを定義します。インスタンスはそれぞれプライベートネットワークに接続するようにし、互いに通信できるようにします。 

``` ruby
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"

  config.vm.define "ansible-controll-node" do |controll|
    controll.vm.network "private_network", ip: "192.168.50.1", virtualbox__intnet: true
    controll.vm.provider "virtualbox" do |v|
      v.memory = 1024
    end
  end

  config.vm.define "ansible-host-node" do |host|
    host.vm.network "private_network", ip: "192.168.50.2", virtualbox__intnet: true
  end

end
```

`vagrant up` でインスタンスを立ち上げます。

# ssh の設定

インスタンスを立ち上げただけでは互いのインスタンスはsshで通信できないので設定をします。 ansible-controll-node から ansible-host-node に対してAnsibleを使用するので、同じ方向でsshで通信できるようにします。

## ansible-host-node の設定

ansible-host-node に入り、パスワードでssh接続できるようにします。

``` bash
$ vagrant ssh ansible-host-node
[vagrant@localhost ~]$ sudo vi /etc/ssh/sshd_config
```

`sshd_config` ファイルの `PasswordAuthentication` を以下のように変更します。

``` :sshd_config
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
#PermitEmptyPasswords no
# PasswordAuthentication no
```

`sshd` を再起動します。

```
[vagrant@localhost ~]$ sudo systemctl restart sshd
```

## ansible-control-node の設定

ansible-controll-node に入りsshの鍵を作成します。

``` bash
$ vagrant ssh ansible-controll-node                                                                                        4.5m  月  6/15 11:15:12 2020
[vagrant@localhost ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vagrant/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/vagrant/.ssh/id_rsa.
Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
The key fingerprint is:
(以下略)
```

上記のコマンドで `/home/vagrant/.ssh/` に公開鍵と暗号鍵が作成されました。

次に公開鍵を ansible-host-node に渡します。 `ssh-copy-id` コマンドを使用すると公開鍵をssh接続を使用して接続先のインスタンスに正しく配置できます。ssh接続するときにパスワードを聞かれますが、vagrantユーザのデフォルトのパスワードは `vagrant` です。

```
[vagrant@localhost ~]$ ssh-copy-id vagrant@192.168.50.2
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/vagrant/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
vagrant@192.168.50.2's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'vagrant@192.168.50.2'"
and check to make sure that only the key(s) you wanted were added.
```

パスワード無しで接続できることを確認します。

```
[vagrant@localhost ~]$ ssh vagrant@192.168.50.2
Last login: Mon Jun 15 11:19:17 2020 from 10.0.2.2
```

# ansible のインストールと実行

ansible-controll-node で以下を実行します。

ansible をインストールするため、[EPELリポジトリ](https://qiita.com/charon/items/f5732694515d174851b3)を有効にします。

```
[vagrant@localhost ~]$ sudo yum -y install epel-release
```

EPELリポジトリを有効にしたらansibleがインストールできるようになります。

```
[vagrant@localhost ~]$ sudo yum -y install ansible
```

インベントリファイルを書き換えます。

```
[vagrant@localhost ~]$ sudo vi /etc/ansible/hosts
```

``` :hosts
# この行を追加
192.168.50.2
```

ansibleで `ping` を実行します。

```
[vagrant@localhost ~]$ ansible all -m ping
192.168.50.2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
```

できました。