~ubuntu-branches/ubuntu/lucid/cloud-init/lucid-updates

« back to all changes in this revision

Viewing changes to cloudinit/util.py

  • Committer: Bazaar Package Importer
  • Author(s): Scott Moser
  • Date: 2010-02-04 03:00:05 UTC
  • Revision ID: james.westby@ubuntu.com-20100204030005-r2y1568be8rbslxo
Tags: upstream-0.5.3
ImportĀ upstreamĀ versionĀ 0.5.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import yaml
 
2
import os
 
3
import errno
 
4
import subprocess
 
5
from Cheetah.Template import Template
 
6
 
 
7
def read_conf(fname):
 
8
        stream = file(fname)
 
9
        conf = yaml.load(stream)
 
10
        stream.close()
 
11
        return conf
 
12
 
 
13
def get_cfg_option_bool(yobj, key, default=False):
 
14
    if not yobj.has_key(key): return default
 
15
    val = yobj[key]
 
16
    if yobj[key] in [ True, '1', 'on', 'yes', 'true']:
 
17
        return True
 
18
    return False
 
19
 
 
20
def get_cfg_option_str(yobj, key, default=None):
 
21
    if not yobj.has_key(key): return default
 
22
    return yobj[key]
 
23
 
 
24
# merge values from src into cand.
 
25
# if src has a key, cand will not override
 
26
def mergedict(src,cand):
 
27
    if isinstance(src,dict) and isinstance(cand,dict):
 
28
        for k,v in cand.iteritems():
 
29
            if k not in src:
 
30
                src[k] = v
 
31
            else:
 
32
                src[k] = mergedict(src[k],v)
 
33
    return src
 
34
 
 
35
def write_file(file,content,mode=0644):
 
36
        try:
 
37
            os.makedirs(os.path.dirname(file))
 
38
        except OSError as e:
 
39
            if e.errno != errno.EEXIST:
 
40
                raise e
 
41
 
 
42
        f=open(file,"wb")
 
43
        os.chmod(file,mode)
 
44
        f.write(content)
 
45
        f.close()
 
46
 
 
47
# get keyid from keyserver
 
48
def getkeybyid(keyid,keyserver):
 
49
   shcmd="""
 
50
   k=${1} ks=${2};
 
51
   exec 2>/dev/null
 
52
   [ -n "$k" ] || exit 1;
 
53
   armour=$(gpg --list-keys --armour "${k}")
 
54
   if [ -z "${armour}" ]; then
 
55
      gpg --keyserver ${ks} --recv $k >/dev/null &&
 
56
         armour=$(gpg --export --armour "${k}") &&
 
57
         gpg --batch --yes --delete-keys "${k}"
 
58
   fi
 
59
   [ -n "${armour}" ] && echo "${armour}"
 
60
   """
 
61
   args=['sh', '-c', shcmd, "export-gpg-keyid", keyid, keyserver]
 
62
   return(subp(args)[0])
 
63
 
 
64
def subp(args, input=None):
 
65
    s_in = None
 
66
    if input is not None:
 
67
        s_in = subprocess.PIPE
 
68
    sp = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=s_in)
 
69
    out,err = sp.communicate(input)
 
70
    if sp.returncode is not 0:
 
71
        raise subprocess.CalledProcessError(sp.returncode,args)
 
72
    return(out,err)
 
73
 
 
74
def render_to_file(template, outfile, searchList):
 
75
    t = Template(file='/etc/cloud/templates/%s.tmpl' % template, searchList=[searchList])
 
76
    f = open(outfile, 'w')
 
77
    f.write(t.respond())
 
78
    f.close()
 
79