summaryrefslogtreecommitdiff
path: root/heatclient/common/template_utils.py
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-04-01 02:20:37 +0000
committerGerrit Code Review <review@openstack.org>2015-04-01 02:20:37 +0000
commit6d528f005742263837d05250662bf6214a703da8 (patch)
tree2cea00786abc69b2ceca0ce5b3f8c7a888ede3ac /heatclient/common/template_utils.py
parent10333e6d49477f0e9ec6ea5b575939f535fbcac6 (diff)
parent22660e943e23e515cd83c2d22e864b35890ffc18 (diff)
downloadpython-heatclient-6d528f005742263837d05250662bf6214a703da8.tar.gz
Merge "Parse nested files if they are template"0.4.0
Diffstat (limited to 'heatclient/common/template_utils.py')
-rw-r--r--heatclient/common/template_utils.py43
1 files changed, 18 insertions, 25 deletions
diff --git a/heatclient/common/template_utils.py b/heatclient/common/template_utils.py
index a32389b..a5a018b 100644
--- a/heatclient/common/template_utils.py
+++ b/heatclient/common/template_utils.py
@@ -66,17 +66,20 @@ def get_template_contents(template_file=None, template_url=None,
if files is None:
files = {}
resolve_template_get_files(template, files, tmpl_base_url)
- resolve_template_type(template, files, tmpl_base_url)
return files, template
def resolve_template_get_files(template, files, template_base_url):
def ignore_if(key, value):
- if key != 'get_file':
+ if key != 'get_file' and key != 'type':
return True
if not isinstance(value, six.string_types):
return True
+ if (key == 'type' and
+ not value.endswith(('.yaml', '.template'))):
+ return True
+ return False
def recurse_if(value):
return isinstance(value, (dict, list))
@@ -85,26 +88,18 @@ 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
+def is_template(file_content):
+ try:
+ if isinstance(file_content, six.binary_type):
+ file_content = file_content.decode('utf-8')
+ template_format.parse(file_content)
+ except (ValueError, TypeError):
return False
-
- def recurse_if(value):
- return isinstance(value, (dict, list))
-
- get_file_contents(template, files, template_base_url,
- ignore_if, recurse_if, file_is_template=True)
+ return True
def get_file_contents(from_data, files, base_url=None,
- ignore_if=None, recurse_if=None, file_is_template=False):
+ ignore_if=None, recurse_if=None):
if recurse_if and recurse_if(from_data):
if isinstance(from_data, dict):
@@ -112,8 +107,7 @@ def get_file_contents(from_data, files, base_url=None,
else:
recurse_data = from_data
for value in recurse_data:
- get_file_contents(value, files, base_url, ignore_if, recurse_if,
- file_is_template=file_is_template)
+ get_file_contents(value, files, base_url, ignore_if, recurse_if)
if isinstance(from_data, dict):
for key, value in iter(from_data.items()):
@@ -125,12 +119,11 @@ def get_file_contents(from_data, files, base_url=None,
str_url = parse.urljoin(base_url, value)
if str_url not in files:
- if file_is_template:
+ file_content = read_url_content(str_url)
+ if is_template(file_content):
template = get_template_contents(
template_url=str_url, files=files)[1]
file_content = jsonutils.dumps(template)
- else:
- file_content = utils.read_url_content(str_url)
files[str_url] = file_content
# replace the data value with the normalised absolute URL
from_data[key] = str_url
@@ -221,9 +214,9 @@ def resolve_environment_urls(resource_registry, files, env_base_url):
if key == 'hooks':
return True
- get_file_contents(rr, files, base_url, ignore_if, file_is_template=True)
+ get_file_contents(rr, files, base_url, ignore_if)
for res_name, res_dict in iter(rr.get('resources', {}).items()):
res_base_url = res_dict.get('base_url', base_url)
get_file_contents(
- res_dict, files, res_base_url, ignore_if, file_is_template=True)
+ res_dict, files, res_base_url, ignore_if)