On our CI system, we’ve used a layered, template-chaining approach to building VMs, wherein we:
- build base_images from iso with
virtualbox-iso
- currently these are being exported as ovf
- build more “layers” of base images from the above .ovf using
virtualbox-ovf
- build final customized user images from any of the above .ovf using
virtualbox-ovf
- customization includes expanding the virtual disk included in the .ovf
Following this approach it does not initially appear possible to resize the virtual disk in the final virtualbox-ovf
build stage because:
-
virtualbox-iso
exports as .ovf/.ova, which more or less requires VMware’s .vdmk format -
vboxmanage modifymedium --resize
only supports .vdi/.vhd formats
I see that the virtualbox-iso
stepCreateDisk function hard-codes the virtual disk format to VDI
. This is good because I think I can now assume that the only reason I’m getting a .vmdk is that I’m exporting to .ovf.
Without exporting from virtualbox-iso
/importing into virtualbox-ovf
, how can I “chain” packer virtualbox builds, while preserving the vdi file format?
I have gathered minor pieces of this puzzle, such as:
- I know I can skip_export but I don’t see how I can import the machine with converting to ovf.
- I know I can vboxmanage and vboxmanage-post any commands I want, but finding the right sequence eludes me. I could clone the .vmdk as a .vdi in any build stage, but I don’t understand what builder can accept a .vdi as input. They only seems to support importing ovf, which only seems to support .vdmk.
This just feels like a lot of work to figure out how to do something quite simple. FWIW I implemented this same idea effortlessly using vsphere-iso
/vsphere-clone
builders - all I had to do was specify the disk size in the downstream vsphere-clone
builder.
Anyone have any ideas or suggestions?