Source code for heat_integrationtests.functional.test_resource_chain

#
#    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


TEMPLATE_SIMPLE = '''
heat_template_version: 2016-04-08
parameters:
  string-length:
    type: number
resources:
  my-chain:
    type: OS::Heat::ResourceChain
    properties:
      resources: ['OS::Heat::RandomString', 'OS::Heat::RandomString']
      resource_properties:
        length: { get_param: string-length }
outputs:
  resource-ids:
    value: { get_attr: [my-chain, refs] }
  resource-0-value:
    value: { get_attr: [my-chain, resource.0, value] }
  all-resource-attrs:
    value: { get_attr: [my-chain, attributes, value] }
'''

TEMPLATE_PARAM_DRIVEN = '''
heat_template_version: 2016-04-08
parameters:
  chain-types:
    type: comma_delimited_list
resources:
  my-chain:
    type: OS::Heat::ResourceChain
    properties:
      resources: { get_param: chain-types }
'''


[docs]class ResourceChainTests(functional_base.FunctionalTestsBase):
[docs] def test_create(self): # Test params = {'string-length': 8} stack_id = self.stack_create(template=TEMPLATE_SIMPLE, parameters=params) # Verify stack = self.client.stacks.get(stack_id) self.assertIsNotNone(stack) # Top-level resource for chain expected = {'my-chain': 'OS::Heat::ResourceChain'} found = self.list_resources(stack_id) self.assertEqual(expected, found) # Nested stack exists and has two resources nested_id = self.group_nested_identifier(stack_id, 'my-chain') expected = {'0': 'OS::Heat::RandomString', '1': 'OS::Heat::RandomString'} found = self.list_resources(nested_id) self.assertEqual(expected, found) # Outputs resource_ids = self._stack_output(stack, 'resource-ids') self.assertIsNotNone(resource_ids) self.assertEqual(2, len(resource_ids)) resource_value = self._stack_output(stack, 'resource-0-value') self.assertIsNotNone(resource_value) self.assertEqual(8, len(resource_value)) # from parameter resource_attrs = self._stack_output(stack, 'all-resource-attrs') self.assertIsNotNone(resource_attrs) self.assertIsInstance(resource_attrs, dict) self.assertEqual(2, len(resource_attrs)) self.assertEqual(8, len(resource_attrs['0'])) self.assertEqual(8, len(resource_attrs['1']))
[docs] def test_update(self): # Setup params = {'string-length': 8} stack_id = self.stack_create(template=TEMPLATE_SIMPLE, parameters=params) update_tmpl = ''' heat_template_version: 2016-04-08 parameters: string-length: type: number resources: my-chain: type: OS::Heat::ResourceChain properties: resources: ['OS::Heat::None'] ''' # Test self.update_stack(stack_id, template=update_tmpl, parameters=params) # Verify # Nested stack only has the None resource nested_id = self.group_nested_identifier(stack_id, 'my-chain') expected = {'0': 'OS::Heat::None'} found = self.list_resources(nested_id) self.assertEqual(expected, found)
[docs] def test_update_resources(self): params = {'chain-types': 'OS::Heat::None'} stack_id = self.stack_create(template=TEMPLATE_PARAM_DRIVEN, parameters=params) nested_id = self.group_nested_identifier(stack_id, 'my-chain') expected = {'0': 'OS::Heat::None'} found = self.list_resources(nested_id) self.assertEqual(expected, found) params = {'chain-types': 'OS::Heat::None,OS::Heat::None'} self.update_stack(stack_id, template=TEMPLATE_PARAM_DRIVEN, parameters=params) expected = {'0': 'OS::Heat::None', '1': 'OS::Heat::None'} found = self.list_resources(nested_id) self.assertEqual(expected, found)
[docs] def test_resources_param_driven(self): # Setup params = {'chain-types': 'OS::Heat::None,OS::Heat::RandomString,OS::Heat::None'} # Test stack_id = self.stack_create(template=TEMPLATE_PARAM_DRIVEN, parameters=params) # Verify nested_id = self.group_nested_identifier(stack_id, 'my-chain') expected = {'0': 'OS::Heat::None', '1': 'OS::Heat::RandomString', '2': 'OS::Heat::None'} found = self.list_resources(nested_id) self.assertEqual(expected, found)
[docs] def test_resources_env_defined(self): # Setup env = {'parameters': {'chain-types': 'OS::Heat::None'}} # Test stack_id = self.stack_create(template=TEMPLATE_PARAM_DRIVEN, environment=env) # Verify nested_id = self.group_nested_identifier(stack_id, 'my-chain') expected = {'0': 'OS::Heat::None'} found = self.list_resources(nested_id) self.assertEqual(expected, found)