[ https://issues.apache.org/jira/browse/CLOUDSTACK-8832?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14956775#comment-14956775 ]
ASF GitHub Bot commented on CLOUDSTACK-8832: -------------------------------------------- Github user nlivens commented on a diff in the pull request: https://github.com/apache/cloudstack/pull/801#discussion_r41983983 --- Diff: plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java --- @@ -129,66 +134,94 @@ public Network design(NetworkOffering offering, DeploymentPlan plan, Network use @Override public Network implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapacityException { + long networkId = network.getId(); + network = _networkDao.acquireInLockTable(network.getId(), 1200); + if (network == null) { + throw new ConcurrentOperationException("Unable to acquire lock on network " + networkId); + } - assert (network.getState() == State.Implementing) : "Why are we implementing " + network; + NetworkVO implemented = null; + try { + assert (network.getState() == State.Implementing) : "Why are we implementing " + network; + + long dcId = dest.getDataCenter().getId(); + //Get physical network id + Long physicalNetworkId = network.getPhysicalNetworkId(); + //Physical network id can be null in Guest Network in Basic zone, so locate the physical network + if (physicalNetworkId == null) { + physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); + } + implemented = new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated, + network.getDataCenterId(), physicalNetworkId, offering.getRedundantRouter()); + if (network.getGateway() != null) { + implemented.setGateway(network.getGateway()); + } + if (network.getCidr() != null) { + implemented.setCidr(network.getCidr()); + } + List<String[]> ipAddressRanges = new ArrayList<String[]>(); + String virtualRouterIp = getVirtualRouterIP(network, ipAddressRanges); + String networkUuid = implemented.getUuid(); + String tenantId = context.getDomain().getName() + "-" + context.getAccount().getAccountId(); + String broadcastUriStr = networkUuid + "/" + virtualRouterIp; + implemented.setBroadcastUri(Networks.BroadcastDomainType.Vsp.toUri(broadcastUriStr)); + implemented.setBroadcastDomainType(Networks.BroadcastDomainType.Vsp); + //Check if the network is associated to a VPC + Long vpcId = network.getVpcId(); + boolean isVpc = (vpcId != null); + //Check owner of the Network + Domain networksDomain = _domainDao.findById(network.getDomainId()); + //Get the Account details and find the type + AccountVO networksAccount = _accountDao.findById(network.getAccountId()); + if (networksAccount.getType() == Account.ACCOUNT_TYPE_PROJECT) { + String errorMessage = "CS project support is not yet implemented in NuageVsp"; + if (s_logger.isDebugEnabled()) { + s_logger.debug(errorMessage); + } + throw new InsufficientVirtualNetworkCapacityException(errorMessage, Account.class, network.getAccountId()); + } + String vpcName = null; + String vpcUuid = null; + String preConfiguredDomainTemplateName = NuageVspUtil.getPreConfiguredDomainTemplateName(_configDao, network, offering); + boolean isSharedNetwork = offering.getGuestType() == GuestType.Shared; + boolean isL3Network = !isVpc && (isSharedNetwork || isL3Network(network)); - long dcId = dest.getDataCenter().getId(); - //Get physical network id - Long physicalNetworkId = network.getPhysicalNetworkId(); - //Physical network id can be null in Guest Network in Basic zone, so locate the physical network - if (physicalNetworkId == null) { - physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); - } - NetworkVO implemented = new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated, - network.getDataCenterId(), physicalNetworkId, offering.getRedundantRouter()); - if (network.getGateway() != null) { - implemented.setGateway(network.getGateway()); - } - if (network.getCidr() != null) { - implemented.setCidr(network.getCidr()); - } - Collection<String> ipAddressRange = new ArrayList<String>(); - String virtualRouterIp = getVirtualRouterIP(network, ipAddressRange); - String networkUuid = implemented.getUuid(); - String tenantId = context.getDomain().getName() + "-" + context.getAccount().getAccountId(); - String broadcastUriStr = networkUuid + "/" + virtualRouterIp; - implemented.setBroadcastUri(Networks.BroadcastDomainType.Vsp.toUri(broadcastUriStr)); - implemented.setBroadcastDomainType(Networks.BroadcastDomainType.Vsp); - //Check if the network is associated to a VPC - Long vpcId = network.getVpcId(); - boolean isVpc = (vpcId != null); - //Check owner of the Network - Domain networksDomain = _domainDao.findById(network.getDomainId()); - //Get the Account details and find the type - AccountVO networksAccount = _accountDao.findById(network.getAccountId()); - if (networksAccount.getType() == Account.ACCOUNT_TYPE_PROJECT) { - String errorMessage = "CS project support is not yet implemented in NuageVsp"; - s_logger.debug(errorMessage); - throw new InsufficientVirtualNetworkCapacityException(errorMessage, Account.class, network.getAccountId()); - } - boolean isL3Network = isL3Network(offering.getId()); - String vpcName = null; - String vpcUuid = null; - if (isVpc) { - Vpc vpcObj = _vpcDao.findById(vpcId); - vpcName = vpcObj.getName(); - vpcUuid = vpcObj.getUuid(); - } + if (isVpc) { + Vpc vpcObj = _vpcDao.findById(vpcId); + vpcName = vpcObj.getName(); + vpcUuid = vpcObj.getUuid(); + } + + if (isSharedNetwork) { + List<VlanVO> vlans = _vlanDao.listVlansByNetworkId(network.getId()); + for (VlanVO vlan : vlans) { + boolean isIpv4 = StringUtils.isNotBlank(vlan.getIpRange()); + String[] range = isIpv4 ? vlan.getIpRange().split("-") : vlan.getIp6Range().split("-"); + ipAddressRanges.add(range); + } + } - HostVO nuageVspHost = getNuageVspHost(physicalNetworkId); - ImplementNetworkVspCommand cmd = new ImplementNetworkVspCommand(networksDomain.getName(), networksDomain.getPath(), networksDomain.getUuid(), - networksAccount.getAccountName(), networksAccount.getUuid(), network.getName(), network.getCidr(), network.getGateway(), network.getUuid(), isL3Network, vpcName, - vpcUuid, offering.getEgressDefaultPolicy(), ipAddressRange); - ImplementNetworkVspAnswer answer = (ImplementNetworkVspAnswer)_agentMgr.easySend(nuageVspHost.getId(), cmd); + HostVO nuageVspHost = getNuageVspHost(physicalNetworkId); + List<String> dnsServers = _nuageVspManager.getDnsDetails(network); + List<String> gatewaySystemIds = _nuageVspManager.getGatewaySystemIds(); + ImplementNetworkVspCommand.Builder cmdBuilder = new ImplementNetworkVspCommand.Builder().networkDomainName(networksDomain.getName()).networkDomainPath(networksDomain.getPath()) + .networkDomainUuid(networksDomain.getUuid()).networkAccountName(networksAccount.getAccountName()).networkAccountUuid(networksAccount.getUuid()) + .networkName(network.getName()).networkCidr(network.getCidr()).networkGateway(network.getGateway()).networkAclId(network.getNetworkACLId()).dnsServers(dnsServers) + .gatewaySystemIds(gatewaySystemIds).networkUuid(network.getUuid()).isL3Network(isL3Network).isVpc(isVpc).isSharedNetwork(isSharedNetwork).vpcName(vpcName) + .vpcUuid(vpcUuid).defaultEgressPolicy(offering.getEgressDefaultPolicy()).ipAddressRange(ipAddressRanges).domainTemplateName(preConfiguredDomainTemplateName); + ImplementNetworkVspAnswer answer = (ImplementNetworkVspAnswer)_agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build()); - if (answer == null || !answer.getResult()) { - s_logger.error("ImplementNetworkNuageVspCommand failed"); - if ((null != answer) && (null != answer.getDetails())) { - s_logger.error(answer.getDetails()); + if (answer == null || !answer.getResult()) { + s_logger.error("ImplementNetworkNuageVspCommand failed"); --- End diff -- Added context information to the log statement. > Update Nuage VSP plugin to work with Nuage VSP release 3.2 > ---------------------------------------------------------- > > Key: CLOUDSTACK-8832 > URL: https://issues.apache.org/jira/browse/CLOUDSTACK-8832 > Project: CloudStack > Issue Type: Improvement > Security Level: Public(Anyone can view this level - this is the > default.) > Components: Management Server > Affects Versions: 4.6.0 > Reporter: Nick Livens > Assignee: Nick Livens > Attachments: nuageVspMarvinLogs.tar.gz > > > Nuage VSP 3.2 is being released, we want to bring the plugin up to date for > this release -- This message was sent by Atlassian JIRA (v6.3.4#6332)