summaryrefslogtreecommitdiff
path: root/cloudinit
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit')
-rw-r--r--cloudinit/config/cc_runcmd.py7
-rw-r--r--cloudinit/tests/test_util.py5
-rw-r--r--cloudinit/util.py3
3 files changed, 12 insertions, 3 deletions
diff --git a/cloudinit/config/cc_runcmd.py b/cloudinit/config/cc_runcmd.py
index 1f75d6c5..15960c7d 100644
--- a/cloudinit/config/cc_runcmd.py
+++ b/cloudinit/config/cc_runcmd.py
@@ -65,7 +65,8 @@ schema = {
'items': {
'oneOf': [
{'type': 'array', 'items': {'type': 'string'}},
- {'type': 'string'}]
+ {'type': 'string'},
+ {'type': 'null'}]
},
'additionalItems': False, # Reject items of non-string non-list
'additionalProperties': False,
@@ -90,7 +91,7 @@ def handle(name, cfg, cloud, log, _args):
try:
content = util.shellify(cmd)
util.write_file(out_fn, content, 0o700)
- except Exception:
- util.logexc(log, "Failed to shellify %s into file %s", cmd, out_fn)
+ except Exception as e:
+ raise type(e)('Failed to shellify {} into file {}'.format(cmd, out_fn))
# vi: ts=4 expandtab
diff --git a/cloudinit/tests/test_util.py b/cloudinit/tests/test_util.py
index 977ad8e0..ab5eb35c 100644
--- a/cloudinit/tests/test_util.py
+++ b/cloudinit/tests/test_util.py
@@ -349,6 +349,11 @@ class TestShellify(CiTestCase):
util.shellify(["echo hi mom", ["echo", "hi dad"],
('echo', 'hi', 'sis')]))
+ def test_supports_comments(self):
+ self.assertEqual(
+ '\n'.join(["#!/bin/sh", "echo start", "echo end", ""]),
+ util.shellify(["echo start", None, "echo end"]))
+
class TestGetHostnameFqdn(CiTestCase):
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 22d8917e..1b4384e1 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -2031,6 +2031,9 @@ def shellify(cmdlist, add_header=True):
elif isinstance(args, str):
content = "%s%s\n" % (content, args)
cmds_made += 1
+ # Yaml parsing of a comment results in None
+ elif args is None:
+ pass
else:
raise TypeError(
"Unable to shellify type '%s'. Expected list, string, tuple. "