diff options
Diffstat (limited to 'cloudinit/user_data.py')
| -rw-r--r-- | cloudinit/user_data.py | 17 | 
1 files changed, 10 insertions, 7 deletions
| diff --git a/cloudinit/user_data.py b/cloudinit/user_data.py index b11894ce..f7c5787c 100644 --- a/cloudinit/user_data.py +++ b/cloudinit/user_data.py @@ -22,8 +22,6 @@  import os -import email -  from email.mime.base import MIMEBase  from email.mime.multipart import MIMEMultipart  from email.mime.nonmultipart import MIMENonMultipart @@ -51,6 +49,7 @@ INCLUDE_TYPES = ['text/x-include-url', 'text/x-include-once-url']  ARCHIVE_TYPES = ["text/cloud-config-archive"]  UNDEF_TYPE = "text/plain"  ARCHIVE_UNDEF_TYPE = "text/cloud-config" +ARCHIVE_UNDEF_BINARY_TYPE = "application/octet-stream"  # This seems to hit most of the gzip possible content types.  DECOMP_TYPES = [ @@ -237,9 +236,9 @@ class UserDataProcessor(object):                  resp = util.read_file_or_url(include_url,                                               ssl_details=self.ssl_details)                  if include_once_on and resp.ok(): -                    util.write_file(include_once_fn, resp, mode=0o600) +                    util.write_file(include_once_fn, resp.contents, mode=0o600)                  if resp.ok(): -                    content = str(resp) +                    content = resp.contents                  else:                      LOG.warn(("Fetching from %s resulted in"                                " a invalid http code of %s"), @@ -267,11 +266,15 @@ class UserDataProcessor(object):              content = ent.get('content', '')              mtype = ent.get('type')              if not mtype: -                mtype = handlers.type_from_starts_with(content, -                                                       ARCHIVE_UNDEF_TYPE) +                default = ARCHIVE_UNDEF_TYPE +                if isinstance(content, six.binary_type): +                    default = ARCHIVE_UNDEF_BINARY_TYPE +                mtype = handlers.type_from_starts_with(content, default)              maintype, subtype = mtype.split('/', 1)              if maintype == "text": +                if isinstance(content, six.binary_type): +                    content = content.decode()                  msg = MIMEText(content, _subtype=subtype)              else:                  msg = MIMEBase(maintype, subtype) @@ -338,7 +341,7 @@ def convert_string(raw_data, headers=None):          headers = {}      data = util.decode_binary(util.decomp_gzip(raw_data))      if "mime-version:" in data[0:4096].lower(): -        msg = email.message_from_string(data) +        msg = util.message_from_string(data)          for (key, val) in headers.items():              _replace_header(msg, key, val)      else: | 
