예제 #1
0
 def allocate_processor(logicalnetwork, walk, write, *, parameters):
     if 'vlanid' in parameters:
         try:
             phynet = walk(logicalnetwork.physicalnetwork.getkey())
             phymap = walk(
                 PhysicalNetworkMap._network.leftkey(
                     logicalnetwork.physicalnetwork))
         except WalkKeyNotRetrieved:
             ensure_keys(
                 PhysicalNetworkMap._network.leftkey(
                     logicalnetwork.physicalnetwork))
         else:
             vlanid = int(parameters['vlanid'])
             if _isavaliablevlanid(phynet.vlanrange,
                                   phymap.network_allocation, vlanid):
                 phymap.network_allocation[str(
                     vlanid)] = logicalnetwork.create_weakreference()
                 write(phymap.getkey(), phymap)
             else:
                 raise ValueError("Specified VLAN ID " + str(vlanid) +
                                  " allocated or not in range")
             logicalnetwork.vlanid = vlanid
             write(logicalnetwork.getkey(), logicalnetwork)
     return default_processor(logicalnetwork,
                              parameters=parameters,
                              excluding=('id', 'vlanid'),
                              disabled=('physicalnetwork', ))
예제 #2
0
 def logicalnetwork_processor(logicalnetwork, logicalnetworkmap,
                              physicalnetwork, physicalnetworkmap, walk,
                              write, *, parameters):
     if 'vlanid' in parameters:
         # Allocate this vlanid
         vlanid = int(parameters['vlanid'])
         if _isavaliablevlanid(physicalnetwork.vlanrange,
                               physicalnetworkmap.network_allocation,
                               vlanid):
             physicalnetworkmap.network_allocation[str(
                 vlanid)] = logicalnetwork.create_weakreference()
             write(physicalnetworkmap.getkey(), physicalnetworkmap)
         else:
             raise ValueError("Specified VLAN ID " + str(vlanid) +
                              " allocated or not in range")
     else:
         # Allocate a vlanid from range
         vlanid = _findavaliablevlanid(
             physicalnetwork.vlanrange,
             physicalnetworkmap.network_allocation)
         if vlanid is None:
             raise ValueError(
                 "no available VLAN id in physical network " +
                 physicalnetwork.id)
         physicalnetworkmap.network_allocation[str(
             vlanid)] = logicalnetwork.create_weakreference()
         write(physicalnetworkmap.getkey(), physicalnetworkmap)
     logicalnetwork.vlanid = vlanid
     write(logicalnetwork.getkey(), logicalnetwork)
     return default_processor(logicalnetwork,
                              parameters=parameters,
                              excluding=('id', 'physicalnetwork',
                                         'vlanid'))
예제 #3
0
 def create_physicalnetwork_processor(physicalnetwork, walk, write, *,
                                      parameters):
     if 'vlanrange' not in parameters:
         raise ValueError(
             'must specify vlanrange with physical network type=vlan')
     _check_vlanrange(parameters['vlanrange'])
     return default_processor(physicalnetwork,
                              parameters=parameters,
                              excluding=('id', 'type'))
예제 #4
0
 def logicalnetwork_processor(logicalnetwork, logicalnetworkmap,
                              physicalnetwork, physicalnetworkmap, walk,
                              write, *, parameters):
     if physicalnetworkmap.logicnetworks.dataset():
         raise ValueError(
             "physical network with type=native can only have one logical network"
         )
     return default_processor(logicalnetwork,
                              parameters=parameters,
                              excluding=('id', 'physicalnetwork'))
예제 #5
0
 def update_physicalnetwork_processor(physicalnetwork, walk, write, *, parameters):
     if 'vnirange' in parameters:
         _check_vnirange(parameters['vnirange'])
         try:
             phymap = walk(PhysicalNetworkMap.default_key(physicalnetwork.id))
         except WalkKeyNotRetrieved:
             pass
         else:
             _check_vnirange_allocation(parameters['vnirange'], phymap.network_allocation)
     return default_processor(physicalnetwork, parameters=parameters, disabled=('type',))
예제 #6
0
 def logicalnetwork_processor(logicalnetwork, logicalnetworkmap, physicalnetwork,
                              physicalnetworkmap, walk, write, *, parameters):
     if 'vni' in parameters:
         # Allocate this vni
         vni = int(parameters['vni'])
         if _isavaliablevni(physicalnetwork.vnirange, physicalnetworkmap.network_allocation, vni):
             physicalnetworkmap.network_allocation[str(vni)] = logicalnetwork.create_weakreference()
             write(physicalnetworkmap.getkey(), physicalnetworkmap)
         else:
             raise ValueError("Specified VNI " + str(vni) + " allocated or not in range")
     else:
         # Allocate a vni from range
         vni = _findavaliablevni(physicalnetwork.vnirange, physicalnetworkmap.network_allocation)
         if vni is None:
             raise ValueError("no available VNI in physical network " + physicalnetwork.id)
         physicalnetworkmap.network_allocation[str(vni)] = logicalnetwork.create_weakreference()
         write(physicalnetworkmap.getkey(), physicalnetworkmap)
     logicalnetwork.vni = vni
     write(logicalnetwork.getkey(), logicalnetwork)
     # Create VXLANEndpointSet
     vxlanendpoint_set = VXLANEndpointSet.create_instance(logicalnetwork.id)
     write(vxlanendpoint_set.getkey(), vxlanendpoint_set)
     return default_processor(logicalnetwork, parameters=parameters, excluding=('id', 'physicalnetwork', 'vni'))