Remove KeypairConstraint and FlavorConstraint to nova.py

All nova custom constraints should be defined in
nova.py as neutron custom constraints.
And this change also remove the corresponding tests
to test_nova_client.py

Change-Id: Ie40192b5d53d60d2d4e152801cbd8583e6c45dac
Implements: blueprint nova-custom-constraints
This commit is contained in:
huangtianhua 2014-11-13 17:07:08 +08:00
parent 7804859d7e
commit 9ed0d2729c
9 changed files with 76 additions and 77 deletions

View File

@ -432,3 +432,23 @@ class ServerConstraint(constraints.BaseCustomConstraint):
def validate_with_client(self, client, server):
client.client_plugin('nova').get_server(server)
class KeypairConstraint(constraints.BaseCustomConstraint):
expected_exceptions = (exception.UserKeyPairMissing,)
def validate_with_client(self, client, key_name):
if not key_name:
# Don't validate empty key, which can happen when you
# use a KeyPair resource
return True
client.client_plugin('nova').get_keypair(key_name)
class FlavorConstraint(constraints.BaseCustomConstraint):
expected_exceptions = (exception.FlavorMissing,)
def validate_with_client(self, client, flavor):
client.client_plugin('nova').get_flavor_id(flavor)

View File

@ -11,7 +11,6 @@
# License for the specific language governing permissions and limitations
# under the License.
from heat.common import exception
from heat.common.i18n import _
from heat.engine import attributes
from heat.engine import constraints
@ -133,17 +132,5 @@ class KeyPair(resource.Resource):
return self.resource_id
class KeypairConstraint(constraints.BaseCustomConstraint):
expected_exceptions = (exception.UserKeyPairMissing,)
def validate_with_client(self, client, value):
if not value:
# Don't validate empty key, which can happen when you use a KeyPair
# resource
return True
client.client_plugin('nova').get_keypair(value)
def resource_mapping():
return {'OS::Nova::KeyPair': KeyPair}

View File

@ -1143,14 +1143,6 @@ class Server(stack_user.StackUser):
return defn.freeze(properties=props)
class FlavorConstraint(constraints.BaseCustomConstraint):
expected_exceptions = (exception.FlavorMissing,)
def validate_with_client(self, client, value):
client.client_plugin('nova').get_flavor_id(value)
def resource_mapping():
return {
'OS::Nova::Server': Server,

View File

@ -27,9 +27,9 @@ import testtools
from heat.common import messaging
from heat.engine.clients.os import glance
from heat.engine.clients.os import keystone
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine import resources
from heat.engine.resources import nova_keypair
from heat.engine import scheduler
from heat.tests import fakes
from heat.tests import utils
@ -143,8 +143,8 @@ class HeatTestCase(testscenarios.WithScenarios,
return fkc
def stub_KeypairConstraint_validate(self):
self.m.StubOutWithMock(nova_keypair.KeypairConstraint, 'validate')
nova_keypair.KeypairConstraint.validate(
self.m.StubOutWithMock(nova.KeypairConstraint, 'validate')
nova.KeypairConstraint.validate(
mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(True)
def stub_ImageConstraint_validate(self, num=None):

View File

@ -17,6 +17,7 @@ from oslo.utils import timeutils
from heat.common import exception
from heat.common import template_format
from heat.engine.clients.os import glance
from heat.engine.clients.os import nova
from heat.engine import environment
from heat.engine import parser
from heat.engine import resource
@ -24,7 +25,6 @@ from heat.engine import resource
from heat.engine.resources import autoscaling
from heat.engine.resources import instance
from heat.engine.resources import loadbalancer
from heat.engine.resources import nova_keypair
from heat.engine.resources import user
from heat.engine.resources import wait_condition as waitc
from heat.engine import signal_responder as signal
@ -166,7 +166,7 @@ class ScaleNotificationTest(common.HeatTestCase):
def mock_stack_except_for_group(self):
self.m_validate = self.patchobject(parser.Stack, 'validate')
self.patchobject(nova_keypair.KeypairConstraint, 'validate')
self.patchobject(nova.KeypairConstraint, 'validate')
self.patchobject(glance.ImageConstraint, 'validate')
self.patchobject(instance.Instance, 'handle_create')\
.return_value = True

View File

@ -12,6 +12,7 @@
# under the License.
"""Tests for :module:'heat.engine.resources.nova_utls'."""
import collections
import mock
from novaclient import exceptions as nova_exceptions
from oslo.config import cfg
@ -22,6 +23,7 @@ from heat.common import exception
from heat.engine.clients.os import nova
from heat.tests import common
from heat.tests import utils
from heat.tests.v1_1 import fakes as fakes_v1_1
class NovaClientPluginTestCase(common.HeatTestCase):
@ -289,3 +291,50 @@ class ServerConstraintTest(NovaClientPluginTestCase):
self.mock_get_server.side_effect = exception.ServerNotFound(
server='bar')
self.assertFalse(self.constraint.validate("bar", self.ctx))
class FlavorConstraintTest(common.HeatTestCase):
def test_validate(self):
client = fakes_v1_1.FakeClient()
self.stub_keystoneclient()
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().AndReturn(client)
client.flavors = self.m.CreateMockAnything()
flavor = collections.namedtuple("Flavor", ["id", "name"])
flavor.id = "1234"
flavor.name = "foo"
client.flavors.list().MultipleTimes().AndReturn([flavor])
self.m.ReplayAll()
constraint = nova.FlavorConstraint()
ctx = utils.dummy_context()
self.assertFalse(constraint.validate("bar", ctx))
self.assertTrue(constraint.validate("foo", ctx))
self.assertTrue(constraint.validate("1234", ctx))
self.m.VerifyAll()
class KeypairConstraintTest(common.HeatTestCase):
def test_validation(self):
client = fakes_v1_1.FakeClient()
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().AndReturn(client)
client.keypairs = self.m.CreateMockAnything()
key = collections.namedtuple("Key", ["name"])
key.name = "foo"
client.keypairs.get('bar').AndRaise(fakes_v1_1.fake_exception())
client.keypairs.get(key.name).AndReturn(key)
self.m.ReplayAll()
constraint = nova.KeypairConstraint()
ctx = utils.dummy_context()
self.assertFalse(constraint.validate("bar", ctx))
self.assertTrue(constraint.validate("foo", ctx))
self.assertTrue(constraint.validate("", ctx))
self.m.VerifyAll()

View File

@ -11,7 +11,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import collections
import copy
import six
@ -178,26 +177,3 @@ class NovaKeyPairTest(common.HeatTestCase):
self.assertEqual((tp_test.CREATE, tp_test.COMPLETE), tp_test.state)
self.assertEqual(tp_test.resource_id, created_key.name)
self.m.VerifyAll()
class KeypairConstraintTest(common.HeatTestCase):
def test_validation(self):
client = fakes.FakeClient()
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().AndReturn(client)
client.keypairs = self.m.CreateMockAnything()
key = collections.namedtuple("Key", ["name"])
key.name = "foo"
client.keypairs.get('bar').AndRaise(fakes.fake_exception())
client.keypairs.get(key.name).AndReturn(key)
self.m.ReplayAll()
constraint = nova_keypair.KeypairConstraint()
ctx = utils.dummy_context()
self.assertFalse(constraint.validate("bar", ctx))
self.assertTrue(constraint.validate("foo", ctx))
self.assertTrue(constraint.validate("", ctx))
self.m.VerifyAll()

View File

@ -36,7 +36,6 @@ from heat.engine import scheduler
from heat.engine import template
from heat.openstack.common import uuidutils
from heat.tests import common
from heat.tests import fakes
from heat.tests import utils
from heat.tests.v1_1 import fakes as fakes_v1_1
@ -2757,27 +2756,3 @@ class ServersTest(common.HeatTestCase):
self.assertEqual((stack.RESTORE, stack.COMPLETE), stack.state)
self.m.VerifyAll()
class FlavorConstraintTest(common.HeatTestCase):
def test_validate(self):
client = fakes.FakeClient()
self.stub_keystoneclient()
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
nova.NovaClientPlugin._create().AndReturn(client)
client.flavors = self.m.CreateMockAnything()
flavor = collections.namedtuple("Flavor", ["id", "name"])
flavor.id = "1234"
flavor.name = "foo"
client.flavors.list().MultipleTimes().AndReturn([flavor])
self.m.ReplayAll()
constraint = servers.FlavorConstraint()
ctx = utils.dummy_context()
self.assertFalse(constraint.validate("bar", ctx))
self.assertTrue(constraint.validate("foo", ctx))
self.assertTrue(constraint.validate("1234", ctx))
self.m.VerifyAll()

View File

@ -49,15 +49,15 @@ heat.clients =
sahara = heat.engine.clients.os.sahara:SaharaClientPlugin
heat.constraints =
nova.flavor = heat.engine.resources.server:FlavorConstraint
nova.flavor = heat.engine.clients.os.nova:FlavorConstraint
neutron.network = heat.engine.clients.os.neutron:NetworkConstraint
neutron.port = heat.engine.clients.os.neutron:PortConstraint
neutron.router = heat.engine.clients.os.neutron:RouterConstraint
neutron.subnet = heat.engine.clients.os.neutron:SubnetConstraint
glance.image = heat.engine.clients.os.glance:ImageConstraint
iso_8601 = heat.engine.resources.iso_8601:ISO8601Constraint
nova.keypair = heat.engine.resources.nova_keypair:KeypairConstraint
nova.server = heat.engine.clients.os.nova:ServerConstraint
nova.keypair = heat.engine.clients.os.nova:KeypairConstraint
heat.stack_lifecycle_plugins =