diff --git a/heatclient/common/template_utils.py b/heatclient/common/template_utils.py index fae54efe..a1b176c3 100644 --- a/heatclient/common/template_utils.py +++ b/heatclient/common/template_utils.py @@ -289,9 +289,6 @@ def process_environment_and_files(env_path=None, env_base_url = utils.base_url_for_url(env_url) raw_env = request.urlopen(env_url).read() - if include_env_in_files: - files[env_url] = raw_env - env = environment_format.parse(raw_env) resolve_environment_urls( @@ -299,6 +296,9 @@ def process_environment_and_files(env_path=None, files, env_base_url) + if include_env_in_files: + files[env_url] = jsonutils.dumps(env) + return files, env diff --git a/heatclient/tests/unit/test_template_utils.py b/heatclient/tests/unit/test_template_utils.py index 920573d6..551f4636 100644 --- a/heatclient/tests/unit/test_template_utils.py +++ b/heatclient/tests/unit/test_template_utils.py @@ -409,6 +409,48 @@ class ShellEnvironmentTest(testtools.TestCase): files['file:///home/b/a.yaml']) self.assertEqual(['file:///home/my/dir/env1.yaml'], env_file_list) + self.assertEqual(json.dumps(expected_env), + files['file:///home/my/dir/env1.yaml']) + + def test_process_environment_relative_file_tracker(self): + + self.m.StubOutWithMock(request, 'urlopen') + env_file = '/home/my/dir/env.yaml' + env_url = 'file:///home/my/dir/env.yaml' + env = b''' + resource_registry: + "OS::Thingy": a.yaml + ''' + + request.urlopen(env_url).AndReturn( + six.BytesIO(env)) + request.urlopen('file:///home/my/dir/a.yaml').AndReturn( + six.BytesIO(self.template_a)) + request.urlopen('file:///home/my/dir/a.yaml').AndReturn( + six.BytesIO(self.template_a)) + self.m.ReplayAll() + + self.assertEqual( + env_url, + utils.normalise_file_path_to_url(env_file)) + self.assertEqual( + 'file:///home/my/dir', + utils.base_url_for_url(env_url)) + + env_file_list = [] + files, env = template_utils.process_multiple_environments_and_files( + [env_file], env_list_tracker=env_file_list) + + # Verify + expected_env = {'resource_registry': + {'OS::Thingy': 'file:///home/my/dir/a.yaml'}} + self.assertEqual(expected_env, env) + + self.assertEqual(self.template_a.decode('utf-8'), + files['file:///home/my/dir/a.yaml']) + self.assertEqual(['file:///home/my/dir/env.yaml'], env_file_list) + self.assertEqual(json.dumps(expected_env), + files['file:///home/my/dir/env.yaml']) def test_global_files(self): url = 'file:///home/b/a.yaml'