From 94784dd8f77bd863cc8d3f74da4e3bba55db7a05 Mon Sep 17 00:00:00 2001 From: Steve Baker Date: Mon, 26 Nov 2012 13:01:11 +1300 Subject: [PATCH] Parse all templates with format.parse_to_template It can no longer be assumed that a template string is in JSON format. Change-Id: Id43b82a25e62f7c7868c1c51556c5bde94e7b132 --- heat/api/cfn/v1/stacks.py | 3 ++- heat/engine/parser.py | 2 +- heat/engine/resources/dbinstance.py | 6 ++---- heat/engine/resources/loadbalancer.py | 7 +++---- heat/engine/resources/stack.py | 3 ++- 5 files changed, 10 insertions(+), 11 deletions(-) diff --git a/heat/api/cfn/v1/stacks.py b/heat/api/cfn/v1/stacks.py index 314d1ec6..7501434b 100644 --- a/heat/api/cfn/v1/stacks.py +++ b/heat/api/cfn/v1/stacks.py @@ -26,6 +26,7 @@ from heat.api.aws import exception from heat.api.aws import utils as api_utils from heat.common import wsgi from heat.engine import rpcapi as engine_rpcapi +from heat.engine import format import heat.engine.api as engine_api from heat.engine import identifier @@ -315,7 +316,7 @@ class StackController(object): return exception.HeatMissingParameterError(detail=msg) try: - stack = json.loads(templ) + stack = format.parse_to_template(templ) except ValueError: msg = _("The Template must be a JSON document.") return exception.HeatInvalidParameterValueError(detail=msg) diff --git a/heat/engine/parser.py b/heat/engine/parser.py index edf44783..d3395240 100644 --- a/heat/engine/parser.py +++ b/heat/engine/parser.py @@ -430,7 +430,7 @@ def resolve_static_data(template, parameters, snippet): Example: - >>> template = Template(json.load(template_path)) + >>> template = Template(format.parse_to_template(template_path)) >>> parameters = Parameters('stack', template, {'KeyName': 'my_key'}) >>> resolve_static_data(template, parameters, {'Ref': 'KeyName'}) 'my_key' diff --git a/heat/engine/resources/dbinstance.py b/heat/engine/resources/dbinstance.py index 0f36a8f5..b3b14d99 100644 --- a/heat/engine/resources/dbinstance.py +++ b/heat/engine/resources/dbinstance.py @@ -13,11 +13,9 @@ # License for the specific language governing permissions and limitations # under the License. -import json - from heat.common import exception from heat.engine.resources import stack - +from heat.engine import format from heat.openstack.common import log as logging logger = logging.getLogger(__file__) @@ -221,7 +219,7 @@ class DBInstance(stack.Stack): return p def handle_create(self): - templ = json.loads(mysql_template) + templ = format.parse_to_template(mysql_template) self.create_with_template(templ) def FnGetAtt(self, key): diff --git a/heat/engine/resources/loadbalancer.py b/heat/engine/resources/loadbalancer.py index b6ddc375..2d7135c5 100644 --- a/heat/engine/resources/loadbalancer.py +++ b/heat/engine/resources/loadbalancer.py @@ -13,9 +13,8 @@ # License for the specific language governing permissions and limitations # under the License. -import json - from heat.common import exception +from heat.engine import format from heat.engine.resources import stack from novaclient.exceptions import NotFound @@ -284,7 +283,7 @@ class LoadBalancer(stack.Stack): return '%s%s%s%s\n' % (gl, frontend, backend, '\n'.join(servers)) def handle_create(self): - templ = json.loads(lb_template) + templ = format.parse_to_template(lb_template) if self.properties['Instances']: md = templ['Resources']['LB_instance']['Metadata'] @@ -314,7 +313,7 @@ class LoadBalancer(stack.Stack): save it to the db. rely on the cfn-hup to reconfigure HAProxy ''' - templ = json.loads(lb_template) + templ = format.parse_to_template(lb_template) cfg = self._haproxy_config(templ, inst_list) md = self.nested()['LB_instance'].metadata diff --git a/heat/engine/resources/stack.py b/heat/engine/resources/stack.py index 592d08ed..726a2de1 100644 --- a/heat/engine/resources/stack.py +++ b/heat/engine/resources/stack.py @@ -17,6 +17,7 @@ import urllib2 import json from heat.common import exception +from heat.engine import format from heat.engine.resources import resource from heat.engine import parser @@ -75,7 +76,7 @@ class Stack(resource.Resource): def handle_create(self): response = urllib2.urlopen(self.properties[PROP_TEMPLATE_URL]) - template = json.load(response) + template = format.parse_to_template(response) self.create_with_template(template) -- 2.45.2