add build script to build virtual machine image for pan.do/ra
This commit is contained in:
parent
99528a73d4
commit
0350c0b122
5 changed files with 230 additions and 0 deletions
69
vm/virtualbox_vm.py
Normal file
69
vm/virtualbox_vm.py
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
#
|
||||
# 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 <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
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)
|
||||
Loading…
Add table
Add a link
Reference in a new issue