「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)