Merge "Extract tags before pass them in create/update"

This commit is contained in:
Jenkins 2015-07-10 02:02:03 +00:00 committed by Gerrit Code Review
commit c8edfa1cf5
3 changed files with 137 additions and 20 deletions

View File

@ -345,6 +345,16 @@ class StackController(object):
formatted_stack = stacks_view.format_stack(req, result)
return {'stack': formatted_stack}
def prepare_args(self, data):
args = data.args()
key = rpc_api.PARAM_TIMEOUT
if key in args:
args[key] = self._extract_int_param(key, args[key])
key = rpc_api.PARAM_TAGS
if args.get(key) is not None:
args[key] = self._extract_tags_param(args[key])
return args
@util.policy_enforce
def create(self, req, body):
"""
@ -352,11 +362,7 @@ class StackController(object):
"""
data = InstantiationData(body)
args = data.args()
key = rpc_api.PARAM_TIMEOUT
if key in args:
args[key] = self._extract_int_param(key, args[key])
args = self.prepare_args(data)
result = self.rpc_client.create_stack(req.context,
data.stack_name(),
data.template(),
@ -429,11 +435,7 @@ class StackController(object):
"""
data = InstantiationData(body)
args = data.args()
key = rpc_api.PARAM_TIMEOUT
if key in args:
args[key] = self._extract_int_param(key, args[key])
args = self.prepare_args(data)
self.rpc_client.update_stack(req.context,
identity,
data.template(),
@ -451,11 +453,7 @@ class StackController(object):
"""
data = InstantiationData(body, patch=True)
args = data.args()
key = rpc_api.PARAM_TIMEOUT
if key in args:
args[key] = self._extract_int_param(key, args[key])
args = self.prepare_args(data)
self.rpc_client.update_stack(req.context,
identity,
data.template(),

View File

@ -773,6 +773,50 @@ class StackControllerTest(ControllerTest, common.HeatTestCase):
self.m.VerifyAll()
def test_create_with_tags(self, mock_enforce):
self._mock_enforce_setup(mock_enforce, 'create', True)
identity = identifier.HeatIdentifier(self.tenant, 'wordpress', '1')
template = {u'Foo': u'bar'}
parameters = {u'InstanceType': u'm1.xlarge'}
body = {'template': template,
'stack_name': identity.stack_name,
'parameters': parameters,
'tags': 'tag1,tag2',
'timeout_mins': 30}
req = self._post('/stacks', json.dumps(body))
self.m.StubOutWithMock(rpc_client.EngineClient, 'call')
rpc_client.EngineClient.call(
req.context,
('create_stack',
{'stack_name': identity.stack_name,
'template': template,
'params': {'parameters': parameters,
'encrypted_param_names': [],
'parameter_defaults': {},
'resource_registry': {}},
'files': {},
'args': {'timeout_mins': 30, 'tags': ['tag1', 'tag2']},
'owner_id': None,
'nested_depth': 0,
'user_creds_id': None,
'parent_resource_name': None,
'stack_user_project_id': None}),
version='1.8'
).AndReturn(dict(identity))
self.m.ReplayAll()
response = self.controller.create(req,
tenant_id=identity.tenant,
body=body)
expected = {'stack':
{'id': '1',
'links': [{'href': self._url(identity), 'rel': 'self'}]}}
self.assertEqual(expected, response)
self.m.VerifyAll()
def test_adopt(self, mock_enforce):
self._mock_enforce_setup(mock_enforce, 'create', True)
identity = identifier.HeatIdentifier(self.tenant, 'wordpress', '1')
@ -1535,6 +1579,43 @@ class StackControllerTest(ControllerTest, common.HeatTestCase):
body=body)
self.m.VerifyAll()
def test_update_with_tags(self, mock_enforce):
self._mock_enforce_setup(mock_enforce, 'update', True)
identity = identifier.HeatIdentifier(self.tenant, 'wordpress', '6')
template = {u'Foo': u'bar'}
parameters = {u'InstanceType': u'm1.xlarge'}
body = {'template': template,
'parameters': parameters,
'files': {},
'tags': 'tag1,tag2',
'timeout_mins': 30}
req = self._put('/stacks/%(stack_name)s/%(stack_id)s' % identity,
json.dumps(body))
self.m.StubOutWithMock(rpc_client.EngineClient, 'call')
rpc_client.EngineClient.call(
req.context,
('update_stack',
{'stack_identity': dict(identity),
'template': template,
'params': {'parameters': parameters,
'encrypted_param_names': [],
'parameter_defaults': {},
'resource_registry': {}},
'files': {},
'args': {'timeout_mins': 30, 'tags': ['tag1', 'tag2']}})
).AndReturn(dict(identity))
self.m.ReplayAll()
self.assertRaises(webob.exc.HTTPAccepted,
self.controller.update,
req, tenant_id=identity.tenant,
stack_name=identity.stack_name,
stack_id=identity.stack_id,
body=body)
self.m.VerifyAll()
def test_update_bad_name(self, mock_enforce):
self._mock_enforce_setup(mock_enforce, 'update', True)
identity = identifier.HeatIdentifier(self.tenant, 'wibble', '6')
@ -1658,6 +1739,44 @@ class StackControllerTest(ControllerTest, common.HeatTestCase):
body=body)
self.m.VerifyAll()
def test_update_with_existing_parameters_with_tags(self, mock_enforce):
self._mock_enforce_setup(mock_enforce, 'update_patch', True)
identity = identifier.HeatIdentifier(self.tenant, 'wordpress', '6')
template = {u'Foo': u'bar'}
body = {'template': template,
'parameters': {},
'files': {},
'tags': 'tag1,tag2',
'timeout_mins': 30}
req = self._patch('/stacks/%(stack_name)s/%(stack_id)s' % identity,
json.dumps(body))
self.m.StubOutWithMock(rpc_client.EngineClient, 'call')
rpc_client.EngineClient.call(
req.context,
('update_stack',
{'stack_identity': dict(identity),
'template': template,
'params': {'parameters': {},
'encrypted_param_names': [],
'parameter_defaults': {},
'resource_registry': {}},
'files': {},
'args': {rpc_api.PARAM_EXISTING: True,
'timeout_mins': 30,
'tags': ['tag1', 'tag2']}})
).AndReturn(dict(identity))
self.m.ReplayAll()
self.assertRaises(webob.exc.HTTPAccepted,
self.controller.update_patch,
req, tenant_id=identity.tenant,
stack_name=identity.stack_name,
stack_id=identity.stack_id,
body=body)
self.m.VerifyAll()
def test_update_with_patched_existing_parameters(self, mock_enforce):
self._mock_enforce_setup(mock_enforce, 'update_patch', True)
identity = identifier.HeatIdentifier(self.tenant, 'wordpress', '6')

View File

@ -27,7 +27,7 @@ description:
def test_stack_tag(self):
# Stack create with stack tags
tags = ['foo', 'bar']
tags = 'foo,bar'
stack_identifier = self.stack_create(
template=self.template,
tags=tags
@ -35,10 +35,10 @@ description:
# Ensure property tag is populated and matches given tags
stack = self.client.stacks.get(stack_identifier)
self.assertEqual(tags, stack.tags)
self.assertEqual(['foo', 'bar'], stack.tags)
# Update tags
updated_tags = ['tag1', 'tag2']
updated_tags = 'tag1,tag2'
self.update_stack(
stack_identifier,
template=self.template,
@ -46,7 +46,7 @@ description:
# Ensure property tag is populated and matches updated tags
updated_stack = self.client.stacks.get(stack_identifier)
self.assertEqual(updated_tags, updated_stack.tags)
self.assertEqual(['tag1', 'tag2'], updated_stack.tags)
# Delete tags
self.update_stack(
@ -60,7 +60,7 @@ description:
def test_hidden_stack(self):
# Stack create with hidden stack tag
tags = ['foo', 'hidden']
tags = 'foo,hidden'
self.stack_create(
template=self.template,
tags=tags)