Add cinder qos specs constraint
This patch implement qos specs constraint for cinder blueprint update-cinder-resources Change-Id: I2220bd9d544cf819b203f9574f144bf7de141ec4
This commit is contained in:
@@ -102,10 +102,7 @@ class CinderClientPlugin(client_plugin.ClientPlugin):
|
|||||||
vt_id = None
|
vt_id = None
|
||||||
volume_type_list = self.client().volume_types.list()
|
volume_type_list = self.client().volume_types.list()
|
||||||
for vt in volume_type_list:
|
for vt in volume_type_list:
|
||||||
if vt.name == volume_type:
|
if volume_type in [vt.name, vt.id]:
|
||||||
vt_id = vt.id
|
|
||||||
break
|
|
||||||
if vt.id == volume_type:
|
|
||||||
vt_id = vt.id
|
vt_id = vt.id
|
||||||
break
|
break
|
||||||
if vt_id is None:
|
if vt_id is None:
|
||||||
@@ -114,6 +111,13 @@ class CinderClientPlugin(client_plugin.ClientPlugin):
|
|||||||
|
|
||||||
return vt_id
|
return vt_id
|
||||||
|
|
||||||
|
def get_qos_specs(self, qos_specs):
|
||||||
|
try:
|
||||||
|
qos = self.client().qos_specs.get(qos_specs)
|
||||||
|
except exceptions.NotFound:
|
||||||
|
qos = self.client().qos_specs.find(name=qos_specs)
|
||||||
|
return qos.id
|
||||||
|
|
||||||
def is_not_found(self, ex):
|
def is_not_found(self, ex):
|
||||||
return isinstance(ex, exceptions.NotFound)
|
return isinstance(ex, exceptions.NotFound)
|
||||||
|
|
||||||
@@ -191,3 +195,10 @@ class VolumeTypeConstraint(BaseCinderConstraint):
|
|||||||
class VolumeBackupConstraint(BaseCinderConstraint):
|
class VolumeBackupConstraint(BaseCinderConstraint):
|
||||||
|
|
||||||
resource_getter_name = 'get_volume_backup'
|
resource_getter_name = 'get_volume_backup'
|
||||||
|
|
||||||
|
|
||||||
|
class QoSSpecsConstraint(BaseCinderConstraint):
|
||||||
|
|
||||||
|
expected_exceptions = (exceptions.NotFound,)
|
||||||
|
|
||||||
|
resource_getter_name = 'get_qos_specs'
|
||||||
|
@@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
|
from cinderclient import exceptions as cinder_exc
|
||||||
from keystoneauth1 import exceptions as ks_exceptions
|
from keystoneauth1 import exceptions as ks_exceptions
|
||||||
import mock
|
import mock
|
||||||
|
|
||||||
@@ -135,6 +136,25 @@ class VolumeBackupConstraintTest(common.HeatTestCase):
|
|||||||
self.assertFalse(self.constraint.validate("bar", self.ctx))
|
self.assertFalse(self.constraint.validate("bar", self.ctx))
|
||||||
|
|
||||||
|
|
||||||
|
class QoSSpecsConstraintTest(common.HeatTestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(QoSSpecsConstraintTest, self).setUp()
|
||||||
|
self.ctx = utils.dummy_context()
|
||||||
|
self.mock_get_qos_specs = mock.Mock()
|
||||||
|
self.ctx.clients.client_plugin(
|
||||||
|
'cinder').get_qos_specs = self.mock_get_qos_specs
|
||||||
|
self.constraint = cinder.QoSSpecsConstraint()
|
||||||
|
|
||||||
|
def test_validation(self):
|
||||||
|
self.mock_get_qos_specs.return_value = None
|
||||||
|
self.assertTrue(self.constraint.validate("foo", self.ctx))
|
||||||
|
|
||||||
|
def test_validation_error(self):
|
||||||
|
self.mock_get_qos_specs.side_effect = cinder_exc.NotFound(404)
|
||||||
|
self.assertFalse(self.constraint.validate("bar", self.ctx))
|
||||||
|
|
||||||
|
|
||||||
class CinderClientAPIVersionTest(common.HeatTestCase):
|
class CinderClientAPIVersionTest(common.HeatTestCase):
|
||||||
|
|
||||||
def test_cinder_api_v3(self):
|
def test_cinder_api_v3(self):
|
||||||
|
@@ -96,6 +96,7 @@ heat.constraints =
|
|||||||
barbican.container = heat.engine.clients.os.barbican:ContainerConstraint
|
barbican.container = heat.engine.clients.os.barbican:ContainerConstraint
|
||||||
barbican.secret = heat.engine.clients.os.barbican:SecretConstraint
|
barbican.secret = heat.engine.clients.os.barbican:SecretConstraint
|
||||||
cinder.backup = heat.engine.clients.os.cinder:VolumeBackupConstraint
|
cinder.backup = heat.engine.clients.os.cinder:VolumeBackupConstraint
|
||||||
|
cinder.qos_specs = heat.engine.clients.os.cinder:QoSSpecsConstraint
|
||||||
cinder.snapshot = heat.engine.clients.os.cinder:VolumeSnapshotConstraint
|
cinder.snapshot = heat.engine.clients.os.cinder:VolumeSnapshotConstraint
|
||||||
cinder.volume = heat.engine.clients.os.cinder:VolumeConstraint
|
cinder.volume = heat.engine.clients.os.cinder:VolumeConstraint
|
||||||
cinder.vtype = heat.engine.clients.os.cinder:VolumeTypeConstraint
|
cinder.vtype = heat.engine.clients.os.cinder:VolumeTypeConstraint
|
||||||
|
Reference in New Issue
Block a user