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():
32 if myfilter[key] != item[key]:
38 # RPC functions definition
41 return {'name': 'dummy', 'longitude': 123456, 'latitude': 654321, 'domain':'dummy-testbed.org'}
43 def GetNodes(filter={}):
46 result.extend(DB['nodes_list'])
47 if 'node_ids' in filter:
48 for node in DB['nodes_list']:
49 if node['node_id'] not in filter['node_ids']:
52 result = FilterList(filter, result)
55 def GetSlices(filter={}):
58 result.extend(DB['slices_list'])
59 if 'slice_ids' in filter:
60 for slice in DB['slices_list']:
61 if slice['slice_id'] not in filter['slice_ids']:
65 result = FilterList(filter, result)
69 def GetUsers(filter={}):
72 result.extend(DB['users_list'])
73 if 'user_ids' in filter:
74 for user in DB['users_list']:
75 if user['user_id'] not in filter['user_ids']:
79 result = FilterList(filter, result)
91 if not isinstance(node, dict):
93 for key in node.keys():
94 if key not in ['hostname', 'type']:
96 node['node_id'] = DB['node_index']
98 DB['nodes_list'].append(node)
99 return node['node_id']
103 if not isinstance(slice, dict):
105 for key in slice.keys():
106 if key not in ['slice_name', 'user_ids', 'node_ids', 'enabled', 'expires']:
108 slice['slice_id'] = DB['slice_index']
109 slice['expires'] = int(time.time())+60*60*24*30
110 DB['slice_index'] += 1
111 DB['slices_list'].append(slice)
112 return slice['slice_id']
117 if not isinstance(user, dict):
119 for key in user.keys():
120 if key not in ['user_name', 'email', 'keys']:
122 user['user_id'] = DB['user_index']
123 DB['user_index'] += 1
124 DB['users_list'].append(user)
125 return user['user_id']
128 def AddUserKey(param):
130 if not isinstance(param, dict):
133 for user in DB['users_list']:
134 if param['user_id'] == user['user_id']:
135 user['keys'].append(param['key'])
141 def AddUserToSlice(param):
143 if not isinstance(param, dict):
146 for slice in DB['slices_list']:
147 if param['slice_id'] == slice['slice_id']:
148 if not 'user_ids' in slice: slice['user_ids'] = []
149 slice['user_ids'].append(param['user_id'])
155 def AddSliceToNodes(param):
157 if not isinstance(param, dict):
160 for slice in DB['slices_list']:
161 if param['slice_id'] == slice['slice_id']:
162 if not 'node_ids' in slice: slice['node_ids'] = []
163 slice['node_ids'].extend(param['node_ids'])
172 def DeleteNode(param):
174 if not isinstance(param, dict):
177 for node in DB['nodes_list']:
178 if param['node_id'] == node['node_id']:
179 DB['nodes_list'].remove(node)
180 for slice in DB['slices_list']:
181 if param['node_id'] in slice['node_ids']:
182 slice['node_ids'].remove(param['node_id'])
189 def DeleteSlice(param):
191 if not isinstance(param, dict):
194 for slice in DB['slices_list']:
195 if param['slice_id'] == slice['slice_id']:
196 DB['slices_list'].remove(slice)
203 def DeleteUser(param):
205 if not isinstance(param, dict):
208 for user in DB['users_list']:
209 if param['user_id'] == user['user_id']:
210 DB['users_list'].remove(user)
211 for slice in DB['slices_list']:
212 if param['user_id'] in slice['user_ids']:
213 slice['user_ids'].remove(param['user_id'])
220 def DeleteKey(param):
222 if not isinstance(param, dict):
225 for user in DB['users_list']:
226 if param['key'] in user['keys']:
227 user['keys'].remove(param['key'])
233 def DeleteUserFromSlice(param):
235 if not isinstance(param, dict):
238 for slice in DB['slices_list']:
239 if param['slice_id'] == slice['slice_id'] and param['user_id'] in slice['user_ids']:
240 slice['user_ids'].remove(param['user_id'])
247 def DeleteSliceFromNodes(param):
249 if not isinstance(param, dict):
252 for slice in DB['slices_list']:
253 if param['slice_id'] == slice['slice_id']:
254 for node_id in param['node_ids']:
255 if node_id in slice['node_ids']: slice['node_ids'].remove(node_id)
264 def UpdateNode(param):
266 if not isinstance(param, dict):
269 for node in DB['nodes_list']:
270 if param['node_id'] == node['node_id']:
271 for key in param['fields'].keys():
272 if key in ['hostname', 'type']:
273 node[key] = param['fields'][key]
280 def UpdateSlice(param):
282 if not isinstance(param, dict):
285 for slice in DB['slices_list']:
286 if param['slice_id'] == slice['slice_id']:
287 for key in param['fields'].keys():
288 if key in ['slice_name']:
289 slice[key] = param['fields'][key]
296 def UpdateUser(param):
298 if not isinstance(param, dict):
301 for user in DB['users_list']:
302 if param['user_id'] == user['user_id']:
303 for key in param['fields'].keys():
304 if key in ['user_name', 'email']:
305 user[key] = param['fields'][key]
314 # Instantiate the XMLRPC server
315 dummy_api_server = SimpleXMLRPCServer.SimpleXMLRPCServer(dummy_api_addr)
317 # RPC functions registration
318 dummy_api_server.register_function(GetTestbedInfo)
319 dummy_api_server.register_function(GetNodes)
320 dummy_api_server.register_function(GetSlices)
321 dummy_api_server.register_function(GetUsers)
322 dummy_api_server.register_function(AddNode)
323 dummy_api_server.register_function(AddSlice)
324 dummy_api_server.register_function(AddUser)
325 dummy_api_server.register_function(AddUserKey)
326 dummy_api_server.register_function(AddUserToSlice)
327 dummy_api_server.register_function(AddSliceToNodes)
328 dummy_api_server.register_function(DeleteNode)
329 dummy_api_server.register_function(DeleteSlice)
330 dummy_api_server.register_function(DeleteUser)
331 dummy_api_server.register_function(DeleteKey)
332 dummy_api_server.register_function(DeleteUserFromSlice)
333 dummy_api_server.register_function(DeleteSliceFromNodes)
334 dummy_api_server.register_function(UpdateNode)
335 dummy_api_server.register_function(UpdateSlice)
336 dummy_api_server.register_function(UpdateUser)
339 # Register Introspective functions
340 dummy_api_server.register_introspection_functions()
343 dummy_api_server.serve_forever()