Mercurial > hg > silvermirror
annotate silvermirror/unify.py @ 42:7d28efc8dfa1
fix + bump
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Thu, 23 Feb 2017 09:35:11 -0800 |
parents | d081ca2e8696 |
children | 436d8e5ea294 |
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 |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
3 """ |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
4 unify virtual filesystems |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
5 """ |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
6 |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
7 import argparse |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
8 import getpass |
42 | 9 import json |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
10 import os |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
11 import socket |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
12 import subprocess |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
13 import sys |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
14 from martini.config import ConfigMunger |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
15 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
|
16 from pprint import pprint |
40 | 17 from .utils import home |
18 from .utils import ip_addresses | |
19 | |
0
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 make_config(filename): |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
22 # XXX needed? |
23 | 23 raise NotImplementedError('Need to specify a config file, like\n~/.silvermirror') |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
24 |
20 | 25 |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
26 def read_config(filename): |
40 | 27 """read configuration `filename`""" |
28 | |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
29 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
|
30 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
31 ### main configuration |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
32 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
|
33 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
|
34 main['basedir'] = home() |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
35 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
|
36 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
|
37 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
|
38 |
15 | 39 # password prompt |
40 truth = dict([(str(i).lower(), i) for i in (True, False)]) | |
41 password = main.get('password', 'true') | |
42 try: | |
43 main['password'] = truth[password.lower()] | |
44 except KeyError: | |
45 raise KeyError("password must be True or False (You gave: '%s')" % password) | |
46 | |
42 | 47 # resources |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
48 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
|
49 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
50 # directory of resource |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
51 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
|
52 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
|
53 # 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
|
54 # 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
|
55 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
|
56 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
|
57 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
58 # 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
|
59 # 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
|
60 # - 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
|
61 ignore = main['ignore'][:] |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
62 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
|
63 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
|
64 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
|
65 |
42 | 66 # return configuration |
67 return {'main': main, 'resources': config} | |
68 | |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
69 |
42 | 70 def unify(conf, |
71 _resources, | |
72 test=False, | |
73 verbose=True, | |
74 notification_prefix='\n*** SilverMirror; '): | |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
75 """unify virtual filesystems given configuration""" |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
76 |
20 | 77 # log function |
78 def log(message): | |
79 if verbose: | |
80 print ("%s%s" % (notification_prefix, message)) | |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
81 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
82 # passwords |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
83 pw = {} |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
84 |
20 | 85 # determine hosts to sync with |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
86 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
|
87 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
|
88 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
|
89 _hosts = [] |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
90 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
|
91 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
|
92 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
|
93 if test: |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
94 print ('Resolving %s' % host) |
15 | 95 try: |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
96 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
|
97 s.close() |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
98 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
|
99 continue |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
100 _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
|
101 hosts = _hosts |
20 | 102 log("Hosts:\n%s" % '\n'.join(hosts)) |
103 if not hosts: | |
104 raise AssertionError("No hosts specified") | |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
105 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
106 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
|
107 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
|
108 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
|
109 # 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
|
110 # 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
|
111 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
112 ### 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
|
113 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
|
114 resources = conf['resources'] |
42 | 115 if (resources is None) or ('all' not in _resources): |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
116 if _resources: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
117 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
|
118 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
|
119 else: |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
120 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
|
121 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
|
122 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
|
123 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
|
124 break |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
125 if test: |
21 | 126 log("Resources:\n") |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
127 pprint(resources) |
42 | 128 return |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
129 |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
130 # choose reflector backend |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
131 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
|
132 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
|
133 |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
134 # sync with hosts |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
135 try: |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
136 os.chdir(conf['main']['basedir']) |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
137 for index, resource in enumerate(resources): |
20 | 138 |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
139 # echo resource |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
140 log("syncing:'%s' [%d/%d]" % (resource, index+1, len(resources))) |
20 | 141 |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
142 # loop over hosts |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
143 for host in hosts: |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
144 reflector.sync(host, resource, resources[resource]['ignore'], pw.get('host'), test) |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
145 finally: |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
146 os.chdir(cwd) |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
147 |
42 | 148 |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
149 def main(args=sys.argv[1:]): |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
150 """CLI""" |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
151 |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
152 # parse command line |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
153 parser = argparse.ArgumentParser(description=__doc__) |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
154 parser.add_argument('-c', '--config') |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
155 parser.add_argument('-H', '--host', dest='hosts', action='append', |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
156 help="hosts to sync with") |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
157 parser.add_argument('--no-password', dest='password', |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
158 action='store_false', default=True) |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
159 parser.add_argument('--test', dest='test', |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
160 action='store_true', default=False) |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
161 parser.add_argument('-v', '--verbose', |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
162 action='store_true', default=False) |
42 | 163 parser.add_argument('resources', nargs='*', default=None, |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
164 help="resources to sync, or all if omitted") |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
165 options = parser.parse_args(args) |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
166 |
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
167 |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
168 # configuration |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
169 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
|
170 if options.config: |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
171 if not os.path.exists(options.config): |
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
172 parser.error("Configuration file '" + options.config + "' does not exist") |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
173 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
|
174 else: |
35
e86d475435ee
use argparse and try to diagnose strange error
Jeff Hammel <k0scist@gmail.com>
parents:
23
diff
changeset
|
175 for i in (user_conf, '/etc/silvermirror'): |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
176 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
|
177 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
|
178 break |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
179 else: |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
180 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
|
181 |
1
9b139702a8f9
use a real backend architecture with an inteface and vastly simplify unify.py
k0s <k0scist@gmail.com>
parents:
0
diff
changeset
|
182 # 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
|
183 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
|
184 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
|
185 |
20 | 186 # mirror all the things |
42 | 187 unify(conf, options.resources, test=options.test, verbose=options.verbose) |
0
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
188 |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
189 if __name__ == '__main__': |
abb358e2434c
initial commit of silvermirror, from http://my-svn.assembla.com/svn/arbez/silvermirror
k0s <k0scist@gmail.com>
parents:
diff
changeset
|
190 unify() |