def test_volume_glance_metadata_copy_to_volume(self): vol1 = db.volume_create(self.ctxt, {}) vol2 = db.volume_create(self.ctxt, {}) db.volume_glance_metadata_create(self.ctxt, vol1["id"], "m1", "v1") snapshot = db.snapshot_create(self.ctxt, {"volume_id": vol1["id"]}) db.volume_glance_metadata_copy_to_snapshot(self.ctxt, snapshot["id"], vol1["id"]) db.volume_glance_metadata_copy_to_volume(self.ctxt, vol2["id"], snapshot["id"]) metadata = db.volume_glance_metadata_get(self.ctxt, vol2["id"]) metadata = {m["key"]: m["value"] for m in metadata} self.assertEqual(metadata, {"m1": "v1"})
def test_volume_glance_metadata_copy_to_volume(self): vol1 = db.volume_create(self.ctxt, {}) vol2 = db.volume_create(self.ctxt, {}) db.volume_glance_metadata_create(self.ctxt, vol1["id"], "m1", "v1") snapshot = objects.Snapshot(self.ctxt, volume_id=vol1["id"]) snapshot.create() db.volume_glance_metadata_copy_to_snapshot(self.ctxt, snapshot.id, vol1["id"]) db.volume_glance_metadata_copy_to_volume(self.ctxt, vol2["id"], snapshot.id) metadata = db.volume_glance_metadata_get(self.ctxt, vol2["id"]) metadata = {m["key"]: m["value"] for m in metadata} self.assertEqual({"m1": "v1"}, metadata)
def test_volume_glance_metadata_copy_to_volume(self): vol1 = db.volume_create(self.ctxt, {}) vol2 = db.volume_create(self.ctxt, {}) db.volume_glance_metadata_create(self.ctxt, vol1['id'], 'm1', 'v1') snapshot = db.snapshot_create(self.ctxt, {'volume_id': vol1['id']}) db.volume_glance_metadata_copy_to_snapshot(self.ctxt, snapshot['id'], vol1['id']) db.volume_glance_metadata_copy_to_volume(self.ctxt, vol2['id'], snapshot['id']) metadata = db.volume_glance_metadata_get(self.ctxt, vol2['id']) metadata = dict([(m['key'], m['value']) for m in metadata]) self.assertEqual({'m1': 'v1'}, metadata)
def test_volume_glance_metadata_copy_to_volume(self): vol1 = db.volume_create(self.ctxt, {}) vol2 = db.volume_create(self.ctxt, {}) db.volume_glance_metadata_create(self.ctxt, vol1['id'], 'm1', 'v1') snapshot = db.snapshot_create(self.ctxt, {'volume_id': vol1['id']}) db.volume_glance_metadata_copy_to_snapshot(self.ctxt, snapshot['id'], vol1['id']) db.volume_glance_metadata_copy_to_volume(self.ctxt, vol2['id'], snapshot['id']) metadata = db.volume_glance_metadata_get(self.ctxt, vol2['id']) metadata = dict([(m['key'], m['value']) for m in metadata]) self.assertEqual(metadata, {'m1': 'v1'})
def test_volume_glance_metadata_copy_to_volume(self): vol1 = db.volume_create(self.ctxt, {}) vol2 = db.volume_create(self.ctxt, {}) db.volume_glance_metadata_create(self.ctxt, vol1['id'], 'm1', 'v1') snapshot = objects.Snapshot(self.ctxt, volume_id=vol1['id']) snapshot.create() db.volume_glance_metadata_copy_to_snapshot(self.ctxt, snapshot.id, vol1['id']) db.volume_glance_metadata_copy_to_volume(self.ctxt, vol2['id'], snapshot.id) metadata = db.volume_glance_metadata_get(self.ctxt, vol2['id']) metadata = {m['key']: m['value'] for m in metadata} self.assertEqual({'m1': 'v1'}, metadata)
def test_volume_glance_metadata_copy_to_volume(self): vol1 = db.volume_create(self.ctxt, {}) vol2 = db.volume_create(self.ctxt, {}) db.volume_glance_metadata_create(self.ctxt, vol1['id'], 'm1', 'v1') snapshot = objects.Snapshot(self.ctxt, volume_id=vol1['id']) snapshot.create() db.volume_glance_metadata_copy_to_snapshot(self.ctxt, snapshot.id, vol1['id']) db.volume_glance_metadata_copy_to_volume(self.ctxt, vol2['id'], snapshot.id) metadata = db.volume_glance_metadata_get(self.ctxt, vol2['id']) metadata = {m['key']: m['value'] for m in metadata} self.assertEqual({'m1': 'v1'}, metadata)
def create_volume(self, context, volume_id, snapshot_id=None, image_id=None, source_volid=None, **kwargs): context = context.elevated() volume = db.volume_get(context, volume_id) LOG.info(_("volume %s: creating"), volume['name']) model_update = {'host': 'lunr'} volume['host'] = 'lunr' try: # Try to get the volume type name, else use the default volume type volume_type_name = volume['volume_type']['name'] except (KeyError, TypeError): volume_type_name = CONF.lunr_default_volume_type # Using the default volume type name, # ask the db for the volume type id vtype_id = self._get_volume_type_id(volume_type_name) model_update['volume_type_id'] = vtype_id volume['volume_type_id'] = vtype_id db.volume_update(context, volume['id'], model_update) params = { 'name': volume['id'], 'size': volume['size'], 'volume_type_name': volume_type_name, } # Copy image to volume! if image_id: params['image_id'] = image_id image_service, image_id = glance.get_remote_image_service(context, image_id) image_meta = image_service.show(context, image_id) if image_meta: db.volume_glance_metadata_create(context, volume['id'], 'image_id', image_id) name = image_meta.get('name', None) if name: db.volume_glance_metadata_create(context, volume['id'], 'image_name', name) image_properties = image_meta.get('properties', {}) for key, value in image_properties.items(): db.volume_glance_metadata_create(context, volume['id'], key, value) # If this is a snapshot request, add the backup param if snapshot_id: params['backup'] = snapshot_id snapshot_ref = db.snapshot_get(context, snapshot_id) original_vref = db.volume_get(context, snapshot_ref['volume_id']) if original_vref['bootable']: db.volume_glance_metadata_copy_to_volume( context, volume_id, snapshot_id) db.volume_update(context, volume_id, {'bootable': True}) # If this is a clone request, add the source_volume_id param if source_volid: params['source_volume'] = source_volid source_vref = db.volume_get(context, source_volid) if source_vref['bootable']: db.volume_glance_metadata_copy_from_volume_to_volume( context, source_volid, volume_id) db.volume_update(context, volume_id, {'bootable': True}) try: resp = LunrClient(volume, logger=LOG).volumes.create( volume['id'], **params) except LunrError, e: LOG.debug('error creating volume %s', volume['id']) # Don't leave an error'd volume around, the raise here # will notify the caller of the error (See Github Issue #343) # Also, in Havana, TaskFlow will revert the quota increase. db.volume_destroy(context, volume['id']) raise e
def create_volume(self, context, volume_id, snapshot_id=None, image_id=None, source_volid=None, **kwargs): context = context.elevated() volume = db.volume_get(context, volume_id) LOG.info(_("volume %s: creating"), volume['name']) model_update = {'host': 'lunr'} volume['host'] = 'lunr' try: # Try to get the volume type name, else use the default volume type volume_type_name = volume['volume_type']['name'] except (KeyError, TypeError): volume_type_name = CONF.lunr_default_volume_type # Using the default volume type name, # ask the db for the volume type id vtype_id = self._get_volume_type_id(volume_type_name) model_update['volume_type_id'] = vtype_id volume['volume_type_id'] = vtype_id db.volume_update(context, volume['id'], model_update) params = { 'name': volume['id'], 'size': volume['size'], 'volume_type_name': volume_type_name, } # Copy image to volume! if image_id: params['image_id'] = image_id image_service, image_id = glance.get_remote_image_service( context, image_id) image_meta = image_service.show(context, image_id) if image_meta: db.volume_glance_metadata_create(context, volume['id'], 'image_id', image_id) name = image_meta.get('name', None) if name: db.volume_glance_metadata_create(context, volume['id'], 'image_name', name) image_properties = image_meta.get('properties', {}) for key, value in image_properties.items(): db.volume_glance_metadata_create(context, volume['id'], key, value) # If this is a snapshot request, add the backup param if snapshot_id: params['backup'] = snapshot_id snapshot_ref = db.snapshot_get(context, snapshot_id) original_vref = db.volume_get(context, snapshot_ref['volume_id']) if original_vref['bootable']: db.volume_glance_metadata_copy_to_volume( context, volume_id, snapshot_id) db.volume_update(context, volume_id, {'bootable': True}) # If this is a clone request, add the source_volume_id param if source_volid: params['source_volume'] = source_volid source_vref = db.volume_get(context, source_volid) if source_vref['bootable']: db.volume_glance_metadata_copy_from_volume_to_volume( context, source_volid, volume_id) db.volume_update(context, volume_id, {'bootable': True}) try: resp = LunrClient(volume, logger=LOG).volumes.create( volume['id'], **params) except LunrError, e: LOG.debug('error creating volume %s', volume['id']) # Don't leave an error'd volume around, the raise here # will notify the caller of the error (See Github Issue #343) # Also, in Havana, TaskFlow will revert the quota increase. db.volume_destroy(context, volume['id']) raise e