in azure-toolkit-libs/azure-toolkit-compute-lib/src/main/java/com/microsoft/azure/toolkit/lib/compute/vm/DraftVirtualMachine.java [115:162]
VirtualMachine create(final AzureVirtualMachine module) {
this.module = module;
final NetworkInterface.DefinitionStages.WithCreate interfaceWithCreate = module.getVirtualMachinesManager(subscriptionId).manager().networkManager()
.networkInterfaces().define(name + "-interface-" + Utils.getTimestamp())
.withRegion(this.getRegion().getName())
.withExistingResourceGroup(this.getResourceGroup())
.withExistingPrimaryNetwork(this.getNetworkClient())
.withSubnet(subnet.getName())
.withPrimaryPrivateIPAddressDynamic();
if (ipAddress != null) {
final com.azure.resourcemanager.network.models.PublicIpAddress publicIpAddressClient = getPublicIpAddressClient();
if (publicIpAddressClient.hasAssignedNetworkInterface()) {
AzureMessager.getMessager().warning(AzureString.format("Can not assign public ip %s to vm %s, which has been assigned to %s",
ipAddress.getName(), name, publicIpAddressClient.getAssignedNetworkInterfaceIPConfiguration().name()));
} else {
interfaceWithCreate.withExistingPrimaryPublicIPAddress(getPublicIpAddressClient());
}
}
if (securityGroup != null) {
interfaceWithCreate.withExistingNetworkSecurityGroup(getSecurityGroupClient());
}
final NetworkInterface networkInterface = interfaceWithCreate.create();
final WithProximityPlacementGroup withProximityPlacementGroup = module.getVirtualMachinesManager(subscriptionId).define(this.getName())
.withRegion(this.getRegion().getName())
.withExistingResourceGroup(this.getResourceGroup())
.withExistingPrimaryNetworkInterface(networkInterface);
final WithCreate withCreate = configureImage(withProximityPlacementGroup);
if (StringUtils.isNotEmpty(availabilitySet)) {
withCreate.withExistingAvailabilitySet(getAvailabilitySetClient());
}
if (storageAccount != null) {
withCreate.withExistingStorageAccount(getStorageAccountClient());
}
if (azureSpotConfig != null) {
final VirtualMachineEvictionPolicyTypes evictionPolicyTypes = azureSpotConfig.getPolicy() == StopAndDeallocate ? DEALLOCATE : DELETE;
withCreate.withSpotPriority(evictionPolicyTypes).withMaxPrice(azureSpotConfig.getMaximumPrice());
}
try {
this.remote = withCreate.create();
} catch (Exception e) {
// clean up resource once creation failed
networkInterface.manager().networkInterfaces().deleteById(networkInterface.id());
throw e;
}
refreshStatus();
module.refresh();
return this;
}