Esempio n. 1
0
 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')
Esempio n. 2
0
    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)
Esempio n. 3
0
    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)
Esempio n. 4
0
 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')
Esempio n. 5
0
 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'])
Esempio n. 6
0
 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"])
Esempio n. 7
0
 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'])
Esempio n. 8
0
    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 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)
Esempio n. 10
0
    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'])
Esempio n. 11
0
    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'])
Esempio n. 12
0
 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, 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)
Esempio n. 14
0
    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)
Esempio n. 15
0
    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)