From 96aa0a2b143bdebe6f533e327c2928f8ebe2d0b9 Mon Sep 17 00:00:00 2001 From: Guillaume Espanel Date: Thu, 8 Sep 2016 12:36:34 +0200 Subject: [PATCH] Update the format of flame generate-stack-data The heat client now requires the stack data and the stack template to be passed through the same file. This change affects the output of flameclient.Client.generate and replaces flameclient.Client.heat_template and flameclient.Client.stack_data_template by a single method : heat_template_and_data. Change-Id: I14f703cb09e9dc81c5fa89d60ed10c53c61ce004 --- flameclient/client.py | 7 +----- flameclient/cmd.py | 5 +--- flameclient/flame.py | 13 ++++++---- flameclient/tests/test_flame.py | 42 +++++++++++++++++++++++++-------- 4 files changed, 43 insertions(+), 24 deletions(-) diff --git a/flameclient/client.py b/flameclient/client.py index cd020b8..52112d1 100644 --- a/flameclient/client.py +++ b/flameclient/client.py @@ -41,9 +41,4 @@ class Client(object): generate_stack_data ) self.template_generator.extract_data() - heat_template = self.template_generator.heat_template() - if generate_stack_data: - stack_data = self.template_generator.stack_data_template() - else: - stack_data = None - return (heat_template, stack_data) + return self.template_generator.heat_template_and_data() diff --git a/flameclient/cmd.py b/flameclient/cmd.py index 447bcb0..6c3d997 100644 --- a/flameclient/cmd.py +++ b/flameclient/cmd.py @@ -95,7 +95,4 @@ def main(args=None): args.generate_stack_data) template.extract_data() print("### Heat Template ###") - print(template.heat_template()) - if args.generate_stack_data: - print("### Stack Data ###") - print(template.stack_data_template()) + print(template.heat_template_and_data()) diff --git a/flameclient/flame.py b/flameclient/flame.py index 6b24be9..924d65d 100644 --- a/flameclient/flame.py +++ b/flameclient/flame.py @@ -565,8 +565,13 @@ class TemplateGenerator(object): if self.generate_data: self.stack_data['resources'].update(resource.stack_resource) - def heat_template(self): - return self.format_template(self.template) + def heat_template_and_data(self): + if self.generate_data: + out = self.stack_data.copy() + out['template'] = self.template + out['environment'] = {"parameter_defaults": {}, + "parameters": {}} - def stack_data_template(self): - return self.format_template(self.stack_data) + return self.format_template(out) + else: + return self.format_template(self.template) diff --git a/flameclient/tests/test_flame.py b/flameclient/tests/test_flame.py index 5906657..3063861 100644 --- a/flameclient/tests/test_flame.py +++ b/flameclient/tests/test_flame.py @@ -23,6 +23,7 @@ # SOFTWARE. import mock +import yaml from flameclient import client as flame_client from flameclient import flame @@ -290,6 +291,29 @@ class BaseTestCase(base.TestCase): self.assertEqual(expected_parameters, merged_parameters) +class TemplateGenerationTest(BaseTestCase): + def test_heat_template_and_data_with_data(self): + generator = self.get_generator(False, False, False, True) + generator.extract_data() + out = yaml.load(generator.heat_template_and_data()) + mandatory_keys = set(('environment', 'template', 'resources', + 'action', 'status')) + self.assertEqual(mandatory_keys, set(out.keys())) + self.assertEqual(generator.template, out['template']) + del out['environment'] + del out['template'] + self.assertEqual(generator.stack_data, out) + + def test_heat_template_and_data_without_data(self): + generator = self.get_generator(False, False, False, False) + generator.extract_data() + out = yaml.load(generator.heat_template_and_data()) + mandatory_keys = {'heat_template_version', 'resources', 'description', + 'parameters'} + self.assertEqual(mandatory_keys, set(out.keys())) + self.assertEqual(generator.template, out) + + class ClientTest(BaseTestCase): def setUp(self): super(ClientTest, self).setUp() @@ -298,22 +322,20 @@ class ClientTest(BaseTestCase): def test_generate(self): out = self.c.generate(False, False, False, True) - self.assertIsInstance(out, tuple) - self.assertIsNotNone(out[1]) + parsed_out = yaml.load(out) + self.assertIsInstance(parsed_out, dict) def test_generate_no_stack_data(self): out = self.c.generate(False, False, False, False) - self.assertIsInstance(out, tuple) - self.assertIsNotNone(out[0]) - self.assertIsNone(out[1]) + parsed_out = yaml.load(out) + self.assertIsInstance(parsed_out, dict) + self.assertNotIn('template', parsed_out.keys()) def test_generate_contains_extract(self): - generator = self.get_generator(False, False, False, True) out = self.c.generate(False, False, False, True) - generator.extract_data() - stack_data = generator.stack_data_template() - heat_template = generator.heat_template() - self.assertEqual(out, (heat_template, stack_data)) + parsed_out = yaml.load(out) + self.assertIsInstance(parsed_out, dict) + self.assertIn('template', parsed_out.keys()) class StackDataTests(BaseTestCase):