Add bitmask 0.9.0alpha6 spec file
[bitmask_bundler.git] / fabfile.py
1 #!/usr/bin/env python
2 # encoding: utf-8
3 import json
4 import os
5
6 from fabric.api import task, cd, env, require, run, put
7
8
9 @task
10 def status():
11     """
12     Display some status of the server.
13     """
14     require('tuf_path', 'hosts', 'port', 'user')
15
16     run('whoami')
17
18     run('ls {0}/linux-i386 --color=auto'.format(env.tuf_path))
19     run('ls {0}/linux-x86_64 --color=auto'.format(env.tuf_path))
20
21
22 @task
23 def update():
24     """
25     Update the TUF repo using the specified file name.
26     """
27     require('tuf_path', 'tuf_arch', 'hosts', 'port', 'user', 'repo_file')
28
29     if env.tuf_arch not in ['32', '64']:
30         print "Error: invalid parameter, use 32 or 64."
31         return
32
33     if not os.path.isfile(env.repo_file):
34         print "Error: the file does not exist."
35         return
36
37     if env.tuf_arch == '32':
38         arch = 'linux-i386'
39     else:
40         arch = 'linux-x86_64'
41
42     path = os.path.join(env.tuf_path, arch)
43     print arch, env.repo_file, path
44
45     put(env.repo_file, path)
46
47     with cd(path):
48         # we keep the targets folder until we finish so we can recover it in
49         # case of error
50         run('mv targets targets.old')
51         run('tar xjf {0} --strip-components=1'.format(env.repo_file))
52         # NOTE: Don't copy the root.json file
53         # run('cp -a metadata.staged/root.json metadata/')
54         run('cp -a metadata.staged/targets.json* metadata/')
55         run('cp -a metadata.staged/snapshot.json* metadata/')
56         # '|| true' is a hack to avoid permissions problems
57         run('chmod g+w -f -R metadata.staged/ metadata/timestamp.json || true')
58         run('rm -fr targets.old')
59         run('rm {0}'.format(env.repo_file))
60         # Note: the timestamp is updated by cron
61
62
63 @task(default=True)
64 def help():
65     print 'This script is meant to be used to update a TUF remote remository.'
66     print 'You need to provide a fabfile.json containing server details and '
67     print 'files to update. As an example see the fabfile.json.sample file.'
68     print
69     print 'Note: this assumes that you authenticate using the ssh-agent.'
70     print
71     print 'You should use this as follows:'
72     print '  fab update'
73
74
75 def load_json():
76     """
77     Load a fabfile.json file and add its data to the 'env' dict.
78     """
79     # NOTE hopefully this will be available soon on fabric,
80     # see https://github.com/fabric/fabric/pull/1092
81     try:
82         jdata = None
83         with open('fabfile.json', 'r') as f:
84             jdata = json.load(f)
85
86         env.update(jdata)
87         print "ENV updated"
88     except:
89         print "ENV not updated"
90         pass
91
92
93 # Do this always and as a first task
94 load_json()