Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions api/src/main/java/com/cloud/network/guru/NetworkGuru.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,8 @@ public interface NetworkGuru extends Adapter {
*/
Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, String name, Long vpcId, Account owner);

void setup(Network network, long networkId);

/**
* For guest networks that are in Allocated state after the design stage,
* resources are allocated when the guest network is actually being used
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1484,12 +1484,24 @@ public void setVmNetworkDetails(VMInstanceVO vm, VirtualMachineTO vmTO) {
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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -812,6 +812,7 @@ public void doInTransactionWithoutResult(final TransactionStatus status) {
}
}
});
guru.setup(network, relatedFile);
}

if (networks.size() < 1) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -926,12 +926,12 @@ public void checkIfVmNetworkDetailsReturnedIsCorrect() {

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");
Expand All @@ -949,9 +949,13 @@ public void checkIfVmNetworkDetailsReturnedIsCorrect() {
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");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,11 @@ public Network design(NetworkOffering offering, DeploymentPlan plan, Network use
return network;
}

@Override
public void setup(Network network, long networkId) {
// do nothing
}

@Override
public Network implement(Network network, NetworkOffering offering, DeployDestination destination, ReservationContext context)
throws InsufficientVirtualNetworkCapacityException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,22 +20,35 @@

public class CreateNsxDhcpRelayConfigCommand extends NsxCommand {

private Long vpcId;
private String vpcName;
private long networkId;
private String networkName;
private List<String> addresses;

public CreateNsxDhcpRelayConfigCommand(String domainName, String accountName, String zoneName,
String vpcName, String networkName, List<String> addresses) {
super(domainName, accountName, zoneName);
public CreateNsxDhcpRelayConfigCommand(long domainId, long accountId, long zoneId,
Long vpcId, String vpcName, long networkId, String networkName,
List<String> 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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,24 +20,37 @@

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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,19 @@
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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,33 @@

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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,19 @@

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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,29 +21,29 @@
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
Expand All @@ -57,11 +57,11 @@ public boolean equals(Object o) {
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);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -210,14 +210,16 @@ public boolean configure(String name, Map<String, Object> params) throws Configu
}

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<String> 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);
Expand All @@ -231,7 +233,7 @@ private Answer executeRequest(CreateNsxDhcpRelayConfigCommand cmd) {
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);
Expand All @@ -251,18 +253,18 @@ private Answer executeRequest(ReadyCommand cmd) {
}

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) {
Expand Down Expand Up @@ -304,10 +306,10 @@ private Answer executeRequest(CreateNsxSegmentCommand cmd) {
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()));
Expand All @@ -317,10 +319,11 @@ private Answer executeRequest(CreateNsxSegmentCommand cmd) {
}

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()));
Expand Down
Loading