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
This commit is contained in:
Guillaume Espanel 2016-09-08 12:36:34 +02:00
parent 73e1f7795e
commit 96aa0a2b14
4 changed files with 43 additions and 24 deletions

View File

@ -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()

View File

@ -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())

View File

@ -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)

View File

@ -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):