Merge "Extract tags before pass them in create/update"
This commit is contained in:
commit
c8edfa1cf5
|
@ -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(),
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue