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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
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
Jeff Hammel <k0scist@gmail.com>
parents: 35
diff changeset
17 from .utils import home
Jeff Hammel <k0scist@gmail.com>
parents: 35
diff changeset
18 from .utils import ip_addresses
Jeff Hammel <k0scist@gmail.com>
parents: 35
diff changeset
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
4f1e45a8656c correct
Jeff Hammel <k0scist@gmail.com>
parents: 21
diff changeset
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
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
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
Jeff Hammel <k0scist@gmail.com>
parents: 35
diff changeset
27 """read configuration `filename`"""
Jeff Hammel <k0scist@gmail.com>
parents: 35
diff changeset
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
743c920bc041 fix password prompt
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
39 # password prompt
743c920bc041 fix password prompt
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
40 truth = dict([(str(i).lower(), i) for i in (True, False)])
743c920bc041 fix password prompt
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
41 password = main.get('password', 'true')
743c920bc041 fix password prompt
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
42 try:
743c920bc041 fix password prompt
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
43 main['password'] = truth[password.lower()]
743c920bc041 fix password prompt
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
44 except KeyError:
743c920bc041 fix password prompt
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
45 raise KeyError("password must be True or False (You gave: '%s')" % password)
743c920bc041 fix password prompt
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
46
42
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
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
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
66 # return configuration
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
67 return {'main': main, 'resources': config}
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
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
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
70 def unify(conf,
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
71 _resources,
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
72 test=False,
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
73 verbose=True,
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
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
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
77 # log function
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
78 def log(message):
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
79 if verbose:
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
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
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
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
743c920bc041 fix password prompt
Jeff Hammel <jhammel@mozilla.com>
parents: 1
diff changeset
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
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
102 log("Hosts:\n%s" % '\n'.join(hosts))
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
103 if not hosts:
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
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
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
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
Jeff Hammel <k0scist@gmail.com>
parents: 20
diff changeset
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
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
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
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
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
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
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
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
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
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
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
5c5edfb827b7 more the things
Jeff Hammel <k0scist@gmail.com>
parents: 15
diff changeset
186 # mirror all the things
42
7d28efc8dfa1 fix + bump
Jeff Hammel <k0scist@gmail.com>
parents: 40
diff changeset
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()