# # Uncomplicated VM Builder # Copyright (C) 2007-2009 Canonical Ltd. # # See AUTHORS for list of contributors # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License version 3, as # published by the Free Software Foundation. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # import os import os.path import stat import VMBuilder from VMBuilder import register_hypervisor, Hypervisor from VMBuilder.disk import vbox_manager_path import VMBuilder.hypervisor class VirtualBox(Hypervisor): preferred_storage = VMBuilder.hypervisor.STORAGE_DISK_IMAGE needs_bootloader = True name = 'VirtualBox' arg = 'vbox' def register_options(self): group = self.setting_group('VM settings') group.add_setting('mem', extra_args=['-m'], type='int', default=128, help='Assign MEM megabytes of memory to the guest vm. [default: %default]') group.add_setting('cpus', type='int', default=1, help='Assign NUM cpus to the guest vm. [default: %default]') group.add_setting('vbox-disk-format', metavar='FORMAT', default='vdi', help='Desired disk format. Valid options are: vdi vmdk. [default: %default]') def convert(self, disks, destdir): self.imgs = [] for disk in disks: img_path = disk.convert(destdir, self.context.get_setting('vbox-disk-format')) self.imgs.append(img_path) self.call_hooks('fix_ownership', img_path) def deploy(self, destdir): hostname = self.context.distro.get_setting('hostname') mac = self.context.get_setting('mac') ip = self.context.get_setting('ip') vm_deploy = VMBuilder.util.render_template('virtualbox', self.context, 'vm_deploy_script', { 'os_type' : self.context.distro.__class__.__name__, 'vm_name' : hostname, 'vm_disks' : self.imgs, 'mac' : mac, 'ip' : ip, 'memory' : self.context.get_setting('mem'), 'cpus' : self.context.get_setting('cpus') }) script_file = '%s/deploy_%s.sh' % (destdir, hostname) fp = open(script_file, 'w') fp.write(vm_deploy) fp.close() os.chmod(script_file, stat.S_IRWXU | stat.S_IRGRP | stat.S_IROTH) self.call_hooks('fix_ownership', script_file) register_hypervisor(VirtualBox)