Mercurial > hg > KCl
comparison kcl/sudo_scp.py @ 0:0f44ee073173 default tip
fake salt, initial commit
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Mon, 06 Feb 2017 01:10:22 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:0f44ee073173 |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 """ | |
4 scp with sudo and magic | |
5 """ | |
6 | |
7 # imports | |
8 import argparse | |
9 import os | |
10 import subprocess | |
11 import sys | |
12 | |
13 from run_cmd import call | |
14 from run_cmd import print_command | |
15 | |
16 | |
17 def main(args=sys.argv[1:]): | |
18 """CLI""" | |
19 | |
20 # parse command line | |
21 parser = argparse.ArgumentParser(description=__doc__) | |
22 parser.add_argument('src') | |
23 parser.add_argument('dest') | |
24 parser.add_argument('host', nargs='*', | |
25 help="hosts to copy to, or stdin if omitted") | |
26 parser.add_argument('-u', '--user', dest='user', | |
27 help="what user should own this file?") | |
28 parser.add_argument('--dry-run', dest='dry_run', | |
29 action='store_true', default=False, | |
30 help="don't actually do anything; just print what would be done") | |
31 options = parser.parse_args(args) | |
32 | |
33 # sanity | |
34 if not os.path.exists(options.src): | |
35 parser.error("'{}' does not exist".format(options.src)) | |
36 | |
37 if options.dry_run: | |
38 call = print_command | |
39 else: | |
40 call = globals()['call'] | |
41 | |
42 basename = os.path.basename(options.src) | |
43 | |
44 TMPDIR = '/tmp' | |
45 | |
46 tmpdest = os.path.join(TMPDIR, basename) | |
47 | |
48 hosts = options.host or sys.stdin.read().strip().split() | |
49 | |
50 | |
51 # copy to all hosts | |
52 for host in hosts: | |
53 call(['scp', options.src, '{host}:{dest}'.format(host=host, dest=tmpdest)], | |
54 stderr=subprocess.PIPE) | |
55 call(['ssh', host, "sudo mv {tmpdest} {dest}".format(tmpdest=tmpdest, dest=options.dest)], | |
56 stderr=subprocess.PIPE) | |
57 if options.user: | |
58 call(['ssh', host, "sudo chown {user} {dest}".format(user=options.user, dest=options.dest)], | |
59 stderr=subprocess.PIPE) | |
60 call(['ssh', host, "sudo chmod a+x {dest}".format(dest=options.dest)], | |
61 stderr=subprocess.PIPE) | |
62 call(['ssh', host, "sudo chmod a+r {dest}".format(dest=options.dest)], | |
63 stderr=subprocess.PIPE) | |
64 | |
65 | |
66 if __name__ == '__main__': | |
67 main() |