Changeset 1ae1aa2 for fedd/federation/emulab_segment.py
- Timestamp:
- Nov 30, 2011 5:55:13 PM (12 years ago)
- Branches:
- compt_changes, info-ops, master
- Children:
- f671ef7
- Parents:
- b709861
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
fedd/federation/emulab_segment.py
rb709861 r1ae1aa2 3 3 import logging 4 4 import util 5 import topdl 5 6 6 7 from M2Crypto import SSL … … 17 18 18 19 class emulab_segment: 20 class node_info: 21 def __init__(self, name, pname, status=None, osname=None, 22 osversion=None, image=None): 23 self.name = name 24 self.pname = pname 25 self.status = status 26 self.osname = osname 27 self.osversion = osversion 28 self.image = image 29 def getOS(self): 30 rv = None 31 if self.osname or self.osversion: 32 rv = topdl.OperatingSystem(name=self.osname, 33 version=self.osversion) 34 if self.image and rv: 35 rv.set_attribute('image', self.image) 36 return rv 37 19 38 def __init__(self, boss, cert): 20 39 self.ctxt = fedd_ssl_context(my_cert=cert) … … 34 53 self.node = { } 35 54 self.status = [ ] 55 self.node_info = emulab_segment.node_info 36 56 37 57 def emulab_call(self, method, params): … … 207 227 return code == 0 208 228 229 def get_osid_map(self): 230 oses = { } 231 code, osids = self.emulab_call('osid.getlist', {}) 232 for key, val in osids.items(): 233 val['imageid'] = key 234 oses[val['osid']] = val 235 return oses 209 236 210 237 def get_mapping(self, pid, eid): … … 223 250 if self.log: 224 251 self.log.info("[get_mapping] Generating mapping") 252 253 osidmap = self.get_osid_map() 225 254 226 255 params = { … … 235 264 st = v.get('status', 'up') 236 265 ev = v.get('eventstatus', 'ISUP') 266 os = v.get('osid', None) 237 267 238 268 if st == 'up' and ev in ev_ok: st = 'active' 239 269 else: st = 'failed' 240 self.node[k] = (v['pnode'], st) 270 271 if os and os in osidmap: 272 osname = osidmap[os].get('OS', None) 273 osversion = osidmap[os].get('version', None) 274 osimage = "%s/%s" % \ 275 ( osidmap[os].get('pid', ''), 276 osidmap[os].get('imageid', '')) 277 else: 278 osname = osversion = osimage = None 279 280 self.node[k] = self.node_info(k, v['pnode'], st, 281 osname, osversion, osimage) 241 282 if self.log: 242 283 self.log.info("Mapping complete") … … 245 286 raise service_error(service_error.internal, 246 287 "Cannot get node mapping of segment:%s/%s" % (pid, eid)) 247 248 def do_operation(self, op, lnode, pnode, params): 288 def get_image(self, node, top): 289 for e in top.elements: 290 if isinstance(e, topdl.Computer): 291 if node == e.name: 292 if e.os: 293 return e.os[0].get_attribute('image') 294 return None 295 296 297 def do_operation(self, op, lnode, pnode, params, top): 249 298 """ 250 299 Carry out operation on node in the given experiment. … … 268 317 return False 269 318 elif state == 'initial': 270 self.status.append(operation_status(lnode, 271 operation_status.unsupp, 'Image load unsupported')) 272 return False 319 image = self.get_image(lnode, top) 320 if image: 321 pid, iid = image.split('/') 322 p = {'nodes': pnode, 'imagename': iid, 'imageproj': pid, 323 'wait': False} 324 code, result = self.emulab_call('node.reload', p) 325 if code == 0: 326 self.status.append(operation_status(lnode, 327 operation_status.success, 'reloading')) 328 return True 329 else: 330 self.status.append(operation_status(lnode, 331 operation_status.federant, 332 'Error code: %d' % code)) 333 return False 334 else: 335 self.status.append(operation_status(lnode, 336 operation_status.federant, 337 'cannot find imageid??')) 338 return False 273 339 elif state == 'boot': 274 340 p = {'nodes': pnode, 'wait': False}
Note: See TracChangeset
for help on using the changeset viewer.