表題の通り。provisionerにはshellスクリプトを書いて別ファイルにしたり、Ansibleでplaybookを書いたりすることができるが、ほんのちょっとしたスクリプトで可能なことであればinlineでOKだろう、ということで試してみた。
■ 環境
- Vagrant 1.7.4
■ VM構成
1つのVagrantfileで2台のVMを起動させる。2台共に同じスクリプトを実行させて、とりあえず同じ状態の2台を構築させる。用意したVagrantfileは下記の通り。
$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
script = <<SCRIPT
curl http://ftp.meisei-u.ac.jp/mirror/apache/dist/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz 2>/dev/null | tar zx -C /opt
mv /opt/zookeeper-3.4.6/conf/zoo_sample.cfg /opt/zookeeper-3.4.6/conf/zoo.cfg
chown -R vagrant:vagrant /opt/zookeeper-3.4.6
SCRIPT
Vagrant.configure(2) do |config|
config.vm.box = "chef/centos-6.6"
config.vm.define "zoo1" do |node|
node.vm.hostname = "zoo1"
node.vm.network "private_network", ip: "192.168.33.101"
end
config.vm.define "zoo2" do |node|
node.vm.hostname = "zoo2"
node.vm.network "private_network", ip: "192.168.33.102"
end
config.vm.provision "shell", inline: script
end
$
実行するスクリプトの内容は見たままである。ZooKeeper-3.4.6のバイナリをダウンロードし展開、設定ファイルのサンプルを名前変更して、ディレクトリのオーナー・グループを変更しているだけである。
ちなみに以前までは固定IPを設定せずにどうにかならないか…と四苦八苦していたのだが、プラグイン等で実現させる事がほとんどのようなので一旦諦めた。”Avahi“等を使えないかと試していたのだが…。わざわざ他の人にも同じプラグインを導入してもらって、というのは面倒なので、固定IPを振ってVirtualBoxのネットワーク設定が一つ増えるかもしれない程度で済むのであれば、そちらを選択したまでである。
上記のVagrantfileを実行したところ、zoo1/zoo2共にZooKeeperがインストールされている事を確認した。”define“の外に書けば、共通して反映してくれるようだ。個別の設定等は”define“の中に書けば良いのであろう。スクリプトの実行順序が気になるが、共通の箇所を先に実行したければ、”define”の中に移して2台共に同じ記述をしなければならないのかもしれない。次回試してみる。
以上。