Exemplo n.º 1
0
        def createlgnetworks(keys,values):
            
            phynetlen = (len(keys) - len(networkmap)*2 - 1)//2
            phynetkeys = keys[1 + len(networkmap)*2 : 1 + len(networkmap)*2 + phynetlen]
            phynetvalues = values[1 + len(networkmap)*2 : 1 + len(networkmap)*2 + phynetlen]
            
            phynetmapkeys = keys[1+len(networkmap)*2 + phynetlen:]
            phynetmapvalues = values[1+len(networkmap)*2 + phynetlen:]
            
            phynetmapdict = dict(zip(phynetkeys,zip(phynetvalues,phynetmapvalues)))
            

            for i in range(0,len(networks)):
                phynet,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                
                if not phynet or not phymap:
                    raise ValueError("physicalnetwork key object not existed "+\
                            networkmap[i][0].physicalnetwork.getkey()) 
                # set lgnetwork
                values[1+i] = set_new(values[i + 1],networkmap[i][0])
                # set lgnetworkmap
                values[1+i+len(networks)] = set_new(values[i + 1 + len(networks)],networkmap[i][1])
                # set phynetmap
              
                #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                phymap.logicnetworks.dataset().add(networkmap[i][0].create_weakreference())

                values[0].set.dataset().add(networkmap[i][0].create_weakreference())


            return keys[0:1] + keys[1:1+len(networks)+len(networks)]+phynetmapkeys,\
                    values[0:1]+values[1:1+len(networks)+len(networks)] + phynetmapvalues
Exemplo n.º 2
0
 def create_phys(physet, *phynets):
     return_nets = [None, None] * len(new_networks)
     for i in range(0, len(new_networks)):
         return_nets[i * 2] = set_new(phynets[i * 2], new_networks[i][0])
         return_nets[i * 2 + 1] = set_new(phynets[i * 2 + 1], new_networks[i][1])
         physet.set.dataset().add(new_networks[i][0].create_weakreference())
     return [physet] + return_nets
Exemplo n.º 3
0
        def createphynetworks(keys,values):
            for i in range(0,len(new_networks)): 
                values[i + 1] = set_new(values[i + 1],new_networks[i][0])
                values[i + 1 + len(new_networks)] = set_new(values[i + 1 + len(new_networks)],
                        new_networks[i][1])
                values[0].set.dataset().add(new_networks[i][0].create_weakreference())

            return keys,values
Exemplo n.º 4
0
        def createphynetworks(keys,values):
            for i in range(0,len(new_networks)): 
                values[i + 1] = set_new(values[i + 1],new_networks[i][0])
                values[i + 1 + len(new_networks)] = set_new(values[i + 1 + len(new_networks)],
                        new_networks[i][1])
                values[0].set.dataset().add(new_networks[i][0].create_weakreference())

            return keys,values
Exemplo n.º 5
0
 def create_logs(logset, *networks):
     phy_maps = list(networks[len(new_networks) * 2 : len(new_networks) * 2 + len(physical_networks)])
     phy_nets = list(networks[len(new_networks) * 2 + len(physical_networks):])
     phy_dict = dict(zip(physical_networks, zip(phy_nets, phy_maps)))
     return_nets = [None, None] * len(new_networks)
     for i in range(0, len(new_networks)):
         return_nets[2 * i] = set_new(networks[2 * i], new_networks[i][0])
         return_nets[2 * i + 1] = set_new(networks[2 * i + 1], new_networks[i][1])
     for n in return_nets[::2]:
         phynet, phymap = phy_dict.get(n.physicalnetwork.getkey())
         if phynet is None:
             _, (phyid,) = PhysicalNetwork._getIndices(n.physicalnetwork.getkey())
             raise ValueError('Physical network %r does not exist' % (phyid,))
         else:
             if phynet.type == 'vlan':
                 if hasattr(n, 'vlanid'):
                     n.vlanid = int(n.vlanid)
                     if n.vlanid <= 0 or n.vlanid >= 4095:
                         raise ValueError('Invalid VLAN ID')
                     # VLAN id is specified
                     if str(n.vlanid) in phymap.network_allocation:
                         raise ValueError('VLAN ID %r is already allocated in physical network %r' % (n.vlanid,phynet.id))
                     else:
                         for start,end in phynet.vlanrange:
                             if start <= n.vlanid <= end:
                                 break
                         else:
                             raise ValueError('VLAN ID %r is not in vlan range of physical network %r' % (n.vlanid,phynet.id))
                     phymap.network_allocation[str(n.vlanid)] = n.create_weakreference()
                 else:
                     # Allocate a new VLAN id
                     for start,end in phynet.vlanrange:
                         for vlanid in range(start, end + 1):
                             if str(vlanid) not in phymap.network_allocation:
                                 break
                         else:
                             continue
                         break
                     else:
                         raise ValueError('Not enough VLAN ID to be allocated in physical network %r' % (phynet.id,))
                     n.vlanid = vlanid
                     phymap.network_allocation[str(vlanid)] = n.create_weakreference()
             else:
                 if phymap.network_allocation:
                     raise ValueError('Physical network %r is already allocated by another logical network', (phynet.id,))
                 phymap.network_allocation['native'] = n.create_weakreference()
             phymap.networks.dataset().add(n.create_weakreference())
         logset.set.dataset().add(n.create_weakreference())
     return [logset] + return_nets + phy_maps
Exemplo n.º 6
0
        def createpyports(keys, values):
            phynetlen = (len(keys) - 1 - len(portobjs)) // 2

            phynetkeys = keys[1 + len(portobjs):1 + len(portobjs) + phynetlen]
            phynetvalues = values[1 + len(portobjs):1 + len(portobjs) +
                                  phynetlen]

            phynetmapkeys = keys[1 + len(portobjs) + phynetlen:]
            phynetmapvalues = values[1 + len(portobjs) + phynetlen:]

            phynetdict = dict(
                zip(phynetkeys, zip(phynetvalues, phynetmapvalues)))

            for i in range(0, len(portobjs)):
                values[i + 1] = set_new(values[i + 1], portobjs[i])

                key = portobjs[i].physicalnetwork.getkey()
                phynet, phymap = phynetdict.get(key)
                if not phynet or not phymap:
                    raise ValueError("key object not existed " + key)

                phymap.ports.dataset().add(portobjs[i].create_weakreference())
                values[0].set.dataset().add(portobjs[i].create_weakreference())

            return keys[0:1 + len(ports)] + phynetmapkeys, values[
                0:1 + len(ports)] + phynetmapvalues
Exemplo n.º 7
0
        def createrouterdb(keys,values):
            routerset = values[0]

            for i in range(0,len(routerkeys)):
                values[i+1] = set_new(values[i+1],routerobjects[i])
                routerset.set.dataset().add(routerobjects[i].create_weakreference())

            return keys,values
Exemplo n.º 8
0
        def createlgnetworks(keys,values):
            
            phynetlen = (len(keys) - len(networkmap)*2 - 1)//2
            phynetkeys = keys[1 + len(networkmap)*2 : 1 + len(networkmap)*2 + phynetlen]
            phynetvalues = values[1 + len(networkmap)*2 : 1 + len(networkmap)*2 + phynetlen]
            
            phynetmapkeys = keys[1+len(networkmap)*2 + phynetlen:]
            phynetmapvalues = values[1+len(networkmap)*2 + phynetlen:]
            
            phynetmapdict = dict(zip(phynetkeys,zip(phynetvalues,phynetmapvalues)))
            


            for i in range(0,len(networks)):
                
                phynet,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                
                if not phynet or not phymap:
                    raise ValueError("physicalnetwork key object not existed "+\
                            networkmap[i][0].physicalnetwork.getkey()) 
                
                if phymap.logicnetworks.dataset():
                    raise ValueError("native physicalnetwork only have one logicalnetwork")

                # set lgnetwork
                values[1+i] = set_new(values[i + 1],networkmap[i][0])
                # set lgnetworkmap
                values[1+i+len(networks)] = set_new(values[i + 1 + len(networks)],networkmap[i][1])
                # set phynetmap
              
                #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                phymap.logicnetworks.dataset().add(networkmap[i][0].create_weakreference())

                values[0].set.dataset().add(networkmap[i][0].create_weakreference())
       
            return keys[0:1] + keys[1:1+len(networks)+len(networks)]+phynetmapkeys,\
                    values[0:1]+values[1:1+len(networks)+len(networks)] + phynetmapvalues
Exemplo n.º 9
0
 def create_ports(portset, *objs):
     old_ports = objs[:len(new_ports)]
     logmaps = list(objs[len(new_ports):len(new_ports) + len(logical_networks)])
     lognets = list(objs[len(new_ports) + len(logical_networks):])
     logdict = dict(zip(logical_networks, zip(lognets, logmaps)))
     return_ports = [None] * len(new_ports)
     for i in range(0, len(new_ports)):
         return_ports[i] = set_new(old_ports[i], new_ports[i])
     for p in return_ports:
         lognet, logmap = logdict[p.logicalnetwork.getkey()]
         if lognet is None:
             _, (logid,) = LogicalNetwork._getIndices(p.logicalnetwork.getkey())
             raise ValueError('Logical network %r does not exist' % (logid,))
         logmap.ports.dataset().add(p.create_weakreference())
     portset.set.dataset().add(p.create_weakreference())
     return [portset] + return_ports + logmaps
Exemplo n.º 10
0
 def create_ports(portset, *objs):
     old_ports = objs[:len(new_ports)]
     phymaps = list(objs[len(new_ports):len(new_ports) + len(physical_networks)])
     phynets = list(objs[len(new_ports) + len(physical_networks):])
     phydict = dict(zip(physical_networks, zip(phynets, phymaps)))
     return_ports = [None] * len(new_ports)
     for i in range(0, len(new_ports)):
         return_ports[i] = set_new(old_ports[i], new_ports[i])
     for p in return_ports:
         phynet, phymap = phydict[p.physicalnetwork.getkey()]
         if phynet is None:
             _, (phyid,) = PhysicalNetwork._getIndices(p.physicalnetwork.getkey())
             raise ValueError('Physical network %r does not exist' % (phyid,))
         phymap.ports.dataset().add(p.create_weakreference())
     portset.set.dataset().add(p.create_weakreference())
     return [portset] + return_ports + phymaps
Exemplo n.º 11
0
 def _updater(keys, values, timestamp):
     reservepool = values[0]
     reserve_new_pool = set_new(values[1], new_pool)
     remove_keys = self._remove_staled_pools(
         reservepool, timestamp)
     used_cidrs = set(
         cidr
         for _, (cidr, _) in reservepool.reserved_pools.items())
     if not reserve_new_pool.pool:
         # pool is not specified
         for _ in range(0, self.cidrrange_end):
             reservepool.nextalloc += 1
             if reservepool.nextalloc >= self.cidrrange_end:
                 reservepool.nextalloc = 0
             new_subnet = self.cidrrange_subnet | (
                 reservepool.nextalloc << 8)
             new_cidr = ip4_addr.formatter(new_subnet) + '/24'
             if new_cidr not in used_cidrs:
                 break
         reserve_new_pool.pool = new_cidr
         reserve_new_pool.subpool = ''
     rets[:] = [reserve_new_pool.pool]
     if reserve_new_pool.pool in used_cidrs:
         # We must wait until this CIDR is released
         raise IPAMUsingException
     reservepool.reserved_pools[reserve_new_pool.id] = \
                                        [reserve_new_pool.pool,
                                        timestamp + self.pooltimeout * 1000000]
     marker = IPAMReserveMarker.create_instance(
         reserve_new_pool.pool)
     if marker.getkey() in remove_keys:
         remove_keys.remove(marker.getkey())
         return (tuple(keys[0:2]) + tuple(remove_keys),
                 (reservepool, reserve_new_pool) +
                 (None, ) * len(remove_keys))
     else:
         return (tuple(keys[0:2]) + (marker.getkey(), ) +
                 tuple(remove_keys),
                 (reservepool, reserve_new_pool, marker) +
                 (None, ) * len(remove_keys))
Exemplo n.º 12
0
 def _walker(walk, write):
     for p, port in zip(new_ports, ports):
         key = p.getkey()
         try:
             value = walk(key)
         except KeyError:
             pass
         else:
             new_port = self._createphysicalport(**port)
             value = set_new(value, new_port)
             try:
                 phynet = walk(new_port.physicalnetwork.getkey())
             except KeyError:
                 pass
             else:
                 if phynet is None:
                     _, (phyid, ) = PhysicalNetwork._getIndices(
                         p.physicalnetwork.getkey())
                     raise ValueError(
                         'Physical network %r does not exist' %
                         (phyid, ))
             write(key, value)
             try:
                 phymap = walk(
                     PhysicalNetworkMap._network.leftkey(
                         new_port.physicalnetwork))
             except KeyError:
                 pass
             else:
                 if phymap is not None:
                     phymap.ports.dataset().add(
                         value.create_weakreference())
                     write(phymap.getkey(), phymap)
             try:
                 portset = walk(PhysicalPortSet.default_key())
             except KeyError:
                 pass
             else:
                 portset.set.dataset().add(value.create_weakreference())
                 write(portset.getkey(), portset)
Exemplo n.º 13
0
 def _walker(walk, write):
     for p in new_ports:
         key = p.getkey()
         try:
             value = walk(key)
         except KeyError:
             pass
         else:
             value = set_new(value, p)
             try:
                 lognet = walk(value.logicalnetwork.getkey())
             except KeyError:
                 pass
             else:
                 if lognet is None:
                     _, (logid, ) = LogicalNetwork._getIndices(
                         value.logicalnetwork.getkey())
                     raise ValueError(
                         "Logical network %r does not exist" %
                         (logid, ))
             try:
                 logmap = walk(
                     LogicalNetworkMap._network.leftkey(
                         value.logicalnetwork))
             except KeyError:
                 pass
             else:
                 if logmap is not None:
                     logmap.ports.dataset().add(
                         value.create_weakreference())
                     write(key, value)
                     write(logmap.getkey(), logmap)
             try:
                 portset = walk(LogicalPortSet.default_key())
             except KeyError:
                 pass
             else:
                 portset.set.dataset().add(value.create_weakreference())
                 write(portset.getkey(), portset)
Exemplo n.º 14
0
        def createpyports(keys,values):
            phynetlen = (len(keys) - 1 - len(portobjs))//2
            
            phynetkeys = keys[1+len(portobjs):1+len(portobjs)+phynetlen]
            phynetvalues = values[1+len(portobjs):1+len(portobjs)+phynetlen]
            
            phynetmapkeys = keys[1+len(portobjs)+phynetlen:]
            phynetmapvalues = values[1+len(portobjs)+phynetlen:]
            
            phynetdict = dict(zip(phynetkeys,zip(phynetvalues,phynetmapvalues)))

            for i in range(0,len(portobjs)):
                values[i + 1] = set_new(values[i + 1],portobjs[i])
                
                key = portobjs[i].physicalnetwork.getkey()
                phynet,phymap = phynetdict.get(key)
                if not phynet or not phymap:
                    raise ValueError("key object not existed "+ key) 

                phymap.ports.dataset().add(portobjs[i].create_weakreference())
                values[0].set.dataset().add(portobjs[i].create_weakreference())

            return keys[0:1+len(ports)] + phynetmapkeys,values[0:1+len(ports)] + phynetmapvalues
Exemplo n.º 15
0
        def addrouterinterface(keys, values):

            rkeys = keys[0:len(routerkeys)]
            robjs = values[0:len(routerkeys)]

            snkeys = keys[len(routerkeys):len(routerkeys) + len(subnetkeys)]
            snobjs = values[len(routerkeys):len(routerkeys) + len(subnetkeys)]

            snmkeys = keys[len(routerkeys) + len(subnetkeys):len(routerkeys) +
                           len(subnetkeys) + len(subnetmapkeys)]
            snmobjs = values[len(routerkeys) +
                             len(subnetkeys):len(routerkeys) +
                             len(subnetkeys) + len(subnetmapkeys)]

            rpkeys = keys[len(routerkeys) + len(subnetkeys) +
                          len(subnetmapkeys):]
            rpobjs = values[len(routerkeys) + len(subnetkeys) +
                            len(subnetmapkeys):]

            rdict = dict(zip(rkeys, robjs))
            sndict = dict(zip(snkeys, zip(snobjs, snmobjs)))
            rpdict = dict(zip(rpkeys, rpobjs))

            for i, interface in enumerate(newinterfaces):
                routerport = interface['id']
                router = interface['router']
                subnet = interface['subnet']

                routerobj = rdict.get(VRouter.default_key(router))
                subnetobj, subnetmapobj = sndict.get(
                    SubNet.default_key(subnet))
                newrouterport = newrouterportdict.get(
                    RouterPort.default_key(routerport))
                routerport = rpdict.get(RouterPort.default_key(routerport))

                if routerobj and subnetobj and subnetmapobj:

                    # now subnet only have one router ,,so check it
                    if not hasattr(subnetobj, 'router'):

                        # new router port special ip address , we check it in subnetmap
                        if hasattr(newrouterport, "ip_address"):
                            ipaddress = ip4_addr(newrouterport.ip_address)

                            n, p = parse_ip4_network(subnetobj.cidr)

                            if not ip_in_network(ipaddress, n, p):
                                raise ValueError(
                                    " special ip address not in subnet cidr")

                            if str(ipaddress
                                   ) not in subnetmapobj.allocated_ips:
                                subnetmapobj.allocated_ips[str(
                                    ipaddress
                                )] = newrouterport.create_weakreference()
                            else:
                                raise ValueError(
                                    " ip address have used in subnet " +
                                    newrouterport.ip_address)
                        else:
                            # not have special ip address, special gateway to this only router port
                            # gateway in subnet existed be sure

                            #
                            # when this case , special subnet gateway as ip_address
                            # but we do not set ip_address attr ,  when subnet gateway change ,
                            # we do not need to change router port attr

                            #setattr(newrouterport,"ip_address",subnetobj.gateway)

                            # it may be subnet not have gateway, checkout it
                            if not hasattr(subnetobj, "gateway"):
                                raise ValueError(
                                    " interface not special ip_address and subnet has no gateway"
                                )

                        #routerport = set_new(routerport,newrouterport)
                        values[len(routerkeys) + len(subnetkeys) +
                               len(subnetmapkeys) + i] = set_new(
                                   values[len(routerkeys) + len(subnetkeys) +
                                          len(subnetmapkeys) + i],
                                   routerportobjects[i])
                        subnetobj.router = newrouterport.create_weakreference()
                        routerobj.interfaces.dataset().add(
                            newrouterport.create_weakreference())
                    else:
                        raise ValueError(" subnet " + subnet +
                                         " have router port " +
                                         subnetobj.router.getkey())
                else:
                    raise ValueError(" routerobj " + router + "or subnetobj " +
                                     subnet + " not existed ")

            return keys, values
Exemplo n.º 16
0
        def createlgnetworks(keys,values):
            
            phynetlen = (len(keys) - len(networkmap)*2 - 1)//2
            phynetkeys = keys[1 + len(networkmap)*2 : 1 + len(networkmap)*2 + phynetlen]
            phynetvalues = values[1 + len(networkmap)*2 : 1 + len(networkmap)*2 + phynetlen]
            
            phynetmapkeys = keys[1+len(networkmap)*2 + phynetlen:]
            phynetmapvalues = values[1+len(networkmap)*2 + phynetlen:]
            
            phynetmapdict = dict(zip(phynetkeys,zip(phynetvalues,phynetmapvalues)))
            
            #
            # have an problem ,  when [{...},{... vni is least or last+1}]
            # first one will allocate least one vni,second will conflict  
            #
            # so set new lgnet that have user defind 'vni' first
            for i in range(0,len(networks)):
                if hasattr(networkmap[i][0],'vni'):

                    vni = int(networkmap[i][0].vni)
                    networkmap[i][0].vni = vni
                    phynet,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())

                    if not phynet or not phymap:
                        raise ValueError("physicalnetwork key object not existed "+\
                                networkmap[i][0].physicalnetwork.getkey()) 

                    if _isavaliablevni(phynet.vnirange,phymap.network_allocation.keys(),vni):
                        phymap.network_allocation[str(vni)] = networkmap[i][0].create_weakreference()
                    else:
                        raise ValueError("user defind vni has been used or out of range!")
                    
                    # set lgnetwork
                    values[1+i] = set_new(values[i + 1],networkmap[i][0])
                    # set lgnetworkmap
                    values[1+i+len(networks)] = set_new(values[i + 1 + len(networks)],networkmap[i][1])
                    # set phynetmap
                  
                    #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    phymap.logicnetworks.dataset().add(networkmap[i][0].create_weakreference())

                    values[0].set.dataset().add(networkmap[i][0].create_weakreference())


            for i in range(0,len(networks)):
                if not getattr(networkmap[i][0],'vni',None):
                    # there is no 'vni' in lgnetwork
                    # allocated one from vnirange

                    phynet,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    
                    if not phynet or not phymap:
                        raise ValueError("physicalnetwork key object not existed "+\
                                networkmap[i][0].physicalnetwork.getkey()) 

                    vni = _findavaliablevni(phynet.vnirange,phymap.network_allocation.keys())
                    if not vni:
                        raise ValueError("there is no avaliable vni")
                    setattr(networkmap[i][0],'vni',vni)
                    phymap.network_allocation[str(vni)] = networkmap[i][0].create_weakreference()
                    
                    # set lgnetwork
                    values[1+i] = set_new(values[i + 1],networkmap[i][0])
                    # set lgnetworkmap
                    values[1+i+len(networks)] = set_new(values[i + 1 + len(networks)],networkmap[i][1])
                    # set phynetmap
                  
                    #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    phymap.logicnetworks.dataset().add(networkmap[i][0].create_weakreference())

                    values[0].set.dataset().add(networkmap[i][0].create_weakreference())
            endpointsets = [VXLANEndpointSet.create_instance(nm[0].id) for nm in networkmap]
            return (tuple(itertools.chain(keys[0:1], keys[1:1+len(networks)+len(networks)], phynetmapkeys,
                                         (e.getkey() for e in endpointsets))),\
                    tuple(itertools.chain(values[0:1], values[1:1+len(networks)+len(networks)],
                                          phynetmapvalues, endpointsets)))
Exemplo n.º 17
0
 def _updater(dockerinfo):
     dockerinfo = set_new(dockerinfo, info)
     return (dockerinfo, )
Exemplo n.º 18
0
        def createlgnetworks(keys,values):
            
            phynetlen = (len(keys) - len(networkmap)*2 - 1)//2
            phynetkeys = keys[1 + len(networkmap)*2 : 1 + len(networkmap)*2 + phynetlen]
            phynetvalues = values[1 + len(networkmap)*2 : 1 + len(networkmap)*2 + phynetlen]
            
            phynetmapkeys = keys[1+len(networkmap)*2 + phynetlen:]
            phynetmapvalues = values[1+len(networkmap)*2 + phynetlen:]
            
            phynetmapdict = dict(zip(phynetkeys,zip(phynetvalues,phynetmapvalues)))
            
            #
            # have an problem ,  when [{...},{... vlanid is least or last+1}]
            # first one will allocate least one vlanid,second will conflict  
            #
            # so set new lgnet that have user defind 'vlanid' first
            for i in range(0,len(networks)):
                if hasattr(networkmap[i][0],'vlanid'):

                    vlanid = int(networkmap[i][0].vlanid)
                    networkmap[i][0].vlanid = vlanid
                    phynet,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())

                    if not phynet or not phymap:
                        raise ValueError("physicalnetwork key object not existed "+\
                                networkmap[i][0].physicalnetwork.getkey()) 

                    if _isavaliablevlanid(phynet.vlanrange,phymap.network_allocation.keys(),vlanid):
                        phymap.network_allocation[str(vlanid)] = networkmap[i][0].create_weakreference()
                    else:
                        raise ValueError("user defind vlan id has been used or out of range!")
                    
                    # set lgnetwork
                    values[1+i] = set_new(values[i + 1],networkmap[i][0])
                    # set lgnetworkmap
                    values[1+i+len(networks)] = set_new(values[i + 1 + len(networks)],networkmap[i][1])
                    # set phynetmap
                  
                    #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    phymap.logicnetworks.dataset().add(networkmap[i][0].create_weakreference())

                    values[0].set.dataset().add(networkmap[i][0].create_weakreference())


            for i in range(0,len(networks)):
                if not getattr(networkmap[i][0],'vlanid',None):
                    # there is no 'vlanid' in lgnetwork
                    # allocated one from vlanrange

                    phynet,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    
                    if not phynet or not phymap:
                        raise ValueError("physicalnetwork key object not existed "+\
                                networkmap[i][0].physicalnetwork.getkey()) 

                    vlanid = _findavaliablevlanid(phynet.vlanrange,phymap.network_allocation.keys())
                    if not vlanid:
                        raise ValueError("there is no avaliable vlan id")
                    setattr(networkmap[i][0],'vlanid',vlanid)
                    phymap.network_allocation[str(vlanid)] = networkmap[i][0].create_weakreference()
                    
                    # set lgnetwork
                    values[1+i] = set_new(values[i + 1],networkmap[i][0])
                    # set lgnetworkmap
                    values[1+i+len(networks)] = set_new(values[i + 1 + len(networks)],networkmap[i][1])
                    # set phynetmap
                  
                    #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    phymap.logicnetworks.dataset().add(networkmap[i][0].create_weakreference())

                    values[0].set.dataset().add(networkmap[i][0].create_weakreference())
            return keys[0:1] + keys[1:1+len(networks)+len(networks)]+phynetmapkeys,\
                    values[0:1]+values[1:1+len(networks)+len(networks)] + phynetmapvalues
Exemplo n.º 19
0
 def create_phy(physet, phynet, phymap):
     phynet = set_new(phynet, new_network)
     phymap = set_new(phymap, new_map)
     physet.set.dataset().add(phynet.create_weakreference())
     return [physet, phynet, phymap]
Exemplo n.º 20
0
        def createlgnetworks(keys, values):

            phynetlen = (len(keys) - len(networkmap) * 2 - 1) // 2
            phynetkeys = keys[1 + len(networkmap) * 2:1 + len(networkmap) * 2 +
                              phynetlen]
            phynetvalues = values[1 + len(networkmap) * 2:1 +
                                  len(networkmap) * 2 + phynetlen]

            phynetmapkeys = keys[1 + len(networkmap) * 2 + phynetlen:]
            phynetmapvalues = values[1 + len(networkmap) * 2 + phynetlen:]

            phynetmapdict = dict(
                zip(phynetkeys, zip(phynetvalues, phynetmapvalues)))

            #
            # have an problem ,  when [{...},{... vni is least or last+1}]
            # first one will allocate least one vni,second will conflict
            #
            # so set new lgnet that have user defind 'vni' first
            for i in range(0, len(networks)):
                if hasattr(networkmap[i][0], 'vni'):

                    vni = int(networkmap[i][0].vni)
                    networkmap[i][0].vni = vni
                    phynet, phymap = phynetmapdict.get(
                        networkmap[i][0].physicalnetwork.getkey())

                    if not phynet or not phymap:
                        raise ValueError("physicalnetwork key object not existed "+\
                                networkmap[i][0].physicalnetwork.getkey())

                    if _isavaliablevni(phynet.vnirange,
                                       phymap.network_allocation.keys(), vni):
                        phymap.network_allocation[str(
                            vni)] = networkmap[i][0].create_weakreference()
                    else:
                        raise ValueError(
                            "user defind vni has been used or out of range!")

                    # set lgnetwork
                    values[1 + i] = set_new(values[i + 1], networkmap[i][0])
                    # set lgnetworkmap
                    values[1 + i + len(networks)] = set_new(
                        values[i + 1 + len(networks)], networkmap[i][1])
                    # set phynetmap

                    #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    phymap.logicnetworks.dataset().add(
                        networkmap[i][0].create_weakreference())

                    values[0].set.dataset().add(
                        networkmap[i][0].create_weakreference())

            for i in range(0, len(networks)):
                if not getattr(networkmap[i][0], 'vni', None):
                    # there is no 'vni' in lgnetwork
                    # allocated one from vnirange

                    phynet, phymap = phynetmapdict.get(
                        networkmap[i][0].physicalnetwork.getkey())

                    if not phynet or not phymap:
                        raise ValueError("physicalnetwork key object not existed "+\
                                networkmap[i][0].physicalnetwork.getkey())

                    vni = _findavaliablevni(phynet.vnirange,
                                            phymap.network_allocation.keys())
                    if not vni:
                        raise ValueError("there is no avaliable vni")
                    setattr(networkmap[i][0], 'vni', vni)
                    phymap.network_allocation[str(
                        vni)] = networkmap[i][0].create_weakreference()

                    # set lgnetwork
                    values[1 + i] = set_new(values[i + 1], networkmap[i][0])
                    # set lgnetworkmap
                    values[1 + i + len(networks)] = set_new(
                        values[i + 1 + len(networks)], networkmap[i][1])
                    # set phynetmap

                    #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    phymap.logicnetworks.dataset().add(
                        networkmap[i][0].create_weakreference())

                    values[0].set.dataset().add(
                        networkmap[i][0].create_weakreference())
            endpointsets = [
                VXLANEndpointSet.create_instance(nm[0].id) for nm in networkmap
            ]
            return (tuple(itertools.chain(keys[0:1], keys[1:1+len(networks)+len(networks)], phynetmapkeys,
                                         (e.getkey() for e in endpointsets))),\
                    tuple(itertools.chain(values[0:1], values[1:1+len(networks)+len(networks)],
                                          phynetmapvalues, endpointsets)))
Exemplo n.º 21
0
        def createlgnetworks(keys, values):

            phynetlen = (len(keys) - len(networkmap) * 2 - 1) // 2
            phynetkeys = keys[1 + len(networkmap) * 2:1 + len(networkmap) * 2 +
                              phynetlen]
            phynetvalues = values[1 + len(networkmap) * 2:1 +
                                  len(networkmap) * 2 + phynetlen]

            phynetmapkeys = keys[1 + len(networkmap) * 2 + phynetlen:]
            phynetmapvalues = values[1 + len(networkmap) * 2 + phynetlen:]

            phynetmapdict = dict(
                zip(phynetkeys, zip(phynetvalues, phynetmapvalues)))
            """
            #
            # have an problem ,  when [{...},{... sid is least or last+1}]
            # first one will allocate least one vlanid,second will conflict  
            #
            # so set new lgnet that have user defind 'vlanid' first
            for i in range(0,len(networks)):
                if hasattr(networkmap[i][0],'sid'):

                    sid = int(networkmap[i][0].sid)
                    networkmap[i][0].sid = sid
                    phynet,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())

                    if not phynet or not phymap:
                        raise ValueError("physicalnetwork key object not existed "+\
                                networkmap[i][0].physicalnetwork.getkey()) 

                    if _isavaliablesid(phymap.network_allocation.keys(),sid):
                        phymap.network_allocation[str(sid)] = networkmap[i][0].create_weakreference()
                    else:
                        raise ValueError("user defind sid has been used or out of range!" + sid)
                    
                    # set lgnetwork
                    values[1+i] = set_new(values[i + 1],networkmap[i][0])
                    # set lgnetworkmap
                    values[1+i+len(networks)] = set_new(values[i + 1 + len(networks)],networkmap[i][1])
                    # set phynetmap
                  
                    #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    phymap.logicnetworks.dataset().add(networkmap[i][0].create_weakreference())

                    values[0].set.dataset().add(networkmap[i][0].create_weakreference())


            for i in range(0,len(networks)):
                if not getattr(networkmap[i][0],'sid',None):
                    # there is no 'sid' in lgnetwork
                    # allocate it max in allocate + 1
                    phynet,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    
                    if not phynet or not phymap:
                        raise ValueError("physicalnetwork key object not existed "+\
                                networkmap[i][0].physicalnetwork.getkey()) 

                    sid = _findavaliablesid(phymap.network_allocation.keys())
                    if not sid:
                        raise ValueError("there is no avaliable sid")
                    setattr(networkmap[i][0],'sid',sid)
                    phymap.network_allocation[str(sid)] = networkmap[i][0].create_weakreference()
                    
                    # set lgnetwork
                    values[1+i] = set_new(values[i + 1],networkmap[i][0])
                    # set lgnetworkmap
                    values[1+i+len(networks)] = set_new(values[i + 1 + len(networks)],networkmap[i][1])
                    # set phynetmap
                  
                    #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                    phymap.logicnetworks.dataset().add(networkmap[i][0].create_weakreference())

                    values[0].set.dataset().add(networkmap[i][0].create_weakreference())
            """

            for i in range(0, len(networks)):
                phynet, phymap = phynetmapdict.get(
                    networkmap[i][0].physicalnetwork.getkey())

                if not phynet or not phymap:
                    raise ValueError("physicalnetwork key object not existed "+\
                            networkmap[i][0].physicalnetwork.getkey())
                # set lgnetwork
                values[1 + i] = set_new(values[i + 1], networkmap[i][0])
                # set lgnetworkmap
                values[1 + i + len(networks)] = set_new(
                    values[i + 1 + len(networks)], networkmap[i][1])
                # set phynetmap

                #_,phymap = phynetmapdict.get(networkmap[i][0].physicalnetwork.getkey())
                phymap.logicnetworks.dataset().add(
                    networkmap[i][0].create_weakreference())

                values[0].set.dataset().add(
                    networkmap[i][0].create_weakreference())


            return keys[0:1] + keys[1:1+len(networks)+len(networks)]+phynetmapkeys,\
                    values[0:1]+values[1:1+len(networks)+len(networks)] + phynetmapvalues
Exemplo n.º 22
0
 def create_phy(physet, phynet, phymap):
     phynet = set_new(phynet, new_network)
     phymap = set_new(phymap, new_map)
     physet.set.dataset().add(phynet.create_weakreference())
     return [physet, phynet, phymap]