「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
- Ansible Configuration Management
- Learning Ansible
- 実践 Vagrant
- Ansible: Up and Running
- Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)