~canonical-ci-engineering/uci-engine/trunk

« back to all changes in this revision

Viewing changes to charms/precise/system-image-server/hooks/hooks.py

  • Committer: Ubuntu CI Bot
  • Author(s): Celso Providelo
  • Date: 2015-01-07 14:33:28 UTC
  • mfrom: (911.1.8 charms-cleanup)
  • Revision ID: ubuntu_ci_bot-20150107143328-q0d037ojtopm3n9d
Removing the charms from UCI-E since they live in isolated branches now and also adjusting the run-tests to stop loading/running charm tests.

Updating local j-d copy to trunk (r126) for proper support for charm branch pinning. [r=Evan Dandrea]

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/env python
2
 
 
3
 
import os
4
 
import shutil
5
 
import subprocess
6
 
import sys
7
 
 
8
 
import charmhelpers.fetch
9
 
from charmhelpers.core.hookenv import log, config, relation_set
10
 
 
11
 
 
12
 
def _service_dir(charmconfig):
13
 
    unit = os.environ['JUJU_UNIT_NAME'].split('/')[0]
14
 
    for x in (':', '-', '/', '"', "'"):
15
 
        unit = unit.replace(x, '_')
16
 
    return os.path.join(charmconfig['install_root'], unit)
17
 
 
18
 
 
19
 
def _install_from_tarball(charmconfig, upgrade):
20
 
    #Do we need this?
21
 
    pass
22
 
 
23
 
 
24
 
def _install_from_bzr(charmconfig, upgrade):
25
 
    log('grabbing service from bzr...', 'INFO')
26
 
    sdir = _service_dir(charmconfig)
27
 
    rev = charmconfig.get('revno', '')
28
 
 
29
 
    if upgrade:
30
 
        args = ['bzr', 'pull']
31
 
        if rev:
32
 
            args.extend(['-r', rev])
33
 
        subprocess.check_call(args, cwd=sdir)
34
 
        return
35
 
    if os.path.exists(sdir):
36
 
        log('deleting pre-existing service directory: {}'.format(sdir),
37
 
            'INFO')
38
 
        shutil.rmtree(sdir)
39
 
 
40
 
    args = ['bzr', 'branch']
41
 
    if rev:
42
 
        args.extend(['-r', rev])
43
 
    args.append(charmconfig['branch'])
44
 
    args.append(sdir)
45
 
    subprocess.check_call(args)
46
 
 
47
 
 
48
 
def _write_system_image_config(charmconfig):
49
 
    sdir = _service_dir(charmconfig)
50
 
    config_file = os.path.join(sdir, 'etc', 'config')
51
 
    from jinja2 import Environment, FileSystemLoader
52
 
    template_env = Environment(loader=FileSystemLoader(os.path.join(
53
 
        os.environ['CHARM_DIR'], 'data')))
54
 
    svars = {
55
 
        'base_path': sdir,
56
 
    }
57
 
    template = template_env.get_template('config.tmpl').render(svars)
58
 
    log("Writing system-image config to {}".format(config_file), 'INFO')
59
 
    with open(config_file, 'w') as conf:
60
 
        conf.write(str(template))
61
 
 
62
 
 
63
 
def _create_stable_channel(charmconfig):
64
 
    log('creating stable channel...', 'INFO')
65
 
    libpath = os.path.join(_service_dir(charmconfig), 'lib')
66
 
    if libpath not in sys.path:
67
 
        sys.path.insert(0, libpath)
68
 
 
69
 
    from systemimage import tree, config as si_config
70
 
    conf = si_config.Config()
71
 
    pub = tree.Tree(conf)
72
 
    pub.create_channel('stable')
73
 
    pub.create_device('stable', 'mako')
74
 
    for keyring in ("archive-master", "image-master", "image-signing"):
75
 
        pub.publish_keyring(keyring)
76
 
 
77
 
 
78
 
def _generate_keys(charmconfig):
79
 
    log('generating keys...', 'INFO')
80
 
    #haveged is just an entropy generator
81
 
    subprocess.check_output(['haveged'])
82
 
    srvdir = _service_dir(charmconfig)
83
 
    #the system-image tools unfortunately really want to run from this dir
84
 
    os.chdir(srvdir)
85
 
    out = subprocess.check_output(['{}/tests/generate-keys'.format(srvdir)])
86
 
    log(out, 'INFO')
87
 
    #copy the keys we just generated into the proper location
88
 
    shutil.rmtree('{}/secret/gpg/keys/'.format(srvdir))
89
 
    shutil.copytree('{}/tests/keys'.format(srvdir), '{}/secret/gpg/keys/'.format(srvdir))
90
 
    subprocess.check_output(['{}/bin/generate-keyrings'.format(srvdir)])
91
 
    log(out, 'INFO')
92
 
 
93
 
 
94
 
def install(charmconfig, upgrade=False):
95
 
    pkgs = ['bzr', 'abootimg', 'android-tools-fsutils', 'python-gnupg',
96
 
            'python-gpgme', 'fakeroot', 'pxz', 'pep8', 'pyflakes',
97
 
            'python-mock', 'haveged']
98
 
    log('installing apt packages...', 'INFO')
99
 
    charmhelpers.fetch.configure_sources(update=True)
100
 
    charmhelpers.fetch.apt_install(pkgs)
101
 
 
102
 
    if charmconfig.get('vcs') == 'tarball':
103
 
        _install_from_tarball(charmconfig, upgrade)
104
 
    else:
105
 
        _install_from_bzr(charmconfig, upgrade)
106
 
 
107
 
    _write_system_image_config(charmconfig)
108
 
    _generate_keys(charmconfig)
109
 
    _create_stable_channel(charmconfig)
110
 
 
111
 
 
112
 
def website_relation_joined(charmconfig):
113
 
    host = subprocess.check_output(['unit-get', 'private-address']).strip()
114
 
    relation_set(None, {'port': charmconfig["port"], 'hostname': host})
115
 
 
116
 
 
117
 
def website_relation_changed(charmconfig):
118
 
    return website_relation_joined(charmconfig)
119
 
 
120
 
 
121
 
def website_relation_broken(charmconfig):
122
 
    pass
123
 
 
124
 
 
125
 
def main():
126
 
    hook = os.path.basename(sys.argv[0])
127
 
    log("Running hook: {}".format(hook), 'INFO')
128
 
 
129
 
    hook_py = hook.replace('-', '_')
130
 
    funcs = globals()
131
 
    if hook_py not in funcs:
132
 
        print("Unknown hook: {}".format(hook))
133
 
        return 1
134
 
 
135
 
    charmconfig = config()
136
 
    try:
137
 
        return funcs[hook_py](charmconfig)
138
 
    except subprocess.CalledProcessError as e:
139
 
        log('Error running: {}: {}'.format(e.cmd, e.output), 'INFO')
140
 
        return e.returncode
141
 
 
142
 
 
143
 
def start(charmconfig):
144
 
    pass
145
 
 
146
 
 
147
 
def stop(charmconfig):
148
 
    pass
149
 
 
150
 
 
151
 
def upgrade_charm(charmconfig):
152
 
    install(charmconfig, True)
153
 
    start(charmconfig)
154
 
 
155
 
if __name__ == '__main__':
156
 
    sys.exit(main())