Prevent excessive validation for maxPersonality limit
We have PERSONALITY property on OS::Nova::Server that defaults to {}, but code that triggers check for limits compares value of property to None -> this property always get validated for limits (if limit is set). Change-Id: I552a03cd9f4ab570aa059349ab361bb50c9c0d1e Closes-bug: #1333283
This commit is contained in:
parent
f8e3a4bcf1
commit
78b68ba0da
|
@ -927,7 +927,7 @@ class Server(stack_user.StackUser):
|
|||
# retrieve provider's absolute limits if it will be needed
|
||||
metadata = self.properties.get(self.METADATA)
|
||||
personality = self.properties.get(self.PERSONALITY)
|
||||
if metadata is not None or personality is not None:
|
||||
if metadata is not None or personality:
|
||||
limits = nova_utils.absolute_limits(self.nova())
|
||||
|
||||
# if 'security_groups' present for the server and explict 'port'
|
||||
|
@ -949,7 +949,7 @@ class Server(stack_user.StackUser):
|
|||
|
||||
# verify the number of personality files and the size of each
|
||||
# personality file against the provider's absolute limits
|
||||
if personality is not None:
|
||||
if personality:
|
||||
msg = _("The personality property may not contain "
|
||||
"greater than %s entries.") % limits['maxPersonality']
|
||||
self._check_maximum(len(personality),
|
||||
|
|
|
@ -758,7 +758,7 @@ class ServersTest(HeatTestCase):
|
|||
web_server = tmpl.t['Resources']['WebServer']
|
||||
del web_server['Properties']['image']
|
||||
|
||||
def create_server(device_name, mock_nova=True, mock_create=True):
|
||||
def create_server(device_name, mock_create=True):
|
||||
self.m.UnsetStubs()
|
||||
web_server['Properties']['block_device_mapping'] = [{
|
||||
"device_name": device_name,
|
||||
|
@ -768,9 +768,6 @@ class ServersTest(HeatTestCase):
|
|||
resource_defns = tmpl.resource_definitions(stack)
|
||||
server = servers.Server('server_with_bootable_volume',
|
||||
resource_defns['WebServer'], stack)
|
||||
if mock_nova:
|
||||
self.m.StubOutWithMock(server, 'nova')
|
||||
server.nova().MultipleTimes().AndReturn(self.fc)
|
||||
if mock_create:
|
||||
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
|
||||
nova.NovaClientPlugin._create().AndReturn(self.fc)
|
||||
|
@ -781,7 +778,7 @@ class ServersTest(HeatTestCase):
|
|||
self.assertIsNone(server.validate())
|
||||
server = create_server('vda', mock_create=False)
|
||||
self.assertIsNone(server.validate())
|
||||
server = create_server('vdb', mock_nova=False, mock_create=False)
|
||||
server = create_server('vdb', mock_create=False)
|
||||
ex = self.assertRaises(exception.StackValidationFailed,
|
||||
server.validate)
|
||||
self.assertEqual('Neither image nor bootable volume is specified for '
|
||||
|
@ -824,7 +821,6 @@ class ServersTest(HeatTestCase):
|
|||
resource_defns['WebServer'], stack)
|
||||
|
||||
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
|
||||
nova.NovaClientPlugin._create().AndReturn(self.fc)
|
||||
self.m.StubOutWithMock(glance.ImageConstraint, "validate")
|
||||
glance.ImageConstraint.validate(
|
||||
mox.IgnoreArg(), mox.IgnoreArg()).MultipleTimes().AndReturn(True)
|
||||
|
@ -2520,6 +2516,31 @@ class ServersTest(HeatTestCase):
|
|||
|
||||
self.m.VerifyAll()
|
||||
|
||||
def test_server_dont_validate_personality_if_personality_isnt_set(self):
|
||||
stack_name = 'srv_val'
|
||||
(tmpl, stack) = self._setup_test_stack(stack_name)
|
||||
|
||||
resource_defns = tmpl.resource_definitions(stack)
|
||||
server = servers.Server('server_create_image_err',
|
||||
resource_defns['WebServer'], stack)
|
||||
|
||||
# We mock out nova_utils.absolute_limits but we don't specify
|
||||
# how this mock should behave, so mox will verify that this mock
|
||||
# is NOT called during call to server.validate().
|
||||
# This is the way to validate that no excessive calls to Nova
|
||||
# are made during validation.
|
||||
self.m.StubOutWithMock(nova_utils, 'absolute_limits')
|
||||
self.m.StubOutWithMock(nova.NovaClientPlugin, '_create')
|
||||
nova.NovaClientPlugin._create().AndReturn(self.fc)
|
||||
self._mock_get_image_id_success('F17-x86_64-gold', 'image_id')
|
||||
self.m.ReplayAll()
|
||||
|
||||
# Assert here checks that server resource validates, but actually
|
||||
# this call is Act stage of this test. We calling server.validate()
|
||||
# to verify that no excessive calls to Nova are made during validation.
|
||||
self.assertIsNone(server.validate())
|
||||
self.m.VerifyAll()
|
||||
|
||||
|
||||
class FlavorConstraintTest(HeatTestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue