1 import SimpleXMLRPCServer
4 dummy_api_addr = ("localhost", 8080)
10 node = {'hostname': 'node' +
11 str(i) + '.dummy-testbed.org', 'type': 'dummy-node', 'node_id': i}
12 nodes_list.append(node)
16 slice = {'slice_name': 'slice' + str(i),
17 'user_ids': range(i, 4, 2),
19 'node_ids': range(i, 10, 2),
21 'expires': int(time.time()) + 60 * 60 * 24 * 30}
22 slices_list.append(slice)
26 user = {'user_name': 'user' + str(i), 'user_id': i, 'email': 'user' + str(
27 i) + '@dummy-testbed.org', 'keys': ['user_ssh_pub_key_' + str(i)]}
28 users_list.append(user)
30 DB = {'nodes_list': nodes_list, 'node_index': 11, 'slices_list': slices_list,
31 'slice_index': 3, 'users_list': users_list, 'user_index': 5}
33 # Filter function gor the GET methods
36 def FilterList(myfilter, mylist):
40 for key in myfilter.keys():
44 if isinstance(myfilter[key], str) and myfilter[key] != item[key] or isinstance(myfilter[key], list) and item[key] not in myfilter[key]:
50 # RPC functions definition
53 return {'name': 'dummy', 'longitude': 123456, 'latitude': 654321, 'domain': 'dummy-testbed.org'}
56 def GetNodes(filter=None):
61 result.extend(DB['nodes_list'])
62 if 'node_ids' in filter:
63 for node in DB['nodes_list']:
64 if node['node_id'] not in filter['node_ids']:
67 result = FilterList(filter, result)
71 def GetSlices(filter=None):
76 result.extend(DB['slices_list'])
77 if 'slice_ids' in filter:
78 for slice in DB['slices_list']:
79 if slice['slice_id'] not in filter['slice_ids']:
83 result = FilterList(filter, result)
87 def GetUsers(filter=None):
92 result.extend(DB['users_list'])
93 if 'user_ids' in filter:
94 for user in DB['users_list']:
95 if user['user_id'] not in filter['user_ids']:
99 result = FilterList(filter, result)
110 if not isinstance(node, dict):
112 for key in node.keys():
113 if key not in ['hostname', 'type']:
115 node['node_id'] = DB['node_index']
116 DB['node_index'] += 1
117 DB['nodes_list'].append(node)
118 return node['node_id']
123 if not isinstance(slice, dict):
125 for key in slice.keys():
126 if key not in ['slice_name', 'user_ids', 'node_ids', 'enabled', 'expires']:
128 slice['slice_id'] = DB['slice_index']
129 slice['expires'] = int(time.time()) + 60 * 60 * 24 * 30
130 DB['slice_index'] += 1
131 DB['slices_list'].append(slice)
132 return slice['slice_id']
137 if not isinstance(user, dict):
139 for key in user.keys():
140 if key not in ['user_name', 'email', 'keys']:
142 user['user_id'] = DB['user_index']
143 DB['user_index'] += 1
144 DB['users_list'].append(user)
145 return user['user_id']
148 def AddUserKey(param):
150 if not isinstance(param, dict):
153 for user in DB['users_list']:
154 if param['user_id'] == user['user_id']:
155 if 'keys' in user.keys():
156 user['keys'].append(param['key'])
158 user['keys'] = [param['key']]
165 def AddUserToSlice(param):
167 if not isinstance(param, dict):
170 for slice in DB['slices_list']:
171 if param['slice_id'] == slice['slice_id']:
172 if not 'user_ids' in slice:
173 slice['user_ids'] = []
174 slice['user_ids'].append(param['user_id'])
181 def AddSliceToNodes(param):
183 if not isinstance(param, dict):
186 for slice in DB['slices_list']:
187 if param['slice_id'] == slice['slice_id']:
188 if not 'node_ids' in slice:
189 slice['node_ids'] = []
190 slice['node_ids'].extend(param['node_ids'])
199 def DeleteNode(param):
201 if not isinstance(param, dict):
204 for node in DB['nodes_list']:
205 if param['node_id'] == node['node_id']:
206 DB['nodes_list'].remove(node)
207 for slice in DB['slices_list']:
208 if param['node_id'] in slice['node_ids']:
209 slice['node_ids'].remove(param['node_id'])
216 def DeleteSlice(param):
218 if not isinstance(param, dict):
221 for slice in DB['slices_list']:
222 if param['slice_id'] == slice['slice_id']:
223 DB['slices_list'].remove(slice)
230 def DeleteUser(param):
232 if not isinstance(param, dict):
235 for user in DB['users_list']:
236 if param['user_id'] == user['user_id']:
237 DB['users_list'].remove(user)
238 for slice in DB['slices_list']:
239 if param['user_id'] in slice['user_ids']:
240 slice['user_ids'].remove(param['user_id'])
247 def DeleteKey(param):
249 if not isinstance(param, dict):
252 for user in DB['users_list']:
253 if param['key'] in user['keys']:
254 user['keys'].remove(param['key'])
261 def DeleteUserFromSlice(param):
263 if not isinstance(param, dict):
266 for slice in DB['slices_list']:
267 if param['slice_id'] == slice['slice_id'] and param['user_id'] in slice['user_ids']:
268 slice['user_ids'].remove(param['user_id'])
275 def DeleteSliceFromNodes(param):
277 if not isinstance(param, dict):
280 for slice in DB['slices_list']:
281 if param['slice_id'] == slice['slice_id']:
282 for node_id in param['node_ids']:
283 if node_id in slice['node_ids']:
284 slice['node_ids'].remove(node_id)
293 def UpdateNode(param):
295 if not isinstance(param, dict):
298 for node in DB['nodes_list']:
299 if param['node_id'] == node['node_id']:
300 for key in param['fields'].keys():
301 if key in ['hostname', 'type']:
302 node[key] = param['fields'][key]
309 def UpdateSlice(param):
311 if not isinstance(param, dict):
314 for slice in DB['slices_list']:
315 if param['slice_id'] == slice['slice_id']:
316 for key in param['fields'].keys():
317 if key in ['slice_name']:
318 slice[key] = param['fields'][key]
325 def UpdateUser(param):
327 if not isinstance(param, dict):
330 for user in DB['users_list']:
331 if param['user_id'] == user['user_id']:
332 for key in param['fields'].keys():
333 if key in ['user_name', 'email']:
334 user[key] = param['fields'][key]
341 # Instantiate the XMLRPC server
342 dummy_api_server = SimpleXMLRPCServer.SimpleXMLRPCServer(dummy_api_addr)
344 # RPC functions registration
345 dummy_api_server.register_function(GetTestbedInfo)
346 dummy_api_server.register_function(GetNodes)
347 dummy_api_server.register_function(GetSlices)
348 dummy_api_server.register_function(GetUsers)
349 dummy_api_server.register_function(AddNode)
350 dummy_api_server.register_function(AddSlice)
351 dummy_api_server.register_function(AddUser)
352 dummy_api_server.register_function(AddUserKey)
353 dummy_api_server.register_function(AddUserToSlice)
354 dummy_api_server.register_function(AddSliceToNodes)
355 dummy_api_server.register_function(DeleteNode)
356 dummy_api_server.register_function(DeleteSlice)
357 dummy_api_server.register_function(DeleteUser)
358 dummy_api_server.register_function(DeleteKey)
359 dummy_api_server.register_function(DeleteUserFromSlice)
360 dummy_api_server.register_function(DeleteSliceFromNodes)
361 dummy_api_server.register_function(UpdateNode)
362 dummy_api_server.register_function(UpdateSlice)
363 dummy_api_server.register_function(UpdateUser)
366 # Register Introspective functions
367 dummy_api_server.register_introspection_functions()
370 dummy_api_server.serve_forever()