~smoser/cloud-init/trunk.new-ds

« back to all changes in this revision

Viewing changes to cloudinit/sources/DataSourceSmartOS.py

  • Committer: Scott Moser
  • Date: 2015-02-11 01:53:20 UTC
  • mfrom: (1052.1.45 py2-3.smoser)
  • Revision ID: smoser@ubuntu.com-20150211015320-049dv6n1mk2in7l1
python3 support.

This gives us functional python3 support.  There are likely
still bugs, but instance boot on openstack is functional now.

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
#       Comments with "@datadictionary" are snippets of the definition
31
31
 
32
32
import base64
 
33
import binascii
 
34
import os
 
35
import serial
 
36
 
33
37
from cloudinit import log as logging
34
38
from cloudinit import sources
35
39
from cloudinit import util
36
 
import os
37
 
import os.path
38
 
import serial
39
40
 
40
41
 
41
42
LOG = logging.getLogger(__name__)
201
202
        if b64_all is not None:
202
203
            self.b64_all = util.is_true(b64_all)
203
204
 
204
 
        for ci_noun, attribute in SMARTOS_ATTRIB_MAP.iteritems():
 
205
        for ci_noun, attribute in SMARTOS_ATTRIB_MAP.items():
205
206
            smartos_noun, strip = attribute
206
207
            md[ci_noun] = self.query(smartos_noun, strip=strip)
207
208
 
218
219
        user_script = os.path.join(data_d, 'user-script')
219
220
        u_script_l = "%s/user-script" % LEGACY_USER_D
220
221
        write_boot_content(md.get('user-script'), content_f=user_script,
221
 
                           link=u_script_l, shebang=True, mode=0700)
 
222
                           link=u_script_l, shebang=True, mode=0o700)
222
223
 
223
224
        operator_script = os.path.join(data_d, 'operator-script')
224
225
        write_boot_content(md.get('operator-script'),
225
 
                           content_f=operator_script, shebang=False, mode=0700)
 
226
                           content_f=operator_script, shebang=False,
 
227
                           mode=0o700)
226
228
 
227
229
        # @datadictionary:  This key has no defined format, but its value
228
230
        # is written to the file /var/db/mdata-user-data on each boot prior
349
351
 
350
352
    if b64:
351
353
        try:
352
 
            return base64.b64decode(resp)
353
 
        except TypeError:
 
354
            return util.b64d(resp)
 
355
        # Bogus input produces different errors in Python 2 and 3; catch both.
 
356
        except (TypeError, binascii.Error):
354
357
            LOG.warn("Failed base64 decoding key '%s'", noun)
355
358
            return resp
356
359
 
368
371
 
369
372
 
370
373
def write_boot_content(content, content_f, link=None, shebang=False,
371
 
                       mode=0400):
 
374
                       mode=0o400):
372
375
    """
373
376
    Write the content to content_f. Under the following rules:
374
377
        1. If no content, remove the file