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