~ubuntu-branches/ubuntu/quantal/cloud-init/quantal

« back to all changes in this revision

Viewing changes to cloudinit/util.py

  • Committer: Package Import Robot
  • Author(s): Scott Moser
  • Date: 2012-09-30 14:29:04 UTC
  • Revision ID: package-import@ubuntu.com-20120930142904-nq8fkve62i0xytqz
* add CloudStack to DataSources listed by dpkg-reconfigure (LP: #1002155)
* New upstream snapshot.
  * 0440 permissions on /etc/sudoers.d files rather than 0644
  * get host ssh keys to the console (LP: #1055688)
  * MAAS DataSource adjust timestamp in oauth header to one based on the
    timestamp in the response of a 403.  This accounts for a bad local
    clock. (LP: #978127)
  * re-start the salt daemon rather than start to ensure config changes
    are taken.
  * allow for python unicode types in yaml that is loaded.
  * cleanup in how config modules get at users and groups.

Show diffs side-by-side

added added

removed removed

Lines of Context:
50
50
 
51
51
from cloudinit import importer
52
52
from cloudinit import log as logging
 
53
from cloudinit import safeyaml
53
54
from cloudinit import url_helper as uhelp
54
55
 
55
56
from cloudinit.settings import (CFG_BUILTIN)
248
249
            raise
249
250
 
250
251
 
 
252
# Merges X lists, and then keeps the
 
253
# unique ones, but orders by sort order
 
254
# instead of by the original order
 
255
def uniq_merge_sorted(*lists):
 
256
    return sorted(uniq_merge(*lists))
 
257
 
 
258
 
 
259
# Merges X lists and then iterates over those
 
260
# and only keeps the unique items (order preserving)
 
261
# and returns that merged and uniqued list as the
 
262
# final result.
 
263
#
 
264
# Note: if any entry is a string it will be
 
265
# split on commas and empty entries will be
 
266
# evicted and merged in accordingly.
 
267
def uniq_merge(*lists):
 
268
    combined_list = []
 
269
    for a_list in lists:
 
270
        if isinstance(a_list, (str, basestring)):
 
271
            a_list = a_list.strip().split(",")
 
272
            # Kickout the empty ones
 
273
            a_list = [a for a in a_list if len(a)]
 
274
        combined_list.extend(a_list)
 
275
    uniq_list = []
 
276
    for i in combined_list:
 
277
        if i not in uniq_list:
 
278
            uniq_list.append(i)
 
279
    return uniq_list
 
280
 
 
281
 
251
282
def clean_filename(fn):
252
283
    for (k, v) in FN_REPLACEMENTS.iteritems():
253
284
        fn = fn.replace(k, v)
612
643
        LOG.debug(("Attempting to load yaml from string "
613
644
                 "of length %s with allowed root types %s"),
614
645
                 len(blob), allowed)
615
 
        converted = yaml.safe_load(blob)
 
646
        converted = safeyaml.load(blob)
616
647
        if not isinstance(converted, allowed):
617
648
            # Yes this will just be caught, but thats ok for now...
618
649
            raise TypeError(("Yaml load allows %s root types,"
1104
1135
        return digest
1105
1136
 
1106
1137
 
 
1138
def is_user(name):
 
1139
    try:
 
1140
        if pwd.getpwnam(name):
 
1141
            return True
 
1142
    except KeyError:
 
1143
        return False
 
1144
 
 
1145
 
 
1146
def is_group(name):
 
1147
    try:
 
1148
        if grp.getgrnam(name):
 
1149
            return True
 
1150
    except KeyError:
 
1151
        return False
 
1152
 
 
1153
 
1107
1154
def rename(src, dest):
1108
1155
    LOG.debug("Renaming %s to %s", src, dest)
1109
1156
    # TODO(harlowja) use a se guard here??