From ea3eeae0641a78b3a96308010adfe4e6394833da Mon Sep 17 00:00:00 2001 From: Anders Ingemann Date: Sun, 14 Dec 2014 15:41:04 +0100 Subject: [PATCH] vbox instance creation working --- tests/integration/tools/images.py | 14 ++++----- tests/integration/tools/instances.py | 41 +++++++++++++-------------- tests/integration/virtualbox_tests.py | 18 ++++++++---- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/tests/integration/tools/images.py b/tests/integration/tools/images.py index 928338b..2bda849 100644 --- a/tests/integration/tools/images.py +++ b/tests/integration/tools/images.py @@ -1,3 +1,4 @@ +import virtualbox class Image(object): @@ -14,12 +15,11 @@ class VirtualBoxImage(Image): def __init__(self, manifest, image_path): super(VirtualBoxImage, self).__init__(manifest) self.image_path = image_path - self.medium = self.vbox.open_medium(location=self.image.image_path, - decive_type=self.vbox.library.DeviceType.HardDisk, - access_mode=self.vbox.library.AccessMode.read_only, - force_new_uuid=False) + self.vbox = virtualbox.VirtualBox() + self.medium = self.vbox.open_medium(self.image_path, # location + virtualbox.library.DeviceType.hard_disk, # decive_type + virtualbox.library.AccessMode.read_only, # access_mode + False) # force_new_uuid def destroy(self): - self.medium.delete_storage() - import os - os.remove(self.image_path) + self.medium.close() diff --git a/tests/integration/tools/instances.py b/tests/integration/tools/instances.py index 075fc20..d9dc228 100644 --- a/tests/integration/tools/instances.py +++ b/tests/integration/tools/instances.py @@ -1,4 +1,5 @@ from bootstrapvz.common.tools import log_check_call +import virtualbox class Instance(object): @@ -24,11 +25,12 @@ class VirtualBoxInstance(Instance): def __init__(self, name, image): super(VirtualBoxInstance, self).__init__(name, image) - import virtualbox self.vbox = virtualbox.VirtualBox() + manager = virtualbox.Manager() + self.session = manager.get_session() def create(self): - if self.image.manifest['system']['architecture'] == 'x86': + if self.image.manifest.system['architecture'] == 'x86': os_type = 'Debian' else: os_type = 'Debian_64' @@ -37,27 +39,19 @@ class VirtualBoxInstance(Instance): self.machine.save_settings() self.machine.cpu_count = self.cpus self.machine.memory_size = self.memory - self.machine.attach_device(name='root', controller_port=0, device=0, - type_p=self.vbox.library.DeviceType.HardDisk, - medium=self.image.medium) self.vbox.register_machine(self.machine) - # [self.uuid] = log_check_call(['VBoxManage', 'createvm' - # '--name', self.name]) - # log_check_call(['VBoxManage', 'modifyvm', self.uuid, - # '--cpus', self.cpus, - # '--memory', self.memory]) - # log_check_call(['VBoxManage', 'storageattach', self.uuid, - # '--storagectl', '"SATA Controller"', - # '--device', '0', - # '--port', '0', - # '--type', 'hdd', - # '--medium', self.image.image_path]) + self.machine.lock_machine(self.session, virtualbox.library.LockType.write) + strg_ctrl = self.session.machine.add_storage_controller('SATA Controller', + virtualbox.library.StorageBus.sata) + strg_ctrl.port_count = 1 + 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() def boot(self): - self.session = self.vbox.Session() self.machine.launch_vm_process(self.session, 'headless') - # log_check_call(['VBoxManage', 'startvm', self.uuid, - # '--type', 'headless']) def shutdown(self): self.session.console.power_down() @@ -65,5 +59,10 @@ class VirtualBoxInstance(Instance): '--type', 'headless']) def destroy(self): - self.machine.unregister(self.vbox.CleanupMode.full) - self.machine.remove(delete=True) + if hasattr(self, 'machine'): + self.machine.lock_machine(self.session, virtualbox.library.LockType.write) + self.session.machine.detach_device(name='SATA Controller', controller_port=0, device=0) + self.session.machine.save_settings() + self.session.unlock_machine() + self.machine.unregister(virtualbox.library.CleanupMode.unregister_only) + self.machine.remove(delete=True) diff --git a/tests/integration/virtualbox_tests.py b/tests/integration/virtualbox_tests.py index 84f990b..2f00928 100644 --- a/tests/integration/virtualbox_tests.py +++ b/tests/integration/virtualbox_tests.py @@ -1,4 +1,6 @@ import tools +import tools.images +import tools.instances from manifests import partials from bootstrapvz.base.manifest import Manifest from bootstrapvz.remote.build_servers import pick_build_server @@ -39,14 +41,18 @@ volume: try: image = tools.images.VirtualBoxImage(manifest, image_path) + try: + instance = tools.instances.VirtualBoxInstance('unpartitioned_extlinux', image) + instance.create() + # instance.boot() - instance = tools.instances.VirtualBoxInstance(image) - instance.create() - instance.boot() + # tools.test(instance) - tools.test(instance) + finally: + if 'instance' in locals(): + instance.destroy() finally: - if 'instance' in locals(): - instance.destroy() if 'image' in locals(): image.destroy() + import os + os.remove(image_path)