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
|
"""
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 base_command
from func.overlord import client
class CopyFile(base_command.BaseCommand):
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")
def handleOptions(self, options):
self.verbose = self.options.verbose
def do(self, args):
if not args:
self.outputUsage()
return
self.server_spec = self.parentCommand.server_spec
self.getOverlord()
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 = self.overlord_obj.run("copyfile", "copyfile", [self.options.remotepath, data,
mode, uid, gid])
|