コード例 #1
0
    def create(self, req, type_id, body=None):
        """Create encryption specs for an existing volume type."""
        context = req.environ["cinder.context"]
        authorize(context)

        if not self.is_valid_body(body, "encryption"):
            expl = _("Create body is not valid.")
            raise webob.exc.HTTPBadRequest(explanation=expl)

        self._check_type(context, type_id)

        encryption_specs = self._get_volume_type_encryption(context, type_id)
        if encryption_specs:
            raise exception.VolumeTypeEncryptionExists(type_id=type_id)

        encryption_specs = body["encryption"]

        self._check_encryption_input(encryption_specs)

        db.volume_type_encryption_update_or_create(context, type_id, encryption_specs)
        notifier_info = dict(type_id=type_id, specs=encryption_specs)
        notifier_api.notify(
            context, "volumeTypeEncryption", "volume_type_encryption.create", notifier_api.INFO, notifier_info
        )
        return body
コード例 #2
0
    def create(self, req, type_id, body=None):
        """Create encryption specs for an existing volume type."""
        context = req.environ['cinder.context']
        authorize(context)

        if not self.is_valid_body(body, 'encryption'):
            expl = _('Create body is not valid.')
            raise webob.exc.HTTPBadRequest(explanation=expl)

        self._check_type(context, type_id)

        encryption_specs = self._get_volume_type_encryption(context, type_id)
        if encryption_specs:
            raise exception.VolumeTypeEncryptionExists(type_id=type_id)

        encryption_specs = body['encryption']

        self._check_encryption_input(encryption_specs)

        db.volume_type_encryption_update_or_create(context, type_id,
                                                   encryption_specs)
        notifier_info = dict(type_id=type_id, specs=encryption_specs)
        notifier_api.notify(context, 'volumeTypeEncryption',
                            'volume_type_encryption.create', notifier_api.INFO,
                            notifier_info)
        return body
コード例 #3
0
    def create(self, req, type_id, body=None):
        """Create encryption specs for an existing volume type."""
        context = req.environ['cinder.context']
        authorize(context)

        if self._encrypted_type_in_use(context, type_id):
            expl = _('Cannot create encryption specs. Volume type in use.')
            raise webob.exc.HTTPBadRequest(explanation=expl)

        if not self.is_valid_body(body, 'encryption'):
            expl = _('Create body is not valid.')
            raise webob.exc.HTTPBadRequest(explanation=expl)

        self._check_type(context, type_id)

        encryption_specs = self._get_volume_type_encryption(context, type_id)
        if encryption_specs:
            raise exception.VolumeTypeEncryptionExists(type_id=type_id)

        encryption_specs = body['encryption']

        self._check_encryption_input(encryption_specs)

        db.volume_type_encryption_update_or_create(context, type_id,
                                                   encryption_specs)
        notifier_info = dict(type_id=type_id, specs=encryption_specs)
        notifier_api.notify(context, 'volumeTypeEncryption',
                            'volume_type_encryption.create',
                            notifier_api.INFO, notifier_info)
        return body
コード例 #4
0
ファイル: test_db_api.py プロジェクト: medlefsen/cinder
    def test_volume_type_encryption_delete(self):
        values = {
            'cipher': 'fake_cipher',
            'key_size': 256,
            'provider': 'fake_provider',
            'volume_type_id': 'fake_type',
            'control_location': 'front-end',
        }

        encryption = db.volume_type_encryption_update_or_create(
            self.ctxt, 'fake_type', values)
        self._assertEqualObjects(values, encryption, self._ignored_keys)

        db.volume_type_encryption_delete(self.ctxt,
                                         encryption['volume_type_id'])
        encryption_get = \
            db.volume_type_encryption_get(self.ctxt,
                                          encryption['volume_type_id'])
        self.assertIsNone(encryption_get)
コード例 #5
0
ファイル: test_db_api.py プロジェクト: niuzhenguo/cinder
    def test_volume_type_encryption_delete(self):
        values = {
            'cipher': 'fake_cipher',
            'key_size': 256,
            'provider': 'fake_provider',
            'volume_type_id': 'fake_type',
            'control_location': 'front-end',
        }

        encryption = db.volume_type_encryption_update_or_create(self.ctxt,
                                                                'fake_type',
                                                                values)
        self._assertEqualObjects(values, encryption, self._ignored_keys)

        db.volume_type_encryption_delete(self.ctxt,
                                         encryption['volume_type_id'])
        encryption_get = \
            db.volume_type_encryption_get(self.ctxt,
                                          encryption['volume_type_id'])
        self.assertEqual(None, encryption_get)
コード例 #6
0
ファイル: test_db_api.py プロジェクト: medlefsen/cinder
 def setUp(self):
     super(DBAPIEncryptionTestCase, self).setUp()
     self.created = \
         [db.volume_type_encryption_update_or_create(self.ctxt, 'fake_type',
                                                     values)
          for values in self._get_values()]
コード例 #7
0
ファイル: test_db_api.py プロジェクト: niuzhenguo/cinder
 def setUp(self):
     super(DBAPIEncryptionTestCase, self).setUp()
     self.created = \
         [db.volume_type_encryption_update_or_create(self.ctxt, 'fake_type',
                                                     values)
          for values in self._get_values()]
コード例 #8
0
    def test_volume_types_diff(self):
        #type_ref 1 and 2 have the same extra_specs, while 3 has different
        keyvals1 = {"key1": "val1", "key2": "val2"}
        keyvals2 = {"key1": "val0", "key2": "val2"}
        type_ref1 = volume_types.create(self.ctxt, "type1", keyvals1)
        type_ref2 = volume_types.create(self.ctxt, "type2", keyvals1)
        type_ref3 = volume_types.create(self.ctxt, "type3", keyvals2)

        # Check equality with only extra_specs
        diff, same = volume_types.volume_types_diff(self.ctxt, type_ref1['id'],
                                                    type_ref2['id'])
        self.assertEqual(same, True)
        self.assertEqual(diff['extra_specs']['key1'], ('val1', 'val1'))
        diff, same = volume_types.volume_types_diff(self.ctxt, type_ref1['id'],
                                                    type_ref3['id'])
        self.assertEqual(same, False)
        self.assertEqual(diff['extra_specs']['key1'], ('val1', 'val0'))

        #qos_ref 1 and 2 have the same specs, while 3 has different
        qos_keyvals1 = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
        qos_keyvals2 = {'k1': 'v0', 'k2': 'v2', 'k3': 'v3'}
        qos_ref1 = qos_specs.create(self.ctxt, 'qos-specs-1', qos_keyvals1)
        qos_ref2 = qos_specs.create(self.ctxt, 'qos-specs-2', qos_keyvals1)
        qos_ref3 = qos_specs.create(self.ctxt, 'qos-specs-3', qos_keyvals2)

        # Check equality with qos specs too
        qos_specs.associate_qos_with_type(self.ctxt, qos_ref1['id'],
                                          type_ref1['id'])
        qos_specs.associate_qos_with_type(self.ctxt, qos_ref2['id'],
                                          type_ref2['id'])
        diff, same = volume_types.volume_types_diff(self.ctxt, type_ref1['id'],
                                                    type_ref2['id'])
        self.assertEqual(same, True)
        self.assertEqual(diff['extra_specs']['key1'], ('val1', 'val1'))
        self.assertEqual(diff['qos_specs']['k1'], ('v1', 'v1'))
        qos_specs.disassociate_qos_specs(self.ctxt, qos_ref2['id'],
                                         type_ref2['id'])
        qos_specs.associate_qos_with_type(self.ctxt, qos_ref3['id'],
                                          type_ref2['id'])
        diff, same = volume_types.volume_types_diff(self.ctxt, type_ref1['id'],
                                                    type_ref2['id'])
        self.assertEqual(same, False)
        self.assertEqual(diff['extra_specs']['key1'], ('val1', 'val1'))
        self.assertEqual(diff['qos_specs']['k1'], ('v1', 'v0'))
        qos_specs.disassociate_qos_specs(self.ctxt, qos_ref3['id'],
                                         type_ref2['id'])
        qos_specs.associate_qos_with_type(self.ctxt, qos_ref2['id'],
                                          type_ref2['id'])

        # And add encryption for good measure
        enc_keyvals1 = {'cipher': 'c1', 'key_size': 256, 'provider': 'p1',
                        'control_location': 'front-end'}
        enc_keyvals2 = {'cipher': 'c1', 'key_size': 128, 'provider': 'p1',
                        'control_location': 'front-end'}
        db.volume_type_encryption_update_or_create(self.ctxt, type_ref1['id'],
                                                   enc_keyvals1)
        db.volume_type_encryption_update_or_create(self.ctxt, type_ref2['id'],
                                                   enc_keyvals2)
        diff, same = volume_types.volume_types_diff(self.ctxt, type_ref1['id'],
                                                    type_ref2['id'])
        self.assertEqual(same, False)
        self.assertEqual(diff['extra_specs']['key1'], ('val1', 'val1'))
        self.assertEqual(diff['qos_specs']['k1'], ('v1', 'v1'))
        self.assertEqual(diff['encryption']['key_size'], (256, 128))