Can now create and boot vbox image

This commit is contained in:
Anders Ingemann 2014-12-18 21:47:51 +01:00
parent ea3eeae064
commit e2cddbca4c
3 changed files with 27 additions and 11 deletions

View file

@ -23,6 +23,16 @@ def merge_dicts(*args):
return reduce(merge, args, {})
def waituntil(predicate, timeout=5, interval=0.05):
import time
threshhold = time.time() + timeout
while time.time() < threshhold:
if predicate():
return True
time.sleep(interval)
return False
def bootstrap(manifest, build_server):
from bootstrapvz.remote.build_servers import LocalBuildServer
if isinstance(build_server, LocalBuildServer):

View file

@ -1,4 +1,3 @@
from bootstrapvz.common.tools import log_check_call
import virtualbox
@ -36,9 +35,9 @@ class VirtualBoxInstance(Instance):
os_type = 'Debian_64'
self.machine = self.vbox.create_machine(settings_file='', name=self.name,
groups=[], os_type_id=os_type, flags='')
self.machine.save_settings()
self.machine.cpu_count = self.cpus
self.machine.memory_size = self.memory
self.machine.save_settings() # save settings, so that we can register it
self.vbox.register_machine(self.machine)
self.machine.lock_machine(self.session, virtualbox.library.LockType.write)
strg_ctrl = self.session.machine.add_storage_controller('SATA Controller',
@ -47,22 +46,26 @@ class VirtualBoxInstance(Instance):
self.session.machine.attach_device(name='SATA Controller', controller_port=0, device=0,
type_p=virtualbox.library.DeviceType.hard_disk,
medium=self.image.medium)
self.session.machine.save_settings()
self.session.unlock_machine()
self.session.machine.save_settings() # save changes to the controller
self._unlock_machine()
def boot(self):
self.machine.launch_vm_process(self.session, 'headless')
self.machine.launch_vm_process(self.session, 'headless').wait_for_completion(-1)
def shutdown(self):
self.session.console.power_down()
log_check_call(['VBoxManage', 'stopvm', self.uuid,
'--type', 'headless'])
self.session.console.power_down().wait_for_completion(-1)
self._unlock_machine()
def destroy(self):
if hasattr(self, 'machine'):
self.machine.lock_machine(self.session, virtualbox.library.LockType.write)
self.machine.lock_machine(self.session, virtualbox.library.LockType.shared)
self.session.machine.detach_device(name='SATA Controller', controller_port=0, device=0)
self.session.machine.save_settings()
self.session.unlock_machine()
self._unlock_machine()
self.machine.unregister(virtualbox.library.CleanupMode.unregister_only)
self.machine.remove(delete=True)
def _unlock_machine(self):
from . import waituntil
self.session.unlock_machine()
waituntil(lambda: self.machine.session_state != virtualbox.library.SessionState.locked)

View file

@ -44,7 +44,10 @@ volume:
try:
instance = tools.instances.VirtualBoxInstance('unpartitioned_extlinux', image)
instance.create()
# instance.boot()
try:
instance.boot()
finally:
instance.shutdown()
# tools.test(instance)