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),
16 'user_ids': range(i,4,2),
18 'node_ids': range(i,10,2),
20 'expires': int(time.time())+60*60*24*30}
21 slices_list.append(slice)
25 user = {'user_name': 'user'+str(i), 'user_id': i, 'email': 'user'+str(i)+'@dummy-testbed.org', 'keys': ['user_ssh_pub_key_'+str(i)]}
26 users_list.append(user)
28 DB = {'nodes_list': nodes_list,'node_index': 11, 'slices_list': slices_list, 'slice_index': 3, 'users_list': users_list, 'user_index': 5}
30 #Filter function gor the GET methods
32 def FilterList(myfilter, mylist):
36 for key in myfilter.keys():
40 if isinstance(myfilter[key], str) and myfilter[key] != item[key] or isinstance(myfilter[key], list) and item[key] not in myfilter[key]:
46 # RPC functions definition
49 return {'name': 'dummy', 'longitude': 123456, 'latitude': 654321, 'domain':'dummy-testbed.org'}
51 def GetNodes(filter=None):
52 if filter is None: filter={}
55 result.extend(DB['nodes_list'])
56 if 'node_ids' in filter:
57 for node in DB['nodes_list']:
58 if node['node_id'] not in filter['node_ids']:
61 result = FilterList(filter, result)
64 def GetSlices(filter=None):
65 if filter is None: filter={}
68 result.extend(DB['slices_list'])
69 if 'slice_ids' in filter:
70 for slice in DB['slices_list']:
71 if slice['slice_id'] not in filter['slice_ids']:
75 result = FilterList(filter, result)
79 def GetUsers(filter=None):
80 if filter is None: filter={}
83 result.extend(DB['users_list'])
84 if 'user_ids' in filter:
85 for user in DB['users_list']:
86 if user['user_id'] not in filter['user_ids']:
90 result = FilterList(filter, result)
102 if not isinstance(node, dict):
104 for key in node.keys():
105 if key not in ['hostname', 'type']:
107 node['node_id'] = DB['node_index']
108 DB['node_index'] += 1
109 DB['nodes_list'].append(node)
110 return node['node_id']
114 if not isinstance(slice, dict):
116 for key in slice.keys():
117 if key not in ['slice_name', 'user_ids', 'node_ids', 'enabled', 'expires']:
119 slice['slice_id'] = DB['slice_index']
120 slice['expires'] = int(time.time())+60*60*24*30
121 DB['slice_index'] += 1
122 DB['slices_list'].append(slice)
123 return slice['slice_id']
128 if not isinstance(user, dict):
130 for key in user.keys():
131 if key not in ['user_name', 'email', 'keys']:
133 user['user_id'] = DB['user_index']
134 DB['user_index'] += 1
135 DB['users_list'].append(user)
136 return user['user_id']
139 def AddUserKey(param):
141 if not isinstance(param, dict):
144 for user in DB['users_list']:
145 if param['user_id'] == user['user_id']:
146 if 'keys' in user.keys():
147 user['keys'].append(param['key'])
149 user['keys'] = [param['key']]
155 def AddUserToSlice(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 'user_ids' in slice: slice['user_ids'] = []
163 slice['user_ids'].append(param['user_id'])
169 def AddSliceToNodes(param):
171 if not isinstance(param, dict):
174 for slice in DB['slices_list']:
175 if param['slice_id'] == slice['slice_id']:
176 if not 'node_ids' in slice: slice['node_ids'] = []
177 slice['node_ids'].extend(param['node_ids'])
186 def DeleteNode(param):
188 if not isinstance(param, dict):
191 for node in DB['nodes_list']:
192 if param['node_id'] == node['node_id']:
193 DB['nodes_list'].remove(node)
194 for slice in DB['slices_list']:
195 if param['node_id'] in slice['node_ids']:
196 slice['node_ids'].remove(param['node_id'])
203 def DeleteSlice(param):
205 if not isinstance(param, dict):
208 for slice in DB['slices_list']:
209 if param['slice_id'] == slice['slice_id']:
210 DB['slices_list'].remove(slice)
217 def DeleteUser(param):
219 if not isinstance(param, dict):
222 for user in DB['users_list']:
223 if param['user_id'] == user['user_id']:
224 DB['users_list'].remove(user)
225 for slice in DB['slices_list']:
226 if param['user_id'] in slice['user_ids']:
227 slice['user_ids'].remove(param['user_id'])
234 def DeleteKey(param):
236 if not isinstance(param, dict):
239 for user in DB['users_list']:
240 if param['key'] in user['keys']:
241 user['keys'].remove(param['key'])
247 def DeleteUserFromSlice(param):
249 if not isinstance(param, dict):
252 for slice in DB['slices_list']:
253 if param['slice_id'] == slice['slice_id'] and param['user_id'] in slice['user_ids']:
254 slice['user_ids'].remove(param['user_id'])
261 def DeleteSliceFromNodes(param):
263 if not isinstance(param, dict):
266 for slice in DB['slices_list']:
267 if param['slice_id'] == slice['slice_id']:
268 for node_id in param['node_ids']:
269 if node_id in slice['node_ids']: slice['node_ids'].remove(node_id)
278 def UpdateNode(param):
280 if not isinstance(param, dict):
283 for node in DB['nodes_list']:
284 if param['node_id'] == node['node_id']:
285 for key in param['fields'].keys():
286 if key in ['hostname', 'type']:
287 node[key] = param['fields'][key]
294 def UpdateSlice(param):
296 if not isinstance(param, dict):
299 for slice in DB['slices_list']:
300 if param['slice_id'] == slice['slice_id']:
301 for key in param['fields'].keys():
302 if key in ['slice_name']:
303 slice[key] = param['fields'][key]
310 def UpdateUser(param):
312 if not isinstance(param, dict):
315 for user in DB['users_list']:
316 if param['user_id'] == user['user_id']:
317 for key in param['fields'].keys():
318 if key in ['user_name', 'email']:
319 user[key] = param['fields'][key]
328 # Instantiate the XMLRPC server
329 dummy_api_server = SimpleXMLRPCServer.SimpleXMLRPCServer(dummy_api_addr)
331 # RPC functions registration
332 dummy_api_server.register_function(GetTestbedInfo)
333 dummy_api_server.register_function(GetNodes)
334 dummy_api_server.register_function(GetSlices)
335 dummy_api_server.register_function(GetUsers)
336 dummy_api_server.register_function(AddNode)
337 dummy_api_server.register_function(AddSlice)
338 dummy_api_server.register_function(AddUser)
339 dummy_api_server.register_function(AddUserKey)
340 dummy_api_server.register_function(AddUserToSlice)
341 dummy_api_server.register_function(AddSliceToNodes)
342 dummy_api_server.register_function(DeleteNode)
343 dummy_api_server.register_function(DeleteSlice)
344 dummy_api_server.register_function(DeleteUser)
345 dummy_api_server.register_function(DeleteKey)
346 dummy_api_server.register_function(DeleteUserFromSlice)
347 dummy_api_server.register_function(DeleteSliceFromNodes)
348 dummy_api_server.register_function(UpdateNode)
349 dummy_api_server.register_function(UpdateSlice)
350 dummy_api_server.register_function(UpdateUser)
353 # Register Introspective functions
354 dummy_api_server.register_introspection_functions()
357 dummy_api_server.serve_forever()