diff options
author | Kurt Garloff <kurt@garloff.de> | 2020-03-31 17:57:23 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-31 10:57:23 -0500 |
commit | d00126c167fc06d913d99cfc184bf3402cb8cf53 (patch) | |
tree | a1f82bdf7787393092a556d4fe369d67c8be98b4 /tests/unittests | |
parent | 4fb6fd8a046a6bcce01216c386f3b691a2c466bb (diff) | |
download | vyos-cloud-init-d00126c167fc06d913d99cfc184bf3402cb8cf53.tar.gz vyos-cloud-init-d00126c167fc06d913d99cfc184bf3402cb8cf53.zip |
Fix cloud-init ignoring some misdeclared mimetypes in user-data.
On some platforms (old heat on OpenTelekomCloud), the user-data mime part
is mislabeled x-shellscript. cloud-init would not accept this unexpected
mime-type in multipart user-data. Cloud-init will now run find_ctype()
on the content of the mime-part to check if it matches known include types.
This patch is from Ryan Harper (inspired by my bug report and a
suggestion from Scott Moser) from the discussion on PR #234.
Signed-off-by: Kurt Garloff <kurt@garloff.de>
Diffstat (limited to 'tests/unittests')
-rw-r--r-- | tests/unittests/test_data.py | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/tests/unittests/test_data.py b/tests/unittests/test_data.py index 74cc26ec..a4261609 100644 --- a/tests/unittests/test_data.py +++ b/tests/unittests/test_data.py @@ -213,6 +213,40 @@ c: d self.assertEqual(1, len(cc)) self.assertEqual('c', cc['a']) + def test_cloud_config_as_x_shell_script(self): + blob_cc = ''' +#cloud-config +a: b +c: d +''' + message_cc = MIMEBase("text", "x-shellscript") + message_cc.set_payload(blob_cc) + + blob_jp = ''' +#cloud-config-jsonp +[ + { "op": "replace", "path": "/a", "value": "c" }, + { "op": "remove", "path": "/c" } +] +''' + + message_jp = MIMEBase('text', "cloud-config-jsonp") + message_jp.set_payload(blob_jp) + + message = MIMEMultipart() + message.attach(message_cc) + message.attach(message_jp) + + self.reRoot() + ci = stages.Init() + ci.datasource = FakeDataSource(str(message)) + ci.fetch() + ci.consume_data() + cc_contents = util.load_file(ci.paths.get_ipath("cloud_config")) + cc = util.load_yaml(cc_contents) + self.assertEqual(1, len(cc)) + self.assertEqual('c', cc['a']) + def test_vendor_user_yaml_cloud_config(self): vendor_blob = ''' #cloud-config |