Check before _update_stack
If some parameters in bay_update are invalid, we should not update the stack. Change-Id: Idd32a07a5b319830710b6ada8284a053d4a65f4f Closes-Bug: #1484048
This commit is contained in:
@@ -116,6 +116,9 @@ def _update_stack_outputs(context, stack, bay):
|
||||
|
||||
|
||||
class Handler(object):
|
||||
|
||||
_update_allowed_properties = set(['node_count'])
|
||||
|
||||
def __init__(self):
|
||||
super(Handler, self).__init__()
|
||||
|
||||
@@ -141,6 +144,13 @@ class Handler(object):
|
||||
|
||||
return bay
|
||||
|
||||
def _validate_properties(self, delta):
|
||||
update_disallowed_properties = delta - self._update_allowed_properties
|
||||
if update_disallowed_properties:
|
||||
err = (_("cannot change bay property(ies) %s.") %
|
||||
", ".join(update_disallowed_properties))
|
||||
raise exception.InvalidParameterValue(err=err)
|
||||
|
||||
def bay_update(self, context, bay):
|
||||
LOG.debug('bay_heat bay_update')
|
||||
|
||||
@@ -152,17 +162,16 @@ class Handler(object):
|
||||
'"%s"') % stack.stack_status
|
||||
raise exception.NotSupported(operation=operation)
|
||||
|
||||
delta = set(bay.obj_what_changed())
|
||||
if 'node_count' in delta:
|
||||
delta.remove('node_count')
|
||||
manager = scale_manager.ScaleManager(context, osc, bay)
|
||||
delta = bay.obj_what_changed()
|
||||
if not delta:
|
||||
return bay
|
||||
|
||||
_update_stack(context, osc, bay, manager)
|
||||
self._poll_and_check(osc, bay)
|
||||
self._validate_properties(delta)
|
||||
|
||||
if delta:
|
||||
raise exception.InvalidParameterValue(err=(
|
||||
"cannot change bay property(ies) %s." % ", ".join(delta)))
|
||||
manager = scale_manager.ScaleManager(context, osc, bay)
|
||||
|
||||
_update_stack(context, osc, bay, manager)
|
||||
self._poll_and_check(osc, bay)
|
||||
|
||||
return bay
|
||||
|
||||
|
||||
@@ -733,6 +733,25 @@ class TestHandler(db_base.DbTestCase):
|
||||
bay = objects.Bay.get(self.context, self.bay.uuid)
|
||||
self.assertEqual(bay.node_count, 1)
|
||||
|
||||
@patch('magnum.common.clients.OpenStackClients')
|
||||
def test_update_bay_with_invalid_params(
|
||||
self, mock_openstack_client_class):
|
||||
mock_heat_stack = mock.MagicMock()
|
||||
mock_heat_stack.stack_status = bay_status.CREATE_COMPLETE
|
||||
mock_heat_client = mock.MagicMock()
|
||||
mock_heat_client.stacks.get.return_value = mock_heat_stack
|
||||
mock_openstack_client = mock_openstack_client_class.return_value
|
||||
mock_openstack_client.heat.return_value = mock_heat_client
|
||||
|
||||
self.bay.node_count = 2
|
||||
self.bay.api_address = '7.7.7.7'
|
||||
self.assertRaises(exception.InvalidParameterValue,
|
||||
self.handler.bay_update,
|
||||
self.context,
|
||||
self.bay)
|
||||
bay = objects.Bay.get(self.context, self.bay.uuid)
|
||||
self.assertEqual(bay.node_count, 1)
|
||||
|
||||
@patch('magnum.conductor.handlers.bay_conductor._create_stack')
|
||||
@patch('magnum.common.clients.OpenStackClients')
|
||||
def test_create(self, mock_openstack_client_class, mock_create_stack):
|
||||
|
||||
Reference in New Issue
Block a user