Vagrant を使って VirtualBox のバージョンを調べる

Vagrant 0.9, 1.0 系になってから、VirtualBox のバージョンの取得方法が変わってたので、
ちょっと困っていたのだが、ようやく分かった。

require 'rubygems'
require 'vagrant'
puts Vagrant::Driver::VirtualBox.new(nil).version

Vagrantfile 内だと require は不要。これで「Vagrant のベースBOX を更新する」で直書きしていたバージョンを動的に取得できるようになった。

Vagrant::Config.run do |config|
  config.vm.box = "squeeze"
  config.vm.provision :shell, :inline => 
    'sh /vagrant/bin/provision.sh ' + Vagrant::Driver::VirtualBox.new(nil).version
end

あとは、こちらを参考に、Ruby スクリプトVagrant を操作してベースBOXのパッケージ化するまで全自動でやってしまえるようになった。Vagrant 結構便利かも。

require 'rubygems'
require 'vagrant'

env = Vagrant::Environment.new

box_name = env.primary_vm.box.name
pkg_name = box_name + '-' + Time.now.strftime('%Y%m%d%H%M%S') + '.box'

env.cli('up')
env.cli('package', '--output', pkg_name)
env.primary_vm.box.destroy
env.cli('box', 'add', box_name, pkg_name)
env.cli('destroy', '-f')

(ソースコードを読まないと分からないことが多いけどw)