Changeset b709861 for fedd/federation/emulab_access.py
- Timestamp:
- Nov 30, 2011 4:45:15 PM (12 years ago)
- Branches:
- compt_changes, info-ops, master
- Children:
- 1ae1aa2
- Parents:
- 22a1a77
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/federation/emulab_access.py
r22a1a77 rb709861 102 102 self.stop_segment = proxy_emulab_segment.stop_segment 103 103 self.info_segment = proxy_emulab_segment.info_segment 104 self.operation_segment = proxy_emulab_segment.operation_segment 104 105 elif self.access_type == 'local_emulab': 105 106 self.start_segment = local_emulab_segment.start_segment 106 107 self.stop_segment = local_emulab_segment.stop_segment 107 108 self.info_segment = local_emulab_segment.info_segment 109 self.operation_segment = local_emulab_segment.operation_segment 108 110 else: 109 111 self.start_segment = None 110 112 self.stop_segment = None 111 113 self.info_segment = None 114 self.operation_segment = None 112 115 113 116 self.restricted = [ ] … … 185 188 self.TerminateSegment), 186 189 'InfoSegment': soap_handler("InfoSegment", self.InfoSegment), 190 'OperationSegment': soap_handler("OperationSegment", 191 self.OperationSegment), 187 192 } 188 193 self.xmlrpc_services = {\ … … 195 200 self.TerminateSegment), 196 201 'InfoSegment': xmlrpc_handler("InfoSegment", self.InfoSegment), 202 'OperationSegment': xmlrpc_handler("OperationSegment", 203 self.OperationSegment), 197 204 } 198 205 … … 1060 1067 'allocationLog': logv, 1061 1068 'segmentdescription': { 1062 'topdldescription': t. clone().to_dict()1069 'topdldescription': t.to_dict() 1063 1070 }, 1064 1071 'proof': proof.to_dict(), 1065 1072 } 1066 self.allocation[aid]['topo'] = t opo.clone()1073 self.allocation[aid]['topo'] = t 1067 1074 retval = copy.copy(self.allocation[aid]['started']) 1068 1075 self.write_state() … … 1239 1246 user = self.allocation[aid].get('user', None) 1240 1247 ename = self.allocation[aid].get('experiment', None) 1241 nonce = self.allocation[aid].get('nonce', False)1242 1248 else: 1243 1249 proj = None 1244 1250 user = None 1245 1251 ename = None 1246 nonce = False1252 topo = None 1247 1253 self.state_lock.release() 1248 1254 … … 1270 1276 'proof': proof.to_dict(), 1271 1277 } 1278 1279 def OperationSegment(self, req, fid): 1280 def get_pname(e): 1281 """ 1282 Get the physical name of a node 1283 """ 1284 if e.localname: 1285 return re.sub('\..*','', e.localname[0]) 1286 else: 1287 return None 1288 1289 try: 1290 req = req['OperationSegmentRequestBody'] 1291 except KeyError: 1292 raise service_error(server_error.req, "Badly formed request") 1293 1294 auth_attr = req['allocID']['fedid'] 1295 aid = "%s" % auth_attr 1296 1297 access_ok, proof = self.auth.check_attribute(fid, auth_attr, 1298 with_proof=True) 1299 if not access_ok: 1300 raise service_error(service_error.access, "Access denied") 1301 1302 op = req.get('operation', None) 1303 targets = req.get('target', None) 1304 params = req.get('parameter', None) 1305 1306 if op is None : 1307 raise service_error(service_error.req, "missing operation") 1308 elif targets is None: 1309 raise service_error(service_error.req, "no targets") 1310 1311 if aid in self.allocation: 1312 topo = self.allocation[aid].get('topo', None) 1313 if topo: topo = topo.clone() 1314 else: 1315 topo = None 1316 1317 targets = copy.copy(targets) 1318 ptargets = { } 1319 for e in topo.elements: 1320 if isinstance(e, topdl.Computer): 1321 if e.name in targets: 1322 targets.remove(e.name) 1323 pn = get_pname(e) 1324 if pn: ptargets[e.name] = pn 1325 1326 status = [ operation_status(t, operation_status.no_target) \ 1327 for t in targets] 1328 1329 ops = self.operation_segment(keyfile=self.ssh_privkey_file, 1330 debug=self.create_debug, boss=self.boss, 1331 cert=self.xmlrpc_cert) 1332 ops(self, op, ptargets, params) 1333 1334 status.extend(ops.status) 1335 1336 return { 1337 'allocID': req['allocID'], 1338 'status': [s.to_dict() for s in status], 1339 'proof': proof.to_dict(), 1340 }
Note: See TracChangeset
for help on using the changeset viewer.