はじめに
AnsibleはLinux、Macでは動くがWindowsでは動かない。Windowsで実行するためには、仮想でLinuxを立ち上げて、そこにAnsibleをインストールする必要がある。
Windowsで『初めてのAnsible』の「1.9 テスト用サーバーのセットアップ」相当の内容を実行する方法を、次の構成で確かめていく。
- Windows 7
- VirtualBox 5.0.20
- Vagrant 1.8.4
- CentOS 6.7
- Ansible 2.1.0
WindowsにVirtualBoxとVagrantをインストールする
WindowsにVirtualBoxとVagrantをインストールする。
VagrantでCentOSを2台起動する
コマンドプロンプトを開いて、VagrantにCentOSのBOXを追加する。
>vagrant box add bento/centos-6.7
Windows上に今回のテスト用のディレクトリ(test)を作成する。
>cd test
test内にVagrantfileを作成する。
Vagrantfile
Vagrant.configure("2") do |config|
config.ssh.insert_key = false
config.vm.define "vagrant0" do |vagrant0|
vagrant0.vm.box = "bento/centos-6.7"
vagrant0.vm.network :private_network, ip: "192.168.11.30"
end
config.vm.define "vagrant1" do |vagrant1|
vagrant1.vm.box = "bento/centos-6.7"
vagrant1.vm.network :private_network, ip: "192.168.11.31"
end
end
config.ssh.insert_key = false
は『初めてのAnsible』でも説明されているが、Vagrantの各ホストごとに異なるSSH鍵を使うというデフォルトの設定をOFFにして、すべてのホストで同じSSH鍵を使う昔の動作にするために行っている。
vagrant0とvagrant1の2台の設定を行い、vagrant0をAnsible用、vagrant1をAnsibleによる構成管理対象用とする。private_networkの設定を行っている理由は、Vagrantマシン間でSSH通信をできるようにするため。
※参考:vagrantのネットワークについて
Vagrantファイルを保存したら、vagrant upを実行してvagrant0とvagrant1の起動を行う。
>vagrant up
Bringing machine 'vagrant0' up with 'virtualbox' provider...
Bringing machine 'vagrant1' up with 'virtualbox' provider...
==> vagrant0: Checking if box 'bento/centos-6.7' is up to date...
==> vagrant0: Clearing any previously set forwarded ports...
==> vagrant0: Clearing any previously set network interfaces...
==> vagrant0: Preparing network interfaces based on configuration...
vagrant0: Adapter 1: nat
vagrant0: Adapter 2: hostonly
==> vagrant0: Forwarding ports...
vagrant0: 22 (guest) => 2222 (host) (adapter 1)
==> vagrant0: Booting VM...
==> vagrant0: Waiting for machine to boot. This may take a few minutes...
vagrant0: SSH address: 127.0.0.1:2222
vagrant0: SSH username: vagrant
vagrant0: SSH auth method: private key
vagrant0: Warning: Remote connection disconnect. Retrying...
vagrant0: Warning: Remote connection disconnect. Retrying...
vagrant0: Warning: Remote connection disconnect. Retrying...
vagrant0: Warning: Remote connection disconnect. Retrying...
vagrant0: Warning: Remote connection disconnect. Retrying...
vagrant0: Warning: Remote connection disconnect. Retrying...
==> vagrant0: Machine booted and ready!
==> vagrant0: Checking for guest additions in VM...
==> vagrant0: Configuring and enabling network interfaces...
==> vagrant0: Mounting shared folders...
vagrant0: /vagrant => C:/test
==> vagrant0: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> vagrant0: flag to force provisioning. Provisioners marked to run always will still run.
### vagrant1は省略
Warning: Remote connection disconnect. Retrying...が出力されても、しばらく待つと接続できるようになる。
vagrant0にアクセスできるかどうか確認する。
確認方法はvagrant sshコマンドを使用するか、Tera Term等で接続するかの2通りがある。
vagrant sshコマンドの場合
>vagrant ssh vagrant0
Tera Termの場合
ホスト:192.168.11.30 ポート:22 ユーザ:vagrant パスワード:パスフレーズにvagrant、あるいはRSA/DSA鍵にC:\Users\%USERNAME%\.vagrant.d\insecure_private_keyを設定
Windowsからvagrant0にアクセスできたら、vagrant0からvagrant1にSSHでアクセスできるように、C:\Users\%USERNAME%.vagrant.d\insecure_private_keyをvagrant0にアップロードし、id_rsaとして保存する。
# scp等であらかじめWindows端末からvagrant0にinsecure_private_keyをコピーした状態とする
$ mv insecure_private_key ~/.ssh/id_rsa
$ chmod 600 ~/.ssh/id_rsa
#接続できるか確認
$ ssh 192.168.11.31
$ exit
Ansible用CentOSにAnsibleをインストールする
vagrant0にAnsibleをインストールする。CentOSではyumでAnsibleをインストールする場合、エンタープライズLinux用の拡張パッケージ(EPEL) を使えるようにする必要がある。
$ sudo yum localinstall http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
#もしくは
$ sudo rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum install ansible
別のCentOSにAnsibleでアクセスする
vagrant0からvagrant1にAnsibleでアクセスできるか、『初めてのAnsible』の「1.9.2 テストサーバーのことをAnsibleに知らせる」に沿って確認する。
$ mkdir playbooks
$ cd playbooks
$ echo testserver ansible_ssh_host=192.168.11.31 ansible_ssh_user=vagrant > hosts
$ ansible testserver -i hosts -m ping
testserver | SUCCESS => {
"changed": false,
"ping": "pong"
}
次は『初めてのAnsible』の「1.9.3 ansible.cfgによる簡略化」に沿って確認する。
$ echo "[defaults]
hostfile = hosts
remote_user = vagrant
host_key_checking = False" > ansible.cfg
$ echo testserver ansible_ssh_host=192.168.11.31 > hosts
$ ansible testserver -m ping
testserver | SUCCESS => {
"changed": false,
"ping": "pong"
}