change AdmAuthCheck to AuthCheck
[sfa.git] / util / remoteshell.py
1 # remoteshell.py
2 #
3 # interface to the PLC api via xmlrpc
4 #
5 # RemoteShell() exports an API that looks identical to that exported by
6 # PLC.Shell.Shell(). It's meant to be a drop in replacement for running
7 # geniwrapper on a different machine than PLC.
8
9 import xmlrpclib
10
11 class RemoteShell:
12     def __init__(self):
13         self.servers = {}
14
15     def get_default_opts(self):
16         dict = {}
17         dict['Role'] = "user"
18         dict['Url'] = "https://www.planet-lab.org:443/PLCAPI/"
19         return dict
20
21     def call(self, name, pl_auth, *args):
22         auth_opts = self.get_default_opts().copy()
23         auth_opts.update(pl_auth)
24
25         url = auth_opts["Url"]
26         key = url + "#" + auth_opts["Username"]
27
28         if not (key in self.servers):
29             server = xmlrpclib.Server(url, verbose = 0, allow_none=True)
30             #server.AdmAuthCheck(auth_opts)
31             server.AuthCheck(auth_opts)
32             self.servers[key] = server
33
34         server = self.servers[key]
35
36         arglist = ["auth_opts"]
37         for arg in args:
38             arglist.append(repr(arg))
39
40         str = "server." + name + "(" + ",".join(arglist) + ")"
41         result = eval(str)
42
43         return result
44
45     # TODO: there's probably an automatic way to import all these stubs
46
47     def AddInitScript(self, pl_auth, *args):
48         return self.call("AddInitScript", pl_auth, *args)
49
50     def AddNode(self, pl_auth, *args):
51         return self.call("AddNode", pl_auth, *args)
52
53     def AddPerson(self, pl_auth, *args):
54         return self.call("AddPerson", pl_auth, *args)
55
56     def AddSite(self, pl_auth, *args):
57         return self.call("AddSite", pl_auth, *args)
58
59     def AddSlice(self, pl_auth, *args):
60         return self.call("AddSlice", pl_auth, *args)
61
62     def DeleteNode(self, pl_auth, *args):
63         return self.call("DeleteNode", pl_auth, *args)
64
65     def DeletePerson(self, pl_auth, *args):
66         return self.call("DeletePerson", pl_auth, *args)
67
68     def DeleteSite(self, pl_auth, *args):
69         return self.call("DeleteSite", pl_auth, *args)
70
71     def DeleteSlice(self, pl_auth, *args):
72         return self.call("DeleteSlice", pl_auth, *args)
73
74     def GetInitScripts(self, pl_auth, *args):
75         return self.call("GetInitScripts", pl_auth, *args)
76
77     def GetKeys(self, pl_auth, *args):
78         return self.call("GetKeys", pl_auth, *args)
79
80     def GetNodes(self, pl_auth, *args):
81         return self.call("GetNodes", pl_auth, *args)
82
83     def GetPersons(self, pl_auth, *args):
84         return self.call("GetPersons", pl_auth, *args)
85
86     def GetSites(self, pl_auth, *args):
87         return self.call("GetSites", pl_auth, *args)
88
89     def GetSliceAttributes(self, pl_auth, *args):
90         return self.call("GetSliceAttributes", pl_auth, *args)
91
92     def GetSlices(self, pl_auth, *args):
93         return self.call("GetSlices", pl_auth, *args)
94
95     def UpdateNode(self, pl_auth, *args):
96         return self.call("UpdateNode", pl_auth, *args)
97
98     def UpdatePerson(self, pl_auth, *args):
99         return self.call("UpdatePerson", pl_auth, *args)
100
101     def UpdateSite(self, pl_auth, *args):
102         return self.call("UpdateSite", pl_auth, *args)
103
104     def UpdateSlice(self, pl_auth, *args):
105         return self.call("UpdateSlice", pl_auth, *args)
106
107