def test_vol_delete_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {"id": fake.VOLUME_ID}) db.volume_glance_metadata_delete_by_volume(ctxt, fake.VOLUME_ID) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, "key1", "value1") db.volume_glance_metadata_delete_by_volume(ctxt, fake.VOLUME_ID) self.assertRaises(exception.GlanceMetadataNotFound, db.volume_glance_metadata_get, ctxt, fake.VOLUME_ID)
def test_vol_delete_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 1}) db.volume_glance_metadata_delete_by_volume(ctxt, 1) db.volume_glance_metadata_create(ctxt, 1, 'key1', 'value1') db.volume_glance_metadata_delete_by_volume(ctxt, 1) self.assertRaises(exception.GlanceMetadataNotFound, db.volume_glance_metadata_get, ctxt, 1)
def _add_metadata(self, vol_meta=False, vol_glance_meta=False): if vol_meta: # Add some VolumeMetadata db.volume_metadata_update(self.ctxt, self.volume_id, {"fee": "fi"}, False) db.volume_metadata_update(self.ctxt, self.volume_id, {"fo": "fum"}, False) if vol_glance_meta: # Add some GlanceMetadata db.volume_glance_metadata_create(self.ctxt, self.volume_id, "disk_format", "bare") db.volume_glance_metadata_create(self.ctxt, self.volume_id, "container_type", "ovf")
def test_list_detail_volumes_with_limit(self): ctxt = context.get_admin_context() db.volume_create( ctxt, {"id": "fake", "status": "available", "host": "test", "provider_location": "", "size": 1} ) db.volume_glance_metadata_create(ctxt, "fake", "key1", "value1") db.volume_glance_metadata_create(ctxt, "fake", "key2", "value2") res = self._make_request("/v2/fake/volumes/detail?limit=1") self.assertEqual(200, res.status_int) self.assertEqual({"key1": "value1", "key2": "value2"}, self._get_image_metadata_list(res.body)[0])
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_list_detail_volumes_with_limit(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 'fake', 'status': 'available', 'host': 'test', 'provider_location': '', 'size': 1}) db.volume_glance_metadata_create(ctxt, 'fake', 'key1', 'value1') db.volume_glance_metadata_create(ctxt, 'fake', 'key2', 'value2') res = self._make_request('/v2/fake/volumes/detail?limit=1') self.assertEqual(200, res.status_int) self.assertEqual({'key1': 'value1', 'key2': 'value2'}, self._get_image_metadata_list(res.body)[0])
def test_vol_glance_metadata_copy_from_volume_to_volume(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {"id": fake.VOLUME_ID}) db.volume_create(ctxt, {"id": fake.VOLUME2_ID, "source_volid": fake.VOLUME_ID}) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, "key1", "value1") db.volume_glance_metadata_copy_from_volume_to_volume(ctxt, fake.VOLUME_ID, fake.VOLUME2_ID) expected_meta = {"key": "key1", "value": "value1"} for meta in db.volume_glance_metadata_get(ctxt, fake.VOLUME2_ID): for (key, value) in expected_meta.items(): self.assertEqual(value, meta[key])
def test_vol_glance_metadata_copy_from_volume_to_volume(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 1}) db.volume_create(ctxt, {'id': 100, 'source_volid': 1}) db.volume_glance_metadata_create(ctxt, 1, 'key1', 'value1') db.volume_glance_metadata_copy_from_volume_to_volume(ctxt, 1, 100) expected_meta = {'key': 'key1', 'value': 'value1'} for meta in db.volume_glance_metadata_get(ctxt, 100): for (key, value) in expected_meta.items(): self.assertEqual(meta[key], value)
def test_vol_glance_metadata_copy_to_snapshot(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {"id": 1}) db.snapshot_create(ctxt, {"id": 100, "volume_id": 1}) db.volume_glance_metadata_create(ctxt, 1, "key1", "value1") db.volume_glance_metadata_copy_to_snapshot(ctxt, 100, 1) expected_meta = {"snapshot_id": "100", "key": "key1", "value": "value1"} for meta in db.volume_snapshot_glance_metadata_get(ctxt, 100): for (key, value) in expected_meta.items(): self.assertEqual(meta[key], value)
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_vol_glance_metadata_copy_from_volume_to_volume(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {"id": 1}) db.volume_create(ctxt, {"id": 100, "source_volid": 1}) db.volume_glance_metadata_create(ctxt, 1, "key1", "value1") db.volume_glance_metadata_copy_from_volume_to_volume(ctxt, 1, 100) expected_meta = {"key": "key1", "value": "value1"} for meta in db.volume_glance_metadata_get(ctxt, 100): for (key, value) in expected_meta.items(): self.assertEqual(meta[key], value)
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_vol_delete_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, { 'id': fake.VOLUME_ID, 'volume_type_id': fake.VOLUME_TYPE_ID }) db.volume_glance_metadata_delete_by_volume(ctxt, fake.VOLUME_ID) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'key1', 'value1') db.volume_glance_metadata_delete_by_volume(ctxt, fake.VOLUME_ID) self.assertRaises(exception.GlanceMetadataNotFound, db.volume_glance_metadata_get, ctxt, fake.VOLUME_ID)
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_vol_glance_metadata_copy_from_volume_to_volume(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 1}) db.volume_create(ctxt, {'id': 100, 'source_volid': 1}) db.volume_glance_metadata_create(ctxt, 1, 'key1', 'value1') db.volume_glance_metadata_copy_from_volume_to_volume(ctxt, 1, 100) expected_meta = {'key': 'key1', 'value': 'value1'} for meta in db.volume_glance_metadata_get(ctxt, 100): for (key, value) in expected_meta.items(): self.assertEqual(value, meta[key])
def test_vol_update_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 1}) db.volume_create(ctxt, {'id': 2}) vol_metadata = db.volume_glance_metadata_create( ctxt, 1, 'key1', 'value1') vol_metadata = db.volume_glance_metadata_create( ctxt, 2, 'key1', 'value1') vol_metadata = db.volume_glance_metadata_create( ctxt, 2, 'key2', 'value2') vol_metadata = db.volume_glance_metadata_create(ctxt, 2, 'key3', 123) expected_metadata_1 = { 'volume_id': '1', 'key': 'key1', 'value': 'value1' } metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 1) for key, value in expected_metadata_1.items(): self.assertEqual(metadata[0][key], value) expected_metadata_2 = ({ 'volume_id': '2', 'key': 'key1', 'value': 'value1' }, { 'volume_id': '2', 'key': 'key2', 'value': 'value2' }, { 'volume_id': '2', 'key': 'key3', 'value': '123' }) metadata = db.volume_glance_metadata_get(ctxt, 2) self.assertEqual(len(metadata), 3) for expected, meta in zip(expected_metadata_2, metadata): for key, value in expected.iteritems(): self.assertEqual(meta[key], value) self.assertRaises(exception.GlanceMetadataExists, db.volume_glance_metadata_create, ctxt, 1, 'key1', 'value1a') metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 1) for key, value in expected_metadata_1.items(): self.assertEqual(metadata[0][key], value)
def _create_volume_and_glance_metadata(self): ctxt = context.get_admin_context() # create a bootable volume db.volume_create( ctxt, { 'id': fake.VOLUME_ID, 'status': 'available', 'host': 'test', 'provider_location': '', 'size': 1 }) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'image_id', fake.IMAGE_ID) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'image_name', 'fake') db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'kernel_id', 'somekernel') db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'ramdisk_id', 'someramdisk') # create an unbootable volume db.volume_create( ctxt, { 'id': fake.VOLUME2_ID, 'status': 'available', 'host': 'test', 'provider_location': '', 'size': 1 })
def test_vol_update_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {"id": 1}) db.volume_create(ctxt, {"id": 2}) db.volume_glance_metadata_create(ctxt, 1, "key1", "value1") db.volume_glance_metadata_create(ctxt, 2, "key1", "value1") db.volume_glance_metadata_create(ctxt, 2, "key2", "value2") db.volume_glance_metadata_create(ctxt, 2, "key3", 123) expected_metadata_1 = {"volume_id": "1", "key": "key1", "value": "value1"} metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 1) for key, value in expected_metadata_1.items(): self.assertEqual(metadata[0][key], value) expected_metadata_2 = ( {"volume_id": "2", "key": "key1", "value": "value1"}, {"volume_id": "2", "key": "key2", "value": "value2"}, {"volume_id": "2", "key": "key3", "value": "123"}, ) metadata = db.volume_glance_metadata_get(ctxt, 2) self.assertEqual(len(metadata), 3) for expected, meta in zip(expected_metadata_2, metadata): for key, value in expected.items(): self.assertEqual(meta[key], value) self.assertRaises(exception.GlanceMetadataExists, db.volume_glance_metadata_create, ctxt, 1, "key1", "value1a") metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 1) for key, value in expected_metadata_1.items(): self.assertEqual(metadata[0][key], value)
def test_vol_glance_metadata_copy_to_snapshot(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 1}) db.snapshot_create(ctxt, {'id': 100, 'volume_id': 1}) db.volume_glance_metadata_create(ctxt, 1, 'key1', 'value1') db.volume_glance_metadata_copy_to_snapshot(ctxt, 100, 1) expected_meta = {'snapshot_id': '100', 'key': 'key1', 'value': 'value1'} for meta in db.volume_snapshot_glance_metadata_get(ctxt, 100): for (key, value) in expected_meta.items(): self.assertEqual(value, meta[key])
def _create_volume(self, image_metadata=None, **kwargs): vol_type = test_utils.create_volume_type(self.project_admin_context, name='fake_vol_type', testcase_instance=self) volume = test_utils.create_volume(self.project_member_context, volume_type_id=vol_type.id, testcase_instance=self, **kwargs) for (k, v) in (image_metadata.items() if image_metadata else []): db.volume_glance_metadata_create(self.project_admin_context, volume.id, k, v) return volume
def _add_metadata(self, vol_meta=False, vol_glance_meta=False): if vol_meta: # Add some VolumeMetadata db.volume_metadata_update(self.ctxt, self.volume_id, {'fee': 'fi'}, False) db.volume_metadata_update(self.ctxt, self.volume_id, {'fo': 'fum'}, False) if vol_glance_meta: # Add some GlanceMetadata db.volume_glance_metadata_create(self.ctxt, self.volume_id, 'disk_format', 'bare') db.volume_glance_metadata_create(self.ctxt, self.volume_id, 'container_type', 'ovf')
def test_vol_glance_metadata_copy_to_snapshot(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {"id": fake.VOLUME_ID}) snap = objects.Snapshot(ctxt, volume_id=fake.VOLUME_ID) snap.create() db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, "key1", "value1") db.volume_glance_metadata_copy_to_snapshot(ctxt, snap.id, fake.VOLUME_ID) expected_meta = {"snapshot_id": snap.id, "key": "key1", "value": "value1"} for meta in db.volume_snapshot_glance_metadata_get(ctxt, snap.id): for (key, value) in expected_meta.items(): self.assertEqual(value, meta[key]) snap.destroy()
def test_list_detail_volumes_with_limit(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': fake.VOLUME_ID, 'status': 'available', 'host': 'test', 'provider_location': '', 'size': 1, 'volume_type_id': fake.VOLUME_TYPE_ID}) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'key1', 'value1') db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'key2', 'value2') res = self._make_request('/v3/%s/volumes/detail?limit=1' % fake.PROJECT_ID) self.assertEqual(HTTPStatus.OK, res.status_int) self.assertEqual({'key1': 'value1', 'key2': 'value2'}, self._get_image_metadata_list(res.body)[0])
def test_vol_update_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 1}) db.volume_create(ctxt, {'id': 2}) vol_metadata = db.volume_glance_metadata_create(ctxt, 1, 'key1', 'value1') vol_metadata = db.volume_glance_metadata_create(ctxt, 2, 'key1', 'value1') vol_metadata = db.volume_glance_metadata_create(ctxt, 2, 'key2', 'value2') vol_metadata = db.volume_glance_metadata_create(ctxt, 2, 'key3', 123) expected_metadata_1 = {'volume_id': '1', 'key': 'key1', 'value': 'value1'} metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 1) for key, value in expected_metadata_1.items(): self.assertEqual(metadata[0][key], value) expected_metadata_2 = ({'volume_id': '2', 'key': 'key1', 'value': 'value1'}, {'volume_id': '2', 'key': 'key2', 'value': 'value2'}, {'volume_id': '2', 'key': 'key3', 'value': '123'}) metadata = db.volume_glance_metadata_get(ctxt, 2) self.assertEqual(len(metadata), 3) for expected, meta in zip(expected_metadata_2, metadata): for key, value in expected.iteritems(): self.assertEqual(meta[key], value) self.assertRaises(exception.GlanceMetadataExists, db.volume_glance_metadata_create, ctxt, 1, 'key1', 'value1a') metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 1) for key, value in expected_metadata_1.items(): self.assertEqual(metadata[0][key], value)
def test_vol_glance_metadata_copy_to_snapshot(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 1}) snap = objects.Snapshot(ctxt, volume_id=1) snap.create() db.volume_glance_metadata_create(ctxt, 1, 'key1', 'value1') db.volume_glance_metadata_copy_to_snapshot(ctxt, snap.id, 1) expected_meta = {'snapshot_id': snap.id, 'key': 'key1', 'value': 'value1'} for meta in db.volume_snapshot_glance_metadata_get(ctxt, snap.id): for (key, value) in expected_meta.items(): self.assertEqual(value, meta[key]) snap.destroy()
def test_vol_update_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, { 'id': fake.VOLUME_ID, 'volume_type_id': fake.VOLUME_TYPE_ID }) db.volume_create(ctxt, { 'id': fake.VOLUME2_ID, 'volume_type_id': fake.VOLUME_TYPE_ID }) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'key1', 'value1') db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, 'key1', 'value1') db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, 'key2', 'value2') db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, 'key3', 123) expected_metadata_1 = { 'volume_id': fake.VOLUME_ID, 'key': 'key1', 'value': 'value1' } metadata = db.volume_glance_metadata_get(ctxt, fake.VOLUME_ID) self.assertEqual(1, len(metadata)) for key, value in expected_metadata_1.items(): self.assertEqual(value, metadata[0][key]) expected_metadata_2 = ({ 'volume_id': fake.VOLUME2_ID, 'key': 'key1', 'value': 'value1' }, { 'volume_id': fake.VOLUME2_ID, 'key': 'key2', 'value': 'value2' }, { 'volume_id': fake.VOLUME2_ID, 'key': 'key3', 'value': '123' }) metadata = db.volume_glance_metadata_get(ctxt, fake.VOLUME2_ID) self.assertEqual(3, len(metadata)) for expected, meta in zip(expected_metadata_2, metadata): for key, value in expected.items(): self.assertEqual(value, meta[key]) self.assertRaises(exception.GlanceMetadataExists, db.volume_glance_metadata_create, ctxt, fake.VOLUME_ID, 'key1', 'value1a') metadata = db.volume_glance_metadata_get(ctxt, fake.VOLUME_ID) self.assertEqual(1, len(metadata)) for key, value in expected_metadata_1.items(): self.assertEqual(value, metadata[0][key])
def _create_volume_and_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create( ctxt, {"id": "fake", "status": "available", "host": "test", "provider_location": "", "size": 1} ) db.volume_glance_metadata_create(ctxt, "fake", "image_id", "someid") db.volume_glance_metadata_create(ctxt, "fake", "image_name", "fake") db.volume_glance_metadata_create(ctxt, "fake", "kernel_id", "somekernel") db.volume_glance_metadata_create(ctxt, "fake", "ramdisk_id", "someramdisk")
def test_vol_glance_metadata_copy_from_volume_to_volume(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': fake.VOLUME_ID}) db.volume_create(ctxt, { 'id': fake.VOLUME2_ID, 'source_volid': fake.VOLUME_ID }) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'key1', 'value1') db.volume_glance_metadata_copy_from_volume_to_volume( ctxt, fake.VOLUME_ID, fake.VOLUME2_ID) expected_meta = {'key': 'key1', 'value': 'value1'} for meta in db.volume_glance_metadata_get(ctxt, fake.VOLUME2_ID): for (key, value) in expected_meta.items(): self.assertEqual(value, meta[key])
def _create_volume_and_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 'fake', 'status': 'available', 'host': 'test', 'provider_location': '', 'size': 1}) db.volume_glance_metadata_create(ctxt, 'fake', 'image_id', 'someid') db.volume_glance_metadata_create(ctxt, 'fake', 'image_name', 'fake') db.volume_glance_metadata_create(ctxt, 'fake', 'kernel_id', 'somekernel') db.volume_glance_metadata_create(ctxt, 'fake', 'ramdisk_id', 'someramdisk')
def test_vol_delete_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 1}) db.volume_glance_metadata_delete_by_volume(ctxt, 1) vol_metadata = db.volume_glance_metadata_create(ctxt, 1, 'key1', 'value1') db.volume_glance_metadata_delete_by_volume(ctxt, 1) metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 0) db.volume_glance_metadata_delete_by_volume(ctxt, 1) metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 0)
def test_vol_delete_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': 1}) db.volume_glance_metadata_delete_by_volume(ctxt, 1) vol_metadata = db.volume_glance_metadata_create( ctxt, 1, 'key1', 'value1') db.volume_glance_metadata_delete_by_volume(ctxt, 1) metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 0) db.volume_glance_metadata_delete_by_volume(ctxt, 1) metadata = db.volume_glance_metadata_get(ctxt, 1) self.assertEqual(len(metadata), 0)
def test_vols_get_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, { 'id': fake.VOLUME_ID, 'volume_type_id': fake.VOLUME_TYPE_ID }) db.volume_create(ctxt, { 'id': fake.VOLUME2_ID, 'volume_type_id': fake.VOLUME_TYPE_ID }) db.volume_create(ctxt, { 'id': '3', 'volume_type_id': fake.VOLUME_TYPE_ID }) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'key1', 'value1') db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, 'key2', 'value2') db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, 'key22', 'value22') metadata = db.volume_glance_metadata_get_all(ctxt) self.assertEqual(3, len(metadata)) self._assert_metadata_equals(fake.VOLUME_ID, 'key1', 'value1', metadata[0]) self._assert_metadata_equals(fake.VOLUME2_ID, 'key2', 'value2', metadata[1]) self._assert_metadata_equals(fake.VOLUME2_ID, 'key22', 'value22', metadata[2])
def _create_volume_with_glance_metadata(self): basetime = timeutils.utcnow() td = datetime.timedelta(minutes=1) vol1 = db.volume_create(self.ctxt, {'display_name': 'test1', 'created_at': basetime - 3 * td, 'updated_at': basetime - 2 * td, 'project_id': self.ctxt.project_id, 'volume_type_id': fake.VOLUME_TYPE_ID, 'id': fake.VOLUME_ID}) db.volume_glance_metadata_create(self.ctxt, vol1.id, 'image_name', 'imageTestOne') vol2 = db.volume_create(self.ctxt, {'display_name': 'test2', 'created_at': basetime - td, 'updated_at': basetime, 'project_id': self.ctxt.project_id, 'volume_type_id': fake.VOLUME_TYPE_ID, 'id': fake.VOLUME2_ID}) db.volume_glance_metadata_create(self.ctxt, vol2.id, 'image_name', 'imageTestTwo') db.volume_glance_metadata_create(self.ctxt, vol2.id, 'disk_format', 'qcow2') return [vol1, vol2]
def _create_volume_and_glance_metadata(self): ctxt = context.get_admin_context() # create a bootable volume db.volume_create(ctxt, {'id': fake.VOLUME_ID, 'status': 'available', 'host': 'test', 'provider_location': '', 'size': 1}) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'image_id', fake.IMAGE_ID) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'image_name', 'fake') db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'kernel_id', 'somekernel') db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, 'ramdisk_id', 'someramdisk') # create an unbootable volume db.volume_create(ctxt, {'id': fake.VOLUME2_ID, 'status': 'available', 'host': 'test', 'provider_location': '', 'size': 1})
def _create_volume_with_glance_metadata(self): vol1 = db.volume_create(self.ctxt, {'display_name': 'test1', 'project_id': self.ctxt.project_id}) db.volume_glance_metadata_create(self.ctxt, vol1.id, 'image_name', 'imageTestOne') vol2 = db.volume_create(self.ctxt, {'display_name': 'test2', 'project_id': self.ctxt.project_id}) db.volume_glance_metadata_create(self.ctxt, vol2.id, 'image_name', 'imageTestTwo') db.volume_glance_metadata_create(self.ctxt, vol2.id, 'disk_format', 'qcow2') return [vol1, vol2]
def test_vols_get_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {'id': '1'}) db.volume_create(ctxt, {'id': '2'}) db.volume_create(ctxt, {'id': '3'}) db.volume_glance_metadata_create(ctxt, '1', 'key1', 'value1') db.volume_glance_metadata_create(ctxt, '2', 'key2', 'value2') db.volume_glance_metadata_create(ctxt, '2', 'key22', 'value22') metadata = db.volume_glance_metadata_get_all(ctxt) self.assertEqual(3, len(metadata)) self._assert_metadata_equals('1', 'key1', 'value1', metadata[0]) self._assert_metadata_equals('2', 'key2', 'value2', metadata[1]) self._assert_metadata_equals('2', 'key22', 'value22', metadata[2])
def test_vols_get_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {"id": "1"}) db.volume_create(ctxt, {"id": "2"}) db.volume_create(ctxt, {"id": "3"}) db.volume_glance_metadata_create(ctxt, "1", "key1", "value1") db.volume_glance_metadata_create(ctxt, "2", "key2", "value2") db.volume_glance_metadata_create(ctxt, "2", "key22", "value22") metadata = db.volume_glance_metadata_get_all(ctxt) self.assertEqual(len(metadata), 3) self._assert_metadata_equals("1", "key1", "value1", metadata[0]) self._assert_metadata_equals("2", "key2", "value2", metadata[1]) self._assert_metadata_equals("2", "key22", "value22", metadata[2])
def test_vols_get_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {"id": fake.VOLUME_ID}) db.volume_create(ctxt, {"id": fake.VOLUME2_ID}) db.volume_create(ctxt, {"id": "3"}) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, "key1", "value1") db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, "key2", "value2") db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, "key22", "value22") metadata = db.volume_glance_metadata_get_all(ctxt) self.assertEqual(3, len(metadata)) self._assert_metadata_equals(fake.VOLUME_ID, "key1", "value1", metadata[0]) self._assert_metadata_equals(fake.VOLUME2_ID, "key2", "value2", metadata[1]) self._assert_metadata_equals(fake.VOLUME2_ID, "key22", "value22", metadata[2])
def test_vol_update_glance_metadata(self): ctxt = context.get_admin_context() db.volume_create(ctxt, {"id": fake.VOLUME_ID}) db.volume_create(ctxt, {"id": fake.VOLUME2_ID}) db.volume_glance_metadata_create(ctxt, fake.VOLUME_ID, "key1", "value1") db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, "key1", "value1") db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, "key2", "value2") db.volume_glance_metadata_create(ctxt, fake.VOLUME2_ID, "key3", 123) expected_metadata_1 = {"volume_id": fake.VOLUME_ID, "key": "key1", "value": "value1"} metadata = db.volume_glance_metadata_get(ctxt, fake.VOLUME_ID) self.assertEqual(1, len(metadata)) for key, value in expected_metadata_1.items(): self.assertEqual(value, metadata[0][key]) expected_metadata_2 = ( {"volume_id": fake.VOLUME2_ID, "key": "key1", "value": "value1"}, {"volume_id": fake.VOLUME2_ID, "key": "key2", "value": "value2"}, {"volume_id": fake.VOLUME2_ID, "key": "key3", "value": "123"}, ) metadata = db.volume_glance_metadata_get(ctxt, fake.VOLUME2_ID) self.assertEqual(3, len(metadata)) for expected, meta in zip(expected_metadata_2, metadata): for key, value in expected.items(): self.assertEqual(value, meta[key]) self.assertRaises( exception.GlanceMetadataExists, db.volume_glance_metadata_create, ctxt, fake.VOLUME_ID, "key1", "value1a" ) metadata = db.volume_glance_metadata_get(ctxt, fake.VOLUME_ID) self.assertEqual(1, len(metadata)) for key, value in expected_metadata_1.items(): self.assertEqual(value, metadata[0][key])
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