def _clean_volume_attachment(context, id): attachments = ( db.volume_attachment_get_all_by_volume_id(context, id)) for attachment in attachments: db.volume_detached(context.elevated(), id, attachment.id) db.volume_admin_metadata_delete(context.elevated(), id, 'attached_mode')
def test_run_attach_detach_volume(self): """Make sure volume can be attached and detached from instance.""" instance_uuid = '12345678-1234-5678-1234-567812345678' mountpoint = "/dev/sdf" volume = self._create_volume() volume_id = volume['id'] self.volume.create_volume(self.context, volume_id) db.volume_attached(self.context, volume_id, instance_uuid, mountpoint) vol = db.volume_get(context.get_admin_context(), volume_id) self.assertEqual(vol['status'], "in-use") self.assertEqual(vol['attach_status'], "attached") self.assertEqual(vol['mountpoint'], mountpoint) self.assertEqual(vol['instance_uuid'], instance_uuid) self.assertRaises(exception.VolumeAttached, self.volume.delete_volume, self.context, volume_id) db.volume_detached(self.context, volume_id) vol = db.volume_get(self.context, volume_id) self.assertEqual(vol['status'], "available") self.volume.delete_volume(self.context, volume_id) self.assertRaises(exception.VolumeNotFound, db.volume_get, self.context, volume_id)
def test_run_attach_detach_volume(self): """Make sure volume can be attached and detached from instance.""" instance_uuid = "12345678-1234-5678-1234-567812345678" mountpoint = "/dev/sdf" volume = self._create_volume() volume_id = volume["id"] self.volume.create_volume(self.context, volume_id) if FLAGS.fake_tests: db.volume_attached(self.context, volume_id, instance_uuid, mountpoint) else: self.compute.attach_volume(self.context, instance_uuid, volume_id, mountpoint) vol = db.volume_get(context.get_admin_context(), volume_id) self.assertEqual(vol["status"], "in-use") self.assertEqual(vol["attach_status"], "attached") self.assertEqual(vol["mountpoint"], mountpoint) self.assertEqual(vol["instance_uuid"], instance_uuid) self.assertRaises(exception.VolumeAttached, self.volume.delete_volume, self.context, volume_id) if FLAGS.fake_tests: db.volume_detached(self.context, volume_id) else: pass self.compute.detach_volume(self.context, instance_uuid, volume_id) vol = db.volume_get(self.context, volume_id) self.assertEqual(vol["status"], "available") self.volume.delete_volume(self.context, volume_id) self.assertRaises(exception.VolumeNotFound, db.volume_get, self.context, volume_id)
def _clean_volume_attachment(context, id): attachments = ( db.volume_attachment_get_all_by_volume_id(context, id)) for attachment in attachments: db.volume_detached(context, id, attachment.id) db.volume_admin_metadata_delete(context, id, 'attached_mode')
def test_volume_detached_from_host(self): volume = db.volume_create(self.ctxt, {}) db.volume_attached(self.ctxt, volume['id'], None, 'fake_host', '/tmp') db.volume_detached(self.ctxt, volume['id']) volume = db.volume_get(self.ctxt, volume['id']) self.assertEqual('available', volume['status']) self.assertEqual('detached', volume['attach_status']) self.assertIsNone(volume['mountpoint']) self.assertIsNone(volume['instance_uuid']) self.assertIsNone(volume['attached_host'])
def test_volume_detached_from_host(self): volume = db.volume_create(self.ctxt, {}) db.volume_attached(self.ctxt, volume["id"], None, "fake_host", "/tmp") db.volume_detached(self.ctxt, volume["id"]) volume = db.volume_get(self.ctxt, volume["id"]) self.assertEqual("available", volume["status"]) self.assertEqual("detached", volume["attach_status"]) self.assertIsNone(volume["mountpoint"]) self.assertIsNone(volume["instance_uuid"]) self.assertIsNone(volume["attached_host"])
def test_run_attach_detach_volume(self): """Make sure volume can be attached and detached from instance.""" instance_id = 'fake-inst' mountpoint = "/dev/sdf" volume = self._create_volume() volume_id = volume['id'] self.volume.create_volume(self.context, volume_id) if FLAGS.fake_tests: db.volume_attached(self.context, volume_id, instance_id, mountpoint) else: self.compute.attach_volume(self.context, instance_id, volume_id, mountpoint) vol = db.volume_get(context.get_admin_context(), volume_id) self.assertEqual(vol['status'], "in-use") self.assertEqual(vol['attach_status'], "attached") self.assertEqual(vol['mountpoint'], mountpoint) self.assertEqual(vol['instance_id'], instance_id) self.assertRaises(exception.Error, self.volume.delete_volume, self.context, volume_id) if FLAGS.fake_tests: db.volume_detached(self.context, volume_id) else: pass self.compute.detach_volume(self.context, instance_id, volume_id) vol = db.volume_get(self.context, volume_id) self.assertEqual(vol['status'], "available") self.volume.delete_volume(self.context, volume_id) self.assertRaises(exception.VolumeNotFound, db.volume_get, self.context, volume_id)
def finish_detach(self, attachment_id): with self.obj_as_admin(): volume_updates, attachment_updates = ( db.volume_detached(self._context, self.id, attachment_id)) db.volume_admin_metadata_delete(self._context, self.id, 'attached_mode') self.admin_metadata.pop('attached_mode', None) # Remove attachment in volume only when this field is loaded. if attachment_updates and self.obj_attr_is_set('volume_attachment'): for i, attachment in enumerate(self.volume_attachment): if attachment.id == attachment_id: del self.volume_attachment.objects[i] break self.update(volume_updates) self.obj_reset_changes( list(volume_updates.keys()) + ['volume_attachment', 'admin_metadata'])
def _detach_volume(self, volume_id_list): """Detach volumes from an instance.""" for volume_id in volume_id_list: db.volume_detached(self.context, volume_id) self.volume.delete_volume(self.context, volume_id)
def detach_volume(self, context, volume_id): volume = db.volume_get(context, volume_id) client = LunrClient(volume, logger=LOG) detach_volume(client, volume_id) db.volume_detached(context.elevated(), volume_id)