def handlemap(self, slicemap, slicemapdb): for sliver in slicemap['slivers']: isnewslice = 1 if sliver['slice_id'] > 4: for sliverdb in slicemapdb['slivers']: if sliverdb['slice_id'] == sliver['slice_id']: logger.logslice("keys: %s" % sliver['keys'], '/var/log/slice/key1') logger.logslice("keys: %s" % sliverdb['keys'], '/var/log/slice/key2') if sliverdb['keys'] != sliver['keys']: oldkeys = sliverdb['keys'] sliverdb['keys'] = sliver['keys'] sliverdb['status'] = 'update' self.rupdatesliver(sliverdb, oldkeys) else: sliverdb['status'] = 'none' isnewslice = 0 break if isnewslice == 1: sliver['status'] = 'new' slicemapdb['slivers'].append(sliver) sliverdb = {} sliver = {} return slicemapdb
def rdeletesliver(self,sliver): #self.updatevip(sliver['vip']) #self.updatevmac(sliver['vmac']) #self.updatevlanid(sliver['vlanid']) logfile = '/var/log/slice/log' #logger.logslice("rdeletesliver: sliceid-%s, vrouteid-%s, sliver['vip']-%s, sliver['vmac']-%s, sliver[vlanid]-%s"%(sliver['slice_id'], sliver['virouterid'], sliver['vip'], sliver['vmac'], sliver['vlanid']),logfile) logger.logslice("(sliceid: %s,vrouteid: %s,vip: %s,vmac:%s,vlanid:%s) delete"%(sliver['slice_id'],sliver['vrname'],sliver['vip'],sliver['vmac'],sliver['vlanid']),logfile) #call router API try: vmname = sliver['vrname'] vrname = 'vr_' + str(sliver['slice_name']) self.pearl.service.stopVirtualRouter(vrname, vmname) logger.log ("nodemanager: Stop Virtual Router %s" %(vrname)) self.pearl.service.stopVirtualMachine(vmname) logger.log ("nodemanager: Stop Virtual Machine %s" %(vmname)) dvrp = self.pearl.factory.create('ns1:destroyVirtualRouterParam') dvrp.name = vmname dvrp.ip = sliver['vip'] dvrp.mac = sliver['vmac'] self.pearl.service.destroyVirtualMachine(dvrp) logger.log ("nodemanager: Destroy Virtual Machine %s" %(vmname)) except Exception as e: logger.log ("nodemanager: Delete Virtual Router Error:", e)
def runassignsliver(self, sliver): logfile = '/var/log/slice/log' logger.logslice("sliceid: %s,vrouteid: %s unassign "%(sliver['slice_id'],sliver['vrname']),logfile) #call router API # update the user keys to vm try: vmname = sliver['vrname'] vrname = 'vr_' + str(sliver['slice_name']) for key in sliver['keys']: self.pearl.service.unassignVirtualRouter(vmname, key['key']) logger.log ("nodemanager: Unassign Virtual Router %s" %(vrname)) except Exception as e: logger.log ("nodemanager: Unassign Virtual Router Error:", e)
def updatetoRouter(self, slicemapdb): logfile = '/var/log/slice/log' logger.logslice("************************", logfile) for sliver in slicemapdb['slivers'][:]: if sliver['slice_id'] > 4: if sliver['status'] == 'delete': self.rdeletesliver(sliver) slicemapdb['slivers'].remove(sliver) elif sliver['status'] == 'new': self.rcreatesliver(sliver) elif sliver['status'] == 'update': self.rupdatesliver(sliver) sliver['status'] = 'none' sliver = {} return slicemapdb
def updatetoRouter(self,slicemapdb): logfile = '/var/log/slice/log' logger.logslice("************************",logfile) for sliver in slicemapdb['slivers'][:]: if sliver['slice_id'] > 4: if sliver['status'] == 'delete': self.rdeletesliver(sliver) slicemapdb['slivers'].remove(sliver) elif sliver['status'] == 'new': self.rcreatesliver(sliver) elif sliver['status'] == 'update': self.rupdatesliver(sliver) sliver['status'] = 'none' sliver = {} return slicemapdb
def __init__ (self): parser = optparse.OptionParser() parser.add_option('-d', '--daemon', action='store_true', dest='daemon', default=False, help='run daemonized') parser.add_option('-f', '--config', action='store', dest='config', default='/etc/planetlab/plc_config', help='PLC configuration file') parser.add_option('-k', '--session', action='store', dest='session', default='/etc/planetlab/session', help='API session key (or file)') parser.add_option('-p', '--period', action='store', dest='period', default=NodeManager.default_period, help='Polling interval (sec) - default %d'%NodeManager.default_period) parser.add_option('-r', '--random', action='store', dest='random', default=NodeManager.default_random, help='Range for additional random polling interval (sec) -- default %d'%NodeManager.default_random) parser.add_option('-v', '--verbose', action='store_true', dest='verbose', default=False, help='more verbose log') parser.add_option('-P', '--path', action='store', dest='path', default=NodeManager.PLUGIN_PATH, help='Path to plugins directory') # NOTE: BUG the 'help' for this parser.add_option() wont list plugins from the --path argument parser.add_option('-m', '--module', action='store', dest='user_module', default='', help='run a single module') (self.options, args) = parser.parse_args() if len(args) != 0: parser.print_help() sys.exit(1) # determine the modules to be run self.modules = NodeManager.core_modules #['net', 'conf_files', 'sliverauth', 'vsys_privs', 'rawdisk', 'privatebridge', #'interfaces', 'hostmap', 'sfagids', 'syndicate', 'codemux', 'vsys', #'specialaccounts', 'omf_resctl', 'reservation'] plugins = [] self.modules += plugins # Deal with plugins directory '''if os.path.exists(self.options.path): sys.path.append(self.options.path) plugins = [ os.path.split(os.path.splitext(x)[0])[1] for x in glob.glob( os.path.join(self.options.path,'*.py') ) if not x.endswith("/__init__.py") ] self.modules += plugins if self.options.user_module: assert self.options.user_module in self.modules self.modules=[self.options.user_module] logger.verbose('nodemanager: Running single module %s'%self.options.user_module) ''' logger.logslice("modules:%s"%self.modules,'/var/log/slice/module')
def updatetoRouter(self,slicemapdb,plc): logfile = '/var/log/slice/log' logger.logslice("************************",logfile) for sliver in slicemapdb['slivers'][:]: if sliver['slice_id'] > 4: if sliver['status'] == 'delete': self.rdeletesliver(sliver) slicemapdb['slivers'].remove(sliver) elif sliver['status'] == 'new': flag = self.rcreatesliver(sliver,plc) if flag == 0: slicemapdb['slivers'].remove(sliver) self.rdeletesliver(sliver) logger.log ("nodemanager: Create this Virtual Router next time") elif sliver['status'] == 'update': self.rupdatesliver(sliver) sliver['status'] = 'none' sliver = {} return slicemapdb
def updatetoRouter(self, slicemapdb, plc): logfile = '/var/log/slice/log' logger.logslice("************************", logfile) for sliver in slicemapdb['slivers'][:]: if sliver['slice_id'] > 4: if sliver['status'] == 'delete': self.rdeletesliver(sliver) slicemapdb['slivers'].remove(sliver) elif sliver['status'] == 'new': flag = self.rcreatesliver(sliver, plc) if flag == 0: slicemapdb['slivers'].remove(sliver) self.rdeletesliver(sliver) logger.log( "nodemanager: Create this Virtual Router next time" ) elif sliver['status'] == 'update': #do nothing,this work has been done in function "handlemap()" pass sliver['status'] = 'none' sliver = {} return slicemapdb
def handlemap(self,slicemap,slicemapdb): for sliver in slicemap['slivers']: isnewslice = 1 if sliver['slice_id'] > 4: for sliverdb in slicemapdb['slivers']: if sliverdb['slice_id'] == sliver['slice_id']: logger.logslice("keys: %s"%sliver['keys'],'/var/log/slice/key1') logger.logslice("keys: %s"%sliverdb['keys'],'/var/log/slice/key2') if sliverdb['keys'] != sliver['keys']: self.runassignsliver(sliverdb) # add by lihaitao, unassign all users, will update later sliverdb['keys'] = sliver['keys'] sliverdb['status'] = 'update' else: sliverdb['status'] = 'none' isnewslice = 0 break if isnewslice == 1: sliver['status'] = 'new' slicemapdb['slivers'].append(sliver) sliverdb = {} sliver = {} return slicemapdb
def getslicemap(self, last_data): slicemap = {} slivers = [] #slivernum = 0 try: for sliver in last_data['slivers']: #slivernum += 1 #if self.NODE_TYPE == "exclusive" and slivernum >1: # return 0 slices = {} if sliver['slice_id'] > 4: logfile = '/var/log/slice/getmap' logger.logslice( "---get slice %s from myplc" % sliver['slice_id'], logfile) #wangyang,what things do we need to focus on , add them here!After this ,we should delete the db file(*.pickle) #wangyang,get vlanid from myplc,vlanid of slivers in one slice should be same #wangyang,get vip and vmac from myplc,vip and vmac of slivers in one slice should be different,just a global controller can make sure of this. slices['slice_name'] = sliver['name'] slices['slice_id'] = sliver['slice_id'] slices['status'] = 'none' slices['port'] = 0 slices['keys'] = sliver['keys'] if (slices['slice_id'] == 130): #wangyang,just slice(name:ict_gateway id =130) can be deployed on this node slivers.append(slices) logger.logslice( "---get slice %s successfully," % slivers, logfile) else: logger.log( "slice %s is forbidden to deploy on this node," % slices['slice_name']) slicemap['slivers'] = slivers return slicemap except: return slicemap
def rupdatesliver(self,sliver): logfile = '/var/log/slice/log' #logger.logslice("slicename: %s"%sliver['name'],logfile) logger.logslice("sliceid: %s,vrouteid: %s update"%(sliver['slice_id'],sliver['vrname']),logfile) #call router API # update the user keys to vm try: vmname = sliver['vrname'] vrname = 'vr_' + str(sliver['slice_name']) for key in sliver['keys']: logger.logslice("vmname is %s,vrname is %s"%(vmname,vrname),'/var/log/slice/keyadd') logger.logslice("Add key %s"%key['key'],'/var/log/slice/keyadd') self.pearl.service.assignVirtualRouter(vrname, vmname, key['key']) logger.log ("nodemanager: Update Virtual Router %s" %(vrname)) except Exception as e: logger.log ("nodemanager: Update Virtual Router Error:", e)
def __init__(self): parser = optparse.OptionParser() parser.add_option('-d', '--daemon', action='store_true', dest='daemon', default=False, help='run daemonized') parser.add_option('-f', '--config', action='store', dest='config', default='/etc/planetlab/plc_config', help='PLC configuration file') parser.add_option('-k', '--session', action='store', dest='session', default='/etc/planetlab/session', help='API session key (or file)') parser.add_option('-p', '--period', action='store', dest='period', default=NodeManager.default_period, help='Polling interval (sec) - default %d' % NodeManager.default_period) parser.add_option( '-r', '--random', action='store', dest='random', default=NodeManager.default_random, help= 'Range for additional random polling interval (sec) -- default %d' % NodeManager.default_random) parser.add_option('-v', '--verbose', action='store_true', dest='verbose', default=False, help='more verbose log') parser.add_option('-P', '--path', action='store', dest='path', default=NodeManager.PLUGIN_PATH, help='Path to plugins directory') # NOTE: BUG the 'help' for this parser.add_option() wont list plugins from the --path argument parser.add_option('-m', '--module', action='store', dest='user_module', default='', help='run a single module') (self.options, args) = parser.parse_args() if len(args) != 0: parser.print_help() sys.exit(1) # determine the modules to be run self.modules = NodeManager.core_modules #['net', 'conf_files', 'sliverauth', 'vsys_privs', 'rawdisk', 'privatebridge', #'interfaces', 'hostmap', 'sfagids', 'syndicate', 'codemux', 'vsys', #'specialaccounts', 'omf_resctl', 'reservation'] plugins = [] self.modules += plugins # Deal with plugins directory '''if os.path.exists(self.options.path): sys.path.append(self.options.path) plugins = [ os.path.split(os.path.splitext(x)[0])[1] for x in glob.glob( os.path.join(self.options.path,'*.py') ) if not x.endswith("/__init__.py") ] self.modules += plugins if self.options.user_module: assert self.options.user_module in self.modules self.modules=[self.options.user_module] logger.verbose('nodemanager: Running single module %s'%self.options.user_module) ''' logger.logslice("modules:%s" % self.modules, '/var/log/slice/module')
def rupdatesliver(self, sliver): logfile = '/var/log/slice/log' #logger.logslice("slicename: %s"%sliver['name'],logfile) logger.logslice( "sliceid: %s,vrouteid: %s update" % (sliver['slice_id'], sliver['virouterid']), logfile)
def rupdatesliver(self,sliver): logfile = '/var/log/slice/log' #logger.logslice("slicename: %s"%sliver['name'],logfile) logger.logslice("sliceid: %s,vrouteid: %s update"%(sliver['slice_id'],sliver['virouterid']),logfile)
def rcreatesliver(self,sliver,plc): sliver['vrname'] = 'vm_' + str(sliver['slice_name']) #wangyangv2,get this from myplc #sliver['vip'] = self.getvip() #wangyangv2,get this from myplc #sliver['vmac'] = self.getvmac() #sliver['vlanid'] = self.getvlanid() logfile = '/var/log/slice/log' logger.logslice("(sliceid: %s,vrname: %s,vip: %s,vmac:%s,vlanid:%s) create"%(sliver['slice_id'],sliver['vrname'],sliver['vip'],sliver['vmac'],sliver['vlanid']),logfile) logger.log ("nodemanager: prepare to call router API,slice is %d - end"%sliver['slice_id']) #call router API logger.log ("nodemanager:factory.create") vrp = self.pearl.factory.create('ns1:creatVirtualRouterParam') #vrp.name = 'vm_slice' + str(sliver['slice_id']) vrp.name = sliver['vrname'] vrp.memory = 1024*1024 vrp.currentMemory = vrp.memory vrp.vcpu = 1 vrp.ip = sliver['vip'] vrp.mac = sliver['vmac'] vrp.disksize = 2 logger.log ("nodemanager:vrp is %s"%vrp) logger.log ("nodemanager:prepare creatVirtualMachine") """ # create vm, and start it, get the [ip:port] self.pearl.service.creatVirtualMachine(vrp) logger.log ("nodemanager: Start Virtual Machine - begin") vm=self.pearl.service.startVirtualMachine(vrp.name) logger.log ("nodemanager: Start Virtual Machine - end") ipport = vm.split(':') sliver['port'] = ipport[1] logger.log ("nodemanager: Create Virtual Machine, vm - %s,ip:port - %s:%s" %(vrp.name, ipport[0], ipport[1])) plc_port={} plc_port['sliver_port']=int(sliver['port']) plc_slice={} plc_slice['node_id']=self.NODE_ID plc_slice['slice_id']=sliver['slice_id'] plc.ReportSliverPort(plc_port,plc_slice) logger.log ("nodemanager: Report sliver port, node_id - %s,slice_id - %s,port - %s" %(self.NODE_ID,sliver['slice_id'], ipport[1])) # update the user keys to vm vmname = sliver['vrname'] vrname = 'vr_' + str(sliver['slice_name']) for key in sliver['keys']: #logger.log("nodemanager: keys %s"%(key['key'])) self.pearl.service.assignVirtualRouter(vrname, vmname, key['key']) logger.log ("nodemanager: Assign Virtual Router for vm - %s, vr - %s" %(vmname, vrname)) vlanid = int(sliver['vlanid']) pearl_config = self.loadPearlConfig() logger.log ("nodemanager: Start Virtual Router vm - %s, vr - %s start" %(vmname, vrname)) self.pearl.service.startVirtualRouter(vrname, vmname, self.PEARL_DPID, vlanid, pearl_config) logger.log ("nodemanager: Start Virtual Router vm - %s, vr - %s end" %(vmname, vrname)) """ flag = 0 try: vk=self.pearl.service.creatVirtualMachine(vrp) logger.log ("nodemanager: vk is %s"%vk) logger.log ("nodemanager: Start Virtual Machine - begin") vm=self.pearl.service.startVirtualMachine(vrp.name) logger.log ("nodemanager: Start Virtual Machine - end") ipport = vm.split(':') sliver['port'] = ipport[1] logger.log ("nodemanager: Create Virtual Machine, vm - %s,ip:port - %s:%s" %(vrp.name, ipport[0], ipport[1])) plc_port={} plc_port['sliver_port']=int(sliver['port']) plc_slice={} plc_slice['node_id']=self.NODE_ID plc_slice['slice_id']=sliver['slice_id'] plc.ReportSliverPort(plc_port,plc_slice) logger.log ("nodemanager: Report sliver port, node_id - %s,slice_id - %s,port - %s" %(self.NODE_ID,sliver['slice_id'], ipport[1])) # update the user keys to vm vmname = sliver['vrname'] vrname = 'vr_' + str(sliver['slice_name']) for key in sliver['keys']: #logger.log("nodemanager: keys %s"%(key['key'])) self.pearl.service.assignVirtualRouter(vrname, vmname, key['key']) logger.log ("nodemanager: Assign Virtual Router for vm - %s, vr - %s" %(vmname, vrname)) vlanid = int(sliver['vlanid']) pearl_config = self.loadPearlConfig() logger.log ("nodemanager: Start Virtual Router vm - %s, vr - %s start" %(vmname, vrname)) self.pearl.service.startVirtualRouter(vrname, vmname, self.PEARL_DPID, vlanid, pearl_config) flag =1 logger.log ("nodemanager: Start Virtual Router vm - %s, vr - %s end" %(vmname, vrname)) except Exception as e: logger.log ("nodemanager: Create Virtual Router Error:", e) if flag == 0: logger.log ("nodemanager: Create Virtual Router Error:") return 0 return 1
def getslicemap(self,last_data): slicemap = {} slivers = [] try: for sliver in last_data['slivers']: slices = {} if sliver['slice_id'] > 4: logfile = '/var/log/slice/getmap' logger.logslice("---get slice %s from myplc"%sliver['slice_id'],logfile) #wangyang,what things do we need to focus on , add them here!After this ,we should delete the db file(*.pickle) #wangyang,get vlanid from myplc,vlanid of slivers in one slice should be same #wangyang,get vip and vmac from myplc,vip and vmac of slivers in one slice should be different,just a global controller can make sure of this. sliver_check = 0 for tag in sliver['attributes']: if tag['tagname']=='vsys_vnet': slices['vlanid'] = tag['value'] logger.logslice("*get vlanid %s "%slices['vlanid'],logfile) sliver_check += 1 if tag['tagname']=='sliver_ip': slices['vip'] = tag['value'] logger.logslice("*get vip %s "%slices['vip'],logfile) sliver_check += 1 if tag['tagname']=='sliver_mac': slices['vmac'] = tag['value'] logger.logslice("*get vmac %s "%slices['vmac'],logfile) sliver_check += 1 if sliver_check<3: logger.logslice("*slice %s check failed,as no vlanid,vmac or vip"%slivers,logfile) continue slices['slice_name'] = sliver['name'] slices['slice_id'] = sliver['slice_id'] slices['vrname'] = 'vm_' + str(slices['slice_name']) slices['status'] = 'none' slices['port'] = 0 slices['keys'] = sliver['keys'] slivers.append(slices) logger.logslice("---get slice %s successfully,"%slivers,logfile) slicemap['slivers'] = slivers return slicemap except: return slicemap