Merge "Resolve files in resource types"

This commit is contained in:
Jenkins
2014-03-31 16:24:20 +00:00
committed by Gerrit Code Review
2 changed files with 94 additions and 4 deletions

View File

@@ -59,6 +59,7 @@ def get_template_contents(template_file=None, template_url=None,
files = {}
tmpl_base_url = base_url_for_url(template_url)
resolve_template_get_files(template, files, tmpl_base_url)
resolve_template_type(template, files, tmpl_base_url)
return files, template
@@ -77,6 +78,24 @@ def resolve_template_get_files(template, files, template_base_url):
ignore_if, recurse_if)
def resolve_template_type(template, files, template_base_url):
def ignore_if(key, value):
if key != 'type':
return True
if not isinstance(value, six.string_types):
return True
if not value.endswith(('.yaml', '.template')):
return True
return False
def recurse_if(value):
return isinstance(value, (dict, list))
get_file_contents(template, files, template_base_url,
ignore_if, recurse_if)
def get_file_contents(from_data, files, base_url=None,
ignore_if=None, recurse_if=None):

View File

@@ -431,14 +431,14 @@ class TestTemplateGetFileFunctions(testtools.TestCase):
hot_template = '''heat_template_version: 2013-05-23
resources:
resource1:
type: type1
type: OS::type1
properties:
foo: {get_file: foo.yaml}
bar:
get_file:
'http://localhost/bar.yaml'
resource2:
type: type1
type: OS::type1
properties:
baz:
- {get_file: baz/baz1.yaml}
@@ -495,14 +495,14 @@ resources:
'heat_template_version': '2013-05-23',
'resources': {
'resource1': {
'type': 'type1',
'type': 'OS::type1',
'properties': {
'bar': {'get_file': 'http://localhost/bar.yaml'},
'foo': {'get_file': 'file:///home/my/dir/foo.yaml'},
},
},
'resource2': {
'type': 'type1',
'type': 'OS::type1',
'properties': {
'baz': [
{'get_file': 'file:///home/my/dir/baz/baz1.yaml'},
@@ -557,6 +557,77 @@ resources:
self.m.VerifyAll()
class TestTemplateTypeFunctions(testtools.TestCase):
hot_template = '''heat_template_version: 2013-05-23
parameters:
param1:
type: string
resources:
resource1:
type: foo.yaml
properties:
foo: bar
resource2:
type: OS::Heat::ResourceGroup
properties:
resource_def:
type: spam/egg.yaml
'''
def setUp(self):
super(TestTemplateTypeFunctions, self).setUp()
self.m = mox.Mox()
self.addCleanup(self.m.VerifyAll)
self.addCleanup(self.m.UnsetStubs)
def test_hot_template(self):
self.m.StubOutWithMock(request, 'urlopen')
tmpl_file = '/home/my/dir/template.yaml'
url = 'file:///home/my/dir/template.yaml'
request.urlopen(url).AndReturn(
six.StringIO(self.hot_template))
request.urlopen(
'file:///home/my/dir/foo.yaml').InAnyOrder().AndReturn(
six.StringIO('foo contents'))
request.urlopen(
'file:///home/my/dir/spam/egg.yaml').InAnyOrder().AndReturn(
six.StringIO('egg contents'))
self.m.ReplayAll()
files, tmpl_parsed = template_utils.get_template_contents(
template_file=tmpl_file)
self.assertEqual({
u'file:///home/my/dir/foo.yaml': 'foo contents',
u'file:///home/my/dir/spam/egg.yaml': 'egg contents'
}, files)
self.assertEqual({
u'heat_template_version': u'2013-05-23',
u'parameters': {
u'param1': {
u'type': u'string'
}
},
u'resources': {
u'resource1': {
u'type': u'file:///home/my/dir/foo.yaml',
u'properties': {u'foo': u'bar'}
},
u'resource2': {
u'type': u'OS::Heat::ResourceGroup',
u'properties': {
u'resource_def': {
u'type': u'file:///home/my/dir/spam/egg.yaml'
}
}
}
}
}, tmpl_parsed)
self.m.VerifyAll()
class TestURLFunctions(testtools.TestCase):
def setUp(self):