diff --git a/src/Bicep.Core.IntegrationTests/Scenarios/TopLevelResourcePropertiesTests.cs b/src/Bicep.Core.IntegrationTests/Scenarios/TopLevelResourcePropertiesTests.cs index c754da15c1e..5c025400202 100644 --- a/src/Bicep.Core.IntegrationTests/Scenarios/TopLevelResourcePropertiesTests.cs +++ b/src/Bicep.Core.IntegrationTests/Scenarios/TopLevelResourcePropertiesTests.cs @@ -32,6 +32,7 @@ public static IEnumerable ResourceFallbackProperties yield return new object[] { "managedByExtended", "[]" }; yield return new object[] { "extendedLocation", "{'type': 'NotSpecified'}" }; yield return new object[] { "zones", "[]" }; + yield return new object[] { "placement", "{'zonePlacementPolicy': 'Any'}" }; yield return new object[] { "plan", "{}" }; yield return new object[] { "eTag", "''" }; yield return new object[] { "scale", "{'capacity': 1}" }; @@ -49,6 +50,7 @@ public static IEnumerable ModuleFallbackProperties yield return new object[] { "managedByExtended", "[]" }; yield return new object[] { "extendedLocation", "{'type': 'NotSpecified'}" }; yield return new object[] { "zones", "[]" }; + yield return new object[] { "placement", "{'zonePlacementPolicy': 'Any'}" }; yield return new object[] { "plan", "{}" }; yield return new object[] { "eTag", "''" }; yield return new object[] { "scale", "{'capacity': 1}" }; @@ -557,5 +559,32 @@ public void Test_Issue5960_case9() ("BCP036", DiagnosticLevel.Warning, "The property \"kind\" expected a value of type \"'val1' | 'val2'\" but the provided value is of type \"'otherValue'\". If this is a resource type definition inaccuracy, report it using https://aka.ms/bicep-type-issues.") }); } + + // https://github.com/Azure/bicep/issues/20171 + [TestMethod] + public void Placement_property_can_be_used_to_author_a_virtual_machine_scale_set_without_generating_diagnostics() + { + var compilation = Services.BuildCompilation(@" +resource vmss 'Test.Compute/virtualMachineScaleSets@2020-01-01' = { + name: 'vmss' + location: resourceGroup().location + sku: { + name: 'Standard_D2s_v3' + tier: 'Standard' + capacity: 3 + } + placement: { + zonePlacementPolicy: 'Any' + } + properties: { + overprovision: true + upgradePolicy: { + mode: 'Manual' + } + } +} +"); + compilation.Should().NotHaveAnyDiagnostics(); + } } } diff --git a/src/Bicep.Core.Samples/Files/baselines/InvalidResourceDerivedTypes_LF/main.diagnostics.bicep b/src/Bicep.Core.Samples/Files/baselines/InvalidResourceDerivedTypes_LF/main.diagnostics.bicep index c462c5cf0d6..4846b1bd78a 100644 --- a/src/Bicep.Core.Samples/Files/baselines/InvalidResourceDerivedTypes_LF/main.diagnostics.bicep +++ b/src/Bicep.Core.Samples/Files/baselines/InvalidResourceDerivedTypes_LF/main.diagnostics.bicep @@ -66,7 +66,7 @@ type hello = { type typoInPropertyName = resourceInput<'Microsoft.Storage/storageAccounts@2023-01-01'>.nom //@[005:023) [no-unused-types (Warning)] Type "typoInPropertyName" is declared but never used. (bicep core linter https://aka.ms/bicep/linter-diagnostics#no-unused-types) |typoInPropertyName| -//@[088:091) [BCP053 (Error)] The type "Microsoft.Storage/storageAccounts" does not contain property "nom". Available properties include "apiVersion", "asserts", "dependsOn", "eTag", "extendedLocation", "id", "identity", "kind", "location", "managedBy", "managedByExtended", "name", "plan", "properties", "scale", "sku", "tags", "type", "zones". (bicep https://aka.ms/bicep/core-diagnostics#BCP053) |nom| +//@[088:091) [BCP053 (Error)] The type "Microsoft.Storage/storageAccounts" does not contain property "nom". Available properties include "apiVersion", "asserts", "dependsOn", "eTag", "extendedLocation", "id", "identity", "kind", "location", "managedBy", "managedByExtended", "name", "placement", "plan", "properties", "scale", "sku", "tags", "type", "zones". (bicep https://aka.ms/bicep/core-diagnostics#BCP053) |nom| type typoInPropertyName2 = resourceInput<'Microsoft.KeyVault/vaults@2022-07-01'>.properties.accessPolicies[*].tenatId //@[005:024) [no-unused-types (Warning)] Type "typoInPropertyName2" is declared but never used. (bicep core linter https://aka.ms/bicep/linter-diagnostics#no-unused-types) |typoInPropertyName2| //@[110:117) [BCP083 (Error)] The type "AccessPolicyEntry" does not contain property "tenatId". Did you mean "tenantId"? (bicep https://aka.ms/bicep/core-diagnostics#BCP083) |tenatId| diff --git a/src/Bicep.Core.Samples/Files/baselines/InvalidResources_CRLF/main.diagnostics.bicep b/src/Bicep.Core.Samples/Files/baselines/InvalidResources_CRLF/main.diagnostics.bicep index 3f5ef6c963c..4a3ec5c3924 100644 --- a/src/Bicep.Core.Samples/Files/baselines/InvalidResources_CRLF/main.diagnostics.bicep +++ b/src/Bicep.Core.Samples/Files/baselines/InvalidResources_CRLF/main.diagnostics.bicep @@ -1025,7 +1025,7 @@ resource incorrectPropertiesKey 'Microsoft.Resources/deploymentScripts@2020-10-0 var mock = incorrectPropertiesKey.p //@[004:008) [no-unused-vars (Warning)] Variable "mock" is declared but never used. (bicep core linter https://aka.ms/bicep/linter-diagnostics#no-unused-vars) |mock| -//@[034:035) [BCP053 (Error)] The type "AzureCLI" does not contain property "p". Available properties include "apiVersion", "asserts", "eTag", "extendedLocation", "id", "identity", "kind", "location", "managedBy", "managedByExtended", "name", "plan", "properties", "scale", "sku", "systemData", "tags", "type", "zones". (bicep https://aka.ms/bicep/core-diagnostics#BCP053) |p| +//@[034:035) [BCP053 (Error)] The type "AzureCLI" does not contain property "p". Available properties include "apiVersion", "asserts", "eTag", "extendedLocation", "id", "identity", "kind", "location", "managedBy", "managedByExtended", "name", "placement", "plan", "properties", "scale", "sku", "systemData", "tags", "type", "zones". (bicep https://aka.ms/bicep/core-diagnostics#BCP053) |p| resource incorrectPropertiesKey2 'Microsoft.Resources/deploymentScripts@2020-10-01' = { kind: 'AzureCLI' @@ -2189,7 +2189,7 @@ resource issue3000stg 'Microsoft.Storage/storageAccounts@2021-04-01' = { var issue3000stgMadeUpProperty = issue3000stg.madeUpProperty //@[004:030) [no-unused-vars (Warning)] Variable "issue3000stgMadeUpProperty" is declared but never used. (bicep core linter https://aka.ms/bicep/linter-diagnostics#no-unused-vars) |issue3000stgMadeUpProperty| -//@[046:060) [BCP053 (Error)] The type "Microsoft.Storage/storageAccounts" does not contain property "madeUpProperty". Available properties include "apiVersion", "asserts", "eTag", "extendedLocation", "id", "identity", "kind", "location", "managedBy", "managedByExtended", "name", "plan", "properties", "scale", "sku", "tags", "type", "zones". (bicep https://aka.ms/bicep/core-diagnostics#BCP053) |madeUpProperty| +//@[046:060) [BCP053 (Error)] The type "Microsoft.Storage/storageAccounts" does not contain property "madeUpProperty". Available properties include "apiVersion", "asserts", "eTag", "extendedLocation", "id", "identity", "kind", "location", "managedBy", "managedByExtended", "name", "placement", "plan", "properties", "scale", "sku", "tags", "type", "zones". (bicep https://aka.ms/bicep/core-diagnostics#BCP053) |madeUpProperty| var issue3000stgManagedBy = issue3000stg.managedBy //@[004:025) [no-unused-vars (Warning)] Variable "issue3000stgManagedBy" is declared but never used. (bicep core linter https://aka.ms/bicep/linter-diagnostics#no-unused-vars) |issue3000stgManagedBy| //@[041:050) [BCP187 (Warning)] The property "managedBy" does not exist in the resource or type definition, although it might still be valid. If this is a resource type definition inaccuracy, report it using https://aka.ms/bicep-type-issues. (bicep https://aka.ms/bicep/core-diagnostics#BCP187) |managedBy| diff --git a/src/Bicep.Core.UnitTests/Utils/BuiltInTestTypes.cs b/src/Bicep.Core.UnitTests/Utils/BuiltInTestTypes.cs index f57d1c2c109..dbe6f900f65 100644 --- a/src/Bicep.Core.UnitTests/Utils/BuiltInTestTypes.cs +++ b/src/Bicep.Core.UnitTests/Utils/BuiltInTestTypes.cs @@ -196,6 +196,50 @@ private static ResourceTypeComponents FallbackPropertyTestsType() ), null)); } + private static ResourceTypeComponents VirtualMachineScaleSetsTestsType() + { + // Models the shape of Microsoft.Compute/virtualMachineScaleSets, including the "placement" property + // (https://github.com/Azure/bicep/issues/20171), to verify that a realistic resource can be authored + // using the "placement" top-level property without generating any diagnostics. + var resourceType = ResourceTypeReference.Parse("Test.Compute/virtualMachineScaleSets@2020-01-01"); + + var skuType = new ObjectType("Sku", TypeSymbolValidationFlags.Default, new[] { + new NamedTypeProperty("name", LanguageConstants.String, TypePropertyFlags.None, "The sku name."), + new NamedTypeProperty("tier", LanguageConstants.String, TypePropertyFlags.None, "The sku tier."), + new NamedTypeProperty("capacity", LanguageConstants.Int, TypePropertyFlags.None, "The sku capacity."), + }, null); + + var upgradePolicyType = new ObjectType("UpgradePolicy", TypeSymbolValidationFlags.Default, new[] { + new NamedTypeProperty("mode", LanguageConstants.String, TypePropertyFlags.None, "The upgrade mode."), + }, null); + + var propertiesType = new ObjectType("Properties", TypeSymbolValidationFlags.WarnOnPropertyTypeMismatch, new[] { + new NamedTypeProperty("overprovision", LanguageConstants.Bool, TypePropertyFlags.None, "Whether to overprovision the scale set."), + new NamedTypeProperty("upgradePolicy", upgradePolicyType, TypePropertyFlags.None, "The upgrade policy."), + }, null); + + var placementType = new ObjectType("Placement", TypeSymbolValidationFlags.Default, new[] { + new NamedTypeProperty("zonePlacementPolicy", TypeHelper.CreateTypeUnion( + TypeFactory.CreateStringLiteralType("NotSpecified"), + TypeFactory.CreateStringLiteralType("Any"), + TypeFactory.CreateStringLiteralType("None"), + TypeFactory.CreateStringLiteralType("Auto"), + LanguageConstants.String), TypePropertyFlags.Required, "The zone placement policy."), + new NamedTypeProperty("includeZones", new TypedArrayType(LanguageConstants.String, TypeSymbolValidationFlags.Default), TypePropertyFlags.None, "The zones to include."), + new NamedTypeProperty("excludeZones", new TypedArrayType(LanguageConstants.String, TypeSymbolValidationFlags.Default), TypePropertyFlags.None, "The zones to exclude."), + }, null); + + return new ResourceTypeComponents(resourceType, ResourceScope.ResourceGroup, ResourceScope.None, ResourceFlags.None, + new ObjectType(resourceType.FormatName(), TypeSymbolValidationFlags.Default, + AzResourceTypeProvider.GetCommonResourceProperties(resourceType).Concat(new[] { + new NamedTypeProperty("location", LanguageConstants.String, TypePropertyFlags.None, "location property"), + new NamedTypeProperty("sku", skuType, TypePropertyFlags.None, "sku property"), + new NamedTypeProperty("zones", new TypedArrayType(LanguageConstants.String, TypeSymbolValidationFlags.Default), TypePropertyFlags.None, "zones property"), + new NamedTypeProperty("placement", placementType, TypePropertyFlags.None, "placement property"), + new NamedTypeProperty("properties", propertiesType, TypePropertyFlags.Required, "properties property"), + }), null)); + } + private static ResourceTypeComponents ListFunctionsType() { var resourceType = ResourceTypeReference.Parse("Test.Rp/listFuncTests@2020-01-01"); @@ -252,6 +296,7 @@ private static ResourceTypeComponents ListFunctionsType() DiscriminatedPropertiesTestsType2(), FallbackPropertyTestsType(), ListFunctionsType(), + VirtualMachineScaleSetsTestsType(), ]; public static INamespaceProvider Create() diff --git a/src/Bicep.Core/TypeSystem/Providers/Az/AzResourceTypeProvider.cs b/src/Bicep.Core/TypeSystem/Providers/Az/AzResourceTypeProvider.cs index 096c43d0922..0695ddd0f4c 100644 --- a/src/Bicep.Core/TypeSystem/Providers/Az/AzResourceTypeProvider.cs +++ b/src/Bicep.Core/TypeSystem/Providers/Az/AzResourceTypeProvider.cs @@ -67,6 +67,7 @@ public static readonly ImmutableSortedSet ReadWriteDeployTimeConstantPro "managedBy", "extendedLocation", "zones", + "placement", "plan", ResourceSkuPropertyName, "identity", @@ -162,6 +163,20 @@ public static IEnumerable KnownTopLevelResourceProperties() yield return new NamedTypeProperty("zones", stringArray); + var zonePlacementPolicyType = TypeHelper.CreateTypeUnion( + TypeFactory.CreateStringLiteralType("NotSpecified"), + TypeFactory.CreateStringLiteralType("Any"), + TypeFactory.CreateStringLiteralType("None"), + TypeFactory.CreateStringLiteralType("Auto"), + LanguageConstants.String); + + yield return new NamedTypeProperty("placement", new ObjectType("placement", TypeSymbolValidationFlags.Default, new[] + { + new NamedTypeProperty("zonePlacementPolicy", zonePlacementPolicyType, TypePropertyFlags.Required), + new NamedTypeProperty("includeZones", stringArray), + new NamedTypeProperty("excludeZones", stringArray), + }, null)); + yield return new NamedTypeProperty("plan", LanguageConstants.Object); yield return new NamedTypeProperty("eTag", LanguageConstants.String); diff --git a/src/Bicep.LangServer.IntegrationTests/ExpressionAndTypeExtractorTests.cs b/src/Bicep.LangServer.IntegrationTests/ExpressionAndTypeExtractorTests.cs index b29d30b0ed1..6a7c409697a 100644 --- a/src/Bicep.LangServer.IntegrationTests/ExpressionAndTypeExtractorTests.cs +++ b/src/Bicep.LangServer.IntegrationTests/ExpressionAndTypeExtractorTests.cs @@ -2655,6 +2655,11 @@ param newParameter { managedByExtended: string[] name: string parent: object? /* Microsoft.Compute/virtualMachines */ + placement: { + excludeZones: string[] + includeZones: string[] + zonePlacementPolicy: string /* 'Any' | 'Auto' | 'None' | 'NotSpecified' | string */ + } plan: object properties: { autoUpgradeMinorVersion: bool? diff --git a/src/Bicep.LangServer.IntegrationTests/TypeStringifierTests.cs b/src/Bicep.LangServer.IntegrationTests/TypeStringifierTests.cs index 834355164d0..a8805c47ddc 100644 --- a/src/Bicep.LangServer.IntegrationTests/TypeStringifierTests.cs +++ b/src/Bicep.LangServer.IntegrationTests/TypeStringifierTests.cs @@ -785,8 +785,8 @@ public void NullableTypes(string typeDeclaration, string expectedLooseSyntax, st """, "parent", "type loose = object", - "type medium = { asserts: object, dependsOn: (object /* module[] | (resource | module) | resource[] */)[], eTag: string, extendedLocation: { name: string?, type: (string /* 'EdgeZone' | string */)? }?, identity: { type: ('None' | 'SystemAssigned' | 'SystemAssigned, UserAssigned' | 'UserAssigned')?, userAssignedIdentities: object? }?, kind: string, location: string, managedBy: string, managedByExtended: string[], name: string, plan: { name: string?, product: string?, promotionCode: string?, publisher: string? }?, properties: { additionalCapabilities: { ultraSSDEnabled: bool? }?, availabilitySet: { id: string? }?, billingProfile: { maxPrice: int? }?, diagnosticsProfile: { bootDiagnostics: { enabled: bool?, storageUri: string? }? }?, evictionPolicy: (string /* 'Deallocate' | 'Delete' | string */)?, extensionsTimeBudget: string?, hardwareProfile: { vmSize: (string /* 'Basic_A0' | 'Basic_A1' | 'Basic_A2' | 'Basic_A3' | 'Basic_A4' | 'Standard_A0' | 'Standard_A1' | 'Standard_A10' | 'Standard_A11' | 'Standard_A1_v2' | 'Standard_A2' | 'Standard_A2_v2' | 'Standard_A2m_v2' | 'Standard_A3' | 'Standard_A4' | 'Standard_A4_v2' | 'Standard_A4m_v2' | 'Standard_A5' | 'Standard_A6' | 'Standard_A7' | 'Standard_A8' | 'Standard_A8_v2' | 'Standard_A8m_v2' | 'Standard_A9' | 'Standard_B1ms' | 'Standard_B1s' | 'Standard_B2ms' | 'Standard_B2s' | 'Standard_B4ms' | 'Standard_B8ms' | 'Standard_D1' | 'Standard_D11' | 'Standard_D11_v2' | 'Standard_D12' | 'Standard_D12_v2' | 'Standard_D13' | 'Standard_D13_v2' | 'Standard_D14' | 'Standard_D14_v2' | 'Standard_D15_v2' | 'Standard_D16_v3' | 'Standard_D16s_v3' | 'Standard_D1_v2' | 'Standard_D2' | 'Standard_D2_v2' | 'Standard_D2_v3' | 'Standard_D2s_v3' | 'Standard_D3' | 'Standard_D32_v3' | 'Standard_D32s_v3' | 'Standard_D3_v2' | 'Standard_D4' | 'Standard_D4_v2' | 'Standard_D4_v3' | 'Standard_D4s_v3' | 'Standard_D5_v2' | 'Standard_D64_v3' | 'Standard_D64s_v3' | 'Standard_D8_v3' | 'Standard_D8s_v3' | 'Standard_DS1' | 'Standard_DS11' | 'Standard_DS11_v2' | 'Standard_DS12' | 'Standard_DS12_v2' | 'Standard_DS13' | 'Standard_DS13-2_v2' | 'Standard_DS13-4_v2' | 'Standard_DS13_v2' | 'Standard_DS14' | 'Standard_DS14-4_v2' | 'Standard_DS14-8_v2' | 'Standard_DS14_v2' | 'Standard_DS15_v2' | 'Standard_DS1_v2' | 'Standard_DS2' | 'Standard_DS2_v2' | 'Standard_DS3' | 'Standard_DS3_v2' | 'Standard_DS4' | 'Standard_DS4_v2' | 'Standard_DS5_v2' | 'Standard_E16_v3' | 'Standard_E16s_v3' | 'Standard_E2_v3' | 'Standard_E2s_v3' | 'Standard_E32-16_v3' | 'Standard_E32-8s_v3' | 'Standard_E32_v3' | 'Standard_E32s_v3' | 'Standard_E4_v3' | 'Standard_E4s_v3' | 'Standard_E64-16s_v3' | 'Standard_E64-32s_v3' | 'Standard_E64_v3' | 'Standard_E64s_v3' | 'Standard_E8_v3' | 'Standard_E8s_v3' | 'Standard_F1' | 'Standard_F16' | 'Standard_F16s' | 'Standard_F16s_v2' | 'Standard_F1s' | 'Standard_F2' | 'Standard_F2s' | 'Standard_F2s_v2' | 'Standard_F32s_v2' | 'Standard_F4' | 'Standard_F4s' | 'Standard_F4s_v2' | 'Standard_F64s_v2' | 'Standard_F72s_v2' | 'Standard_F8' | 'Standard_F8s' | 'Standard_F8s_v2' | 'Standard_G1' | 'Standard_G2' | 'Standard_G3' | 'Standard_G4' | 'Standard_G5' | 'Standard_GS1' | 'Standard_GS2' | 'Standard_GS3' | 'Standard_GS4' | 'Standard_GS4-4' | 'Standard_GS4-8' | 'Standard_GS5' | 'Standard_GS5-16' | 'Standard_GS5-8' | 'Standard_H16' | 'Standard_H16m' | 'Standard_H16mr' | 'Standard_H16r' | 'Standard_H8' | 'Standard_H8m' | 'Standard_L16s' | 'Standard_L32s' | 'Standard_L4s' | 'Standard_L8s' | 'Standard_M128-32ms' | 'Standard_M128-64ms' | 'Standard_M128ms' | 'Standard_M128s' | 'Standard_M64-16ms' | 'Standard_M64-32ms' | 'Standard_M64ms' | 'Standard_M64s' | 'Standard_NC12' | 'Standard_NC12s_v2' | 'Standard_NC12s_v3' | 'Standard_NC24' | 'Standard_NC24r' | 'Standard_NC24rs_v2' | 'Standard_NC24rs_v3' | 'Standard_NC24s_v2' | 'Standard_NC24s_v3' | 'Standard_NC6' | 'Standard_NC6s_v2' | 'Standard_NC6s_v3' | 'Standard_ND12s' | 'Standard_ND24rs' | 'Standard_ND24s' | 'Standard_ND6s' | 'Standard_NV12' | 'Standard_NV24' | 'Standard_NV6' | string */)? }?, host: { id: string? }?, hostGroup: { id: string? }?, licenseType: string?, networkProfile: { networkInterfaces: { id: string?, properties: { primary: bool? }? }[]? }?, osProfile: { adminPassword: string?, adminUsername: string?, allowExtensionOperations: bool?, computerName: string?, customData: string?, linuxConfiguration: { disablePasswordAuthentication: bool?, patchSettings: { patchMode: (string /* 'AutomaticByPlatform' | 'ImageDefault' | string */)? }?, provisionVMAgent: bool?, ssh: { publicKeys: { keyData: string?, path: string? }[]? }? }?, requireGuestProvisionSignal: bool?, secrets: { sourceVault: { id: string? }?, vaultCertificates: { certificateStore: string?, certificateUrl: string? }[]? }[]?, windowsConfiguration: { additionalUnattendContent: { componentName: string?, content: string?, passName: string?, settingName: ('AutoLogon' | 'FirstLogonCommands')? }[]?, enableAutomaticUpdates: bool?, patchSettings: { enableHotpatching: bool?, patchMode: (string /* 'AutomaticByOS' | 'AutomaticByPlatform' | 'Manual' | string */)? }?, provisionVMAgent: bool?, timeZone: string?, winRM: { listeners: { certificateUrl: string?, protocol: ('Http' | 'Https')? }[]? }? }? }?, platformFaultDomain: int?, priority: (string /* 'Low' | 'Regular' | 'Spot' | string */)?, proximityPlacementGroup: { id: string? }?, securityProfile: { encryptionAtHost: bool?, securityType: (string /* 'TrustedLaunch' | string */)?, uefiSettings: { secureBootEnabled: bool?, vTpmEnabled: bool? }? }?, storageProfile: { dataDisks: { caching: ('None' | 'ReadOnly' | 'ReadWrite')?, createOption: string /* 'Attach' | 'Empty' | 'FromImage' | string */, detachOption: (string /* 'ForceDetach' | string */)?, diskSizeGB: int?, image: { uri: string? }?, lun: int, managedDisk: { diskEncryptionSet: { id: string? }?, id: string?, storageAccountType: (string /* 'Premium_LRS' | 'Premium_ZRS' | 'StandardSSD_LRS' | 'StandardSSD_ZRS' | 'Standard_LRS' | 'UltraSSD_LRS' | string */)? }?, name: string?, toBeDetached: bool?, vhd: { uri: string? }?, writeAcceleratorEnabled: bool? }[]?, imageReference: { id: string?, offer: string?, publisher: string?, sku: string?, version: string? }?, osDisk: { caching: ('None' | 'ReadOnly' | 'ReadWrite')?, createOption: string /* 'Attach' | 'Empty' | 'FromImage' | string */, diffDiskSettings: { option: (string /* 'Local' | string */)?, placement: (string /* 'CacheDisk' | 'ResourceDisk' | string */)? }?, diskSizeGB: int?, encryptionSettings: { diskEncryptionKey: { secretUrl: string, sourceVault: { id: string? } }?, enabled: bool?, keyEncryptionKey: { keyUrl: string, sourceVault: { id: string? } }? }?, image: { uri: string? }?, managedDisk: { diskEncryptionSet: { id: string? }?, id: string?, storageAccountType: (string /* 'Premium_LRS' | 'Premium_ZRS' | 'StandardSSD_LRS' | 'StandardSSD_ZRS' | 'Standard_LRS' | 'UltraSSD_LRS' | string */)? }?, name: string?, osType: ('Linux' | 'Windows')?, vhd: { uri: string? }?, writeAcceleratorEnabled: bool? }? }?, virtualMachineScaleSet: { id: string? }? }?, scale: { capacity: int, maximum: int, minimum: int }, sku: { capacity: int, family: string, model: string, name: string, size: string, tier: string }, tags: object?, zones: string[]? }", - "type strict = { asserts: object, dependsOn: (object /* module[] | (resource | module) | resource[] */)[], eTag: string, extendedLocation: { name: string?, type: (string /* 'EdgeZone' | string */)? }?, identity: { type: ('None' | 'SystemAssigned' | 'SystemAssigned, UserAssigned' | 'UserAssigned')?, userAssignedIdentities: object? }?, kind: string, location: string, managedBy: string, managedByExtended: string[], name: string, plan: { name: string?, product: string?, promotionCode: string?, publisher: string? }?, properties: { additionalCapabilities: { ultraSSDEnabled: bool? }?, availabilitySet: { id: string? }?, billingProfile: { maxPrice: int? }?, diagnosticsProfile: { bootDiagnostics: { enabled: bool?, storageUri: string? }? }?, evictionPolicy: (string /* 'Deallocate' | 'Delete' | string */)?, extensionsTimeBudget: string?, hardwareProfile: { vmSize: (string /* 'Basic_A0' | 'Basic_A1' | 'Basic_A2' | 'Basic_A3' | 'Basic_A4' | 'Standard_A0' | 'Standard_A1' | 'Standard_A10' | 'Standard_A11' | 'Standard_A1_v2' | 'Standard_A2' | 'Standard_A2_v2' | 'Standard_A2m_v2' | 'Standard_A3' | 'Standard_A4' | 'Standard_A4_v2' | 'Standard_A4m_v2' | 'Standard_A5' | 'Standard_A6' | 'Standard_A7' | 'Standard_A8' | 'Standard_A8_v2' | 'Standard_A8m_v2' | 'Standard_A9' | 'Standard_B1ms' | 'Standard_B1s' | 'Standard_B2ms' | 'Standard_B2s' | 'Standard_B4ms' | 'Standard_B8ms' | 'Standard_D1' | 'Standard_D11' | 'Standard_D11_v2' | 'Standard_D12' | 'Standard_D12_v2' | 'Standard_D13' | 'Standard_D13_v2' | 'Standard_D14' | 'Standard_D14_v2' | 'Standard_D15_v2' | 'Standard_D16_v3' | 'Standard_D16s_v3' | 'Standard_D1_v2' | 'Standard_D2' | 'Standard_D2_v2' | 'Standard_D2_v3' | 'Standard_D2s_v3' | 'Standard_D3' | 'Standard_D32_v3' | 'Standard_D32s_v3' | 'Standard_D3_v2' | 'Standard_D4' | 'Standard_D4_v2' | 'Standard_D4_v3' | 'Standard_D4s_v3' | 'Standard_D5_v2' | 'Standard_D64_v3' | 'Standard_D64s_v3' | 'Standard_D8_v3' | 'Standard_D8s_v3' | 'Standard_DS1' | 'Standard_DS11' | 'Standard_DS11_v2' | 'Standard_DS12' | 'Standard_DS12_v2' | 'Standard_DS13' | 'Standard_DS13-2_v2' | 'Standard_DS13-4_v2' | 'Standard_DS13_v2' | 'Standard_DS14' | 'Standard_DS14-4_v2' | 'Standard_DS14-8_v2' | 'Standard_DS14_v2' | 'Standard_DS15_v2' | 'Standard_DS1_v2' | 'Standard_DS2' | 'Standard_DS2_v2' | 'Standard_DS3' | 'Standard_DS3_v2' | 'Standard_DS4' | 'Standard_DS4_v2' | 'Standard_DS5_v2' | 'Standard_E16_v3' | 'Standard_E16s_v3' | 'Standard_E2_v3' | 'Standard_E2s_v3' | 'Standard_E32-16_v3' | 'Standard_E32-8s_v3' | 'Standard_E32_v3' | 'Standard_E32s_v3' | 'Standard_E4_v3' | 'Standard_E4s_v3' | 'Standard_E64-16s_v3' | 'Standard_E64-32s_v3' | 'Standard_E64_v3' | 'Standard_E64s_v3' | 'Standard_E8_v3' | 'Standard_E8s_v3' | 'Standard_F1' | 'Standard_F16' | 'Standard_F16s' | 'Standard_F16s_v2' | 'Standard_F1s' | 'Standard_F2' | 'Standard_F2s' | 'Standard_F2s_v2' | 'Standard_F32s_v2' | 'Standard_F4' | 'Standard_F4s' | 'Standard_F4s_v2' | 'Standard_F64s_v2' | 'Standard_F72s_v2' | 'Standard_F8' | 'Standard_F8s' | 'Standard_F8s_v2' | 'Standard_G1' | 'Standard_G2' | 'Standard_G3' | 'Standard_G4' | 'Standard_G5' | 'Standard_GS1' | 'Standard_GS2' | 'Standard_GS3' | 'Standard_GS4' | 'Standard_GS4-4' | 'Standard_GS4-8' | 'Standard_GS5' | 'Standard_GS5-16' | 'Standard_GS5-8' | 'Standard_H16' | 'Standard_H16m' | 'Standard_H16mr' | 'Standard_H16r' | 'Standard_H8' | 'Standard_H8m' | 'Standard_L16s' | 'Standard_L32s' | 'Standard_L4s' | 'Standard_L8s' | 'Standard_M128-32ms' | 'Standard_M128-64ms' | 'Standard_M128ms' | 'Standard_M128s' | 'Standard_M64-16ms' | 'Standard_M64-32ms' | 'Standard_M64ms' | 'Standard_M64s' | 'Standard_NC12' | 'Standard_NC12s_v2' | 'Standard_NC12s_v3' | 'Standard_NC24' | 'Standard_NC24r' | 'Standard_NC24rs_v2' | 'Standard_NC24rs_v3' | 'Standard_NC24s_v2' | 'Standard_NC24s_v3' | 'Standard_NC6' | 'Standard_NC6s_v2' | 'Standard_NC6s_v3' | 'Standard_ND12s' | 'Standard_ND24rs' | 'Standard_ND24s' | 'Standard_ND6s' | 'Standard_NV12' | 'Standard_NV24' | 'Standard_NV6' | string */)? }?, host: { id: string? }?, hostGroup: { id: string? }?, licenseType: string?, networkProfile: { networkInterfaces: { id: string?, properties: { primary: bool? }? }[]? }?, osProfile: { adminPassword: string?, adminUsername: string?, allowExtensionOperations: bool?, computerName: string?, customData: string?, linuxConfiguration: { disablePasswordAuthentication: bool?, patchSettings: { patchMode: (string /* 'AutomaticByPlatform' | 'ImageDefault' | string */)? }?, provisionVMAgent: bool?, ssh: { publicKeys: { keyData: string?, path: string? }[]? }? }?, requireGuestProvisionSignal: bool?, secrets: { sourceVault: { id: string? }?, vaultCertificates: { certificateStore: string?, certificateUrl: string? }[]? }[]?, windowsConfiguration: { additionalUnattendContent: { componentName: 'Microsoft-Windows-Shell-Setup'?, content: string?, passName: 'OobeSystem'?, settingName: ('AutoLogon' | 'FirstLogonCommands')? }[]?, enableAutomaticUpdates: bool?, patchSettings: { enableHotpatching: bool?, patchMode: (string /* 'AutomaticByOS' | 'AutomaticByPlatform' | 'Manual' | string */)? }?, provisionVMAgent: bool?, timeZone: string?, winRM: { listeners: { certificateUrl: string?, protocol: ('Http' | 'Https')? }[]? }? }? }?, platformFaultDomain: int?, priority: (string /* 'Low' | 'Regular' | 'Spot' | string */)?, proximityPlacementGroup: { id: string? }?, securityProfile: { encryptionAtHost: bool?, securityType: (string /* 'TrustedLaunch' | string */)?, uefiSettings: { secureBootEnabled: bool?, vTpmEnabled: bool? }? }?, storageProfile: { dataDisks: { caching: ('None' | 'ReadOnly' | 'ReadWrite')?, createOption: string /* 'Attach' | 'Empty' | 'FromImage' | string */, detachOption: (string /* 'ForceDetach' | string */)?, diskSizeGB: int?, image: { uri: string? }?, lun: int, managedDisk: { diskEncryptionSet: { id: string? }?, id: string?, storageAccountType: (string /* 'Premium_LRS' | 'Premium_ZRS' | 'StandardSSD_LRS' | 'StandardSSD_ZRS' | 'Standard_LRS' | 'UltraSSD_LRS' | string */)? }?, name: string?, toBeDetached: bool?, vhd: { uri: string? }?, writeAcceleratorEnabled: bool? }[]?, imageReference: { id: string?, offer: string?, publisher: string?, sku: string?, version: string? }?, osDisk: { caching: ('None' | 'ReadOnly' | 'ReadWrite')?, createOption: string /* 'Attach' | 'Empty' | 'FromImage' | string */, diffDiskSettings: { option: (string /* 'Local' | string */)?, placement: (string /* 'CacheDisk' | 'ResourceDisk' | string */)? }?, diskSizeGB: int?, encryptionSettings: { diskEncryptionKey: { secretUrl: string, sourceVault: { id: string? } }?, enabled: bool?, keyEncryptionKey: { keyUrl: string, sourceVault: { id: string? } }? }?, image: { uri: string? }?, managedDisk: { diskEncryptionSet: { id: string? }?, id: string?, storageAccountType: (string /* 'Premium_LRS' | 'Premium_ZRS' | 'StandardSSD_LRS' | 'StandardSSD_ZRS' | 'Standard_LRS' | 'UltraSSD_LRS' | string */)? }?, name: string?, osType: ('Linux' | 'Windows')?, vhd: { uri: string? }?, writeAcceleratorEnabled: bool? }? }?, virtualMachineScaleSet: { id: string? }? }?, scale: { capacity: int, maximum: int, minimum: int }, sku: { capacity: int, family: string, model: string, name: string, size: string, tier: string }, tags: object?, zones: string[]? }", + "type medium = { asserts: object, dependsOn: (object /* module[] | (resource | module) | resource[] */)[], eTag: string, extendedLocation: { name: string?, type: (string /* 'EdgeZone' | string */)? }?, identity: { type: ('None' | 'SystemAssigned' | 'SystemAssigned, UserAssigned' | 'UserAssigned')?, userAssignedIdentities: object? }?, kind: string, location: string, managedBy: string, managedByExtended: string[], name: string, placement: { excludeZones: string[], includeZones: string[], zonePlacementPolicy: string /* 'Any' | 'Auto' | 'None' | 'NotSpecified' | string */ }, plan: { name: string?, product: string?, promotionCode: string?, publisher: string? }?, properties: { additionalCapabilities: { ultraSSDEnabled: bool? }?, availabilitySet: { id: string? }?, billingProfile: { maxPrice: int? }?, diagnosticsProfile: { bootDiagnostics: { enabled: bool?, storageUri: string? }? }?, evictionPolicy: (string /* 'Deallocate' | 'Delete' | string */)?, extensionsTimeBudget: string?, hardwareProfile: { vmSize: (string /* 'Basic_A0' | 'Basic_A1' | 'Basic_A2' | 'Basic_A3' | 'Basic_A4' | 'Standard_A0' | 'Standard_A1' | 'Standard_A10' | 'Standard_A11' | 'Standard_A1_v2' | 'Standard_A2' | 'Standard_A2_v2' | 'Standard_A2m_v2' | 'Standard_A3' | 'Standard_A4' | 'Standard_A4_v2' | 'Standard_A4m_v2' | 'Standard_A5' | 'Standard_A6' | 'Standard_A7' | 'Standard_A8' | 'Standard_A8_v2' | 'Standard_A8m_v2' | 'Standard_A9' | 'Standard_B1ms' | 'Standard_B1s' | 'Standard_B2ms' | 'Standard_B2s' | 'Standard_B4ms' | 'Standard_B8ms' | 'Standard_D1' | 'Standard_D11' | 'Standard_D11_v2' | 'Standard_D12' | 'Standard_D12_v2' | 'Standard_D13' | 'Standard_D13_v2' | 'Standard_D14' | 'Standard_D14_v2' | 'Standard_D15_v2' | 'Standard_D16_v3' | 'Standard_D16s_v3' | 'Standard_D1_v2' | 'Standard_D2' | 'Standard_D2_v2' | 'Standard_D2_v3' | 'Standard_D2s_v3' | 'Standard_D3' | 'Standard_D32_v3' | 'Standard_D32s_v3' | 'Standard_D3_v2' | 'Standard_D4' | 'Standard_D4_v2' | 'Standard_D4_v3' | 'Standard_D4s_v3' | 'Standard_D5_v2' | 'Standard_D64_v3' | 'Standard_D64s_v3' | 'Standard_D8_v3' | 'Standard_D8s_v3' | 'Standard_DS1' | 'Standard_DS11' | 'Standard_DS11_v2' | 'Standard_DS12' | 'Standard_DS12_v2' | 'Standard_DS13' | 'Standard_DS13-2_v2' | 'Standard_DS13-4_v2' | 'Standard_DS13_v2' | 'Standard_DS14' | 'Standard_DS14-4_v2' | 'Standard_DS14-8_v2' | 'Standard_DS14_v2' | 'Standard_DS15_v2' | 'Standard_DS1_v2' | 'Standard_DS2' | 'Standard_DS2_v2' | 'Standard_DS3' | 'Standard_DS3_v2' | 'Standard_DS4' | 'Standard_DS4_v2' | 'Standard_DS5_v2' | 'Standard_E16_v3' | 'Standard_E16s_v3' | 'Standard_E2_v3' | 'Standard_E2s_v3' | 'Standard_E32-16_v3' | 'Standard_E32-8s_v3' | 'Standard_E32_v3' | 'Standard_E32s_v3' | 'Standard_E4_v3' | 'Standard_E4s_v3' | 'Standard_E64-16s_v3' | 'Standard_E64-32s_v3' | 'Standard_E64_v3' | 'Standard_E64s_v3' | 'Standard_E8_v3' | 'Standard_E8s_v3' | 'Standard_F1' | 'Standard_F16' | 'Standard_F16s' | 'Standard_F16s_v2' | 'Standard_F1s' | 'Standard_F2' | 'Standard_F2s' | 'Standard_F2s_v2' | 'Standard_F32s_v2' | 'Standard_F4' | 'Standard_F4s' | 'Standard_F4s_v2' | 'Standard_F64s_v2' | 'Standard_F72s_v2' | 'Standard_F8' | 'Standard_F8s' | 'Standard_F8s_v2' | 'Standard_G1' | 'Standard_G2' | 'Standard_G3' | 'Standard_G4' | 'Standard_G5' | 'Standard_GS1' | 'Standard_GS2' | 'Standard_GS3' | 'Standard_GS4' | 'Standard_GS4-4' | 'Standard_GS4-8' | 'Standard_GS5' | 'Standard_GS5-16' | 'Standard_GS5-8' | 'Standard_H16' | 'Standard_H16m' | 'Standard_H16mr' | 'Standard_H16r' | 'Standard_H8' | 'Standard_H8m' | 'Standard_L16s' | 'Standard_L32s' | 'Standard_L4s' | 'Standard_L8s' | 'Standard_M128-32ms' | 'Standard_M128-64ms' | 'Standard_M128ms' | 'Standard_M128s' | 'Standard_M64-16ms' | 'Standard_M64-32ms' | 'Standard_M64ms' | 'Standard_M64s' | 'Standard_NC12' | 'Standard_NC12s_v2' | 'Standard_NC12s_v3' | 'Standard_NC24' | 'Standard_NC24r' | 'Standard_NC24rs_v2' | 'Standard_NC24rs_v3' | 'Standard_NC24s_v2' | 'Standard_NC24s_v3' | 'Standard_NC6' | 'Standard_NC6s_v2' | 'Standard_NC6s_v3' | 'Standard_ND12s' | 'Standard_ND24rs' | 'Standard_ND24s' | 'Standard_ND6s' | 'Standard_NV12' | 'Standard_NV24' | 'Standard_NV6' | string */)? }?, host: { id: string? }?, hostGroup: { id: string? }?, licenseType: string?, networkProfile: { networkInterfaces: { id: string?, properties: { primary: bool? }? }[]? }?, osProfile: { adminPassword: string?, adminUsername: string?, allowExtensionOperations: bool?, computerName: string?, customData: string?, linuxConfiguration: { disablePasswordAuthentication: bool?, patchSettings: { patchMode: (string /* 'AutomaticByPlatform' | 'ImageDefault' | string */)? }?, provisionVMAgent: bool?, ssh: { publicKeys: { keyData: string?, path: string? }[]? }? }?, requireGuestProvisionSignal: bool?, secrets: { sourceVault: { id: string? }?, vaultCertificates: { certificateStore: string?, certificateUrl: string? }[]? }[]?, windowsConfiguration: { additionalUnattendContent: { componentName: string?, content: string?, passName: string?, settingName: ('AutoLogon' | 'FirstLogonCommands')? }[]?, enableAutomaticUpdates: bool?, patchSettings: { enableHotpatching: bool?, patchMode: (string /* 'AutomaticByOS' | 'AutomaticByPlatform' | 'Manual' | string */)? }?, provisionVMAgent: bool?, timeZone: string?, winRM: { listeners: { certificateUrl: string?, protocol: ('Http' | 'Https')? }[]? }? }? }?, platformFaultDomain: int?, priority: (string /* 'Low' | 'Regular' | 'Spot' | string */)?, proximityPlacementGroup: { id: string? }?, securityProfile: { encryptionAtHost: bool?, securityType: (string /* 'TrustedLaunch' | string */)?, uefiSettings: { secureBootEnabled: bool?, vTpmEnabled: bool? }? }?, storageProfile: { dataDisks: { caching: ('None' | 'ReadOnly' | 'ReadWrite')?, createOption: string /* 'Attach' | 'Empty' | 'FromImage' | string */, detachOption: (string /* 'ForceDetach' | string */)?, diskSizeGB: int?, image: { uri: string? }?, lun: int, managedDisk: { diskEncryptionSet: { id: string? }?, id: string?, storageAccountType: (string /* 'Premium_LRS' | 'Premium_ZRS' | 'StandardSSD_LRS' | 'StandardSSD_ZRS' | 'Standard_LRS' | 'UltraSSD_LRS' | string */)? }?, name: string?, toBeDetached: bool?, vhd: { uri: string? }?, writeAcceleratorEnabled: bool? }[]?, imageReference: { id: string?, offer: string?, publisher: string?, sku: string?, version: string? }?, osDisk: { caching: ('None' | 'ReadOnly' | 'ReadWrite')?, createOption: string /* 'Attach' | 'Empty' | 'FromImage' | string */, diffDiskSettings: { option: (string /* 'Local' | string */)?, placement: (string /* 'CacheDisk' | 'ResourceDisk' | string */)? }?, diskSizeGB: int?, encryptionSettings: { diskEncryptionKey: { secretUrl: string, sourceVault: { id: string? } }?, enabled: bool?, keyEncryptionKey: { keyUrl: string, sourceVault: { id: string? } }? }?, image: { uri: string? }?, managedDisk: { diskEncryptionSet: { id: string? }?, id: string?, storageAccountType: (string /* 'Premium_LRS' | 'Premium_ZRS' | 'StandardSSD_LRS' | 'StandardSSD_ZRS' | 'Standard_LRS' | 'UltraSSD_LRS' | string */)? }?, name: string?, osType: ('Linux' | 'Windows')?, vhd: { uri: string? }?, writeAcceleratorEnabled: bool? }? }?, virtualMachineScaleSet: { id: string? }? }?, scale: { capacity: int, maximum: int, minimum: int }, sku: { capacity: int, family: string, model: string, name: string, size: string, tier: string }, tags: object?, zones: string[]? }", + "type strict = { asserts: object, dependsOn: (object /* module[] | (resource | module) | resource[] */)[], eTag: string, extendedLocation: { name: string?, type: (string /* 'EdgeZone' | string */)? }?, identity: { type: ('None' | 'SystemAssigned' | 'SystemAssigned, UserAssigned' | 'UserAssigned')?, userAssignedIdentities: object? }?, kind: string, location: string, managedBy: string, managedByExtended: string[], name: string, placement: { excludeZones: string[], includeZones: string[], zonePlacementPolicy: string /* 'Any' | 'Auto' | 'None' | 'NotSpecified' | string */ }, plan: { name: string?, product: string?, promotionCode: string?, publisher: string? }?, properties: { additionalCapabilities: { ultraSSDEnabled: bool? }?, availabilitySet: { id: string? }?, billingProfile: { maxPrice: int? }?, diagnosticsProfile: { bootDiagnostics: { enabled: bool?, storageUri: string? }? }?, evictionPolicy: (string /* 'Deallocate' | 'Delete' | string */)?, extensionsTimeBudget: string?, hardwareProfile: { vmSize: (string /* 'Basic_A0' | 'Basic_A1' | 'Basic_A2' | 'Basic_A3' | 'Basic_A4' | 'Standard_A0' | 'Standard_A1' | 'Standard_A10' | 'Standard_A11' | 'Standard_A1_v2' | 'Standard_A2' | 'Standard_A2_v2' | 'Standard_A2m_v2' | 'Standard_A3' | 'Standard_A4' | 'Standard_A4_v2' | 'Standard_A4m_v2' | 'Standard_A5' | 'Standard_A6' | 'Standard_A7' | 'Standard_A8' | 'Standard_A8_v2' | 'Standard_A8m_v2' | 'Standard_A9' | 'Standard_B1ms' | 'Standard_B1s' | 'Standard_B2ms' | 'Standard_B2s' | 'Standard_B4ms' | 'Standard_B8ms' | 'Standard_D1' | 'Standard_D11' | 'Standard_D11_v2' | 'Standard_D12' | 'Standard_D12_v2' | 'Standard_D13' | 'Standard_D13_v2' | 'Standard_D14' | 'Standard_D14_v2' | 'Standard_D15_v2' | 'Standard_D16_v3' | 'Standard_D16s_v3' | 'Standard_D1_v2' | 'Standard_D2' | 'Standard_D2_v2' | 'Standard_D2_v3' | 'Standard_D2s_v3' | 'Standard_D3' | 'Standard_D32_v3' | 'Standard_D32s_v3' | 'Standard_D3_v2' | 'Standard_D4' | 'Standard_D4_v2' | 'Standard_D4_v3' | 'Standard_D4s_v3' | 'Standard_D5_v2' | 'Standard_D64_v3' | 'Standard_D64s_v3' | 'Standard_D8_v3' | 'Standard_D8s_v3' | 'Standard_DS1' | 'Standard_DS11' | 'Standard_DS11_v2' | 'Standard_DS12' | 'Standard_DS12_v2' | 'Standard_DS13' | 'Standard_DS13-2_v2' | 'Standard_DS13-4_v2' | 'Standard_DS13_v2' | 'Standard_DS14' | 'Standard_DS14-4_v2' | 'Standard_DS14-8_v2' | 'Standard_DS14_v2' | 'Standard_DS15_v2' | 'Standard_DS1_v2' | 'Standard_DS2' | 'Standard_DS2_v2' | 'Standard_DS3' | 'Standard_DS3_v2' | 'Standard_DS4' | 'Standard_DS4_v2' | 'Standard_DS5_v2' | 'Standard_E16_v3' | 'Standard_E16s_v3' | 'Standard_E2_v3' | 'Standard_E2s_v3' | 'Standard_E32-16_v3' | 'Standard_E32-8s_v3' | 'Standard_E32_v3' | 'Standard_E32s_v3' | 'Standard_E4_v3' | 'Standard_E4s_v3' | 'Standard_E64-16s_v3' | 'Standard_E64-32s_v3' | 'Standard_E64_v3' | 'Standard_E64s_v3' | 'Standard_E8_v3' | 'Standard_E8s_v3' | 'Standard_F1' | 'Standard_F16' | 'Standard_F16s' | 'Standard_F16s_v2' | 'Standard_F1s' | 'Standard_F2' | 'Standard_F2s' | 'Standard_F2s_v2' | 'Standard_F32s_v2' | 'Standard_F4' | 'Standard_F4s' | 'Standard_F4s_v2' | 'Standard_F64s_v2' | 'Standard_F72s_v2' | 'Standard_F8' | 'Standard_F8s' | 'Standard_F8s_v2' | 'Standard_G1' | 'Standard_G2' | 'Standard_G3' | 'Standard_G4' | 'Standard_G5' | 'Standard_GS1' | 'Standard_GS2' | 'Standard_GS3' | 'Standard_GS4' | 'Standard_GS4-4' | 'Standard_GS4-8' | 'Standard_GS5' | 'Standard_GS5-16' | 'Standard_GS5-8' | 'Standard_H16' | 'Standard_H16m' | 'Standard_H16mr' | 'Standard_H16r' | 'Standard_H8' | 'Standard_H8m' | 'Standard_L16s' | 'Standard_L32s' | 'Standard_L4s' | 'Standard_L8s' | 'Standard_M128-32ms' | 'Standard_M128-64ms' | 'Standard_M128ms' | 'Standard_M128s' | 'Standard_M64-16ms' | 'Standard_M64-32ms' | 'Standard_M64ms' | 'Standard_M64s' | 'Standard_NC12' | 'Standard_NC12s_v2' | 'Standard_NC12s_v3' | 'Standard_NC24' | 'Standard_NC24r' | 'Standard_NC24rs_v2' | 'Standard_NC24rs_v3' | 'Standard_NC24s_v2' | 'Standard_NC24s_v3' | 'Standard_NC6' | 'Standard_NC6s_v2' | 'Standard_NC6s_v3' | 'Standard_ND12s' | 'Standard_ND24rs' | 'Standard_ND24s' | 'Standard_ND6s' | 'Standard_NV12' | 'Standard_NV24' | 'Standard_NV6' | string */)? }?, host: { id: string? }?, hostGroup: { id: string? }?, licenseType: string?, networkProfile: { networkInterfaces: { id: string?, properties: { primary: bool? }? }[]? }?, osProfile: { adminPassword: string?, adminUsername: string?, allowExtensionOperations: bool?, computerName: string?, customData: string?, linuxConfiguration: { disablePasswordAuthentication: bool?, patchSettings: { patchMode: (string /* 'AutomaticByPlatform' | 'ImageDefault' | string */)? }?, provisionVMAgent: bool?, ssh: { publicKeys: { keyData: string?, path: string? }[]? }? }?, requireGuestProvisionSignal: bool?, secrets: { sourceVault: { id: string? }?, vaultCertificates: { certificateStore: string?, certificateUrl: string? }[]? }[]?, windowsConfiguration: { additionalUnattendContent: { componentName: 'Microsoft-Windows-Shell-Setup'?, content: string?, passName: 'OobeSystem'?, settingName: ('AutoLogon' | 'FirstLogonCommands')? }[]?, enableAutomaticUpdates: bool?, patchSettings: { enableHotpatching: bool?, patchMode: (string /* 'AutomaticByOS' | 'AutomaticByPlatform' | 'Manual' | string */)? }?, provisionVMAgent: bool?, timeZone: string?, winRM: { listeners: { certificateUrl: string?, protocol: ('Http' | 'Https')? }[]? }? }? }?, platformFaultDomain: int?, priority: (string /* 'Low' | 'Regular' | 'Spot' | string */)?, proximityPlacementGroup: { id: string? }?, securityProfile: { encryptionAtHost: bool?, securityType: (string /* 'TrustedLaunch' | string */)?, uefiSettings: { secureBootEnabled: bool?, vTpmEnabled: bool? }? }?, storageProfile: { dataDisks: { caching: ('None' | 'ReadOnly' | 'ReadWrite')?, createOption: string /* 'Attach' | 'Empty' | 'FromImage' | string */, detachOption: (string /* 'ForceDetach' | string */)?, diskSizeGB: int?, image: { uri: string? }?, lun: int, managedDisk: { diskEncryptionSet: { id: string? }?, id: string?, storageAccountType: (string /* 'Premium_LRS' | 'Premium_ZRS' | 'StandardSSD_LRS' | 'StandardSSD_ZRS' | 'Standard_LRS' | 'UltraSSD_LRS' | string */)? }?, name: string?, toBeDetached: bool?, vhd: { uri: string? }?, writeAcceleratorEnabled: bool? }[]?, imageReference: { id: string?, offer: string?, publisher: string?, sku: string?, version: string? }?, osDisk: { caching: ('None' | 'ReadOnly' | 'ReadWrite')?, createOption: string /* 'Attach' | 'Empty' | 'FromImage' | string */, diffDiskSettings: { option: (string /* 'Local' | string */)?, placement: (string /* 'CacheDisk' | 'ResourceDisk' | string */)? }?, diskSizeGB: int?, encryptionSettings: { diskEncryptionKey: { secretUrl: string, sourceVault: { id: string? } }?, enabled: bool?, keyEncryptionKey: { keyUrl: string, sourceVault: { id: string? } }? }?, image: { uri: string? }?, managedDisk: { diskEncryptionSet: { id: string? }?, id: string?, storageAccountType: (string /* 'Premium_LRS' | 'Premium_ZRS' | 'StandardSSD_LRS' | 'StandardSSD_ZRS' | 'Standard_LRS' | 'UltraSSD_LRS' | string */)? }?, name: string?, osType: ('Linux' | 'Windows')?, vhd: { uri: string? }?, writeAcceleratorEnabled: bool? }? }?, virtualMachineScaleSet: { id: string? }? }?, scale: { capacity: int, maximum: int, minimum: int }, sku: { capacity: int, family: string, model: string, name: string, size: string, tier: string }, tags: object?, zones: string[]? }", null, DisplayName = "virtual machine extension's 'parent' property")] [DataRow(