def adminRebuildFlowvisorCache (self): try: FV.rebuildCache() return jsonify(None) except Exception, e: self._log.exception("Exception") return jsonify(None, code = 2, msg = traceback.format_exc())
def getAdvertisement (): NSMAP = {None: "%s" % (PGNS), "xs" : "%s" % (XSNS), "openflow" : "%s" % (OFNSv3)} rspec = ET.Element("rspec", nsmap = NSMAP) rspec.attrib["{%s}schemaLocation" % (XSNS)] = PGNS + " " \ "http://www.geni.net/resources/rspec/3/ad.xsd " + \ OFNSv3 + " " \ "http://www.geni.net/resources/rspec/ext/openflow/3/of-ad.xsd" rspec.attrib["type"] = "advertisement" links = FV.getLinkList() devices = FV.getDeviceList() fvversion = FV.getFVVersion() db_devices = GeniDB.getDeviceSet() GeniDB.refreshDevices(devices) for dpid in devices: db_devices.discard(dpid) addAdDevice(rspec, dpid) for dpid in db_devices: addAdDevice(rspec, dpid, False) #getLinks START for link in links: addAdLink(rspec, link) #getLinks END xml = StringIO() ET.ElementTree(rspec).write(xml) return xml.getvalue()
def deleteSliver (slice_urn = None, sliver_urn = None): slice_name = GeniDB.getFlowvisorSliceName(slice_urn=slice_urn, sliver_urn = sliver_urn) if FV.sliceExists(slice_name): # stats = FV.getCombinedStats(slice_name) # GeniDB.insertFinalStats(slice_urn, stats) FV.deleteSlice(slice_name) GeniDB.deleteSliver(slice_urn=slice_urn, sliver_urn=sliver_urn) foam.geni.approval.rebuildDB()
def deleteSliver(slice_urn=None, sliver_urn=None): slice_name = GeniDB.getFlowvisorSliceName(slice_urn=slice_urn, sliver_urn=sliver_urn) if FV.sliceExists(slice_name): # stats = FV.getCombinedStats(slice_name) # GeniDB.insertFinalStats(slice_urn, stats) FV.deleteSlice(slice_name) GeniDB.deleteSliver(slice_urn=slice_urn, sliver_urn=sliver_urn) foam.geni.approval.rebuildDB()
def pub_get_switches(self, **kwargs): ''' Return the switches that the FlowVisor gives. Change to CH format. ''' complete_list = [] try: dpids = FV.getDeviceList() for d in dpids: FV.log.debug("XMLRPC:getDeviceInfo (%s)" % (d)) infos = [FV.xmlcall("getDeviceInfo", d) for d in dpids] #need to make it prettier :) switches = zip(dpids, infos) except Exception,e: import traceback traceback.print_exc() raise e
def pub_get_switches(self, **kwargs): ''' Return the switches that the FlowVisor gives. Change to CH format. ''' complete_list = [] try: dpids = FV.getDeviceList() for d in dpids: FV.log.debug("XMLRPC:getDeviceInfo (%s)" % (d)) infos = [FV.xmlcall("getDeviceInfo", d) for d in dpids] #need to make it prettier :) switches = zip(dpids, infos) except Exception, e: import traceback traceback.print_exc() raise e
def addAdDevice (rspec, dpid, active=True): switch_urn = generateSwitchComponentID(dpid) od = ET.SubElement(rspec, "{%s}datapath" % (OFNSv3)) od.attrib["component_id"] = switch_urn od.attrib["component_manager_id"] = getManagerID() od.attrib["dpid"] = dpid locdata = GeniDB.getLocationData(dpid, switch_urn) if locdata: ET.SubElement(od, "{%s}location" % (OFNSv3), country=locdata.country, latitude=locdata.lat, longitude=locdata.long) attachments = TopoDB.getDPIDAttachments(dpid) if active: ports = FV.getDevicePorts(dpid) for port in ports: if (port.features == None): p = ET.SubElement(od, "{%s}port" % (OFNSv3), num=str(port.num), name=port.name) else: p = ET.SubElement(od, "{%s}port" % (OFNSv3), num=str(port.num), name=port.name, features=port.features) for info in attachments.setdefault(port.name, []): a = ET.SubElement(p, "{%s}attachment" % (OFNSv3)) a.attrib["remote_component_id"] = info.remote_component_id a.attrib["remote_port"] = info.remote_port a.attrib["desc"] = info.desc
def approveSliver (request, logger): try: jsonValidate(request.json, [("sliver_urn", (unicode,str)), ("priority", int)], logger) if (not request.json.has_key("sliver_urn")) or (not request.json.has_key("priority")): return jsonify({"exception" : "You must specify a sliver_urn and priority"}) slice_name = GeniDB.getFlowvisorSliceName(sliver_urn=request.json["sliver_urn"]) if FV.sliceExists(slice_name): return jsonify({"Fault" : "Flowvisor slice '%s' already exists" % (slice_name)}) sobj = GeniDB.getSliverObj(request.json["sliver_urn"]) GeniDB.setSliverStatus(request.json["sliver_urn"], True) GeniDB.setSliverPriority(request.json["sliver_urn"], request.json["priority"]) GeniDB.commit() foam.geni.approval.AppData.addSliver(sobj) sobj.createSlice() sobj.insertFlowspace(request.json["priority"]) sobj.insertVirtualLink() data = GeniDB.getSliverData(sobj.getURN(), True) foam.task.emailApproveSliver(data) return jsonify(None) except JSONValidationError, e: jd = e.__json__() return jsonify(jd, code = 1, msg = jd["exception"])
def getSliverStatus(sliver_urn): try: slice_name = GeniDB.getFlowvisorSliceName(sliver_urn=sliver_urn) if FV.sliceExists(slice_name): return "ready" else: return "configuring" except Exception, e: return "failed"
def getSliverStatus (sliver_urn): try: slice_name = GeniDB.getFlowvisorSliceName(sliver_urn=sliver_urn) if FV.sliceExists(slice_name): return "ready" else: return "configuring" except Exception, e: return "failed"
def getEnabled (self, sliver_urn, deleted = False): from foam.flowvisor import Connection as FV s = select([slivers], and_(slivers.c.sliver_urn==sliver_urn, slivers.c.deleted==deleted)) conn = self.connection() result = conn.execute(s) row = result.first() if not row: raise UnknownSliver(sliver_urn) return FV.sliceExists(row[slivers.c.fvslicename])
def rejectSliver (self): if not request.json: return try: self.validate(request.json, [("sliver_urn", (unicode,str))]) slice_name = GeniDB.getFlowvisorSliceName(sliver_urn=request.json["sliver_urn"]) sobj = GeniDB.getSliverObj(request.json["sliver_urn"]) data = GeniDB.getSliverData(sobj.getURN(), True) GeniDB.setSliverStatus(request.json["sliver_urn"], False) if FV.sliceExists(slice_name): FV.deleteSlice(slice_name) foam.task.emailRejectSliver(data) return jsonify(None) except JSONValidationError, e: jd = e.__json__() return jsonify(jd, code = 1, msg = jd["exception"])
def getEnabled(self, sliver_urn, deleted=False): from foam.flowvisor import Connection as FV s = select([slivers], and_(slivers.c.sliver_urn == sliver_urn, slivers.c.deleted == deleted)) conn = self.connection() result = conn.execute(s) row = result.first() if not row: raise UnknownSliver(sliver_urn) return FV.sliceExists(row[slivers.c.fvslicename])
def pub_get_links(self, **kwargs): ''' Return the links that the FlowVisor gives. Change to CH format. ''' complete_list = [] try: links = [(l.pop("srcDPID"), l.pop("srcPort"), l.pop("dstDPID"), l.pop("dstPort"), l) for l in FV.getLinkList()] except Exception, e: import traceback traceback.print_exc() raise e
def pub_ping(self, data, **kwargs): if (FV.xmlconn is None): self._log.exception("No xlmlrpc connection with Flowvisor detected") raise Exception("No xlmlrpc connection with Flowvisor detected") self.check_topo_change() #repeat on ping try: FV.log.debug("XMLRPC:ping (%s)" % (str(data))) return FV.xmlcall("ping", " " + str(data)) #this will return a PONG is everything alright except Exception, e: import traceback traceback.print_exc() raise e
def getAdvertisement(): NSMAP = { None: "%s" % (PGNS), "xs": "%s" % (XSNS), "openflow": "%s" % (OFNSv3) } rspec = ET.Element("rspec", nsmap=NSMAP) rspec.attrib["{%s}schemaLocation" % (XSNS)] = PGNS + " " \ "http://www.geni.net/resources/rspec/3/ad.xsd " + \ OFNSv3 + " " \ "http://www.geni.net/resources/rspec/ext/openflow/3/of-ad.xsd" rspec.attrib["type"] = "advertisement" links = FV.getLinkList() devices = FV.getDeviceList() fvversion = FV.getFVVersion() db_devices = GeniDB.getDeviceSet() GeniDB.refreshDevices(devices) for dpid in devices: db_devices.discard(dpid) addAdDevice(rspec, dpid) for dpid in db_devices: addAdDevice(rspec, dpid, False) #getLinks START for link in links: addAdLink(rspec, link) #getLinks END xml = StringIO() ET.ElementTree(rspec).write(xml) return xml.getvalue()
def pub_get_links(self, **kwargs): ''' Return the links that the FlowVisor gives. Change to CH format. ''' complete_list = [] try: links = [(l.pop("srcDPID"), l.pop("srcPort"), l.pop("dstDPID"), l.pop("dstPort"), l) for l in FV.getLinkList()] except Exception,e: import traceback traceback.print_exc() raise e
def pub_ping(self, data, **kwargs): if (FV.xmlconn is None): self._log.exception( "No xlmlrpc connection with Flowvisor detected") raise Exception("No xlmlrpc connection with Flowvisor detected") self.check_topo_change() #repeat on ping try: FV.log.debug("XMLRPC:ping (%s)" % (str(data))) return FV.xmlcall( "ping", " " + str(data)) #this will return a PONG is everything alright except Exception, e: import traceback traceback.print_exc() raise e
def makeSliverDataDict (self, row, include_obj = True): from foam.flowvisor import Connection as FV data = {"id" : row[slivers.c.id], "slice_urn" : row[slivers.c.slice_urn], "sliver_urn" : row[slivers.c.sliver_urn], "flowvisor_slice" : row[slivers.c.fvslicename], "enabled" : FV.sliceExists(row[slivers.c.fvslicename]), "expiration" : str(row[slivers.c.expiration]), "creation" : str(row[slivers.c.creation]), "status" : self.xlateSliverStatus(row[slivers.c.status]), "deleted" : str(row[slivers.c.deleted])} if include_obj: slobj = row[slivers.c.parsed_obj] if slobj: # Imported slivers don't have sliver objs objdata = slobj.getDataDict(False) data.update(objdata) return data
def refreshDevices (self, devices = None): from foam.flowvisor import Connection as FV if devices is None: devices = FV.getDeviceList() for dpid in devices: dpid = dpid.lower() s = select([datapaths], datapaths.c.dpid==dpid) conn = self.connection() result = conn.execute(s) row = result.first() if not row: switch_urn = generateSwitchComponentID(dpid) ins = datapaths.insert().values(dpid=dpid,urn=switch_urn.lower()) conn.execute(ins) self.commit()
def refreshDevices(self, devices=None): from foam.flowvisor import Connection as FV if devices is None: devices = FV.getDeviceList() for dpid in devices: dpid = dpid.lower() s = select([datapaths], datapaths.c.dpid == dpid) conn = self.connection() result = conn.execute(s) row = result.first() if not row: switch_urn = generateSwitchComponentID(dpid) ins = datapaths.insert().values(dpid=dpid, urn=switch_urn.lower()) conn.execute(ins) self.commit()
def addAdDevice (rspec, dpid, active=True): switch_urn = generateSwitchComponentID(dpid) od = ET.SubElement(rspec, "{%s}datapath" % (OFNSv3)) od.attrib["component_id"] = switch_urn od.attrib["component_manager_id"] = "urn:publicid:IDN+foam:%s+authority+am" % ('ocf.ofelia.i2cat.ofam') od.attrib["dpid"] = dpid #locdata = GeniDB.getLocationData(dpid, switch_urn) #if locdata: # ET.SubElement(od, "{%s}location" % (OFNSv3), country=locdata.country, latitude=locdata.lat, longitude=locdata.long) #attachments = TopoDB.getDPIDAttachments(dpid) if active: ports = FV.getDevicePorts(dpid) for port in ports: p = ET.SubElement(od, "{%s}port" % (OFNSv3), num=str(port.num), name=port.name)
def makeSliverDataDict(self, row, include_obj=True): from foam.flowvisor import Connection as FV data = { "id": row[slivers.c.id], "slice_urn": row[slivers.c.slice_urn], "sliver_urn": row[slivers.c.sliver_urn], "flowvisor_slice": row[slivers.c.fvslicename], "enabled": FV.sliceExists(row[slivers.c.fvslicename]), "expiration": str(row[slivers.c.expiration]), "creation": str(row[slivers.c.creation]), "status": self.xlateSliverStatus(row[slivers.c.status]), "deleted": str(row[slivers.c.deleted]) } if include_obj: slobj = row[slivers.c.parsed_obj] if slobj: # Imported slivers don't have sliver objs objdata = slobj.getDataDict(False) data.update(objdata) return data
def addAdDevice(rspec, dpid, active=True): switch_urn = generateSwitchComponentID(dpid) od = ET.SubElement(rspec, "{%s}datapath" % (OFNSv3)) od.attrib["component_id"] = switch_urn od.attrib[ "component_manager_id"] = "urn:publicid:IDN+foam:%s+authority+am" % ( 'ocf.ofelia.i2cat.ofam') od.attrib["dpid"] = dpid #locdata = GeniDB.getLocationData(dpid, switch_urn) #if locdata: # ET.SubElement(od, "{%s}location" % (OFNSv3), country=locdata.country, latitude=locdata.lat, longitude=locdata.long) #attachments = TopoDB.getDPIDAttachments(dpid) if active: ports = FV.getDevicePorts(dpid) for port in ports: p = ET.SubElement(od, "{%s}port" % (OFNSv3), num=str(port.num), name=port.name)
def addAdDevice(rspec, dpid, active=True): switch_urn = generateSwitchComponentID(dpid) od = ET.SubElement(rspec, "{%s}datapath" % (OFNSv3)) od.attrib["component_id"] = switch_urn od.attrib["component_manager_id"] = getManagerID() od.attrib["dpid"] = dpid locdata = GeniDB.getLocationData(dpid, switch_urn) if locdata: ET.SubElement(od, "{%s}location" % (OFNSv3), country=locdata.country, latitude=locdata.lat, longitude=locdata.long) attachments = TopoDB.getDPIDAttachments(dpid) if active: ports = FV.getDevicePorts(dpid) for port in ports: if (port.features == None): p = ET.SubElement(od, "{%s}port" % (OFNSv3), num=str(port.num), name=port.name) else: p = ET.SubElement(od, "{%s}port" % (OFNSv3), num=str(port.num), name=port.name, features=port.features) for info in attachments.setdefault(port.name, []): a = ET.SubElement(p, "{%s}attachment" % (OFNSv3)) a.attrib["remote_component_id"] = info.remote_component_id a.attrib["remote_port"] = info.remote_port a.attrib["desc"] = info.desc
def approveSliver(request, logger): try: jsonValidate(request.json, [("sliver_urn", (unicode, str)), ("priority", int)], logger) if (not request.json.has_key("sliver_urn")) or ( not request.json.has_key("priority")): return jsonify( {"exception": "You must specify a sliver_urn and priority"}) slice_name = GeniDB.getFlowvisorSliceName( sliver_urn=request.json["sliver_urn"]) if FV.sliceExists(slice_name): return jsonify({ "Fault": "Flowvisor slice '%s' already exists" % (slice_name) }) sobj = GeniDB.getSliverObj(request.json["sliver_urn"]) GeniDB.setSliverStatus(request.json["sliver_urn"], True) GeniDB.setSliverPriority(request.json["sliver_urn"], request.json["priority"]) GeniDB.commit() foam.geni.approval.AppData.addSliver(sobj) sobj.createSlice() sobj.insertFlowspace(request.json["priority"]) sobj.insertVirtualLink() data = GeniDB.getSliverData(sobj.getURN(), True) foam.task.emailApproveSliver(data) return jsonify(None) except JSONValidationError, e: jd = e.__json__() return jsonify(jd, code=1, msg=jd["exception"])