仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

Vagrantで複数の仮想マシンをいっぺんに作る

Vagrantで仮想マシンを作るには、ディレクトリーを掘って、vagrant initをして設定ファイルのサンプルを作って、その設定を書き換えてvagrant upといった一連の作業を行います。数台であればこれの繰り返しでいいのですが、ディレクトリーの移動が面倒ですよね。

同じように考えている人は多いようで、検索したところ方法を書いてくれている人がいました。

通常、一つの仮想マシンを制御するためのVagrantファイルには次のような記述が羅列してありますが、

config.vm.box = "precise"
config.vm.hostname = "precise"
config.vm.network "public_network", bridge: 'en0: Ethernet'

複数の仮想マシンを制御するためのVagrantファイルには次のように記述するようです。パラメータの冒頭がconfigでないところがポイントです。

VAGRANTFILE_API_VERSION = "2"     ← 追記

Vagrant.configure(2) do |config|
config.vm.define :node1 do |node1|
node1.vm.box = "precise"
node1.vm.hostname = "node1"
node1.vm.network "public_network", bridge: 'en0: Ethernet'
end

config.vm.define :node2 do |node2|
node2.vm.box = "precise"
node2.vm.hostname = "node2"
node2.vm.network "public_network", bridge: 'en0: Ethernet'
end

(以下略)

「vm名.vm.設定値 ="設定"」のようなルールでつらつらと書いていけばいいようです。上記の例では2つの仮想マシンが作られ、各仮想マシンにhostnemeで指定したホスト名が設定され、3行目の設定でブリッジアダプターが割り当てられます。同じように設定を追記すれば、それぞれの仮想マシンをカスタマイズして希望通りの仮想マシンを自動的に作成できます。便利ですね。

さらに次のようにaptコマンドを仕込めば、任意のパッケージインストール済みの環境も簡単に作ることができます。

config.vm.define :node1 do |node1|
node1.vm.box = "precise"
node1.vm.hostname = "node1"
node1.vm.network "public_network", bridge: 'en0: Ethernet'

node1.vm.provision :shell, inline:<<-EOS
sudo apt-get update
sudo apt-get install -y apache2
 EOS
end