1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
"""
copyfile command line
Copyright 2007, Red Hat, Inc
see AUTHORS
This software may be freely redistributed under the terms of the GNU
general public license.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
"""
import optparse
import os
import pprint
import stat
import xmlrpclib
from func.overlord import command
from func.overlord import client
DEFAULT_PORT = 51234
class CopyFile(client.command.Command):
name = "copyfile"
usage = "copy a file to a client"
def addOptions(self):
self.parser.add_option("-f", "--file", dest="filename",
action="store")
self.parser.add_option("", "--remotepath", dest="remotepath",
action="store")
self.parser.add_option("", "--force", dest="force",
action="store_true")
self.parser.add_option("-v", "--verbose", dest="verbose",
action="store_true")
self.parser.add_option("-p", "--port", dest="port")
def handleOptions(self, options):
self.port = DEFAULT_PORT
if self.options.port:
self.port = self.options.port
def do(self, args):
self.server_spec = self.parentCommand.server_spec
client_obj = client.Client(self.server_spec,
port=self.port,
interactive=False,
verbose=self.options.verbose,
config=self.config)
try:
fb = open(self.options.filename, "r").read()
except IOError, e:
print "Unable to open file: %s: %s" % (self.options.filename, e)
return
st = os.stat(self.options.filename)
mode = stat.S_IMODE(st.st_mode)
uid = st.st_uid
gid = st.st_gid
data = xmlrpclib.Binary(fb)
results = client_obj.run("copyfile", "copyfile", [self.options.remotepath, data,
mode, uid, gid])
|