From 9fe5b3bddfd4e8c8ed11bd9e9dead9bf70410f58 Mon Sep 17 00:00:00 2001 From: Pearl Dsilva Date: Fri, 13 Oct 2023 14:08:35 -0400 Subject: [PATCH] modify NSX resource naming convention --- .../cloud/vm/VirtualMachineManagerImpl.java | 18 +++++++++-- .../vm/VirtualMachineManagerImplTest.java | 18 +++++++---- .../api/CreateNsxDhcpRelayConfigCommand.java | 19 ++++++++++-- .../agent/api/CreateNsxSegmentCommand.java | 19 ++++++++++-- .../api/CreateNsxTier1GatewayCommand.java | 10 +++++-- .../agent/api/DeleteNsxSegmentCommand.java | 18 +++++++++-- .../api/DeleteNsxTier1GatewayCommand.java | 10 +++++-- .../cloudstack/agent/api/NsxCommand.java | 30 +++++++++---------- .../cloudstack/resource/NsxResource.java | 27 +++++++++-------- .../cloudstack/service/NsxApiClient.java | 10 +++---- .../apache/cloudstack/service/NsxElement.java | 8 ++--- .../cloudstack/service/NsxServiceImpl.java | 13 ++++---- .../cloudstack/utils/NsxControllerUtils.java | 24 +++++++-------- .../apache/cloudstack/utils/NsxHelper.java | 8 ++--- .../cloudstack/resource/NsxResourceTest.java | 14 ++++----- .../cloudstack/service/NsxElementTest.java | 7 ++--- .../service/NsxServiceImplTest.java | 6 ++-- .../cloud/hypervisor/HypervisorGuruBase.java | 20 +++++++++---- .../vmware/mo/HypervisorHostHelperTest.java | 2 +- 19 files changed, 181 insertions(+), 100 deletions(-) diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java index 2c203fbd324..5feb1099673 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1484,12 +1484,24 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac Account acc = accountDao.findById(networkVO.getAccountId()); Domain domain = domainDao.findById(networkVO.getDomainId()); DataCenter zone = _dcDao.findById(vm.getDataCenterId()); - String networkName = domain.getName() + "-" + acc.getAccountName() + "-" + zone.getName() + "-"; + if (Objects.isNull(zone)) { + throw new CloudRuntimeException(String.format("Failed to find zone with ID: %s", vm.getDataCenterId())); + } + if (Objects.isNull(acc)) { + throw new CloudRuntimeException(String.format("Failed to find account with ID: %s", networkVO.getAccountId())); + } + if (Objects.isNull(domain)) { + throw new CloudRuntimeException(String.format("Failed to find domain with ID: %s", networkVO.getDomainId())); + } + String networkName = String.format("D%s-A%s-Z%s", domain.getId(), acc.getId(), zone.getId()); if (Objects.isNull(networkVO.getVpcId())) { - networkName += networkVO.getName(); + networkName += "-S"+networkVO.getId(); } else { VpcVO vpc = vpcDao.findById(networkVO.getVpcId()); - networkName += (vpc.getName() + "-" + networkVO.getName()); + if (Objects.isNull(vpc)) { + throw new CloudRuntimeException(String.format("Failed to find VPC with ID: %s", networkVO.getVpcId())); + } + networkName = String.format("%s-V%s-S%s", networkName, vpc.getId(), networkVO.getId()); } networkToNetworkNameMap.put(networkVO.getId(), networkName); } diff --git a/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java b/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java index 4082aeb5844..4205c330311 100644 --- a/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java +++ b/engine/orchestration/src/test/java/com/cloud/vm/VirtualMachineManagerImplTest.java @@ -39,12 +39,14 @@ import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.api.query.vo.UserVmJoinVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.dao.DataCenterDao; +import com.cloud.domain.Domain; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.vpc.VpcVO; import com.cloud.network.vpc.dao.VpcDao; +import com.cloud.user.Account; import com.cloud.user.AccountVO; import com.cloud.user.dao.AccountDao; import org.apache.cloudstack.engine.subsystem.api.storage.StoragePoolAllocator; @@ -926,12 +928,12 @@ public class VirtualMachineManagerImplTest { VirtualMachineTO vmTO = new VirtualMachineTO() {}; UserVmJoinVO userVm = new UserVmJoinVO(); - NetworkVO networkVO = new NetworkVO(); - AccountVO accountVO = new AccountVO(); - DomainVO domainVO = new DomainVO(); + NetworkVO networkVO = mock(NetworkVO.class); + AccountVO accountVO = mock(AccountVO.class); + DomainVO domainVO = mock(DomainVO.class); domainVO.setName("testDomain"); DataCenterVO dataCenterVO = mock(DataCenterVO.class); - VpcVO vpcVO = new VpcVO(); + VpcVO vpcVO = mock(VpcVO.class); networkVO.setAccountId(1L); networkVO.setName("testNet"); @@ -949,9 +951,13 @@ public class VirtualMachineManagerImplTest { Mockito.when(domainDao.findById(anyLong())).thenReturn(domainVO); Mockito.when(dcDao.findById(anyLong())).thenReturn(dataCenterVO); Mockito.when(vpcDao.findById(anyLong())).thenReturn(vpcVO); - Mockito.when(dataCenterVO.getName()).thenReturn("testZone"); + Mockito.when(dataCenterVO.getId()).thenReturn(1L); + when(accountVO.getId()).thenReturn(2L); + Mockito.when(domainVO.getId()).thenReturn(3L); + Mockito.when(vpcVO.getId()).thenReturn(4L); + Mockito.when(networkVO.getId()).thenReturn(5L); virtualMachineManagerImpl.setVmNetworkDetails(vm, vmTO); assertEquals(vmTO.getNetworkIdToNetworkNameMap().size(), 1); - assertEquals(vmTO.getNetworkIdToNetworkNameMap().get(0L), "testDomain-testAcc-testZone-VPC1-testNet"); + assertEquals(vmTO.getNetworkIdToNetworkNameMap().get(5L), "D3-A2-Z1-V4-S5"); } } diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxDhcpRelayConfigCommand.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxDhcpRelayConfigCommand.java index 44c21885d2f..5b986628628 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxDhcpRelayConfigCommand.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxDhcpRelayConfigCommand.java @@ -20,22 +20,35 @@ import java.util.List; public class CreateNsxDhcpRelayConfigCommand extends NsxCommand { + private Long vpcId; private String vpcName; + private long networkId; private String networkName; private List addresses; - public CreateNsxDhcpRelayConfigCommand(String domainName, String accountName, String zoneName, - String vpcName, String networkName, List addresses) { - super(domainName, accountName, zoneName); + public CreateNsxDhcpRelayConfigCommand(long domainId, long accountId, long zoneId, + Long vpcId, String vpcName, long networkId, String networkName, + List addresses) { + super(domainId, accountId, zoneId); + this.vpcId = vpcId; this.vpcName = vpcName; + this.networkId = networkId; this.networkName = networkName; this.addresses = addresses; } + public Long getVpcId() { + return vpcId; + } + public String getVpcName() { return vpcName; } + public long getNetworkId() { + return networkId; + } + public String getNetworkName() { return networkName; } diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxSegmentCommand.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxSegmentCommand.java index b9c8fba4ff8..b4b86bd640a 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxSegmentCommand.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxSegmentCommand.java @@ -20,24 +20,37 @@ import java.util.Objects; public class CreateNsxSegmentCommand extends NsxCommand { + private Long vpcId; private String vpcName; + private long networkId; private String networkName; private String networkGateway; private String networkCidr; - public CreateNsxSegmentCommand(String domainName, String accountName, String zoneName, - String vpcName, String networkName, String networkGateway, String networkCidr) { - super(domainName, accountName, zoneName); + public CreateNsxSegmentCommand(long domainId, long accountId, long zoneId, + Long vpcId, String vpcName, long networkId, String networkName, + String networkGateway, String networkCidr) { + super(domainId, accountId, zoneId); + this.vpcId = vpcId; this.vpcName = vpcName; + this.networkId = networkId; this.networkName = networkName; this.networkGateway = networkGateway; this.networkCidr = networkCidr; } + public Long getVpcId() { + return vpcId; + } + public String getVpcName() { return vpcName; } + public long getNetworkId() { + return networkId; + } + public String getNetworkName() { return networkName; } diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxTier1GatewayCommand.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxTier1GatewayCommand.java index 385bfd17c21..02616585f98 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxTier1GatewayCommand.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/CreateNsxTier1GatewayCommand.java @@ -19,13 +19,19 @@ package org.apache.cloudstack.agent.api; import java.util.Objects; public class CreateNsxTier1GatewayCommand extends NsxCommand { + private long vpcId; private String vpcName; - public CreateNsxTier1GatewayCommand(String domainName, String accountName, String zoneName, String vpcName) { - super(domainName, accountName, zoneName); + public CreateNsxTier1GatewayCommand(long domainId, long accountId, long zoneId, long vpcId, String vpcName) { + super(domainId, accountId, zoneId); + this.vpcId = vpcId; this.vpcName = vpcName; } + public long getVpcId() { + return vpcId; + } + public String getVpcName() { return vpcName; } diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxSegmentCommand.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxSegmentCommand.java index fa5fe8b2c05..06af4d8c31d 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxSegmentCommand.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxSegmentCommand.java @@ -18,19 +18,33 @@ package org.apache.cloudstack.agent.api; public class DeleteNsxSegmentCommand extends NsxCommand { + private Long vpcId; private String vpcName; + + private long networkId; private String networkName; - public DeleteNsxSegmentCommand(String domainName, String accountName, String zoneName, String vpcName, String networkName) { - super(domainName, accountName, zoneName); + public DeleteNsxSegmentCommand(long domainId, long accountId, long zoneId, Long vpcId, + String vpcName, long networkId, String networkName) { + super(domainId, accountId, zoneId); + this.vpcId = vpcId; this.vpcName = vpcName; + this.networkId = networkId; this.networkName = networkName; } + public Long getVpcId() { + return vpcId; + } + public String getVpcName() { return vpcName; } + public long getNetworkId() { + return networkId; + } + public String getNetworkName() { return networkName; } diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxTier1GatewayCommand.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxTier1GatewayCommand.java index d3890542313..3b684f28487 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxTier1GatewayCommand.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/DeleteNsxTier1GatewayCommand.java @@ -18,13 +18,19 @@ package org.apache.cloudstack.agent.api; public class DeleteNsxTier1GatewayCommand extends NsxCommand { + private Long vpcId; private String vpcName; - public DeleteNsxTier1GatewayCommand(String domainName, String accountName, String zoneName, String vpcName) { - super(domainName, accountName, zoneName); + public DeleteNsxTier1GatewayCommand(long domainId, long accountId, long zoneId, Long vpcId, String vpcName) { + super(domainId, accountId, zoneId); + this.vpcId = vpcId; this.vpcName = vpcName; } + public Long getVpcId() { + return vpcId; + } + public String getVpcName() { return vpcName; } diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/NsxCommand.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/NsxCommand.java index 2ee88fa3ec0..7c5e3a1d9fa 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/NsxCommand.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/agent/api/NsxCommand.java @@ -21,29 +21,29 @@ import com.cloud.agent.api.Command; import java.util.Objects; public class NsxCommand extends Command { - private String zoneName; - private String accountName; - private String domainName; + private long zoneId; + private long accountId; + private long domainId; public NsxCommand() { } - public NsxCommand(String domainName, String accountName, String zoneName) { - this.zoneName = zoneName; - this.accountName = accountName; - this.domainName = domainName; + public NsxCommand(long domainId, long accountId, long zoneId) { + this.zoneId = zoneId; + this.accountId = accountId; + this.domainId = domainId; } - public String getZoneName() { - return zoneName; + public long getZoneId() { + return zoneId; } - public String getAccountName() { - return accountName; + public long getAccountId() { + return accountId; } - public String getDomainName() { - return domainName; + public long getDomainId() { + return domainId; } @Override @@ -57,11 +57,11 @@ public class NsxCommand extends Command { if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; NsxCommand that = (NsxCommand) o; - return Objects.equals(zoneName, that.zoneName) && Objects.equals(accountName, that.accountName) && Objects.equals(domainName, that.domainName); + return Objects.equals(zoneId, that.zoneId) && Objects.equals(accountId, that.accountId) && Objects.equals(domainId, that.domainId); } @Override public int hashCode() { - return Objects.hash(super.hashCode(), zoneName, accountName, domainName); + return Objects.hash(super.hashCode(), zoneId, accountId, domainId); } } diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java index 1c1765cb4af..ad5ea2b7067 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/resource/NsxResource.java @@ -210,14 +210,16 @@ public class NsxResource implements ServerResource { } private Answer executeRequest(CreateNsxDhcpRelayConfigCommand cmd) { - String zoneName = cmd.getZoneName(); - String domainName = cmd.getDomainName(); - String accountName = cmd.getAccountName(); + long zoneId = cmd.getZoneId(); + long domainId = cmd.getDomainId(); + long accountId = cmd.getAccountId(); + long vpcId = cmd.getVpcId(); + long networkId = cmd.getNetworkId(); String vpcName = cmd.getVpcName(); String networkName = cmd.getNetworkName(); List addresses = cmd.getAddresses(); - String dhcpRelayConfigName = NsxControllerUtils.getNsxDhcpRelayConfigId(zoneName, domainName, accountName, vpcName, networkName); + String dhcpRelayConfigName = NsxControllerUtils.getNsxDhcpRelayConfigId(zoneId, domainId, accountId, vpcId, networkId); String msg = String.format("Creating DHCP relay config with name %s on network %s of VPC %s", dhcpRelayConfigName, networkName, vpcName); @@ -231,7 +233,7 @@ public class NsxResource implements ServerResource { return new NsxAnswer(cmd, e); } - String segmentName = NsxControllerUtils.getNsxSegmentId(domainName, accountName, zoneName, vpcName, networkName); + String segmentName = NsxControllerUtils.getNsxSegmentId(domainId, accountId, zoneId, vpcId, networkId); String dhcpConfigPath = String.format("%s/%s", DHCP_RELAY_CONFIGS_PATH_PREFIX, dhcpRelayConfigName); try { Segment segment = nsxApiClient.getSegmentById(segmentName); @@ -251,18 +253,18 @@ public class NsxResource implements ServerResource { } private Answer executeRequest(CreateNsxTier1GatewayCommand cmd) { - String name = NsxControllerUtils.getTier1GatewayName(cmd.getDomainName(), cmd.getAccountName(), cmd.getZoneName(), cmd.getVpcName()); + String name = NsxControllerUtils.getTier1GatewayName(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), cmd.getVpcId()); try { nsxApiClient.createTier1Gateway(name, tier0Gateway, edgeCluster); return new NsxAnswer(cmd, true, ""); } catch (CloudRuntimeException e) { - LOGGER.error(String.format("Cannot create tier 1 gateway %s: %s", name, e.getMessage())); + LOGGER.error(String.format("Cannot create tier 1 gateway %s (VPC: %s): %s", name, cmd.getVpcName(), e.getMessage())); return new NsxAnswer(cmd, e); } } private Answer executeRequest(DeleteNsxTier1GatewayCommand cmd) { - String tier1Id = NsxControllerUtils.getTier1GatewayName(cmd.getDomainName(), cmd.getAccountName(), cmd.getZoneName(), cmd.getVpcName()); + String tier1Id = NsxControllerUtils.getTier1GatewayName(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), cmd.getVpcId()); try { nsxApiClient.deleteTier1Gateway(tier1Id); } catch (Exception e) { @@ -304,10 +306,10 @@ public class NsxResource implements ServerResource { return new NsxAnswer(cmd, new CloudRuntimeException(errorMsg)); } - String segmentName = NsxControllerUtils.getNsxSegmentId(cmd.getDomainName(), cmd.getAccountName(), cmd.getZoneName(), cmd.getVpcName(), networkName); + String segmentName = NsxControllerUtils.getNsxSegmentId(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), cmd.getVpcId(), cmd.getNetworkId()); String gatewayAddress = cmd.getNetworkGateway() + "/" + cmd.getNetworkCidr().split("/")[1]; - nsxApiClient.createSegment(cmd.getZoneName(), cmd.getDomainName(), cmd.getAccountName(), cmd.getVpcName(), + nsxApiClient.createSegment(cmd.getZoneId(), cmd.getDomainId(), cmd.getAccountId(), cmd.getVpcId(), segmentName, gatewayAddress, tier0Gateway, enforcementPointPath, transportZones); } catch (Exception e) { LOGGER.error(String.format("Failed to create network: %s", cmd.getNetworkName())); @@ -317,10 +319,11 @@ public class NsxResource implements ServerResource { } private NsxAnswer executeRequest(DeleteNsxSegmentCommand cmd) { - String segmentName = NsxControllerUtils.getNsxSegmentId(cmd.getDomainName(), cmd.getAccountName(), cmd.getZoneName(), cmd.getVpcName(), cmd.getNetworkName()); + String segmentName = NsxControllerUtils.getNsxSegmentId(cmd.getDomainId(), cmd.getAccountId(), cmd.getZoneId(), + cmd.getVpcId(), cmd.getNetworkId()); try { Thread.sleep(30*1000); - nsxApiClient.deleteSegment(cmd.getZoneName(), cmd.getDomainName(), cmd.getAccountName(), cmd.getVpcName(), cmd.getNetworkName(), segmentName); + nsxApiClient.deleteSegment(cmd.getZoneId(), cmd.getDomainId(), cmd.getAccountId(), cmd.getVpcId(), cmd.getNetworkId(), segmentName); } catch (Exception e) { LOGGER.error(String.format("Failed to delete NSX segment: %s", segmentName)); return new NsxAnswer(cmd, new CloudRuntimeException(e.getMessage())); diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java index 348a0d0b62c..973650db09c 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxApiClient.java @@ -249,7 +249,7 @@ public class NsxApiClient { } } - public void createSegment(String zoneName, String domainName, String accountName, String vpcName, String segmentName, String gatewayAddress, String tier0Gateway, String enforcementPointPath, List transportZones) { + public void createSegment(long zoneId, long domainId, long accountId, Long vpcId, String segmentName, String gatewayAddress, String tier0Gateway, String enforcementPointPath, List transportZones) { try { Segments segmentService = (Segments) nsxService.apply(Segments.class); SegmentSubnet subnet = new SegmentSubnet.Builder() @@ -259,8 +259,8 @@ public class NsxApiClient { .setResourceType(SEGMENT_RESOURCE_TYPE) .setId(segmentName) .setDisplayName(segmentName) - .setConnectivityPath(isNull(vpcName) ? TIER_0_GATEWAY_PATH_PREFIX + tier0Gateway - : TIER_1_GATEWAY_PATH_PREFIX + NsxControllerUtils.getTier1GatewayName(domainName, accountName, zoneName, vpcName)) + .setConnectivityPath(isNull(vpcId) ? TIER_0_GATEWAY_PATH_PREFIX + tier0Gateway + : TIER_1_GATEWAY_PATH_PREFIX + NsxControllerUtils.getTier1GatewayName(domainId, accountId, zoneId, vpcId)) .setAdminState(AdminState.UP.name()) .setSubnets(List.of(subnet)) .setTransportZonePath(enforcementPointPath + "/transport-zones/" + transportZones.get(0).getId()) @@ -274,13 +274,13 @@ public class NsxApiClient { } } - public void deleteSegment(String zoneName, String domainName, String accountName, String vpcName, String networkName, String segmentName) { + public void deleteSegment(long zoneId, long domainId, long accountId, long vpcId, long networkId, String segmentName) { try { Segments segmentService = (Segments) nsxService.apply(Segments.class); LOGGER.debug(String.format("Removing the segment with ID %s", segmentName)); segmentService.delete(segmentName); DhcpRelayConfigs dhcpRelayConfig = (DhcpRelayConfigs) nsxService.apply(DhcpRelayConfigs.class); - String dhcpRelayConfigId = NsxControllerUtils.getNsxDhcpRelayConfigId(zoneName, domainName, accountName, vpcName, networkName); + String dhcpRelayConfigId = NsxControllerUtils.getNsxDhcpRelayConfigId(zoneId, domainId, accountId, vpcId, networkId); LOGGER.debug(String.format("Removing the DHCP relay config with ID %s", dhcpRelayConfigId)); dhcpRelayConfig.delete(dhcpRelayConfigId); } catch (Error error) { diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java index 5c5ba1ac35c..b01700cfe2c 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxElement.java @@ -202,11 +202,11 @@ public class NsxElement extends AdapterBase implements DhcpServiceProvider, DnsS DataCenterVO zone = dataCenterDao.findById(network.getDataCenterId()); DomainVO domain = domainDao.findById(account.getDomainId()); if (Objects.isNull(zone)) { - String msg = String.format("Cannot fing zone with ID %s", network.getDataCenterId()); + String msg = String.format("Cannot find zone with ID %s", network.getDataCenterId()); LOGGER.error(msg); throw new CloudRuntimeException(msg); } - return nsxService.deleteNetwork(zone.getName(), account.getAccountName(), domain.getName(), networkVO); + return nsxService.deleteNetwork(zone.getId(), account.getId(), domain.getId(), networkVO); } @Override @@ -287,7 +287,7 @@ public class NsxElement extends AdapterBase implements DhcpServiceProvider, DnsS } Account account = isNsxAndAccount.second(); DomainVO domain = getDomainFromAccount(account); - return nsxService.createVpcNetwork(vpc.getZoneId(), zone.getName(), account.getName(), domain.getName(), vpc.getName()); + return nsxService.createVpcNetwork(vpc.getZoneId(), account.getId(), domain.getId(), vpc.getId(), vpc.getName()); } @Override @@ -302,7 +302,7 @@ public class NsxElement extends AdapterBase implements DhcpServiceProvider, DnsS } Account account = isNsxAndAccount.second(); DomainVO domain = getDomainFromAccount(account); - return nsxService.deleteVpcNetwork(vpc.getZoneId(), zone.getName(), account.getName(), domain.getName(), vpc.getName()); + return nsxService.deleteVpcNetwork(vpc.getZoneId(), account.getId(), domain.getId(), vpc.getId(), vpc.getName()); } private Pair validateVpcConfigurationAndGetAccount(DataCenterVO zone, Vpc vpc) { diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxServiceImpl.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxServiceImpl.java index 6552c335b98..999f28bde25 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxServiceImpl.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/service/NsxServiceImpl.java @@ -34,27 +34,28 @@ public class NsxServiceImpl implements NsxService { @Inject VpcDao vpcDao; - public boolean createVpcNetwork(Long zoneId, String zoneName, String accountName, String domainName, String vpcName) { + public boolean createVpcNetwork(Long zoneId, long accountId, long domainId, long vpcId, String vpcName) { CreateNsxTier1GatewayCommand createNsxTier1GatewayCommand = - new CreateNsxTier1GatewayCommand(domainName, accountName, zoneName, vpcName); + new CreateNsxTier1GatewayCommand(domainId, accountId, zoneId, vpcId, vpcName); NsxAnswer result = nsxControllerUtils.sendNsxCommand(createNsxTier1GatewayCommand, zoneId); return result.getResult(); } - public boolean deleteVpcNetwork(Long zoneId, String zoneName, String accountName, String domainName, String vpcName) { + public boolean deleteVpcNetwork(Long zoneId, long accountId, long domainId, Long vpcId, String vpcName) { DeleteNsxTier1GatewayCommand deleteNsxTier1GatewayCommand = - new DeleteNsxTier1GatewayCommand(domainName, accountName, zoneName, vpcName); + new DeleteNsxTier1GatewayCommand(domainId, accountId, zoneId, vpcId, vpcName); NsxAnswer result = nsxControllerUtils.sendNsxCommand(deleteNsxTier1GatewayCommand, zoneId); return result.getResult(); } - public boolean deleteNetwork(String zoneName, String accountName, String domainName, NetworkVO network) { + public boolean deleteNetwork(long zoneId, long accountId, long domainId, NetworkVO network) { String vpcName = null; if (Objects.nonNull(network.getVpcId())) { VpcVO vpc = vpcDao.findById(network.getVpcId()); vpcName = Objects.nonNull(vpc) ? vpc.getName() : null; } - DeleteNsxSegmentCommand deleteNsxSegmentCommand = new DeleteNsxSegmentCommand(domainName, accountName, zoneName, vpcName, network.getName()); + DeleteNsxSegmentCommand deleteNsxSegmentCommand = new DeleteNsxSegmentCommand(domainId, accountId, zoneId, + network.getVpcId(), vpcName, network.getId(), network.getName()); NsxAnswer result = nsxControllerUtils.sendNsxCommand(deleteNsxSegmentCommand, network.getDataCenterId()); return result.getResult(); } diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxControllerUtils.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxControllerUtils.java index 27a07bac3f3..bef09bb0d55 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxControllerUtils.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxControllerUtils.java @@ -56,23 +56,23 @@ public class NsxControllerUtils { return (NsxAnswer) answer; } - public static String getTier1GatewayName(String domainName, String accountName, String zoneName, String vpcName) { - return String.format("%s-%s-%s-%s", domainName, accountName, zoneName, vpcName); + public static String getTier1GatewayName(long domainId, long accountId, long zoneId, long vpcId) { + return String.format("D%s-A%s-Z%s-V%s", domainId, accountId, zoneId, vpcId); } - public static String getNsxSegmentId(String domainName, String accountName, String zoneName, String vpcName, String tierNetworkName) { - String segmentName = String.format("%s-%s-%s-", domainName, accountName, zoneName); - if (isNull(vpcName)) { - return segmentName + tierNetworkName; + public static String getNsxSegmentId(long domainId, long accountId, long zoneId, Long vpcId, long networkId) { + String segmentName = String.format("D%s-A%s-Z%s", domainId, accountId, zoneId); + if (isNull(vpcId)) { + return String.format("%s-S%s", segmentName, networkId); } - return segmentName + vpcName + "-" + tierNetworkName; + return String.format("%s-V%s-S%s",segmentName, vpcId, networkId); } - public static String getNsxDhcpRelayConfigId(String zoneName, String domainName, String accountName, String vpcName, String networkName) { - String suffix = "-Relay"; - if (isNull(vpcName)) { - return domainName + "-" + accountName + "-" + zoneName + "-" +networkName + suffix; + public static String getNsxDhcpRelayConfigId(long zoneId, long domainId, long accountId, Long vpcId, long networkId) { + String suffix = "Relay"; + if (isNull(vpcId)) { + return String.format("D%s-A%s-Z%s-S%s-%s", domainId, accountId, zoneId, networkId, suffix); } - return String.format("%s-%s-%s-%s-%s%s", domainName, accountName, zoneName, vpcName, networkName, suffix); + return String.format("D%s-A%s-Z%s-V%s-S%s-%s", domainId, accountId, zoneId, vpcId, networkId, suffix); } } diff --git a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxHelper.java b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxHelper.java index 31329fa7ee4..ec1b74cf475 100644 --- a/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxHelper.java +++ b/plugins/network-elements/nsx/src/main/java/org/apache/cloudstack/utils/NsxHelper.java @@ -30,12 +30,12 @@ import java.util.List; public class NsxHelper { public static CreateNsxDhcpRelayConfigCommand createNsxDhcpRelayConfigCommand(DomainVO domain, Account account, DataCenter zone, VpcVO vpc, Network network, List addresses) { - return new CreateNsxDhcpRelayConfigCommand(domain.getName(), account.getAccountName(), zone.getName(), - vpc.getName(), network.getName(), addresses); + return new CreateNsxDhcpRelayConfigCommand(domain.getId(), account.getId(), zone.getId(), + vpc.getId(), vpc.getName(), network.getId(), network.getName(), addresses); } public static CreateNsxSegmentCommand createNsxSegmentCommand(DomainVO domain, Account account, DataCenter zone, String vpcName, NetworkVO networkVO) { - return new CreateNsxSegmentCommand(domain.getName(), account.getAccountName(), zone.getName(), - vpcName, networkVO.getName(), networkVO.getGateway(), networkVO.getCidr()); + return new CreateNsxSegmentCommand(domain.getId(), account.getId(), zone.getId(), + networkVO.getVpcId(), vpcName, networkVO.getId(), networkVO.getName(), networkVO.getGateway(), networkVO.getCidr()); } } diff --git a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/resource/NsxResourceTest.java b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/resource/NsxResourceTest.java index 511b257ecaa..9e1a98c854d 100644 --- a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/resource/NsxResourceTest.java +++ b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/resource/NsxResourceTest.java @@ -105,8 +105,8 @@ public class NsxResourceTest { @Test public void testCreateNsxTier1Gateway() { - NsxCommand command = new CreateNsxTier1GatewayCommand("testDomain", "testAcc", - "ZoneNSX", "VPC01"); + NsxCommand command = new CreateNsxTier1GatewayCommand(1L, 2L, + 1L, 3L, "VPC01"); NsxAnswer answer = (NsxAnswer) nsxResource.executeRequest(command); assertTrue(answer.getResult()); @@ -114,8 +114,8 @@ public class NsxResourceTest { @Test public void testDeleteTier1Gateway() { - NsxCommand command = new DeleteNsxTier1GatewayCommand("testDomain", "testAcc", - "ZoneNSX", "VPC01"); + NsxCommand command = new DeleteNsxTier1GatewayCommand(1L, 1L, + 1L, 2L, "VPC01"); NsxAnswer answer = (NsxAnswer) nsxResource.executeRequest(command); assertTrue(answer.getResult()); @@ -133,8 +133,8 @@ public class NsxResourceTest { List enforcementPointList = List.of(enforcementPoint); List transportZoneList = List.of(new TransportZone.Builder().setDisplayName("Overlay").build()); - NsxCommand command = new CreateNsxSegmentCommand("testDomain", "testAcc", - "ZoneNSX", "VPC01", "Web", "10.10.10.1", "10.10.10.0/24"); + NsxCommand command = new CreateNsxSegmentCommand(1L, 1L, + 1L, 2L, "VPC01", 3L, "Web", "10.10.10.1", "10.10.10.0/24"); when(nsxApi.getSites()).thenReturn(siteListResult); when(siteListResult.getResults()).thenReturn(siteList); @@ -155,7 +155,7 @@ public class NsxResourceTest { public void testDeleteNsxSegment() { NetworkVO tierNetwork = new NetworkVO(); tierNetwork.setName("tier1"); - DeleteNsxSegmentCommand command = new DeleteNsxSegmentCommand("testDomain", "testAcc", "ZoneA", "VPC01", "Web"); + DeleteNsxSegmentCommand command = new DeleteNsxSegmentCommand(1L, 1L, 1L, 3L, "VPC01", 2L, "Web"); NsxAnswer answer = (NsxAnswer) nsxResource.executeRequest(command); assertTrue(answer.getResult()); diff --git a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxElementTest.java b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxElementTest.java index b43229a62a4..79367a105b4 100644 --- a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxElementTest.java +++ b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxElementTest.java @@ -99,14 +99,11 @@ public class NsxElementTest { when(vpc.getZoneId()).thenReturn(1L); when(vpc.getAccountId()).thenReturn(2L); when(dataCenterVO.getId()).thenReturn(1L); - when(dataCenterVO.getName()).thenReturn("zoneNSX"); - when(account.getName()).thenReturn("testAcc"); when(vpc.getName()).thenReturn("VPC01"); when(accountManager.getAccount(2L)).thenReturn(account); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(domainDao.findById(anyLong())).thenReturn(domain); when(vpc.getZoneId()).thenReturn(1L); - when(domain.getName()).thenReturn("testDomain"); when(vpc.getName()).thenReturn("testVPC"); PhysicalNetworkVO physicalNetworkVO = new PhysicalNetworkVO(); @@ -118,14 +115,14 @@ public class NsxElementTest { @Test public void testImplementVpc() throws ResourceUnavailableException, InsufficientCapacityException { - when(nsxService.createVpcNetwork(anyLong(), anyString(), anyString(), anyString(), anyString())).thenReturn(true); + when(nsxService.createVpcNetwork(anyLong(), anyLong(), anyLong(), anyLong(), anyString())).thenReturn(true); assertTrue(nsxElement.implementVpc(vpc, deployDestination, reservationContext)); } @Test public void testShutdownVpc() { - when(nsxService.deleteVpcNetwork(anyLong(), anyString(), anyString(), anyString(), anyString())).thenReturn(true); + when(nsxService.deleteVpcNetwork(anyLong(), anyLong(), anyLong(), anyLong(), anyString())).thenReturn(true); assertTrue(nsxElement.shutdownVpc(vpc, reservationContext)); } diff --git a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxServiceImplTest.java b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxServiceImplTest.java index 0a0836090d9..effca9d4a30 100644 --- a/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxServiceImplTest.java +++ b/plugins/network-elements/nsx/src/test/java/org/apache/cloudstack/service/NsxServiceImplTest.java @@ -67,7 +67,7 @@ public class NsxServiceImplTest { when(nsxControllerUtils.sendNsxCommand(any(CreateNsxTier1GatewayCommand.class), anyLong())).thenReturn(createNsxTier1GatewayAnswer); when(createNsxTier1GatewayAnswer.getResult()).thenReturn(true); - assertTrue(nsxService.createVpcNetwork(1L, "ZoneNSX", "testAcc", "testAcc", "VPC01")); + assertTrue(nsxService.createVpcNetwork(1L, 3L, 2L, 5L, "VPC01")); } @Test @@ -76,7 +76,7 @@ public class NsxServiceImplTest { when(nsxControllerUtils.sendNsxCommand(any(DeleteNsxTier1GatewayCommand.class), anyLong())).thenReturn(deleteNsxTier1GatewayAnswer); when(deleteNsxTier1GatewayAnswer.getResult()).thenReturn(true); - assertTrue(nsxService.deleteVpcNetwork(1L, "ZoneNSX", "testAcc", "testAcc", "VPC01")); + assertTrue(nsxService.deleteVpcNetwork(1L, 2L, 3L, 10L, "VPC01")); } @Test @@ -89,6 +89,6 @@ public class NsxServiceImplTest { when(nsxControllerUtils.sendNsxCommand(any(DeleteNsxSegmentCommand.class), anyLong())).thenReturn(deleteNsxSegmentAnswer); when(deleteNsxSegmentAnswer.getResult()).thenReturn(true); - assertTrue(nsxService.deleteNetwork("ZoneNSX", "testAcc", "testDomain", network)); + assertTrue(nsxService.deleteNetwork(1L, 3L, 5L, network)); } } diff --git a/server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java b/server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java index 956ada691ae..85c51b67191 100644 --- a/server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java +++ b/server/src/main/java/com/cloud/hypervisor/HypervisorGuruBase.java @@ -31,6 +31,7 @@ import com.cloud.network.vpc.VpcVO; import com.cloud.network.vpc.dao.VpcDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; +import com.cloud.utils.exception.CloudRuntimeException; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.backup.Backup; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; @@ -170,11 +171,20 @@ public abstract class HypervisorGuruBase extends AdapterBase implements Hypervis Account account = accountManager.getAccount(network.getAccountId()); Domain domain = domainDao.findById(network.getDomainId()); DataCenter zone = dcDao.findById(network.getDataCenterId()); + if (Objects.isNull(zone)) { + throw new CloudRuntimeException(String.format("Failed to find zone with ID: %s", network.getDataCenterId())); + } + if (Objects.isNull(account)) { + throw new CloudRuntimeException(String.format("Failed to find account with ID: %s", network.getAccountId())); + } + if (Objects.isNull(domain)) { + throw new CloudRuntimeException(String.format("Failed to find domain with ID: %s", network.getDomainId())); + } VpcVO vpc = null; if (Objects.nonNull(network) && Objects.nonNull(network.getVpcId())) { vpc = vpcDao.findById(network.getVpcId()); } - to.setNetworkSegmentName(getNetworkName(zone.getName(), domain.getName(), account.getAccountName(), vpc, network.getName())); + to.setNetworkSegmentName(getNetworkName(zone.getId(), domain.getId(), account.getId(), vpc, network.getId())); // Workaround to make sure the TO has the UUID we need for Nicira integration NicVO nicVO = nicDao.findById(profile.getId()); @@ -203,12 +213,12 @@ public abstract class HypervisorGuruBase extends AdapterBase implements Hypervis return to; } - private String getNetworkName(String zoneName, String domainName, String accountName, VpcVO vpc, String networkName) { - String prefix = String.format("%s-%s-%s", domainName, accountName, zoneName); + private String getNetworkName(long zoneId, long domainId, long accountId, VpcVO vpc, long networkId) { + String prefix = String.format("D%s-A%s-Z%s", domainId, accountId, zoneId); if (Objects.isNull(vpc)) { - return prefix + "-" + networkName; + return prefix + "-S" + networkId; } - return prefix + "-" + vpc.getName() + "-" + networkName; + return prefix + "-V" + vpc.getId() + "-S" + networkId; } diff --git a/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java index 026c84b886d..f129ef75b4c 100644 --- a/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java +++ b/vmware-base/src/test/java/com/cloud/hypervisor/vmware/mo/HypervisorHostHelperTest.java @@ -974,7 +974,7 @@ public class HypervisorHostHelperTest { @Test public void testPrepareNetwork() throws Exception { - String networkName = "testAcc-VPC1-tier1"; + String networkName = "D1-A2-Z2-V8-S3"; DynamicProperty property = new DynamicProperty(); property.setVal(networkName);