mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-08-24 15:36:27 +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, {})
|
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):
|
def bootstrap(manifest, build_server):
|
||||||
from bootstrapvz.remote.build_servers import LocalBuildServer
|
from bootstrapvz.remote.build_servers import LocalBuildServer
|
||||||
if isinstance(build_server, LocalBuildServer):
|
if isinstance(build_server, LocalBuildServer):
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from bootstrapvz.common.tools import log_check_call
|
|
||||||
import virtualbox
|
import virtualbox
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,9 +35,9 @@ class VirtualBoxInstance(Instance):
|
||||||
os_type = 'Debian_64'
|
os_type = 'Debian_64'
|
||||||
self.machine = self.vbox.create_machine(settings_file='', name=self.name,
|
self.machine = self.vbox.create_machine(settings_file='', name=self.name,
|
||||||
groups=[], os_type_id=os_type, flags='')
|
groups=[], os_type_id=os_type, flags='')
|
||||||
self.machine.save_settings()
|
|
||||||
self.machine.cpu_count = self.cpus
|
self.machine.cpu_count = self.cpus
|
||||||
self.machine.memory_size = self.memory
|
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.vbox.register_machine(self.machine)
|
||||||
self.machine.lock_machine(self.session, virtualbox.library.LockType.write)
|
self.machine.lock_machine(self.session, virtualbox.library.LockType.write)
|
||||||
strg_ctrl = self.session.machine.add_storage_controller('SATA Controller',
|
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,
|
self.session.machine.attach_device(name='SATA Controller', controller_port=0, device=0,
|
||||||
type_p=virtualbox.library.DeviceType.hard_disk,
|
type_p=virtualbox.library.DeviceType.hard_disk,
|
||||||
medium=self.image.medium)
|
medium=self.image.medium)
|
||||||
self.session.machine.save_settings()
|
self.session.machine.save_settings() # save changes to the controller
|
||||||
self.session.unlock_machine()
|
self._unlock_machine()
|
||||||
|
|
||||||
def boot(self):
|
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):
|
def shutdown(self):
|
||||||
self.session.console.power_down()
|
self.session.console.power_down().wait_for_completion(-1)
|
||||||
log_check_call(['VBoxManage', 'stopvm', self.uuid,
|
self._unlock_machine()
|
||||||
'--type', 'headless'])
|
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
if hasattr(self, 'machine'):
|
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.detach_device(name='SATA Controller', controller_port=0, device=0)
|
||||||
self.session.machine.save_settings()
|
self.session.machine.save_settings()
|
||||||
self.session.unlock_machine()
|
self._unlock_machine()
|
||||||
self.machine.unregister(virtualbox.library.CleanupMode.unregister_only)
|
self.machine.unregister(virtualbox.library.CleanupMode.unregister_only)
|
||||||
self.machine.remove(delete=True)
|
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:
|
try:
|
||||||
instance = tools.instances.VirtualBoxInstance('unpartitioned_extlinux', image)
|
instance = tools.instances.VirtualBoxInstance('unpartitioned_extlinux', image)
|
||||||
instance.create()
|
instance.create()
|
||||||
# instance.boot()
|
try:
|
||||||
|
instance.boot()
|
||||||
|
finally:
|
||||||
|
instance.shutdown()
|
||||||
|
|
||||||
# tools.test(instance)
|
# tools.test(instance)
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue