~smoser/cloud-init/azure_dhcp

« back to all changes in this revision

Viewing changes to cloudinit/user_data.py

  • Committer: Scott Moser
  • Date: 2016-06-21 20:27:02 UTC
  • mto: This revision was merged to the branch mainline in revision 1245.
  • Revision ID: smoser@ubuntu.com-20160621202702-q3khlzw7pc82ttec
user_data: fix error when user-data is not utf-8 decodable

when user-data was not decodable, cloud-init would raise exception.

Show diffs side-by-side

added added

removed removed

Lines of Context:
334
334
 
335
335
 
336
336
# Coverts a raw string into a mime message
337
 
def convert_string(raw_data, headers=None):
 
337
def convert_string(raw_data, content_type=NOT_MULTIPART_TYPE):
338
338
    if not raw_data:
339
339
        raw_data = ''
340
 
    if not headers:
341
 
        headers = {}
342
 
    data = util.decode_binary(util.decomp_gzip(raw_data))
343
 
    if "mime-version:" in data[0:4096].lower():
344
 
        msg = util.message_from_string(data)
345
 
        for (key, val) in headers.items():
346
 
            _replace_header(msg, key, val)
347
 
    else:
348
 
        mtype = headers.get(CONTENT_TYPE, NOT_MULTIPART_TYPE)
349
 
        maintype, subtype = mtype.split("/", 1)
350
 
        msg = MIMEBase(maintype, subtype, *headers)
 
340
 
 
341
    def create_binmsg(data, content_type):
 
342
        maintype, subtype = content_type.split("/", 1)
 
343
        msg = MIMEBase(maintype, subtype)
351
344
        msg.set_payload(data)
 
345
        return msg
 
346
 
 
347
    try:
 
348
        data = util.decode_binary(util.decomp_gzip(raw_data))
 
349
        if "mime-version:" in data[0:4096].lower():
 
350
            msg = util.message_from_string(data)
 
351
        else:
 
352
            msg = create_binmsg(data, content_type)
 
353
    except UnicodeDecodeError:
 
354
        msg = create_binmsg(raw_data, content_type)
 
355
 
352
356
    return msg