diff options
Diffstat (limited to 'debian/patches/cpick-40e7738-GCE-fix-reading-of-user-data-that-is-not-base64-encoded')
-rw-r--r-- | debian/patches/cpick-40e7738-GCE-fix-reading-of-user-data-that-is-not-base64-encoded | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/debian/patches/cpick-40e7738-GCE-fix-reading-of-user-data-that-is-not-base64-encoded b/debian/patches/cpick-40e7738-GCE-fix-reading-of-user-data-that-is-not-base64-encoded deleted file mode 100644 index 530cd453..00000000 --- a/debian/patches/cpick-40e7738-GCE-fix-reading-of-user-data-that-is-not-base64-encoded +++ /dev/null @@ -1,88 +0,0 @@ -From 40e77380e036a24fafe91a63d0cdefada4312348 Mon Sep 17 00:00:00 2001 -From: Scott Moser <smoser@ubuntu.com> -Date: Thu, 1 Mar 2018 15:39:16 -0700 -Subject: [PATCH] GCE: fix reading of user-data that is not base64 encoded. - -Last set of changes to GCE datasource broke reading of user-data -unless the user had base64 encoded their user-data and also set -user-data-encoding to 'base64'. - -This fixes the issue. - -LP: #1752711 ---- - cloudinit/sources/DataSourceGCE.py | 15 +++++++-------- - tests/unittests/test_datasource/test_gce.py | 20 +++++++++++++++++++- - 2 files changed, 26 insertions(+), 9 deletions(-) - -Index: cloud-init/cloudinit/sources/DataSourceGCE.py -=================================================================== ---- cloud-init.orig/cloudinit/sources/DataSourceGCE.py -+++ cloud-init/cloudinit/sources/DataSourceGCE.py -@@ -213,16 +213,15 @@ def read_md(address=None, platform_check - if md['availability-zone']: - md['availability-zone'] = md['availability-zone'].split('/')[-1] - -- encoding = instance_data.get('user-data-encoding') -- if encoding: -+ if 'user-data' in instance_data: -+ # instance_data was json, so values are all utf-8 strings. -+ ud = instance_data['user-data'].encode("utf-8") -+ encoding = instance_data.get('user-data-encoding') - if encoding == 'base64': -- md['user-data'] = b64decode(instance_data.get('user-data')) -- else: -+ ud = b64decode(ud) -+ elif encoding: - LOG.warning('unknown user-data-encoding: %s, ignoring', encoding) -- -- if 'user-data' in md: -- ret['user-data'] = md['user-data'] -- del md['user-data'] -+ ret['user-data'] = ud - - ret['meta-data'] = md - ret['success'] = True -Index: cloud-init/tests/unittests/test_datasource/test_gce.py -=================================================================== ---- cloud-init.orig/tests/unittests/test_datasource/test_gce.py -+++ cloud-init/tests/unittests/test_datasource/test_gce.py -@@ -38,11 +38,20 @@ GCE_META_ENCODING = { - 'instance/hostname': 'server.project-baz.local', - 'instance/zone': 'baz/bang', - 'instance/attributes': { -- 'user-data': b64encode(b'/bin/echo baz\n').decode('utf-8'), -+ 'user-data': b64encode(b'#!/bin/echo baz\n').decode('utf-8'), - 'user-data-encoding': 'base64', - } - } - -+GCE_USER_DATA_TEXT = { -+ 'instance/id': '12345', -+ 'instance/hostname': 'server.project-baz.local', -+ 'instance/zone': 'baz/bang', -+ 'instance/attributes': { -+ 'user-data': '#!/bin/sh\necho hi mom\ntouch /run/up-now\n', -+ } -+} -+ - HEADERS = {'Metadata-Flavor': 'Google'} - MD_URL_RE = re.compile( - r'http://metadata.google.internal/computeMetadata/v1/.*') -@@ -135,7 +144,16 @@ class TestDataSourceGCE(test_helpers.Htt - shostname = GCE_META_PARTIAL.get('instance/hostname').split('.')[0] - self.assertEqual(shostname, self.ds.get_hostname()) - -+ def test_userdata_no_encoding(self): -+ """check that user-data is read.""" -+ _set_mock_metadata(GCE_USER_DATA_TEXT) -+ self.ds.get_data() -+ self.assertEqual( -+ GCE_USER_DATA_TEXT['instance/attributes']['user-data'].encode(), -+ self.ds.get_userdata_raw()) -+ - def test_metadata_encoding(self): -+ """user-data is base64 encoded if user-data-encoding is 'base64'.""" - _set_mock_metadata(GCE_META_ENCODING) - self.ds.get_data() - |