public static void ExpectSuccess(VirtualMachineCreateDto createRequest, string sandboxRegion, ApiResponseWrapper <VmDto> responseWrapper) { ApiResponseBasicAsserts.ExpectSuccess <VmDto>(responseWrapper); Assert.NotEqual <int>(0, responseWrapper.Content.Id); Assert.Contains(createRequest.Name, responseWrapper.Content.Name); Assert.Equal(createRequest.OperatingSystem, responseWrapper.Content.OperatingSystem); Assert.Equal(sandboxRegion, responseWrapper.Content.Region);//Same region as sandbox }
public static VirtualMachineCreateDto New( string vmName, string size = "Standard_F1", string os = "win2019datacenter", string username = "******") { var result = new VirtualMachineCreateDto() { Name = vmName, Size = size, OperatingSystem = os, Username = username, Password = $"rR!1{Guid.NewGuid().ToString().Replace("-", "")}", DataDisks = new List <string>() { "standardssd-e1", "standardssd-e2" }, }; return(result); }
public async Task <IActionResult> CreateAsync(int sandboxId, VirtualMachineCreateDto newVm) { var createdVm = await _virtualMachineCreateService.CreateAsync(sandboxId, newVm); return(new JsonResult(createdVm)); }
public VirtualMachineSeedResult(VirtualMachineCreateDto request, ApiResponseWrapper <VmDto> response) { Request = request; Response = response; }
public async Task <VmDto> CreateAsync(int sandboxId, VirtualMachineCreateDto userInput) { CloudResource vmResourceEntry = null; try { ValidateVmPasswordOrThrow(userInput.Password); GenericNameValidation.ValidateName(userInput.Name); _logger.LogInformation($"Creating Virtual Machine for sandbox: {sandboxId}"); var sandbox = await _sandboxModelService.GetByIdForResourceCreationAsync(sandboxId, UserOperation.Study_Crud_Sandbox); var virtualMachineName = AzureResourceNameUtil.VirtualMachine(sandbox.Study.Name, sandbox.Name, userInput.Name); await _cloudResourceCreateService.ValidateThatNameDoesNotExistThrowIfInvalid(virtualMachineName); var tags = ResourceTagFactory.SandboxResourceTags(_config, sandbox.Study, sandbox); var region = RegionStringConverter.Convert(sandbox.Region); userInput.DataDisks = await TranslateDiskSizes(sandbox.Region, userInput.DataDisks); var resourceGroup = await CloudResourceQueries.GetResourceGroupEntry(_db, sandboxId); //Make this dependent on bastion create operation to be completed, since bastion finishes last var dependsOn = await CloudResourceQueries.GetCreateOperationIdForBastion(_db, sandboxId); vmResourceEntry = await _cloudResourceCreateService.CreateVmEntryAsync(sandboxId, resourceGroup, region.Name, tags, virtualMachineName, dependsOn, null); //Create vm settings and immeately attach to resource entry var vmSettingsString = await CreateVmSettingsString(sandbox.Region, vmResourceEntry.Id, sandbox.Study.Id, sandboxId, userInput); vmResourceEntry.ConfigString = vmSettingsString; await _cloudResourceUpdateService.Update(vmResourceEntry.Id, vmResourceEntry); var queueParentItem = new ProvisioningQueueParentDto { Description = $"Create VM for Sandbox: {sandboxId}" }; queueParentItem.Children.Add(new ProvisioningQueueChildDto() { ResourceOperationId = vmResourceEntry.Operations.FirstOrDefault().Id }); await _provisioningQueueService.SendMessageAsync(queueParentItem); var dtoMappedFromResource = _mapper.Map <VmDto>(vmResourceEntry); return(dtoMappedFromResource); } catch (Exception ex) { try { //Delete resource if created if (vmResourceEntry != null) { await _cloudResourceDeleteService.HardDeleteAsync(vmResourceEntry.Id); } } catch (Exception rollbackEx) { _logger.LogError(rollbackEx, $"Failed to roll back VM creation for sandbox {sandboxId}"); } throw new Exception($"Failed to create VM: {ex.Message}", ex); } }
async Task <string> CreateVmSettingsString(string region, int vmId, int studyId, int sandboxId, VirtualMachineCreateDto userInput) { var vmSettings = _mapper.Map <VmSettingsDto>(userInput); var availableOs = await _virtualMachineOperatingSystemService.AvailableOperatingSystems(region); vmSettings.OperatingSystemCategory = AzureVmUtil.GetOsCategory(availableOs, vmSettings.OperatingSystem); vmSettings.Password = await StoreNewVmPasswordAsKeyVaultSecretAndReturnReference(studyId, sandboxId, vmSettings.Password); var diagStorageResource = await CloudResourceQueries.GetDiagStorageAccountEntry(_db, sandboxId); vmSettings.DiagnosticStorageAccountName = diagStorageResource.ResourceName; var networkResource = await CloudResourceQueries.GetNetworkEntry(_db, sandboxId); vmSettings.NetworkName = networkResource.ResourceName; var networkSetting = CloudResourceConfigStringSerializer.NetworkSettings(networkResource.ConfigString); vmSettings.SubnetName = networkSetting.SandboxSubnetName; vmSettings.Rules = VmRuleUtils.CreateInitialVmRules(vmId); return(CloudResourceConfigStringSerializer.Serialize(vmSettings)); }