private VirtualMachineScaleSet CreateVMScaleSetAndGetOperationResponse( string rgName, string vmssName, StorageAccount storageAccount, ImageReference imageRef, out VirtualMachineScaleSet inputVMScaleSet, VirtualMachineScaleSetExtensionProfile extensionProfile = null, Action <VirtualMachineScaleSet> vmScaleSetCustomizer = null, bool createWithPublicIpAddress = false, bool createWithManagedDisks = false, bool hasDiffDisks = false, bool createWithHealthProbe = false, Subnet subnet = null, IList <string> zones = null, int?osDiskSizeInGB = null, string ppgId = null, string machineSizeType = null, bool?enableUltraSSD = false, string diskEncryptionSetId = null, AutomaticRepairsPolicy automaticRepairsPolicy = null, bool?encryptionAtHostEnabled = null, bool singlePlacementGroup = true, DiagnosticsProfile bootDiagnosticsProfile = null, int?faultDomainCount = null, int?capacity = null, string dedicatedHostGroupReferenceId = null, string dedicatedHostGroupName = null, string dedicatedHostName = null, string userData = null) { // 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 }); var getPublicIpAddressResponse = createWithPublicIpAddress ? null : CreatePublicIP(rgName); var subnetResponse = subnet ?? CreateVNET(rgName); var nicResponse = CreateNIC( rgName, subnetResponse, getPublicIpAddressResponse != null ? getPublicIpAddressResponse.IpAddress : null); var loadBalancer = (getPublicIpAddressResponse != null && createWithHealthProbe) ? CreatePublicLoadBalancerWithProbe(rgName, getPublicIpAddressResponse) : null; Assert.True(createWithManagedDisks || storageAccount != null); inputVMScaleSet = CreateDefaultVMScaleSetInput(rgName, storageAccount?.Name, imageRef, subnetResponse.Id, hasManagedDisks: createWithManagedDisks, healthProbeId: loadBalancer?.Probes?.FirstOrDefault()?.Id, loadBalancerBackendPoolId: loadBalancer?.BackendAddressPools?.FirstOrDefault()?.Id, zones: zones, osDiskSizeInGB: osDiskSizeInGB, machineSizeType: machineSizeType, enableUltraSSD: enableUltraSSD, diskEncryptionSetId: diskEncryptionSetId, automaticRepairsPolicy: automaticRepairsPolicy, bootDiagnosticsProfile: bootDiagnosticsProfile, faultDomainCount: faultDomainCount, capacity: capacity); if (vmScaleSetCustomizer != null) { vmScaleSetCustomizer(inputVMScaleSet); } if (encryptionAtHostEnabled != null) { inputVMScaleSet.VirtualMachineProfile.SecurityProfile = new SecurityProfile { EncryptionAtHost = encryptionAtHostEnabled.Value }; } inputVMScaleSet.VirtualMachineProfile.UserData = userData; if (hasDiffDisks) { VirtualMachineScaleSetOSDisk osDisk = new VirtualMachineScaleSetOSDisk(); osDisk.Caching = CachingTypes.ReadOnly; osDisk.CreateOption = DiskCreateOptionTypes.FromImage; osDisk.DiffDiskSettings = new DiffDiskSettings { Option = DiffDiskOptions.Local, Placement = DiffDiskPlacement.CacheDisk }; inputVMScaleSet.VirtualMachineProfile.StorageProfile.OsDisk = osDisk; } inputVMScaleSet.VirtualMachineProfile.ExtensionProfile = extensionProfile; if (ppgId != null) { inputVMScaleSet.ProximityPlacementGroup = new Microsoft.Azure.Management.Compute.Models.SubResource() { Id = ppgId }; } if (dedicatedHostGroupReferenceId != null) { CreateDedicatedHostGroup(rgName, dedicatedHostGroupName, availabilityZone: null); CreateDedicatedHost(rgName, dedicatedHostGroupName, dedicatedHostName, "DSv3-Type1"); inputVMScaleSet.HostGroup = new CM.SubResource() { Id = dedicatedHostGroupReferenceId }; } inputVMScaleSet.SinglePlacementGroup = singlePlacementGroup ? (bool?)null : false; VirtualMachineScaleSet createOrUpdateResponse = null; try { createOrUpdateResponse = m_CrpClient.VirtualMachineScaleSets.CreateOrUpdate(rgName, vmssName, inputVMScaleSet); Assert.True(createOrUpdateResponse.Name == vmssName); Assert.True(createOrUpdateResponse.Location.ToLower() == inputVMScaleSet.Location.ToLower().Replace(" ", "")); } catch (CloudException e) { if (e.Message.Contains("the allotted time")) { createOrUpdateResponse = m_CrpClient.VirtualMachineScaleSets.Get(rgName, vmssName); } else { throw; } } ValidateVMScaleSet(inputVMScaleSet, createOrUpdateResponse, createWithManagedDisks, ppgId: ppgId, dedicatedHostGroupReferenceId: dedicatedHostGroupReferenceId); return(createOrUpdateResponse); }
protected VirtualMachineScaleSet CreateDefaultVMScaleSetInput( string rgName, string storageAccountName, ImageReference imageRef, string subnetId, bool hasManagedDisks = false, string healthProbeId = null, string loadBalancerBackendPoolId = null, IList <string> zones = null, int?osDiskSizeInGB = null, string machineSizeType = null, bool?enableUltraSSD = false, string diskEncryptionSetId = null, AutomaticRepairsPolicy automaticRepairsPolicy = null, DiagnosticsProfile bootDiagnosticsProfile = null, int?faultDomainCount = null, int?capacity = null) { // Generate Container name to hold disk VHds string containerName = TestUtilities.GenerateName(TestPrefix); var vhdContainer = "https://" + storageAccountName + ".blob.core.windows.net/" + containerName; var vmssName = TestUtilities.GenerateName("vmss"); bool createOSDisk = !hasManagedDisks || osDiskSizeInGB != null; string vmSize = zones == null ? VirtualMachineSizeTypes.StandardA1V2 : VirtualMachineSizeTypes.StandardA1V2; var vmScaleSet = new VirtualMachineScaleSet() { Location = m_location, Tags = new Dictionary <string, string>() { { "RG", "rg" }, { "testTag", "1" } }, Sku = new CM.Sku() { Capacity = capacity ?? 2, Name = machineSizeType == null ? vmSize : machineSizeType }, Zones = zones, Overprovision = false, UpgradePolicy = new UpgradePolicy() { Mode = UpgradeMode.Automatic }, VirtualMachineProfile = new VirtualMachineScaleSetVMProfile() { StorageProfile = new VirtualMachineScaleSetStorageProfile() { ImageReference = imageRef, OsDisk = !createOSDisk ? null : new VirtualMachineScaleSetOSDisk { Caching = CachingTypes.None, CreateOption = DiskCreateOptionTypes.FromImage, Name = hasManagedDisks ? null : "test", VhdContainers = hasManagedDisks ? null : new List <string> { vhdContainer }, DiskSizeGB = osDiskSizeInGB, ManagedDisk = diskEncryptionSetId == null ? null: new VirtualMachineScaleSetManagedDiskParameters() { StorageAccountType = StorageAccountTypes.StandardLRS, DiskEncryptionSet = new DiskEncryptionSetParameters() { Id = diskEncryptionSetId } } }, DataDisks = !hasManagedDisks ? null : new List <VirtualMachineScaleSetDataDisk> { new VirtualMachineScaleSetDataDisk { Lun = 1, CreateOption = DiskCreateOptionTypes.Empty, DiskSizeGB = 128, ManagedDisk = diskEncryptionSetId == null ? null: new VirtualMachineScaleSetManagedDiskParameters() { StorageAccountType = StorageAccountTypes.StandardLRS, DiskEncryptionSet = new DiskEncryptionSetParameters() { Id = diskEncryptionSetId } } } } }, OsProfile = new VirtualMachineScaleSetOSProfile() { ComputerNamePrefix = "test", AdminUsername = "******", AdminPassword = PLACEHOLDER, CustomData = Convert.ToBase64String(Encoding.UTF8.GetBytes("Custom data")) }, NetworkProfile = new VirtualMachineScaleSetNetworkProfile() { HealthProbe = healthProbeId == null ? null : new ApiEntityReference { Id = healthProbeId }, NetworkInterfaceConfigurations = new List <VirtualMachineScaleSetNetworkConfiguration>() { new VirtualMachineScaleSetNetworkConfiguration() { Name = TestUtilities.GenerateName("vmsstestnetconfig"), Primary = true, IpConfigurations = new List <VirtualMachineScaleSetIPConfiguration> { new VirtualMachineScaleSetIPConfiguration() { Name = TestUtilities.GenerateName("vmsstestnetconfig"), Subnet = new Microsoft.Azure.Management.Compute.Models.ApiEntityReference() { Id = subnetId }, LoadBalancerBackendAddressPools = (loadBalancerBackendPoolId != null) ? new List <Microsoft.Azure.Management.Compute.Models.SubResource> { new Microsoft.Azure.Management.Compute.Models.SubResource(loadBalancerBackendPoolId) } : null, ApplicationGatewayBackendAddressPools = new List <Microsoft.Azure.Management.Compute.Models.SubResource>(), } } } } }, ExtensionProfile = new VirtualMachineScaleSetExtensionProfile(), }, AutomaticRepairsPolicy = automaticRepairsPolicy }; if (bootDiagnosticsProfile != null) { vmScaleSet.VirtualMachineProfile.DiagnosticsProfile = bootDiagnosticsProfile; } if (faultDomainCount != null) { vmScaleSet.PlatformFaultDomainCount = faultDomainCount; } if (enableUltraSSD == true) { vmScaleSet.AdditionalCapabilities = new AdditionalCapabilities { UltraSSDEnabled = true }; VirtualMachineScaleSetOSDisk osDisk = vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk; osDisk.ManagedDisk = osDisk.ManagedDisk ?? new VirtualMachineScaleSetManagedDiskParameters(); osDisk.ManagedDisk.StorageAccountType = StorageAccountTypes.PremiumLRS; foreach (VirtualMachineScaleSetDataDisk dataDisk in vmScaleSet.VirtualMachineProfile.StorageProfile.DataDisks) { dataDisk.ManagedDisk = dataDisk.ManagedDisk ?? new VirtualMachineScaleSetManagedDiskParameters(); dataDisk.ManagedDisk.StorageAccountType = StorageAccountTypes.UltraSSDLRS; } } return(vmScaleSet); }
private async Task <(VirtualMachineScaleSet ResponseScaleSet, VirtualMachineScaleSet InputScaleSet)> CreateVMScaleSetAndGetOperationResponse( string rgName, string vmssName, StorageAccount storageAccount, ImageReference imageRef, VirtualMachineScaleSetExtensionProfile extensionProfile = null, Action <VirtualMachineScaleSet> vmScaleSetCustomizer = null, bool createWithPublicIpAddress = false, bool createWithManagedDisks = false, bool hasDiffDisks = false, bool createWithHealthProbe = false, Subnet subnet = null, IList <string> zones = null, int?osDiskSizeInGB = null, string ppgId = null, string machineSizeType = null, bool?enableUltraSSD = false, string diskEncryptionSetId = null, AutomaticRepairsPolicy automaticRepairsPolicy = null) { // Create the resource Group, it might have been already created during StorageAccount creation. var resourceGroup = await ResourceGroupsOperations.CreateOrUpdateAsync( rgName, new ResourceGroup(m_location)); var getPublicIpAddressResponse = createWithPublicIpAddress ? null : await CreatePublicIP(rgName); var subnetResponse = subnet ?? await CreateVNET(rgName); var nicResponse = await CreateNIC( rgName, subnetResponse, getPublicIpAddressResponse != null?getPublicIpAddressResponse.IpAddress : null); var loadBalancer = ((getPublicIpAddressResponse != null && createWithHealthProbe) ? (await CreatePublicLoadBalancerWithProbe(rgName, getPublicIpAddressResponse)) : null); Assert.True(createWithManagedDisks || storageAccount != null); var inputVMScaleSet = CreateDefaultVMScaleSetInput(rgName, storageAccount?.Name, imageRef, subnetResponse.Id, hasManagedDisks: createWithManagedDisks, healthProbeId: loadBalancer?.Probes?.FirstOrDefault()?.Id, loadBalancerBackendPoolId: loadBalancer?.BackendAddressPools?.FirstOrDefault()?.Id, zones: zones, osDiskSizeInGB: osDiskSizeInGB, machineSizeType: machineSizeType, enableUltraSSD: enableUltraSSD, diskEncryptionSetId: diskEncryptionSetId, automaticRepairsPolicy: automaticRepairsPolicy); if (vmScaleSetCustomizer != null) { vmScaleSetCustomizer(inputVMScaleSet); } if (hasDiffDisks) { VirtualMachineScaleSetOSDisk osDisk = new VirtualMachineScaleSetOSDisk(DiskCreateOptionTypes.FromImage); osDisk.Caching = CachingTypes.ReadOnly; osDisk.DiffDiskSettings = new DiffDiskSettings { Option = "Local", //TODO the value of "Placement" may not be given //Placement = DiffDiskPlacement.CacheDisk }; inputVMScaleSet.VirtualMachineProfile.StorageProfile.OsDisk = osDisk; } inputVMScaleSet.VirtualMachineProfile.ExtensionProfile = extensionProfile; if (ppgId != null) { inputVMScaleSet.ProximityPlacementGroup = new Azure.ResourceManager.Compute.Models.SubResource() { Id = ppgId }; } VirtualMachineScaleSet createOrUpdateResponse = null; try { createOrUpdateResponse = await WaitForCompletionAsync(await VirtualMachineScaleSetsOperations.StartCreateOrUpdateAsync(rgName, vmssName, inputVMScaleSet)); Assert.True(createOrUpdateResponse.Name == vmssName); Assert.True(createOrUpdateResponse.Location.ToLower() == inputVMScaleSet.Location.ToLower().Replace(" ", "")); } catch (Exception e) { if (e.Message.Contains("the allotted time")) { createOrUpdateResponse = await VirtualMachineScaleSetsOperations.GetAsync(rgName, vmssName); } else { throw; } } ValidateVMScaleSet(inputVMScaleSet, createOrUpdateResponse, createWithManagedDisks, ppgId: ppgId); return(createOrUpdateResponse, inputVMScaleSet); }
protected void ValidateVMScaleSet(VirtualMachineScaleSet vmScaleSet, VirtualMachineScaleSet vmScaleSetOut, bool hasManagedDisks = false, string ppgId = null) { Assert.True(!string.IsNullOrEmpty(vmScaleSetOut.ProvisioningState)); Assert.True(vmScaleSetOut.Sku.Name == vmScaleSet.Sku.Name); Assert.NotNull(vmScaleSetOut.VirtualMachineProfile.StorageProfile.OsDisk); if (vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk?.DiskSizeGB != null) { Assert.NotNull(vmScaleSetOut.VirtualMachineProfile.StorageProfile.OsDisk.DiskSizeGB); Assert.Equal(vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.DiskSizeGB, vmScaleSetOut.VirtualMachineProfile.StorageProfile.OsDisk.DiskSizeGB); } if (!hasManagedDisks) { Assert.True(vmScaleSetOut.VirtualMachineProfile.StorageProfile.OsDisk.Name == vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.Name); if (vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.Image != null) { Assert.True(vmScaleSetOut.VirtualMachineProfile.StorageProfile.OsDisk.Image.Uri == vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.Image.Uri); } Assert.True(vmScaleSetOut.VirtualMachineProfile.StorageProfile.OsDisk.Caching == vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk.Caching); } else { Assert.NotNull(vmScaleSetOut.VirtualMachineProfile.StorageProfile.OsDisk.ManagedDisk); if (vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk != null) { VirtualMachineScaleSetOSDisk osDisk = vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk; VirtualMachineScaleSetOSDisk osDiskOut = vmScaleSetOut.VirtualMachineProfile.StorageProfile.OsDisk; if (osDisk.Caching != null) { Assert.True(osDisk.Caching == osDiskOut.Caching); } else { Assert.NotNull(osDiskOut.Caching); } if (osDisk.DiffDiskSettings != null) { Assert.True(osDisk.DiffDiskSettings.Option == osDiskOut.DiffDiskSettings.Option); } Assert.NotNull(osDiskOut.ManagedDisk); if (osDisk.ManagedDisk != null && osDisk.ManagedDisk.StorageAccountType != null) { Assert.True(osDisk.ManagedDisk.StorageAccountType == osDiskOut.ManagedDisk.StorageAccountType); } else { Assert.NotNull(osDiskOut.ManagedDisk.StorageAccountType); } if (osDisk.Name != null) { Assert.Equal(osDiskOut.Name, osDisk.Name); } Assert.True(osDiskOut.CreateOption == DiskCreateOptionTypes.FromImage); } if (vmScaleSet.VirtualMachineProfile.StorageProfile.DataDisks != null && vmScaleSet.VirtualMachineProfile.StorageProfile.DataDisks.Count > 0) { Assert.Equal( vmScaleSet.VirtualMachineProfile.StorageProfile.DataDisks.Count, vmScaleSetOut.VirtualMachineProfile.StorageProfile.DataDisks.Count); foreach (VirtualMachineScaleSetDataDisk dataDisk in vmScaleSet.VirtualMachineProfile.StorageProfile.DataDisks) { VirtualMachineScaleSetDataDisk matchingDataDisk = vmScaleSetOut.VirtualMachineProfile.StorageProfile.DataDisks.FirstOrDefault(disk => disk.Lun == dataDisk.Lun); Assert.NotNull(matchingDataDisk); if (dataDisk.Caching != null) { Assert.True(dataDisk.Caching == matchingDataDisk.Caching); } else { Assert.NotNull(matchingDataDisk.Caching); } if (dataDisk.ManagedDisk != null && dataDisk.ManagedDisk.StorageAccountType != null) { Assert.True(dataDisk.ManagedDisk.StorageAccountType == matchingDataDisk.ManagedDisk.StorageAccountType); } else { Assert.NotNull(matchingDataDisk.ManagedDisk.StorageAccountType); } if (dataDisk.Name != null) { Assert.Equal(dataDisk.Name, matchingDataDisk.Name); } Assert.True(dataDisk.CreateOption == matchingDataDisk.CreateOption); } } } if (vmScaleSet.UpgradePolicy.AutomaticOSUpgradePolicy != null) { bool expectedDisableAutomaticRollbackValue = vmScaleSet.UpgradePolicy.AutomaticOSUpgradePolicy.DisableAutomaticRollback ?? false; Assert.True(vmScaleSetOut.UpgradePolicy.AutomaticOSUpgradePolicy.DisableAutomaticRollback == expectedDisableAutomaticRollbackValue); bool expectedEnableAutomaticOSUpgradeValue = vmScaleSet.UpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade ?? false; Assert.True(vmScaleSetOut.UpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade == expectedEnableAutomaticOSUpgradeValue); } if (vmScaleSet.AutomaticRepairsPolicy != null) { bool expectedAutomaticRepairsEnabledValue = vmScaleSet.AutomaticRepairsPolicy.Enabled ?? false; Assert.True(vmScaleSetOut.AutomaticRepairsPolicy.Enabled == expectedAutomaticRepairsEnabledValue); string expectedAutomaticRepairsGracePeriodValue = vmScaleSet.AutomaticRepairsPolicy.GracePeriod ?? "PT30M"; Assert.Equal(vmScaleSetOut.AutomaticRepairsPolicy.GracePeriod, expectedAutomaticRepairsGracePeriodValue, ignoreCase: true); } if (vmScaleSet.VirtualMachineProfile.OsProfile.Secrets != null && vmScaleSet.VirtualMachineProfile.OsProfile.Secrets.Any()) { foreach (var secret in vmScaleSet.VirtualMachineProfile.OsProfile.Secrets) { Assert.NotNull(secret.VaultCertificates); var secretOut = vmScaleSetOut.VirtualMachineProfile.OsProfile.Secrets.FirstOrDefault(s => string.Equals(secret.SourceVault.Id, s.SourceVault.Id)); Assert.NotNull(secretOut); // Disabling resharper null-ref check as it doesn't seem to understand the not-null assert above. // ReSharper disable PossibleNullReferenceException Assert.NotNull(secretOut.VaultCertificates); var VaultCertComparer = new VaultCertComparer(); Assert.True(secretOut.VaultCertificates.SequenceEqual(secret.VaultCertificates, VaultCertComparer)); // ReSharper enable PossibleNullReferenceException } } if (vmScaleSet.VirtualMachineProfile.ExtensionProfile != null && vmScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions.Any()) { foreach (var vmExtension in vmScaleSet.VirtualMachineProfile.ExtensionProfile.Extensions) { var vmExt = vmScaleSetOut.VirtualMachineProfile.ExtensionProfile.Extensions.FirstOrDefault(s => String.Compare(s.Name, vmExtension.Name, StringComparison.OrdinalIgnoreCase) == 0); Assert.NotNull(vmExt); } } if (vmScaleSet.VirtualMachineProfile.NetworkProfile != null) { if (vmScaleSet.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations != null && vmScaleSet.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations.Count > 0) { Assert.NotNull(vmScaleSetOut.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations); Assert.Equal( vmScaleSetOut.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations.Count, vmScaleSet.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations.Count); foreach (var nicconfig in vmScaleSet.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations) { var outnicconfig = vmScaleSetOut.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations.First( nc => string.Equals(nc.Name, nicconfig.Name, StringComparison.OrdinalIgnoreCase)); Assert.NotNull(outnicconfig); CompareVmssNicConfig(nicconfig, outnicconfig); } } } else { Assert.True((vmScaleSetOut.VirtualMachineProfile.NetworkProfile == null) || (vmScaleSetOut.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations.Count == 0)); } if (vmScaleSet.Zones != null) { Assert.True(vmScaleSet.Zones.SequenceEqual(vmScaleSetOut.Zones), "Zones don't match"); if (vmScaleSet.ZoneBalance.HasValue) { Assert.Equal(vmScaleSet.ZoneBalance, vmScaleSetOut.ZoneBalance); } else { if (vmScaleSet.Zones.Count > 1) { Assert.True(vmScaleSetOut.ZoneBalance.HasValue); } else { Assert.False(vmScaleSetOut.ZoneBalance.HasValue); } } if (vmScaleSet.PlatformFaultDomainCount.HasValue) { Assert.Equal(vmScaleSet.PlatformFaultDomainCount, vmScaleSetOut.PlatformFaultDomainCount); } else { Assert.True(vmScaleSetOut.PlatformFaultDomainCount.HasValue); } } else { Assert.Null(vmScaleSetOut.Zones); Assert.Null(vmScaleSetOut.ZoneBalance); } if (ppgId != null) { Assert.Equal(ppgId, vmScaleSetOut.ProximityPlacementGroup.Id, StringComparer.OrdinalIgnoreCase); } }
protected VirtualMachineScaleSet CreateDefaultVMScaleSetInput( string rgName, string storageAccountName, ImageReference imageRef, string subnetId, bool hasManagedDisks = false, string healthProbeId = null, string loadBalancerBackendPoolId = null, IList <string> zones = null, int?osDiskSizeInGB = null, string machineSizeType = null, bool?enableUltraSSD = false, string diskEncryptionSetId = null, AutomaticRepairsPolicy automaticRepairsPolicy = null) { // Generate Container name to hold disk VHds string containerName = Recording.GenerateAssetName(TestPrefix); var vhdContainer = "https://" + storageAccountName + ".blob.core.windows.net/" + containerName; var vmssName = Recording.GenerateAssetName("vmss"); bool createOSDisk = !hasManagedDisks || osDiskSizeInGB != null; string vmSize = zones == null?VirtualMachineSizeTypes.StandardA0.ToString() : VirtualMachineSizeTypes.StandardA1V2.ToString(); var test1 = Recording.GenerateAssetName("vmsstestnetconfig"); var test2 = Recording.GenerateAssetName("vmsstestnetconfig"); var virtualMachineScaleSetIpConfiguration = new VirtualMachineScaleSetIPConfiguration(test2) { Subnet = new Azure.ResourceManager.Compute.Models.ApiEntityReference() { Id = subnetId } }; virtualMachineScaleSetIpConfiguration.ApplicationGatewayBackendAddressPools.Clear(); if (loadBalancerBackendPoolId != null) { virtualMachineScaleSetIpConfiguration.LoadBalancerBackendAddressPools.Add(new Models.SubResource(loadBalancerBackendPoolId)); } var virtualMachineScaleSetOsDisk = !createOSDisk ? null : new VirtualMachineScaleSetOSDisk(DiskCreateOptionTypes.FromImage) { Caching = CachingTypes.None, Name = hasManagedDisks ? null : "test", DiskSizeGB = osDiskSizeInGB, ManagedDisk = diskEncryptionSetId == null ? null : new VirtualMachineScaleSetManagedDiskParameters() { StorageAccountType = StorageAccountTypes.StandardLRS, DiskEncryptionSet = new DiskEncryptionSetParameters() { Id = diskEncryptionSetId } } }; if (!hasManagedDisks) { virtualMachineScaleSetOsDisk?.VhdContainers.Add(vhdContainer); } var virtualMachineScaleSetStorageProfile = new VirtualMachineScaleSetStorageProfile() { ImageReference = imageRef, OsDisk = virtualMachineScaleSetOsDisk }; if (hasManagedDisks) { virtualMachineScaleSetStorageProfile.DataDisks.Add(new VirtualMachineScaleSetDataDisk(1, DiskCreateOptionTypes.Empty) { DiskSizeGB = 128, ManagedDisk = diskEncryptionSetId == null ? null : new VirtualMachineScaleSetManagedDiskParameters() { StorageAccountType = StorageAccountTypes.StandardLRS, DiskEncryptionSet = new DiskEncryptionSetParameters() { Id = diskEncryptionSetId } } }); } var vmScaleSet = new VirtualMachineScaleSet(m_location) { Location = m_location, Tags = { { "RG", "rg" }, { "testTag", "1" } }, Sku = new CM.Sku() { Capacity = 2, Name = machineSizeType == null ? vmSize : machineSizeType }, Overprovision = false, UpgradePolicy = new UpgradePolicy() { Mode = UpgradeMode.Automatic }, VirtualMachineProfile = new VirtualMachineScaleSetVMProfile() { StorageProfile = virtualMachineScaleSetStorageProfile, OsProfile = new VirtualMachineScaleSetOSProfile() { ComputerNamePrefix = "test", AdminUsername = "******", AdminPassword = PLACEHOLDER, CustomData = Convert.ToBase64String(Encoding.UTF8.GetBytes("Custom data")) }, NetworkProfile = new VirtualMachineScaleSetNetworkProfile() { HealthProbe = healthProbeId == null ? null : new ApiEntityReference { Id = healthProbeId }, NetworkInterfaceConfigurations = { new VirtualMachineScaleSetNetworkConfiguration(test1) { Primary = true, IpConfigurations = { virtualMachineScaleSetIpConfiguration } } } }, ExtensionProfile = new VirtualMachineScaleSetExtensionProfile(), }, AutomaticRepairsPolicy = automaticRepairsPolicy }; vmScaleSet.Zones.InitializeFrom(zones); if (enableUltraSSD == true) { vmScaleSet.AdditionalCapabilities = new AdditionalCapabilities { UltraSSDEnabled = true }; VirtualMachineScaleSetOSDisk osDisk = vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk; osDisk.ManagedDisk = osDisk.ManagedDisk ?? new VirtualMachineScaleSetManagedDiskParameters(); osDisk.ManagedDisk.StorageAccountType = StorageAccountTypes.PremiumLRS; foreach (VirtualMachineScaleSetDataDisk dataDisk in vmScaleSet.VirtualMachineProfile.StorageProfile.DataDisks) { dataDisk.ManagedDisk = dataDisk.ManagedDisk ?? new VirtualMachineScaleSetManagedDiskParameters(); dataDisk.ManagedDisk.StorageAccountType = StorageAccountTypes.UltraSSDLRS; } } return(vmScaleSet); }