mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 07:26:29 +00:00
Can now create and boot vbox image
This commit is contained in:
parent
ea3eeae064
commit
e2cddbca4c
3 changed files with 27 additions and 11 deletions
|
@ -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):
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue