Merge "Implement custom constraints for subnet/port/router"
This commit is contained in:
commit
ce03f9cf71
@ -68,3 +68,33 @@ class NetworkConstraint(constraints.BaseCustomConstraint):
|
|||||||
neutron_client = client.client('neutron')
|
neutron_client = client.client('neutron')
|
||||||
neutronV20.find_resourceid_by_name_or_id(
|
neutronV20.find_resourceid_by_name_or_id(
|
||||||
neutron_client, 'network', value)
|
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)
|
||||||
|
@ -2468,3 +2468,75 @@ class NetworkConstraintTest(HeatTestCase):
|
|||||||
self.assertFalse(constraint.validate("bar", ctx))
|
self.assertFalse(constraint.validate("bar", ctx))
|
||||||
|
|
||||||
self.m.VerifyAll()
|
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()
|
||||||
|
@ -52,6 +52,9 @@ heat.clients =
|
|||||||
heat.constraints =
|
heat.constraints =
|
||||||
nova.flavor = heat.engine.resources.server:FlavorConstraint
|
nova.flavor = heat.engine.resources.server:FlavorConstraint
|
||||||
neutron.network = heat.engine.clients.os.neutron:NetworkConstraint
|
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
|
glance.image = heat.engine.clients.os.glance:ImageConstraint
|
||||||
iso_8601 = heat.engine.resources.iso_8601:ISO8601Constraint
|
iso_8601 = heat.engine.resources.iso_8601:ISO8601Constraint
|
||||||
nova.keypair = heat.engine.resources.nova_keypair:KeypairConstraint
|
nova.keypair = heat.engine.resources.nova_keypair:KeypairConstraint
|
||||||
|
Loading…
Reference in New Issue
Block a user