protected VirtualMachine CreateVM_NoAsyncTracking( string rgName, string asName, StorageAccount storageAccount, ImageReference imageRef, out VirtualMachine inputVM, Action <VirtualMachine> vmCustomizer = null, bool createWithPublicIpAddress = false) { try { // Create the resource Group, it might have been already created during StorageAccount creation. var resourceGroup = m_ResourcesClient.ResourceGroups.CreateOrUpdate( rgName, new ResourceGroup { Location = m_location }); PublicIpAddressGetResponse getPublicIpAddressResponse = createWithPublicIpAddress ? null : CreatePublicIP(rgName); SubnetGetResponse subnetResponse = CreateVNET(rgName); NetworkInterfaceGetResponse nicResponse = CreateNIC( rgName, subnetResponse.Subnet, getPublicIpAddressResponse != null ? getPublicIpAddressResponse.PublicIpAddress : null); string asetId = CreateAvailabilitySet(rgName, asName); inputVM = CreateDefaultVMInput(rgName, storageAccount.Name, imageRef, asetId, nicResponse.NetworkInterface.Id); if (vmCustomizer != null) { vmCustomizer(inputVM); } string expectedVMReferenceId = Helpers.GetVMReferenceId(m_subId, rgName, inputVM.Name); var createOrUpdateResponse = m_CrpClient.VirtualMachines.BeginCreatingOrUpdating( rgName, inputVM); Assert.True(createOrUpdateResponse.StatusCode == HttpStatusCode.Created); Assert.True(createOrUpdateResponse.VirtualMachine.Name == inputVM.Name); Assert.True(createOrUpdateResponse.VirtualMachine.Location == inputVM.Location.ToLower().Replace(" ", "") || createOrUpdateResponse.VirtualMachine.Location.ToLower() == inputVM.Location.ToLower()); Assert.True( createOrUpdateResponse.VirtualMachine.AvailabilitySetReference.ReferenceUri .ToLowerInvariant() == asetId.ToLowerInvariant()); ValidateVM(inputVM, createOrUpdateResponse.VirtualMachine, expectedVMReferenceId); var operationUri = new Uri(createOrUpdateResponse.AzureAsyncOperation); string operationId = operationUri.Segments.LastOrDefault(); var lroResponse = m_CrpClient.GetLongRunningOperationStatus(createOrUpdateResponse.AzureAsyncOperation.ToString()); ValidateLROResponse(lroResponse, operationId); // CONSIDER dropping this Get and ValidateVM call. Nothing changes in the VM model after it's accepted. // There might have been intent to track the async operation to completion and then check the VM is // still this and okay, but that's not what the code above does and still doesn't make much sense. var getResponse = m_CrpClient.VirtualMachines.Get(rgName, inputVM.Name); Assert.True(getResponse.StatusCode == HttpStatusCode.OK); ValidateVM(inputVM, getResponse.VirtualMachine, expectedVMReferenceId); return(getResponse.VirtualMachine); } catch { var deleteRg1Response = m_ResourcesClient.ResourceGroups.Delete(rgName); Assert.True(deleteRg1Response.StatusCode == HttpStatusCode.OK); throw; } }
public void TestMultiNicVirtualMachineReference() { using (var context = UndoContext.Current) { context.Start(); EnsureClientsInitialized(); ImageReference imageRef = GetPlatformVMImage(useWindowsImage: true); string rgName = TestUtilities.GenerateName(TestPrefix); string asName = TestUtilities.GenerateName("as"); string storageAccountName = TestUtilities.GenerateName(TestPrefix); VirtualMachine inputVM; try { // Create the resource Group, it might have been already created during StorageAccount creation. var resourceGroup = m_ResourcesClient.ResourceGroups.CreateOrUpdate( rgName, new ResourceGroup { Location = m_location }); // Create Storage Account, so that both the VMs can share it var storageAccountOutput = CreateStorageAccount(rgName, storageAccountName); SubnetGetResponse subnetResponse = CreateVNET(rgName); string nicname1 = TestUtilities.GenerateName(); string nicname2 = TestUtilities.GenerateName(); NetworkInterfaceGetResponse nicResponse1 = CreateNIC(rgName, subnetResponse.Subnet, null, nicname1); NetworkInterfaceGetResponse nicResponse2 = CreateNIC(rgName, subnetResponse.Subnet, null, nicname2); string asetId = CreateAvailabilitySet(rgName, asName); inputVM = CreateDefaultVMInput(rgName, storageAccountName, imageRef, asetId, nicResponse1.NetworkInterface.Id); inputVM.HardwareProfile.VirtualMachineSize = VirtualMachineSizeTypes.StandardA4; inputVM.NetworkProfile.NetworkInterfaces[0].Primary = false; inputVM.NetworkProfile.NetworkInterfaces.Add(new NetworkInterfaceReference { ReferenceUri = nicResponse2.NetworkInterface.Id, Primary = true }); string expectedVMReferenceId = Helpers.GetVMReferenceId(m_subId, rgName, inputVM.Name); var createOrUpdateResponse = m_CrpClient.VirtualMachines.CreateOrUpdate(rgName, inputVM); Assert.True(createOrUpdateResponse.StatusCode == HttpStatusCode.OK); var getVMResponse = m_CrpClient.VirtualMachines.Get(rgName, inputVM.Name); Assert.True( getVMResponse.VirtualMachine.AvailabilitySetReference.ReferenceUri .ToLowerInvariant() == asetId.ToLowerInvariant()); ValidateVM(inputVM, getVMResponse.VirtualMachine, expectedVMReferenceId); var getNicResponse1 = m_NrpClient.NetworkInterfaces.Get(rgName, nicResponse1.NetworkInterface.Name); Assert.NotNull(getNicResponse1.NetworkInterface.MacAddress); Assert.NotNull(getNicResponse1.NetworkInterface.Primary); Assert.True(getNicResponse1.NetworkInterface.Primary != null && !getNicResponse1.NetworkInterface.Primary.Value); var getNicResponse2 = m_NrpClient.NetworkInterfaces.Get(rgName, nicResponse2.NetworkInterface.Name); Assert.NotNull(getNicResponse2.NetworkInterface.MacAddress); Assert.NotNull(getNicResponse2.NetworkInterface.Primary); Assert.True(getNicResponse2.NetworkInterface.Primary != null && getNicResponse2.NetworkInterface.Primary.Value); } finally { // Cleanup the created resources var deleteRg1Response = m_ResourcesClient.ResourceGroups.Delete(rgName); Assert.True(deleteRg1Response.StatusCode == HttpStatusCode.OK); } } }
protected VirtualMachine CreateVM(string rgName, string asName, StorageAccount storageAccount, string imgRefId, out VirtualMachine inputVM, Action <VirtualMachine> vmCustomizer = null, bool createWithPublicIpAddress = false) { try { // Create the resource Group, it might have been already created during StorageAccount creation. var resourceGroup = m_ResourcesClient.ResourceGroups.CreateOrUpdate( rgName, new ResourceGroup { Location = m_location }); PublicIpAddressGetResponse getPublicIpAddressResponse = createWithPublicIpAddress ? null : CreatePublicIP(rgName); SubnetGetResponse subnetResponse = CreateVNET(rgName); NetworkInterfaceGetResponse nicResponse = CreateNIC(rgName, subnetResponse.Subnet, getPublicIpAddressResponse.PublicIpAddress); string asetId = CreateAvailabilitySet(rgName, asName); inputVM = CreateDefaultVMInput(rgName, storageAccount.Name, imgRefId, asetId, nicResponse.NetworkInterface.Id); if (vmCustomizer != null) { vmCustomizer(inputVM); } string expectedVMReferenceId = Helpers.GetVMReferenceId(m_subId, rgName, inputVM.Name); var createOrUpdateResponse = m_CrpClient.VirtualMachines.BeginCreatingOrUpdating( rgName, inputVM); Assert.True(createOrUpdateResponse.StatusCode == HttpStatusCode.Created); Assert.True(createOrUpdateResponse.VirtualMachine.Name == inputVM.Name); Assert.True(createOrUpdateResponse.VirtualMachine.Location == inputVM.Location.ToLower().Replace(" ", "") || createOrUpdateResponse.VirtualMachine.Location.ToLower() == inputVM.Location.ToLower()); Assert.True( createOrUpdateResponse.VirtualMachine.AvailabilitySetReference.ReferenceUri .ToLowerInvariant() == asetId.ToLowerInvariant()); ValidateVM(inputVM, createOrUpdateResponse.VirtualMachine, expectedVMReferenceId); var operationUri = new Uri(createOrUpdateResponse.AzureAsyncOperation); string operationId = operationUri.Segments.LastOrDefault(); var lroResponse = m_CrpClient.GetLongRunningOperationStatus(createOrUpdateResponse.AzureAsyncOperation.ToString()); ValidateLROResponse(lroResponse, operationId); var getResponse = m_CrpClient.VirtualMachines.Get(rgName, inputVM.Name); Assert.True(getResponse.StatusCode == HttpStatusCode.OK); ValidateVM(inputVM, getResponse.VirtualMachine, expectedVMReferenceId); return(getResponse.VirtualMachine); } catch { var deleteRg1Response = m_ResourcesClient.ResourceGroups.Delete(rgName); Assert.True(deleteRg1Response.StatusCode == HttpStatusCode.OK); throw; } }