Merge "Implement custom constraints for subnet/port/router"

This commit is contained in:
Jenkins 2014-08-22 15:11:49 +00:00 committed by Gerrit Code Review
commit ce03f9cf71
3 changed files with 105 additions and 0 deletions

View File

@ -68,3 +68,33 @@ class NetworkConstraint(constraints.BaseCustomConstraint):
neutron_client = client.client('neutron')
neutronV20.find_resourceid_by_name_or_id(
neutron_client, 'network', value)
class PortConstraint(constraints.BaseCustomConstraint):
expected_exceptions = (exceptions.NeutronClientException,)
def validate_with_client(self, client, value):
neutron_client = client.client('neutron')
neutronV20.find_resourceid_by_name_or_id(
neutron_client, 'port', value)
class RouterConstraint(constraints.BaseCustomConstraint):
expected_exceptions = (exceptions.NeutronClientException,)
def validate_with_client(self, client, value):
neutron_client = client.client('neutron')
neutronV20.find_resourceid_by_name_or_id(
neutron_client, 'router', value)
class SubnetConstraint(constraints.BaseCustomConstraint):
expected_exceptions = (exceptions.NeutronClientException,)
def validate_with_client(self, client, value):
neutron_client = client.client('neutron')
neutronV20.find_resourceid_by_name_or_id(
neutron_client, 'subnet', value)

View File

@ -2468,3 +2468,75 @@ class NetworkConstraintTest(HeatTestCase):
self.assertFalse(constraint.validate("bar", ctx))
self.m.VerifyAll()
class PortConstraintTest(HeatTestCase):
def test_validate(self):
nc = self.m.CreateMockAnything()
self.m.StubOutWithMock(neutron.NeutronClientPlugin, '_create')
neutron.NeutronClientPlugin._create().AndReturn(nc)
self.m.StubOutWithMock(neutron.neutronV20,
'find_resourceid_by_name_or_id')
neutron.neutronV20.find_resourceid_by_name_or_id(
nc, 'port', 'foo'
).AndReturn('foo')
neutron.neutronV20.find_resourceid_by_name_or_id(
nc, 'port', 'bar'
).AndRaise(qe.NeutronClientException(status_code=404))
self.m.ReplayAll()
constraint = neutron.PortConstraint()
ctx = utils.dummy_context()
self.assertTrue(constraint.validate("foo", ctx))
self.assertFalse(constraint.validate("bar", ctx))
self.m.VerifyAll()
class RouterConstraintTest(HeatTestCase):
def test_validate(self):
nc = self.m.CreateMockAnything()
self.m.StubOutWithMock(neutron.NeutronClientPlugin, '_create')
neutron.NeutronClientPlugin._create().AndReturn(nc)
self.m.StubOutWithMock(neutron.neutronV20,
'find_resourceid_by_name_or_id')
neutron.neutronV20.find_resourceid_by_name_or_id(
nc, 'router', 'foo'
).AndReturn('foo')
neutron.neutronV20.find_resourceid_by_name_or_id(
nc, 'router', 'bar'
).AndRaise(qe.NeutronClientException(status_code=404))
self.m.ReplayAll()
constraint = neutron.RouterConstraint()
ctx = utils.dummy_context()
self.assertTrue(constraint.validate("foo", ctx))
self.assertFalse(constraint.validate("bar", ctx))
self.m.VerifyAll()
class SubnetConstraintTest(HeatTestCase):
def test_validate(self):
nc = self.m.CreateMockAnything()
self.m.StubOutWithMock(neutron.NeutronClientPlugin, '_create')
neutron.NeutronClientPlugin._create().AndReturn(nc)
self.m.StubOutWithMock(neutron.neutronV20,
'find_resourceid_by_name_or_id')
neutron.neutronV20.find_resourceid_by_name_or_id(
nc, 'subnet', 'foo'
).AndReturn('foo')
neutron.neutronV20.find_resourceid_by_name_or_id(
nc, 'subnet', 'bar'
).AndRaise(qe.NeutronClientException(status_code=404))
self.m.ReplayAll()
constraint = neutron.SubnetConstraint()
ctx = utils.dummy_context()
self.assertTrue(constraint.validate("foo", ctx))
self.assertFalse(constraint.validate("bar", ctx))
self.m.VerifyAll()

View File

@ -52,6 +52,9 @@ heat.clients =
heat.constraints =
nova.flavor = heat.engine.resources.server: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