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
Ejemplo n.º 2
0
    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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
 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
Ejemplo n.º 5
0
 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
Ejemplo n.º 6
0
    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')
Ejemplo n.º 7
0
 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
Ejemplo n.º 9
0
   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
Ejemplo n.º 11
0
 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)
Ejemplo n.º 12
0
    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')
Ejemplo n.º 13
0
 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)
Ejemplo n.º 14
0
 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)
Ejemplo n.º 15
0
    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
Ejemplo n.º 16
0
    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