Eu percebi que Vagrantfile é apenas Ruby, então eu usei Ruby para gerar o VDI e o Vagrant para anexar o VDI à caixa. O único problema é que requer uma caixa de espaço reservado de manequim, e depois de substituir a mídia de armazenamento, ele nunca excluirá a imagem de disco de espaço reservado! Eu não sei como consertar isso.
Vagrant.configure("2") do |config|
latest_bin = 'ls -t ../build/*.bin | head -1'.strip
#latest_bin = Dir.glob('../build/*.bin').sort{ |a,b| File.new(a).stat <=> File.new(b).stat }.last
vdi_file = 'nycmesh-qmp-openwrt.vdi'
system "vboxmanage convertfromraw --format vdi #{latest_bin} #{vdi_file}" unless File.exist?(vdi_file)
config.vm.box = "centos/7" # dummy box
config.vm.provider "virtualbox" do |vb|
# add the newly created build disk firmware
vb.customize ['storageattach', :id, '--storagectl', 'IDE', '--port', 0, '--device', 0, '--type', 'hdd', '--medium', "nycmesh-qmp-openwrt.vdi"]
end