Mercurial > hg > silvermirror
annotate silvermirror/unify.py @ 13:584a847d2491
note on FF sync
author | Jeff Hammel <jhammel@mozilla.com> |
---|---|
date | Sat, 09 Apr 2011 12:10:19 -0700 |
parents | 9b139702a8f9 |
children | 743c920bc041 |
rev | line source |
---|---|
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
1 #!/usr/bin/env python |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
2 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
3 import getpass |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
4 import os |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
5 import pexpect |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
6 import socket |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
7 import subprocess |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
8 import sys |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
9 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
10 from martini.config import ConfigMunger |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
11 from optparse import OptionParser |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
12 from pkg_resources import iter_entry_points |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
13 from pprint import pprint |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
14 from utils import home |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
15 from utils import ip_addresses |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
16 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
17 def make_config(filename): |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
18 # XXX needed? |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
19 raise NotImplementedError('Need to specify a config file, like\n~/silvermirror/silvermirror.ini') |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
20 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
21 def read_config(filename): |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
22 config = ConfigMunger(filename).dict() |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
23 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
24 ### main configuration |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
25 main = config.pop('::SilverMirror::', {}) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
26 if not main.get('basedir'): |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
27 main['basedir'] = home() |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
28 main['ignore'] = main.get('ignore', '').split() # patterns to ignore - not used |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
29 main['hosts'] = main.get('hosts', '').split() |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
30 main['password'] = main.get('password', 'true') # XXX not used |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
31 main['timeout'] = float(main.get('timeout', '10.')) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
32 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
33 ### resources |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
34 for resource in config: |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
35 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
36 # directory of resource |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
37 directory = config[resource].get('directory', resource) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
38 if not os.path.isabs(directory): |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
39 # XXX note: absolute directories will not work for now |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
40 # XXX so....don't do this! |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
41 directory = os.path.join(main['basedir'], directory) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
42 config[resource]['directory'] = directory.rstrip(os.path.sep) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
43 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
44 # per-resource files to ignore |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
45 # XXX regexps for now (see `man unison`) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
46 # - this is bad as whitespace patterns cannot be ignored |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
47 ignore = main['ignore'][:] |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
48 if config[resource].has_key('ignore'): |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
49 ignore += config[resource]['ignore'].split() |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
50 config[resource]['ignore'] = ignore |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
51 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
52 ### |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
53 config = { 'main': main, 'resources': config } |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
54 return config |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
55 |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
56 def unify(conf, _resources, test=False): |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
57 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
58 # passwords |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
59 pw = {} |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
60 |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
61 # XXX needed for now |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
62 assert conf['main']['basedir'] == home() |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
63 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
64 ### determine hosts to sync with |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
65 hosts = conf['hosts'] |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
66 addresses = ip_addresses().values() |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
67 hosts = hosts.difference(addresses) # don't sync with self |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
68 _hosts = [] |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
69 for host in hosts: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
70 s = socket.socket() |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
71 s.settimeout(conf['main']['timeout']) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
72 if test: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
73 print 'Resolving %s' % host |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
74 try: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
75 s.connect((host, 22)) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
76 s.close() |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
77 except (socket.gaierror, socket.timeout, socket.error): |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
78 continue |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
79 _hosts.append(host) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
80 hosts = _hosts |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
81 if test: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
82 print 'Hosts:' |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
83 for host in hosts: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
84 print host |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
85 assert hosts |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
86 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
87 if conf['main']['password']: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
88 for host in hosts: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
89 pw[host] = getpass.getpass('Enter password for %s: ' % host) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
90 # TODO: ensure that the hosts are resolvable |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
91 # XXX: hosts should actually be manageable on a per-resource basis |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
92 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
93 ### determine resources to sync |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
94 cwd = os.path.realpath(os.getcwd()) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
95 resources = conf['resources'] |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
96 if 'all' not in _resources: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
97 if _resources: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
98 resources = dict([(key, value) for key, value in resources.items() |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
99 if key in _resources]) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
100 else: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
101 for key, value in resources.items(): |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
102 directory = os.path.realpath(value['directory']) + os.sep |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
103 if (cwd + os.sep).startswith(directory): |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
104 resources = { key: value } |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
105 break |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
106 if test: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
107 print 'Resources:' |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
108 pprint(resources) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
109 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
110 ### choose reflector backend |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
111 reflectors = dict([(i.name, i.load()) for i in iter_entry_points('silvermirror.reflectors')]) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
112 reflector = reflectors['unison']() # only one right now |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
113 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
114 ### sync with hosts |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
115 os.chdir(conf['main']['basedir']) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
116 for resource in resources: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
117 for host in hosts: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
118 reflector.sync(host, resource, resources[resource]['ignore'], pw, test) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
119 os.chdir(cwd) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
120 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
121 def main(args=sys.argv[1:]): |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
122 |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
123 ### command line options |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
124 parser = OptionParser() |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
125 parser.add_option('-c', '--config') |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
126 parser.add_option('-H', '--host', dest='hosts', |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
127 action='append', default=None) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
128 parser.add_option('--no-password', dest='password', |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
129 action='store_false', default=True) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
130 parser.add_option('--test', dest='test', |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
131 action='store_true', default=False) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
132 (options, args) = parser.parse_args() |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
133 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
134 |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
135 ### configuration |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
136 user_conf = os.path.join(home(), '.silvermirror') |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
137 if options.config: |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
138 assert os.path.exists(options.config) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
139 conf = read_config(options.config) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
140 else: |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
141 for i in user_conf, '/etc/silvermirror': |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
142 if os.path.exists(i): |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
143 conf = read_config(i) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
144 break |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
145 else: |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
146 conf = make_config(user_conf) |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
147 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
148 # XXX needed for now |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
149 assert conf['main']['basedir'] == home() |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
150 |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
151 # fix up configuration from command line options |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
152 conf['hosts'] = set(options.hosts or conf['main']['hosts']) |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
153 conf['main']['password'] = options.password and conf['main']['password'] |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
154 |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
155 unify(conf, args, options.test) |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
156 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
157 if __name__ == '__main__': |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
158 unify() |