2014-12-20 01:21:00 +01:00
|
|
|
from __future__ import absolute_import
|
|
|
|
from . import Image
|
|
|
|
import virtualbox as vboxapi
|
2014-12-20 17:59:39 +01:00
|
|
|
import logging
|
|
|
|
log = logging.getLogger(__name__)
|
2014-12-20 01:21:00 +01:00
|
|
|
|
|
|
|
|
|
|
|
class VirtualBoxImage(Image):
|
|
|
|
|
|
|
|
def __init__(self, manifest, image_path):
|
|
|
|
super(VirtualBoxImage, self).__init__(manifest)
|
|
|
|
self.image_path = image_path
|
|
|
|
self.vbox = vboxapi.VirtualBox()
|
2014-12-20 16:52:31 +01:00
|
|
|
|
|
|
|
def open(self):
|
2014-12-20 17:59:39 +01:00
|
|
|
log.debug('Opening vbox medium `{path}\''.format(path=self.image_path))
|
2014-12-20 01:21:00 +01:00
|
|
|
self.medium = self.vbox.open_medium(self.image_path, # location
|
2015-01-16 01:50:03 +01:00
|
|
|
vboxapi.library.DeviceType.hard_disk, # device_type
|
2014-12-20 01:21:00 +01:00
|
|
|
vboxapi.library.AccessMode.read_only, # access_mode
|
|
|
|
False) # force_new_uuid
|
|
|
|
|
2014-12-20 16:52:31 +01:00
|
|
|
def close(self):
|
2014-12-20 17:59:39 +01:00
|
|
|
log.debug('Closing vbox medium `{path}\''.format(path=self.image_path))
|
2014-12-20 01:21:00 +01:00
|
|
|
self.medium.close()
|
2014-12-20 16:52:31 +01:00
|
|
|
|
|
|
|
def get_instance(self):
|
|
|
|
import hashlib
|
|
|
|
from ..instances.virtualbox import VirtualBoxInstance
|
|
|
|
image_hash = hashlib.sha1(self.image_path).hexdigest()
|
|
|
|
name = 'bootstrap-vz-{hash}'.format(hash=image_hash[:8])
|
|
|
|
return VirtualBoxInstance(name, self)
|
|
|
|
|
|
|
|
def __enter__(self):
|
|
|
|
self.open()
|
|
|
|
return self.get_instance()
|
|
|
|
|
|
|
|
def __exit__(self, type, value, traceback):
|
|
|
|
self.close()
|