blob: 8850c499ced0e184df2d1b94bd15ff7c7a506b9b [file] [log] [blame]
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from heat_integrationtests.functional import functional_base
cfn_template = '''
AWSTemplateFormatVersion: 2010-09-09
Parameters:
env_type:
Default: test
Type: String
AllowedValues: [prod, test]
Conditions:
Prod: {"Fn::Equals" : [{Ref: env_type}, "prod"]}
Resources:
test_res:
Type: OS::Heat::TestResource
Properties:
value: test_res
prod_res:
Type: OS::Heat::TestResource
Properties:
value: prod_res
Condition: Prod
Outputs:
res_value:
Value: {"Fn::GetAtt": [prod_res, output]}
Condition: Prod
'''
hot_template = '''
heat_template_version: 2016-10-14
parameters:
env_type:
default: test
type: string
constraints:
- allowed_values: [prod, test]
conditions:
prod: {equals : [{get_param: env_type}, "prod"]}
resources:
test_res:
type: OS::Heat::TestResource
properties:
value: test_res
prod_res:
type: OS::Heat::TestResource
properties:
value: prod_res
condition: prod
outputs:
res_value:
value: {get_attr: [prod_res, output]}
condition: prod
'''
class CreateUpdateResConditionTest(functional_base.FunctionalTestsBase):
def setUp(self):
super(CreateUpdateResConditionTest, self).setUp()
def res_assert_for_prod(self, resources):
self.assertEqual(2, len(resources))
res_names = [res.resource_name for res in resources]
self.assertIn('prod_res', res_names)
self.assertIn('test_res', res_names)
def res_assert_for_test(self, resources):
self.assertEqual(1, len(resources))
res_names = [res.resource_name for res in resources]
self.assertIn('test_res', res_names)
self.assertNotIn('prod_res', res_names)
def output_assert_for_prod(self, stack_id):
output = self.client.stacks.output_show(stack_id,
'res_value')['output']
self.assertEqual('prod_res', output['output_value'])
def output_assert_for_test(self, stack_id):
output = self.client.stacks.output_show(stack_id,
'res_value')['output']
self.assertIsNone(output['output_value'])
def test_stack_create_update_cfn_template_test_to_prod(self):
stack_identifier = self.stack_create(template=cfn_template)
resources = self.client.resources.list(stack_identifier)
self.res_assert_for_test(resources)
self.output_assert_for_test(stack_identifier)
parms = {'env_type': 'prod'}
self.update_stack(stack_identifier,
template=cfn_template,
parameters=parms)
resources = self.client.resources.list(stack_identifier)
self.res_assert_for_prod(resources)
self.output_assert_for_prod(stack_identifier)
def test_stack_create_update_cfn_template_prod_to_test(self):
parms = {'env_type': 'prod'}
stack_identifier = self.stack_create(template=cfn_template,
parameters=parms)
resources = self.client.resources.list(stack_identifier)
self.res_assert_for_prod(resources)
self.output_assert_for_prod(stack_identifier)
parms = {'env_type': 'test'}
self.update_stack(stack_identifier,
template=cfn_template,
parameters=parms)
resources = self.client.resources.list(stack_identifier)
self.res_assert_for_test(resources)
self.output_assert_for_test(stack_identifier)
def test_stack_create_update_hot_template_test_to_prod(self):
stack_identifier = self.stack_create(template=hot_template)
resources = self.client.resources.list(stack_identifier)
self.res_assert_for_test(resources)
self.output_assert_for_test(stack_identifier)
parms = {'env_type': 'prod'}
self.update_stack(stack_identifier,
template=hot_template,
parameters=parms)
resources = self.client.resources.list(stack_identifier)
self.res_assert_for_prod(resources)
self.output_assert_for_prod(stack_identifier)
def test_stack_create_update_hot_template_prod_to_test(self):
parms = {'env_type': 'prod'}
stack_identifier = self.stack_create(template=hot_template,
parameters=parms)
resources = self.client.resources.list(stack_identifier)
self.res_assert_for_prod(resources)
self.output_assert_for_prod(stack_identifier)
parms = {'env_type': 'test'}
self.update_stack(stack_identifier,
template=hot_template,
parameters=parms)
resources = self.client.resources.list(stack_identifier)
self.res_assert_for_test(resources)
self.output_assert_for_test(stack_identifier)