1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109 | diff --git a/cloudinit/templater.py b/cloudinit/templater.py
index 282da2d..fe081c8 100644
--- a/cloudinit/templater.py
+++ b/cloudinit/templater.py
@@ -73,12 +73,11 @@ def detect_template(text):
else:
ident = text
rest = ''
+
type_match = TYPE_MATCHER.match(ident)
+
if not type_match:
- if not JINJA_AVAILABLE:
- LOG.warn("Jinja2 not available as the default renderer for"
- " unknown template, reverting to the basic renderer.")
- return ('basic', basic_render, text)
+ return ('basic', basic_render, text)
else:
template_type = type_match.group(1).lower().strip()
if template_type not in ('jinja', 'basic'):
diff --git a/cloudinit/tests/test_templating.py b/cloudinit/tests/test_templating.py
new file mode 100644
index 0000000..5496f60
--- /dev/null
+++ b/cloudinit/tests/test_templating.py
@@ -0,0 +1,83 @@
+# Copyright 2015 Canonical Ltd.
+# This file is part of cloud-init. See LICENCE file for license information.
+#
+# vi: ts=4 expandtab
+
+from cloudinit import templater
+from cloudinit import test
+
+import textwrap
+
+
+class TestTemplates(test.TestCase):
+ def test_render_basic(self):
+ in_data = textwrap.dedent("""
+ ${b}
+
+ c = d
+ """)
+ in_data = in_data.strip()
+ expected_data = textwrap.dedent("""
+ 2
+
+ c = d
+ """)
+ out_data = templater.basic_render(in_data, {'b': 2})
+ self.assertEqual(expected_data.strip(), out_data)
+
+ def test_render_jinja(self):
+ blob = '\n'.join((
+ "## template:jinja",
+ "{{a}},{{b}}",
+ ""))
+ c = templater.render_string(blob, {"a": 1, "b": 2})
+ self.assertEquals("1,2\n", c)
+
+ def test_render_jinja_crlf(self):
+ blob = '\r\n'.join((
+ "## template:jinja",
+ "{{a}},{{b}}"))
+ c = templater.render_string(blob, {"a": 1, "b": 2})
+ self.assertEquals("1,2", c)
+
+ def test_render_default(self):
+ blob = '''$a,$b'''
+ c = templater.render_string(blob, {"a": 1, "b": 2})
+ self.assertEquals("1,2", c)
+
+ def test_render_basic_deeper(self):
+ hn = 'myfoohost.yahoo.com'
+ expected_data = "h=%s\nc=d\n" % hn
+ in_data = "h=$hostname.canonical_name\nc=d\n"
+ params = {
+ "hostname": {
+ "canonical_name": hn,
+ },
+ }
+ out_data = templater.render_string(in_data, params)
+ self.assertEqual(expected_data, out_data)
+
+ def test_render_basic_no_parens(self):
+ hn = "myfoohost"
+ in_data = "h=$hostname\nc=d\n"
+ expected_data = "h=%s\nc=d\n" % hn
+ out_data = templater.basic_render(in_data, {'hostname': hn})
+ self.assertEqual(expected_data, out_data)
+
+ def test_render_basic_parens(self):
+ hn = "myfoohost"
+ in_data = "h = ${hostname}\nc=d\n"
+ expected_data = "h = %s\nc=d\n" % hn
+ out_data = templater.basic_render(in_data, {'hostname': hn})
+ self.assertEqual(expected_data, out_data)
+
+ def test_render_basic2(self):
+ mirror = "mymirror"
+ codename = "zany"
+ in_data = "deb $mirror $codename-updates main contrib non-free"
+ ex_data = "deb %s %s-updates main contrib non-free" % (mirror,
+ codename)
+
+ out_data = templater.basic_render(in_data,
+ {'mirror': mirror, 'codename': codename})
+ self.assertEqual(ex_data, out_data)
|