removing objectstore and image_service flag checking
This commit is contained in:
@@ -429,7 +429,6 @@ class XenAPIVMTestCase(test.TestCase):
|
|||||||
self.assertTrue(instance.architecture)
|
self.assertTrue(instance.architecture)
|
||||||
|
|
||||||
def test_spawn_not_enough_memory(self):
|
def test_spawn_not_enough_memory(self):
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
self.assertRaises(Exception,
|
self.assertRaises(Exception,
|
||||||
self._test_spawn,
|
self._test_spawn,
|
||||||
1, 2, 3, "4") # m1.xlarge
|
1, 2, 3, "4") # m1.xlarge
|
||||||
@@ -441,7 +440,6 @@ class XenAPIVMTestCase(test.TestCase):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
vdi_recs_start = self._list_vdis()
|
vdi_recs_start = self._list_vdis()
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
stubs.stubout_fetch_image_glance_disk(self.stubs)
|
stubs.stubout_fetch_image_glance_disk(self.stubs)
|
||||||
self.assertRaises(xenapi_fake.Failure,
|
self.assertRaises(xenapi_fake.Failure,
|
||||||
self._test_spawn, 1, 2, 3)
|
self._test_spawn, 1, 2, 3)
|
||||||
@@ -456,7 +454,6 @@ class XenAPIVMTestCase(test.TestCase):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
vdi_recs_start = self._list_vdis()
|
vdi_recs_start = self._list_vdis()
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
stubs.stubout_create_vm(self.stubs)
|
stubs.stubout_create_vm(self.stubs)
|
||||||
self.assertRaises(xenapi_fake.Failure,
|
self.assertRaises(xenapi_fake.Failure,
|
||||||
self._test_spawn, 1, 2, 3)
|
self._test_spawn, 1, 2, 3)
|
||||||
@@ -464,22 +461,12 @@ class XenAPIVMTestCase(test.TestCase):
|
|||||||
vdi_recs_end = self._list_vdis()
|
vdi_recs_end = self._list_vdis()
|
||||||
self._check_vdis(vdi_recs_start, vdi_recs_end)
|
self._check_vdis(vdi_recs_start, vdi_recs_end)
|
||||||
|
|
||||||
def test_spawn_raw_objectstore(self):
|
|
||||||
FLAGS.image_service = 'nova.image.s3.S3ImageService'
|
|
||||||
self._test_spawn(1, None, None)
|
|
||||||
|
|
||||||
def test_spawn_objectstore(self):
|
|
||||||
FLAGS.image_service = 'nova.image.s3.S3ImageService'
|
|
||||||
self._test_spawn(1, 2, 3)
|
|
||||||
|
|
||||||
@stub_vm_utils_with_vdi_attached_here
|
@stub_vm_utils_with_vdi_attached_here
|
||||||
def test_spawn_raw_glance(self):
|
def test_spawn_raw_glance(self):
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_RAW, None, None)
|
self._test_spawn(glance_stubs.FakeGlance.IMAGE_RAW, None, None)
|
||||||
self.check_vm_params_for_linux()
|
self.check_vm_params_for_linux()
|
||||||
|
|
||||||
def test_spawn_vhd_glance_linux(self):
|
def test_spawn_vhd_glance_linux(self):
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_VHD, None, None,
|
self._test_spawn(glance_stubs.FakeGlance.IMAGE_VHD, None, None,
|
||||||
os_type="linux", architecture="x86-64")
|
os_type="linux", architecture="x86-64")
|
||||||
self.check_vm_params_for_linux()
|
self.check_vm_params_for_linux()
|
||||||
@@ -508,20 +495,17 @@ class XenAPIVMTestCase(test.TestCase):
|
|||||||
self.assertEqual(len(self.vm['VBDs']), 1)
|
self.assertEqual(len(self.vm['VBDs']), 1)
|
||||||
|
|
||||||
def test_spawn_vhd_glance_windows(self):
|
def test_spawn_vhd_glance_windows(self):
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_VHD, None, None,
|
self._test_spawn(glance_stubs.FakeGlance.IMAGE_VHD, None, None,
|
||||||
os_type="windows", architecture="i386")
|
os_type="windows", architecture="i386")
|
||||||
self.check_vm_params_for_windows()
|
self.check_vm_params_for_windows()
|
||||||
|
|
||||||
def test_spawn_glance(self):
|
def test_spawn_glance(self):
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_MACHINE,
|
self._test_spawn(glance_stubs.FakeGlance.IMAGE_MACHINE,
|
||||||
glance_stubs.FakeGlance.IMAGE_KERNEL,
|
glance_stubs.FakeGlance.IMAGE_KERNEL,
|
||||||
glance_stubs.FakeGlance.IMAGE_RAMDISK)
|
glance_stubs.FakeGlance.IMAGE_RAMDISK)
|
||||||
self.check_vm_params_for_linux_with_external_kernel()
|
self.check_vm_params_for_linux_with_external_kernel()
|
||||||
|
|
||||||
def test_spawn_netinject_file(self):
|
def test_spawn_netinject_file(self):
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
db_fakes.stub_out_db_instance_api(self.stubs, injected=True)
|
db_fakes.stub_out_db_instance_api(self.stubs, injected=True)
|
||||||
|
|
||||||
self._tee_executed = False
|
self._tee_executed = False
|
||||||
@@ -547,7 +531,6 @@ class XenAPIVMTestCase(test.TestCase):
|
|||||||
# Capture the sudo tee .../etc/network/interfaces command
|
# Capture the sudo tee .../etc/network/interfaces command
|
||||||
(r'(sudo\s+)?tee.*interfaces', _tee_handler),
|
(r'(sudo\s+)?tee.*interfaces', _tee_handler),
|
||||||
])
|
])
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
self._test_spawn(glance_stubs.FakeGlance.IMAGE_MACHINE,
|
self._test_spawn(glance_stubs.FakeGlance.IMAGE_MACHINE,
|
||||||
glance_stubs.FakeGlance.IMAGE_KERNEL,
|
glance_stubs.FakeGlance.IMAGE_KERNEL,
|
||||||
glance_stubs.FakeGlance.IMAGE_RAMDISK,
|
glance_stubs.FakeGlance.IMAGE_RAMDISK,
|
||||||
@@ -555,7 +538,6 @@ class XenAPIVMTestCase(test.TestCase):
|
|||||||
self.assertTrue(self._tee_executed)
|
self.assertTrue(self._tee_executed)
|
||||||
|
|
||||||
def test_spawn_netinject_xenstore(self):
|
def test_spawn_netinject_xenstore(self):
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
db_fakes.stub_out_db_instance_api(self.stubs, injected=True)
|
db_fakes.stub_out_db_instance_api(self.stubs, injected=True)
|
||||||
|
|
||||||
self._tee_executed = False
|
self._tee_executed = False
|
||||||
@@ -784,7 +766,6 @@ class XenAPIMigrateInstance(test.TestCase):
|
|||||||
conn.migrate_disk_and_power_off(instance, '127.0.0.1')
|
conn.migrate_disk_and_power_off(instance, '127.0.0.1')
|
||||||
|
|
||||||
def test_finish_resize(self):
|
def test_finish_resize(self):
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
instance = db.instance_create(self.context, self.values)
|
instance = db.instance_create(self.context, self.values)
|
||||||
stubs.stubout_session(self.stubs, stubs.FakeSessionForMigrationTests)
|
stubs.stubout_session(self.stubs, stubs.FakeSessionForMigrationTests)
|
||||||
stubs.stubout_loopingcall_start(self.stubs)
|
stubs.stubout_loopingcall_start(self.stubs)
|
||||||
@@ -828,7 +809,6 @@ class XenAPIDetermineDiskImageTestCase(test.TestCase):
|
|||||||
|
|
||||||
def test_instance_disk(self):
|
def test_instance_disk(self):
|
||||||
"""If a kernel is specified, the image type is DISK (aka machine)."""
|
"""If a kernel is specified, the image type is DISK (aka machine)."""
|
||||||
FLAGS.image_service = 'nova.image.s3.S3ImageService'
|
|
||||||
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_MACHINE
|
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_MACHINE
|
||||||
self.fake_instance.kernel_id = glance_stubs.FakeGlance.IMAGE_KERNEL
|
self.fake_instance.kernel_id = glance_stubs.FakeGlance.IMAGE_KERNEL
|
||||||
self.assert_disk_type(vm_utils.ImageType.DISK)
|
self.assert_disk_type(vm_utils.ImageType.DISK)
|
||||||
@@ -838,7 +818,6 @@ class XenAPIDetermineDiskImageTestCase(test.TestCase):
|
|||||||
If the kernel isn't specified, and we're not using Glance, then
|
If the kernel isn't specified, and we're not using Glance, then
|
||||||
DISK_RAW is assumed.
|
DISK_RAW is assumed.
|
||||||
"""
|
"""
|
||||||
FLAGS.image_service = 'nova.image.s3.S3ImageService'
|
|
||||||
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_RAW
|
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_RAW
|
||||||
self.fake_instance.kernel_id = None
|
self.fake_instance.kernel_id = None
|
||||||
self.assert_disk_type(vm_utils.ImageType.DISK_RAW)
|
self.assert_disk_type(vm_utils.ImageType.DISK_RAW)
|
||||||
@@ -848,7 +827,6 @@ class XenAPIDetermineDiskImageTestCase(test.TestCase):
|
|||||||
If we're using Glance, then defer to the image_type field, which in
|
If we're using Glance, then defer to the image_type field, which in
|
||||||
this case will be 'raw'.
|
this case will be 'raw'.
|
||||||
"""
|
"""
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_RAW
|
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_RAW
|
||||||
self.fake_instance.kernel_id = None
|
self.fake_instance.kernel_id = None
|
||||||
self.assert_disk_type(vm_utils.ImageType.DISK_RAW)
|
self.assert_disk_type(vm_utils.ImageType.DISK_RAW)
|
||||||
@@ -858,7 +836,6 @@ class XenAPIDetermineDiskImageTestCase(test.TestCase):
|
|||||||
If we're using Glance, then defer to the image_type field, which in
|
If we're using Glance, then defer to the image_type field, which in
|
||||||
this case will be 'vhd'.
|
this case will be 'vhd'.
|
||||||
"""
|
"""
|
||||||
FLAGS.image_service = 'nova.image.glance.GlanceImageService'
|
|
||||||
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_VHD
|
self.fake_instance.image_ref = glance_stubs.FakeGlance.IMAGE_VHD
|
||||||
self.fake_instance.kernel_id = None
|
self.fake_instance.kernel_id = None
|
||||||
self.assert_disk_type(vm_utils.ImageType.DISK_VHD)
|
self.assert_disk_type(vm_utils.ImageType.DISK_VHD)
|
||||||
|
|||||||
@@ -423,13 +423,8 @@ class VMHelper(HelperBase):
|
|||||||
"""
|
"""
|
||||||
access = AuthManager().get_access_key(user, project)
|
access = AuthManager().get_access_key(user, project)
|
||||||
|
|
||||||
if FLAGS.image_service == 'nova.image.glance.GlanceImageService':
|
return cls._fetch_image_glance(session, instance_id, image,
|
||||||
return cls._fetch_image_glance(session, instance_id, image,
|
access, image_type)
|
||||||
access, image_type)
|
|
||||||
else:
|
|
||||||
return cls._fetch_image_objectstore(session, instance_id, image,
|
|
||||||
access, user.secret,
|
|
||||||
image_type)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def _fetch_image_glance_vhd(cls, session, instance_id, image, access,
|
def _fetch_image_glance_vhd(cls, session, instance_id, image, access,
|
||||||
@@ -603,10 +598,7 @@ class VMHelper(HelperBase):
|
|||||||
else:
|
else:
|
||||||
return ImageType.DISK_RAW
|
return ImageType.DISK_RAW
|
||||||
|
|
||||||
if FLAGS.image_service == 'nova.image.glance.GlanceImageService':
|
image_type = determine_from_glance()
|
||||||
image_type = determine_from_glance()
|
|
||||||
else:
|
|
||||||
image_type = determine_from_instance()
|
|
||||||
|
|
||||||
log_disk_format(image_type)
|
log_disk_format(image_type)
|
||||||
return image_type
|
return image_type
|
||||||
@@ -626,42 +618,6 @@ class VMHelper(HelperBase):
|
|||||||
return cls._fetch_image_glance_disk(
|
return cls._fetch_image_glance_disk(
|
||||||
session, instance_id, image, access, image_type)
|
session, instance_id, image, access, image_type)
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _fetch_image_objectstore(cls, session, instance_id, image, access,
|
|
||||||
secret, image_type):
|
|
||||||
"""Fetch an image from objectstore.
|
|
||||||
|
|
||||||
Returns: A single filename if image_type is KERNEL or RAMDISK
|
|
||||||
A list of dictionaries that describe VDIs, otherwise
|
|
||||||
"""
|
|
||||||
url = "http://%s:%s/_images/%s/image" % (FLAGS.s3_host, FLAGS.s3_port,
|
|
||||||
image)
|
|
||||||
LOG.debug(_("Asking xapi to fetch %(url)s as %(access)s") % locals())
|
|
||||||
if image_type in (ImageType.KERNEL, ImageType.RAMDISK):
|
|
||||||
fn = 'get_kernel'
|
|
||||||
else:
|
|
||||||
fn = 'get_vdi'
|
|
||||||
args = {}
|
|
||||||
args['src_url'] = url
|
|
||||||
args['username'] = access
|
|
||||||
args['password'] = secret
|
|
||||||
args['add_partition'] = 'false'
|
|
||||||
args['raw'] = 'false'
|
|
||||||
if not image_type in (ImageType.KERNEL, ImageType.RAMDISK):
|
|
||||||
args['add_partition'] = 'true'
|
|
||||||
if image_type == ImageType.DISK_RAW:
|
|
||||||
args['raw'] = 'true'
|
|
||||||
task = session.async_call_plugin('objectstore', fn, args)
|
|
||||||
vdi_uuid = None
|
|
||||||
filename = None
|
|
||||||
if image_type in (ImageType.KERNEL, ImageType.RAMDISK):
|
|
||||||
filename = session.wait_for_task(task, instance_id)
|
|
||||||
else:
|
|
||||||
vdi_uuid = session.wait_for_task(task, instance_id)
|
|
||||||
return [dict(vdi_type=ImageType.to_string(image_type),
|
|
||||||
vdi_uuid=vdi_uuid,
|
|
||||||
file=filename)]
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def determine_is_pv(cls, session, instance_id, vdi_ref, disk_image_type,
|
def determine_is_pv(cls, session, instance_id, vdi_ref, disk_image_type,
|
||||||
os_type):
|
os_type):
|
||||||
@@ -669,68 +625,26 @@ class VMHelper(HelperBase):
|
|||||||
Determine whether the VM will use a paravirtualized kernel or if it
|
Determine whether the VM will use a paravirtualized kernel or if it
|
||||||
will use hardware virtualization.
|
will use hardware virtualization.
|
||||||
|
|
||||||
1. Objectstore (any image type):
|
1. Glance (VHD): then we use `os_type`, raise if not set
|
||||||
We use plugin to figure out whether the VDI uses PV
|
|
||||||
|
|
||||||
2. Glance (VHD): then we use `os_type`, raise if not set
|
2. Glance (DISK_RAW): use Pygrub to figure out if pv kernel is
|
||||||
|
|
||||||
3. Glance (DISK_RAW): use Pygrub to figure out if pv kernel is
|
|
||||||
available
|
available
|
||||||
|
|
||||||
4. Glance (DISK): pv is assumed
|
3. Glance (DISK): pv is assumed
|
||||||
"""
|
|
||||||
if FLAGS.image_service == 'nova.image.glance.GlanceImageService':
|
|
||||||
# 2, 3, 4: Glance
|
|
||||||
return cls._determine_is_pv_glance(
|
|
||||||
session, vdi_ref, disk_image_type, os_type)
|
|
||||||
else:
|
|
||||||
# 1. Objecstore
|
|
||||||
return cls._determine_is_pv_objectstore(session, instance_id,
|
|
||||||
vdi_ref)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _determine_is_pv_objectstore(cls, session, instance_id, vdi_ref):
|
|
||||||
LOG.debug(_("Looking up vdi %s for PV kernel"), vdi_ref)
|
|
||||||
fn = "is_vdi_pv"
|
|
||||||
args = {}
|
|
||||||
args['vdi-ref'] = vdi_ref
|
|
||||||
task = session.async_call_plugin('objectstore', fn, args)
|
|
||||||
pv_str = session.wait_for_task(task, instance_id)
|
|
||||||
pv = None
|
|
||||||
if pv_str.lower() == 'true':
|
|
||||||
pv = True
|
|
||||||
elif pv_str.lower() == 'false':
|
|
||||||
pv = False
|
|
||||||
LOG.debug(_("PV Kernel in VDI:%s"), pv)
|
|
||||||
return pv
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def _determine_is_pv_glance(cls, session, vdi_ref, disk_image_type,
|
|
||||||
os_type):
|
|
||||||
"""
|
|
||||||
For a Glance image, determine if we need paravirtualization.
|
|
||||||
|
|
||||||
The relevant scenarios are:
|
|
||||||
2. Glance (VHD): then we use `os_type`, raise if not set
|
|
||||||
|
|
||||||
3. Glance (DISK_RAW): use Pygrub to figure out if pv kernel is
|
|
||||||
available
|
|
||||||
|
|
||||||
4. Glance (DISK): pv is assumed
|
|
||||||
"""
|
"""
|
||||||
|
|
||||||
LOG.debug(_("Looking up vdi %s for PV kernel"), vdi_ref)
|
LOG.debug(_("Looking up vdi %s for PV kernel"), vdi_ref)
|
||||||
if disk_image_type == ImageType.DISK_VHD:
|
if disk_image_type == ImageType.DISK_VHD:
|
||||||
# 2. VHD
|
# 1. VHD
|
||||||
if os_type == 'windows':
|
if os_type == 'windows':
|
||||||
is_pv = False
|
is_pv = False
|
||||||
else:
|
else:
|
||||||
is_pv = True
|
is_pv = True
|
||||||
elif disk_image_type == ImageType.DISK_RAW:
|
elif disk_image_type == ImageType.DISK_RAW:
|
||||||
# 3. RAW
|
# 2. RAW
|
||||||
is_pv = with_vdi_attached_here(session, vdi_ref, True, _is_vdi_pv)
|
is_pv = with_vdi_attached_here(session, vdi_ref, True, _is_vdi_pv)
|
||||||
elif disk_image_type == ImageType.DISK:
|
elif disk_image_type == ImageType.DISK:
|
||||||
# 4. Disk
|
# 3. Disk
|
||||||
is_pv = True
|
is_pv = True
|
||||||
else:
|
else:
|
||||||
raise exception.Error(_("Unknown image format %(disk_image_type)s")
|
raise exception.Error(_("Unknown image format %(disk_image_type)s")
|
||||||
|
|||||||
Reference in New Issue
Block a user