ページ

2015年3月29日

複数の仮想マシンを生成するVagrantfile記述例


Vagrantで複数のVirtualBox仮想マシンを作成する記述方法です。


単純に作成するだけだとちっとも面白くないので、SHELLプロビジョンできるといいかな。







複数の仮想マシンを生成する


Vagrantで複数のVirtualBox仮想マシンを生成する場合、仮想マシンをそれぞれ違うシェルスクリプトを呼び出して構成を変化させる方法です。

インストールするパッケージやコンフィギュレーションファイルの調整程度のシンプルなマシン構成であればシェル・スクリプトだけでも十分可能です。

# Vagrantfile --- test for multiple vm with shell provisioning.
# $Id: Vagrantfile,v 1.1 2015/01/10 12:00:32 sumisada Exp $
# $Author: sumisada$
#
# -*- mode: ruby -*-
# vi: set ft=ruby :
#
# ------------------------------------------------------------------------------
# 変数
# ------------------------------------------------------------------------------

boxes = [
  { :name => 'srv1', :ip => '192.168.0.101', :provision => 'vm1.sh' },
  { :name => 'srv2', :ip => '192.168.0.102', :provision => 'vm2.sh'  },
  { :name => 'srv3', :ip => '192.168.0.103', :provision => 'vm3.sh'  }
]

# ------------------------------------------------------------------------------
# 仮想マシンを起動
# ------------------------------------------------------------------------------
Vagrant.configure(2) do |config|

  config.vm.box = "CentOS7.0 min"

  boxes.each do |vms|
    config.vm.define vms[:name] do |node|
      node.vm.hostname         = vms[ :name]
      node.vm.box_check_update = false
      node.vm.network "private_network", ip: vms[ :ip]
      node.vm.synced_folder ".", "/vagrant", disabled: true
# ------------------------------------------------------------------------------
# シェルスクリプトでプロビジョニング
# ------------------------------------------------------------------------------
      node.vm.provision :shell do |shell|
        shell.path = vms[:provision]
      end
    end
  end
end
# ------------------------------------------------------------------------------
#
# ------------------------------------------------------------------------------

スタティックIPの割り当てと、シェルスクリプトを先頭の変数に記述しておけば次々仮想マシンを生成してくれます。 マシン構成は呼び出すシェルスクリプトによって構成内容を変えています。

Vagrantfileをいくつも作るよりは手間が少ないかな。