internal VirtualMachineScaleSetData(ResourceIdentifier id, string name, ResourceType resourceType, SystemData systemData, IDictionary <string, string> tags, AzureLocation location, ComputeSku sku, ComputePlan plan, ManagedServiceIdentity identity, IList <string> zones, Models.ExtendedLocation extendedLocation, UpgradePolicy upgradePolicy, AutomaticRepairsPolicy automaticRepairsPolicy, VirtualMachineScaleSetVmProfile virtualMachineProfile, string provisioningState, bool?overprovision, bool?doNotRunExtensionsOnOverprovisionedVms, string uniqueId, bool?singlePlacementGroup, bool?zoneBalance, int?platformFaultDomainCount, WritableSubResource proximityPlacementGroup, WritableSubResource hostGroup, AdditionalCapabilities additionalCapabilities, ScaleInPolicy scaleInPolicy, OrchestrationMode?orchestrationMode, SpotRestorePolicy spotRestorePolicy, DateTimeOffset?timeCreated) : base(id, name, resourceType, systemData, tags, location) { Sku = sku; Plan = plan; Identity = identity; Zones = zones; ExtendedLocation = extendedLocation; UpgradePolicy = upgradePolicy; AutomaticRepairsPolicy = automaticRepairsPolicy; VirtualMachineProfile = virtualMachineProfile; ProvisioningState = provisioningState; Overprovision = overprovision; DoNotRunExtensionsOnOverprovisionedVms = doNotRunExtensionsOnOverprovisionedVms; UniqueId = uniqueId; SinglePlacementGroup = singlePlacementGroup; ZoneBalance = zoneBalance; PlatformFaultDomainCount = platformFaultDomainCount; ProximityPlacementGroup = proximityPlacementGroup; HostGroup = hostGroup; AdditionalCapabilities = additionalCapabilities; ScaleInPolicy = scaleInPolicy; OrchestrationMode = orchestrationMode; SpotRestorePolicy = spotRestorePolicy; TimeCreated = timeCreated; }
internal static VirtualMachineScaleSetData DeserializeVirtualMachineScaleSetData(JsonElement element) { Optional <Models.Sku> sku = default; Optional <Models.Plan> plan = default; Optional <ManagedServiceIdentity> identity = default; Optional <IList <string> > zones = default; Optional <Models.ExtendedLocation> extendedLocation = default; IDictionary <string, string> tags = default; AzureLocation location = default; ResourceIdentifier id = default; string name = default; ResourceType type = default; SystemData systemData = default; Optional <UpgradePolicy> upgradePolicy = default; Optional <AutomaticRepairsPolicy> automaticRepairsPolicy = default; Optional <VirtualMachineScaleSetVmProfile> virtualMachineProfile = default; Optional <string> provisioningState = default; Optional <bool> overprovision = default; Optional <bool> doNotRunExtensionsOnOverprovisionedVMs = default; Optional <string> uniqueId = default; Optional <bool> singlePlacementGroup = default; Optional <bool> zoneBalance = default; Optional <int> platformFaultDomainCount = default; Optional <WritableSubResource> proximityPlacementGroup = default; Optional <WritableSubResource> hostGroup = default; Optional <AdditionalCapabilities> additionalCapabilities = default; Optional <ScaleInPolicy> scaleInPolicy = default; Optional <OrchestrationMode> orchestrationMode = default; Optional <SpotRestorePolicy> spotRestorePolicy = default; foreach (var property in element.EnumerateObject()) { if (property.NameEquals("sku")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } sku = Models.Sku.DeserializeSku(property.Value); continue; } if (property.NameEquals("plan")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } plan = Models.Plan.DeserializePlan(property.Value); continue; } if (property.NameEquals("identity")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } identity = JsonSerializer.Deserialize <ManagedServiceIdentity>(property.Value.ToString()); continue; } if (property.NameEquals("zones")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } List <string> array = new List <string>(); foreach (var item in property.Value.EnumerateArray()) { array.Add(item.GetString()); } zones = array; continue; } if (property.NameEquals("extendedLocation")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } extendedLocation = Models.ExtendedLocation.DeserializeExtendedLocation(property.Value); continue; } if (property.NameEquals("tags")) { Dictionary <string, string> dictionary = new Dictionary <string, string>(); foreach (var property0 in property.Value.EnumerateObject()) { dictionary.Add(property0.Name, property0.Value.GetString()); } tags = dictionary; continue; } if (property.NameEquals("location")) { location = property.Value.GetString(); continue; } if (property.NameEquals("id")) { id = new ResourceIdentifier(property.Value.GetString()); continue; } if (property.NameEquals("name")) { name = property.Value.GetString(); continue; } if (property.NameEquals("type")) { type = property.Value.GetString(); continue; } if (property.NameEquals("systemData")) { systemData = JsonSerializer.Deserialize <SystemData>(property.Value.ToString()); continue; } if (property.NameEquals("properties")) { if (property.Value.ValueKind == JsonValueKind.Null) { property.ThrowNonNullablePropertyIsNull(); continue; } foreach (var property0 in property.Value.EnumerateObject()) { if (property0.NameEquals("upgradePolicy")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } upgradePolicy = UpgradePolicy.DeserializeUpgradePolicy(property0.Value); continue; } if (property0.NameEquals("automaticRepairsPolicy")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } automaticRepairsPolicy = AutomaticRepairsPolicy.DeserializeAutomaticRepairsPolicy(property0.Value); continue; } if (property0.NameEquals("virtualMachineProfile")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } virtualMachineProfile = VirtualMachineScaleSetVmProfile.DeserializeVirtualMachineScaleSetVmProfile(property0.Value); continue; } if (property0.NameEquals("provisioningState")) { provisioningState = property0.Value.GetString(); continue; } if (property0.NameEquals("overprovision")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } overprovision = property0.Value.GetBoolean(); continue; } if (property0.NameEquals("doNotRunExtensionsOnOverprovisionedVMs")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } doNotRunExtensionsOnOverprovisionedVMs = property0.Value.GetBoolean(); continue; } if (property0.NameEquals("uniqueId")) { uniqueId = property0.Value.GetString(); continue; } if (property0.NameEquals("singlePlacementGroup")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } singlePlacementGroup = property0.Value.GetBoolean(); continue; } if (property0.NameEquals("zoneBalance")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } zoneBalance = property0.Value.GetBoolean(); continue; } if (property0.NameEquals("platformFaultDomainCount")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } platformFaultDomainCount = property0.Value.GetInt32(); continue; } if (property0.NameEquals("proximityPlacementGroup")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } proximityPlacementGroup = JsonSerializer.Deserialize <WritableSubResource>(property0.Value.ToString()); continue; } if (property0.NameEquals("hostGroup")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } hostGroup = JsonSerializer.Deserialize <WritableSubResource>(property0.Value.ToString()); continue; } if (property0.NameEquals("additionalCapabilities")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } additionalCapabilities = AdditionalCapabilities.DeserializeAdditionalCapabilities(property0.Value); continue; } if (property0.NameEquals("scaleInPolicy")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } scaleInPolicy = ScaleInPolicy.DeserializeScaleInPolicy(property0.Value); continue; } if (property0.NameEquals("orchestrationMode")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } orchestrationMode = new OrchestrationMode(property0.Value.GetString()); continue; } if (property0.NameEquals("spotRestorePolicy")) { if (property0.Value.ValueKind == JsonValueKind.Null) { property0.ThrowNonNullablePropertyIsNull(); continue; } spotRestorePolicy = SpotRestorePolicy.DeserializeSpotRestorePolicy(property0.Value); continue; } } continue; } } return(new VirtualMachineScaleSetData(id, name, type, systemData, tags, location, sku.Value, plan.Value, identity, Optional.ToList(zones), extendedLocation.Value, upgradePolicy.Value, automaticRepairsPolicy.Value, virtualMachineProfile.Value, provisioningState.Value, Optional.ToNullable(overprovision), Optional.ToNullable(doNotRunExtensionsOnOverprovisionedVMs), uniqueId.Value, Optional.ToNullable(singlePlacementGroup), Optional.ToNullable(zoneBalance), Optional.ToNullable(platformFaultDomainCount), proximityPlacementGroup, hostGroup, additionalCapabilities.Value, scaleInPolicy.Value, Optional.ToNullable(orchestrationMode), spotRestorePolicy.Value)); }
public void TestVMScaleSetScenarioOperations_SpotTryRestorePolicy() { using (MockContext context = MockContext.Start(this.GetType())) { string originalTestLocation = Environment.GetEnvironmentVariable("AZURE_VM_TEST_LOCATION"); // Create resource group var rgName = TestUtilities.GenerateName(TestPrefix); var vmssName = TestUtilities.GenerateName("vmss"); string storageAccountName = TestUtilities.GenerateName(TestPrefix); VirtualMachineScaleSet inputVMScaleSet; try { Environment.SetEnvironmentVariable("AZURE_VM_TEST_LOCATION", "eastus"); EnsureClientsInitialized(context); ImageReference imageRef = GetPlatformVMImage(useWindowsImage: true); var storageAccountOutput = CreateStorageAccount(rgName, storageAccountName); m_CrpClient.VirtualMachineScaleSets.Delete(rgName, "VMScaleSetDoesNotExist"); SpotRestorePolicy spotRestorePolicy = new SpotRestorePolicy(enabled: true, restoreTimeout: "PT1H"); var createVmssResponse = CreateVMScaleSet_NoAsyncTracking( rgName, vmssName, storageAccountOutput, imageRef, out inputVMScaleSet, null, (vmScaleSet) => { vmScaleSet.Overprovision = true; vmScaleSet.VirtualMachineProfile.Priority = VirtualMachinePriorityTypes.Spot; vmScaleSet.VirtualMachineProfile.EvictionPolicy = VirtualMachineEvictionPolicyTypes.Deallocate; vmScaleSet.SpotRestorePolicy = spotRestorePolicy; vmScaleSet.Sku.Name = VirtualMachineSizeTypes.StandardA1V2; vmScaleSet.Sku.Tier = "Standard"; vmScaleSet.Sku.Capacity = 2; }, createWithManagedDisks: true); ValidateVMScaleSet(inputVMScaleSet, createVmssResponse, true); VirtualMachineScaleSet getVmss = m_CrpClient.VirtualMachineScaleSets.Get(rgName, vmssName); ValidateVMScaleSet(inputVMScaleSet, getVmss, true); Assert.NotNull(getVmss); Assert.NotNull(getVmss.SpotRestorePolicy); Assert.True(getVmss.SpotRestorePolicy.Enabled); Assert.Equal(spotRestorePolicy.RestoreTimeout, getVmss.SpotRestorePolicy.RestoreTimeout); m_CrpClient.VirtualMachineScaleSets.Delete(rgName, vmssName); } finally { Environment.SetEnvironmentVariable("AZURE_VM_TEST_LOCATION", originalTestLocation); //Cleanup the created resources. But don't wait since it takes too long, and it's not the purpose //of the test to cover deletion. CSM does persistent retrying over all RG resources. m_ResourcesClient.ResourceGroups.Delete(rgName); } } }