Merge "Resolve files in resource types"
This commit is contained in:
@@ -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):
|
||||
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user