From f9d18e2ed747a6d44e60547fbcc0bbff780f351f Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 18 Jul 2014 10:52:11 -0700 Subject: Add non braces matching and a few more tests --- cloudinit/templater.py | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) (limited to 'cloudinit') diff --git a/cloudinit/templater.py b/cloudinit/templater.py index 95916dff..02f6261d 100644 --- a/cloudinit/templater.py +++ b/cloudinit/templater.py @@ -42,18 +42,25 @@ from cloudinit import util LOG = logging.getLogger(__name__) TYPE_MATCHER = re.compile(r"##\s*template:(.*)", re.I) -BASIC_MATCHER = re.compile(r'\$\{([A-Za-z0-9_.]+)\}') +BASIC_MATCHER = re.compile(r'\$\{([A-Za-z0-9_.]+)\}|\$([A-Za-z0-9_.]+)') def basic_render(content, params): """This does simple replacement of bash variable like templates. - It identifies patterns like ${a} and can also identify patterns like - ${a.b} which will look for a key 'b' in the dictionary rooted by key 'a'. + It identifies patterns like ${a} or $a and can also identify patterns like + ${a.b} or $a.b which will look for a key 'b' in the dictionary rooted + by key 'a'. """ def replacer(match): - path = collections.deque(match.group(1).split(".")) + # Only 1 of the 2 groups will actually have a valid entry. + name = match.group(1) + if name is None: + name = match.group(2) + if name is None: + raise RuntimeError("Match encountered but no valid group present") + path = collections.deque(name.split(".")) selected_params = params while len(path) > 1: key = path.popleft() -- cgit v1.2.3