1 import SimpleXMLRPCServer
4 dummy_api_addr = ("localhost", 8080)
10 node = {'hostname': 'node'+str(i)+'.dummy-testbed.org', 'type': 'dummy-node', 'node_id': i}
11 nodes_list.append(node)
15 slice = {'slice_name': 'slice'+str(i), 'user_ids': range(i,4,2), 'slice_id': i, 'node_ids': range(i,10,2), 'enabled': True, 'expires': int(time.time())+60*60*24*30}
16 slices_list.append(slice)
20 user = {'user_name': 'user'+str(i), 'user_id': i, 'email': 'user'+str(i)+'@dummy-testbed.org', 'keys': ['user_ssh_pub_key_'+str(i)]}
21 users_list.append(user)
23 DB = {'nodes_list': nodes_list,'node_index': 11, 'slices_list': slices_list, 'slice_index': 3, 'users_list': users_list, 'user_index': 5}
25 #Filter function gor the GET methods
27 def FilterList(myfilter, mylist):
31 for key in myfilter.keys():
35 if isinstance(myfilter[key], str) and myfilter[key] != item[key] or isinstance(myfilter[key], list) and item[key] not in myfilter[key]:
41 # RPC functions definition
44 return {'name': 'dummy', 'longitude': 123456, 'latitude': 654321, 'domain':'dummy-testbed.org'}
46 def GetNodes(filter={}):
49 result.extend(DB['nodes_list'])
50 if 'node_ids' in filter:
51 for node in DB['nodes_list']:
52 if node['node_id'] not in filter['node_ids']:
55 result = FilterList(filter, result)
58 def GetSlices(filter={}):
61 result.extend(DB['slices_list'])
62 if 'slice_ids' in filter:
63 for slice in DB['slices_list']:
64 if slice['slice_id'] not in filter['slice_ids']:
68 result = FilterList(filter, result)
72 def GetUsers(filter={}):
75 result.extend(DB['users_list'])
76 if 'user_ids' in filter:
77 for user in DB['users_list']:
78 if user['user_id'] not in filter['user_ids']:
82 result = FilterList(filter, result)
94 if not isinstance(node, dict):
96 for key in node.keys():
97 if key not in ['hostname', 'type']:
99 node['node_id'] = DB['node_index']
100 DB['node_index'] += 1
101 DB['nodes_list'].append(node)
102 return node['node_id']
106 if not isinstance(slice, dict):
108 for key in slice.keys():
109 if key not in ['slice_name', 'user_ids', 'node_ids', 'enabled', 'expires']:
111 slice['slice_id'] = DB['slice_index']
112 slice['expires'] = int(time.time())+60*60*24*30
113 DB['slice_index'] += 1
114 DB['slices_list'].append(slice)
115 return slice['slice_id']
120 if not isinstance(user, dict):
122 for key in user.keys():
123 if key not in ['user_name', 'email', 'keys']:
125 user['user_id'] = DB['user_index']
126 DB['user_index'] += 1
127 DB['users_list'].append(user)
128 return user['user_id']
131 def AddUserKey(param):
133 if not isinstance(param, dict):
136 for user in DB['users_list']:
137 if param['user_id'] == user['user_id']:
138 if 'keys' in user.keys():
139 user['keys'].append(param['key'])
141 user['keys'] = [param['key']]
147 def AddUserToSlice(param):
149 if not isinstance(param, dict):
152 for slice in DB['slices_list']:
153 if param['slice_id'] == slice['slice_id']:
154 if not 'user_ids' in slice: slice['user_ids'] = []
155 slice['user_ids'].append(param['user_id'])
161 def AddSliceToNodes(param):
163 if not isinstance(param, dict):
166 for slice in DB['slices_list']:
167 if param['slice_id'] == slice['slice_id']:
168 if not 'node_ids' in slice: slice['node_ids'] = []
169 slice['node_ids'].extend(param['node_ids'])
178 def DeleteNode(param):
180 if not isinstance(param, dict):
183 for node in DB['nodes_list']:
184 if param['node_id'] == node['node_id']:
185 DB['nodes_list'].remove(node)
186 for slice in DB['slices_list']:
187 if param['node_id'] in slice['node_ids']:
188 slice['node_ids'].remove(param['node_id'])
195 def DeleteSlice(param):
197 if not isinstance(param, dict):
200 for slice in DB['slices_list']:
201 if param['slice_id'] == slice['slice_id']:
202 DB['slices_list'].remove(slice)
209 def DeleteUser(param):
211 if not isinstance(param, dict):
214 for user in DB['users_list']:
215 if param['user_id'] == user['user_id']:
216 DB['users_list'].remove(user)
217 for slice in DB['slices_list']:
218 if param['user_id'] in slice['user_ids']:
219 slice['user_ids'].remove(param['user_id'])
226 def DeleteKey(param):
228 if not isinstance(param, dict):
231 for user in DB['users_list']:
232 if param['key'] in user['keys']:
233 user['keys'].remove(param['key'])
239 def DeleteUserFromSlice(param):
241 if not isinstance(param, dict):
244 for slice in DB['slices_list']:
245 if param['slice_id'] == slice['slice_id'] and param['user_id'] in slice['user_ids']:
246 slice['user_ids'].remove(param['user_id'])
253 def DeleteSliceFromNodes(param):
255 if not isinstance(param, dict):
258 for slice in DB['slices_list']:
259 if param['slice_id'] == slice['slice_id']:
260 for node_id in param['node_ids']:
261 if node_id in slice['node_ids']: slice['node_ids'].remove(node_id)
270 def UpdateNode(param):
272 if not isinstance(param, dict):
275 for node in DB['nodes_list']:
276 if param['node_id'] == node['node_id']:
277 for key in param['fields'].keys():
278 if key in ['hostname', 'type']:
279 node[key] = param['fields'][key]
286 def UpdateSlice(param):
288 if not isinstance(param, dict):
291 for slice in DB['slices_list']:
292 if param['slice_id'] == slice['slice_id']:
293 for key in param['fields'].keys():
294 if key in ['slice_name']:
295 slice[key] = param['fields'][key]
302 def UpdateUser(param):
304 if not isinstance(param, dict):
307 for user in DB['users_list']:
308 if param['user_id'] == user['user_id']:
309 for key in param['fields'].keys():
310 if key in ['user_name', 'email']:
311 user[key] = param['fields'][key]
320 # Instantiate the XMLRPC server
321 dummy_api_server = SimpleXMLRPCServer.SimpleXMLRPCServer(dummy_api_addr)
323 # RPC functions registration
324 dummy_api_server.register_function(GetTestbedInfo)
325 dummy_api_server.register_function(GetNodes)
326 dummy_api_server.register_function(GetSlices)
327 dummy_api_server.register_function(GetUsers)
328 dummy_api_server.register_function(AddNode)
329 dummy_api_server.register_function(AddSlice)
330 dummy_api_server.register_function(AddUser)
331 dummy_api_server.register_function(AddUserKey)
332 dummy_api_server.register_function(AddUserToSlice)
333 dummy_api_server.register_function(AddSliceToNodes)
334 dummy_api_server.register_function(DeleteNode)
335 dummy_api_server.register_function(DeleteSlice)
336 dummy_api_server.register_function(DeleteUser)
337 dummy_api_server.register_function(DeleteKey)
338 dummy_api_server.register_function(DeleteUserFromSlice)
339 dummy_api_server.register_function(DeleteSliceFromNodes)
340 dummy_api_server.register_function(UpdateNode)
341 dummy_api_server.register_function(UpdateSlice)
342 dummy_api_server.register_function(UpdateUser)
345 # Register Introspective functions
346 dummy_api_server.register_introspection_functions()
349 dummy_api_server.serve_forever()