Vagrantを使って、Ansible を使える環境を用意してみる

Ansible チュートリアル | Ansible Tutorial in Japanese」を参考にして、Ansibleを使ってみようとしたところ、なかなか、準備が面倒ですね…。慣れれば、それほどでもないようなのですが、試す環境を用意するまで時間がかかってます。

VirtualBoxとVagrantをインストールするところの説明は省きます。これから、node1とnode2のCentOS6マシンを用意します。node1にansibleをインストールし、node2へデプロイをするということになります。

$ mkdir ansible-tutorial
$ cd ansible-tutorial
$ vagrant init centos6 http://opscode-vm-bento.s3.amazonaws.com/vagrant/virtualbox/opscode_centos-6.5_chef-provisionerless.box

Vagrantfile は修正します。「config.vm.box = “centos6″」は下記に置き換えます。

  config.vm.define :node1 do |node|
    node.vm.box = "centos6"
    node.vm.network :forwarded_port, guest: 22, host: 2001, id: "ssh"
    node.vm.network :private_network, ip: "192.168.33.11"
  end
  config.vm.define :node2 do |node|
    node.vm.box = "centos6"
    node.vm.network :forwarded_port, guest: 22, host: 2002, id: "ssh"
    node.vm.network :forwarded_port, guest: 80, host: 8000, id: "http"
    node.vm.network :private_network, ip: "192.168.33.12"
  end

また、最後のendの直前に下記を追加します。

  config.vm.provision "shell",
      inline: "sudo yum -y update && sudo yum -y install gcc make automake autoconf kernel-headers kernel-devel"

Vagrantfileが用意できたらvagrantマシンを2台用意するスクリプトを作成します。下記スクリプト create_vm.sh を用意して実行します。VirtualBoxのGuestAdditionをインストールするために必要なパッケージが足りていないので、Vagrantfileは修正してprovisionでインストールするようにします。また、vagrant-vbguestプラグインを使うので、これもインストールします。kernelのバージョンは最新にするため、一度 vagrant up をしてから、halt、upとして再起動をします。それからVirtualBoxのGuestAdditionをインストールしています。

#!/bin/sh

vagrant plugin install vagrant-vbguest
for n in 1 2
do
  vagrant up node${n}
  vagrant halt node${n}
  vagrant up node${n}
  vagrant vbguest node${n} --do install
done

実行するには、次のようにします。これでnode1とnode2の仮想マシンが用意されます。

$ sh create_vm.sh

node1でansibleを使うので、node1へsshログインしてepelとansibleをインストールします。次のようなinstall_epel_ansible.shをVagrantfileと同じディレクトリへ作成します。

#!/bin/sh

yum -y install yum-priorities
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm -Uvh epel-release-6*.rpm
yum -y install ansible

実行します。

$ vagrant ssh node1 -c "sudo sh /vagrant/install_epel_ansible.sh"

scpを使えるようにするために、vagrant ssh-configを実行して、ssh_configファイルへ設定を保存します。

$ vagrant ssh-config node1 > ssh_config
$ vagrant ssh-config node2 >> ssh_config

node1で動作させるansibleでは、node1からnode2へのSSHが必要なので、パスワードなしで接続できるように設定をします。ssh-keygenでパスフレーズなしの鍵を作成し、node1:.ssh/id_rsa.pubをnode2:.ssh/authorized_keysへ追加します。

$ vagrant ssh node1 -c "ssh-keygen"
$ scp -F ssh_config node1:.ssh/id_rsa.pub .
$ scp -F ssh_config id_rsa.pub node2:
$ vagrant ssh node2 -c "cat id_rsa.pub >> .ssh/authorized_keys"

node1へSSHログインして、ansibleでpingをすると、次のようになります。

$ echo 192.168.33.12 > hosts
$ ansible -i hosts 192.168.33.12 -m ping
 [WARNING]: The version of gmp you have installed has a known issue regarding
timing vulnerabilities when used with pycrypto. If possible, you should update
it (i.e. yum update gmp).

192.168.33.12 | success >> {
    "changed": false, 
    "ping": "pong"
}
$

とりあえず、ここまでできれば、あとは ansible の playbook を動かして、いろいろ試すことができるようになっています。失敗したら node2 だけ destroy して、そちらだけ再構築すればいいでしょう。

Ansible, Vagrant, Chef については次の書籍が参考になります。

同じタグの記事: Ansible
同じカテゴリの記事: Linux