diff options
author | Jenkins <jenkins@review.openstack.org> | 2015-04-01 02:20:37 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2015-04-01 02:20:37 +0000 |
commit | 6d528f005742263837d05250662bf6214a703da8 (patch) | |
tree | 2cea00786abc69b2ceca0ce5b3f8c7a888ede3ac /heatclient/common/template_utils.py | |
parent | 10333e6d49477f0e9ec6ea5b575939f535fbcac6 (diff) | |
parent | 22660e943e23e515cd83c2d22e864b35890ffc18 (diff) | |
download | python-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.py | 43 |
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) |