All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.pulumi.azure.compute.kotlin.ScaleSetArgs.kt Maven / Gradle / Ivy

@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.azure.compute.kotlin

import com.pulumi.azure.compute.ScaleSetArgs.builder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetBootDiagnosticsArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetBootDiagnosticsArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetExtensionArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetExtensionArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetIdentityArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetIdentityArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetNetworkProfileArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetNetworkProfileArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetOsProfileArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetOsProfileArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetOsProfileLinuxConfigArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetOsProfileLinuxConfigArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetOsProfileSecretArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetOsProfileSecretArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetOsProfileWindowsConfigArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetOsProfileWindowsConfigArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetPlanArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetPlanArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetRollingUpgradePolicyArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetRollingUpgradePolicyArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetSkuArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetSkuArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetStorageProfileDataDiskArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetStorageProfileDataDiskArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetStorageProfileImageReferenceArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetStorageProfileImageReferenceArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetStorageProfileOsDiskArgs
import com.pulumi.azure.compute.kotlin.inputs.ScaleSetStorageProfileOsDiskArgsBuilder
import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.Boolean
import kotlin.Pair
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import kotlin.jvm.JvmName

/**
 * Manages a virtual machine scale set.
 * ## Example Usage
 * ### With Managed Disks (Recommended)
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as azure from "@pulumi/azure";
 * import * as std from "@pulumi/std";
 * const example = new azure.core.ResourceGroup("example", {
 *     name: "example-resources",
 *     location: "West Europe",
 * });
 * const exampleVirtualNetwork = new azure.network.VirtualNetwork("example", {
 *     name: "acctvn",
 *     addressSpaces: ["10.0.0.0/16"],
 *     location: example.location,
 *     resourceGroupName: example.name,
 * });
 * const exampleSubnet = new azure.network.Subnet("example", {
 *     name: "acctsub",
 *     resourceGroupName: example.name,
 *     virtualNetworkName: exampleVirtualNetwork.name,
 *     addressPrefixes: ["10.0.2.0/24"],
 * });
 * const examplePublicIp = new azure.network.PublicIp("example", {
 *     name: "test",
 *     location: example.location,
 *     resourceGroupName: example.name,
 *     allocationMethod: "Static",
 *     domainNameLabel: example.name,
 *     tags: {
 *         environment: "staging",
 *     },
 * });
 * const exampleLoadBalancer = new azure.lb.LoadBalancer("example", {
 *     name: "test",
 *     location: example.location,
 *     resourceGroupName: example.name,
 *     frontendIpConfigurations: [{
 *         name: "PublicIPAddress",
 *         publicIpAddressId: examplePublicIp.id,
 *     }],
 * });
 * const bpepool = new azure.lb.BackendAddressPool("bpepool", {
 *     loadbalancerId: exampleLoadBalancer.id,
 *     name: "BackEndAddressPool",
 * });
 * const lbnatpool = new azure.lb.NatPool("lbnatpool", {
 *     resourceGroupName: example.name,
 *     name: "ssh",
 *     loadbalancerId: exampleLoadBalancer.id,
 *     protocol: "Tcp",
 *     frontendPortStart: 50000,
 *     frontendPortEnd: 50119,
 *     backendPort: 22,
 *     frontendIpConfigurationName: "PublicIPAddress",
 * });
 * const exampleProbe = new azure.lb.Probe("example", {
 *     loadbalancerId: exampleLoadBalancer.id,
 *     name: "http-probe",
 *     protocol: "Http",
 *     requestPath: "/health",
 *     port: 8080,
 * });
 * const exampleScaleSet = new azure.compute.ScaleSet("example", {
 *     name: "mytestscaleset-1",
 *     location: example.location,
 *     resourceGroupName: example.name,
 *     automaticOsUpgrade: true,
 *     upgradePolicyMode: "Rolling",
 *     rollingUpgradePolicy: {
 *         maxBatchInstancePercent: 20,
 *         maxUnhealthyInstancePercent: 20,
 *         maxUnhealthyUpgradedInstancePercent: 5,
 *         pauseTimeBetweenBatches: "PT0S",
 *     },
 *     healthProbeId: exampleProbe.id,
 *     sku: {
 *         name: "Standard_F2",
 *         tier: "Standard",
 *         capacity: 2,
 *     },
 *     storageProfileImageReference: {
 *         publisher: "Canonical",
 *         offer: "0001-com-ubuntu-server-jammy",
 *         sku: "22_04-lts",
 *         version: "latest",
 *     },
 *     storageProfileOsDisk: {
 *         name: "",
 *         caching: "ReadWrite",
 *         createOption: "FromImage",
 *         managedDiskType: "Standard_LRS",
 *     },
 *     storageProfileDataDisks: [{
 *         lun: 0,
 *         caching: "ReadWrite",
 *         createOption: "Empty",
 *         diskSizeGb: 10,
 *     }],
 *     osProfile: {
 *         computerNamePrefix: "testvm",
 *         adminUsername: "myadmin",
 *     },
 *     osProfileLinuxConfig: {
 *         disablePasswordAuthentication: true,
 *         sshKeys: [{
 *             path: "/home/myadmin/.ssh/authorized_keys",
 *             keyData: std.file({
 *                 input: "~/.ssh/demo_key.pub",
 *             }).then(invoke => invoke.result),
 *         }],
 *     },
 *     networkProfiles: [{
 *         name: "mynetworkprofile",
 *         primary: true,
 *         ipConfigurations: [{
 *             name: "TestIPConfiguration",
 *             primary: true,
 *             subnetId: exampleSubnet.id,
 *             loadBalancerBackendAddressPoolIds: [bpepool.id],
 *             loadBalancerInboundNatRulesIds: [lbnatpool.id],
 *         }],
 *     }],
 *     tags: {
 *         environment: "staging",
 *     },
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_azure as azure
 * import pulumi_std as std
 * example = azure.core.ResourceGroup("example",
 *     name="example-resources",
 *     location="West Europe")
 * example_virtual_network = azure.network.VirtualNetwork("example",
 *     name="acctvn",
 *     address_spaces=["10.0.0.0/16"],
 *     location=example.location,
 *     resource_group_name=example.name)
 * example_subnet = azure.network.Subnet("example",
 *     name="acctsub",
 *     resource_group_name=example.name,
 *     virtual_network_name=example_virtual_network.name,
 *     address_prefixes=["10.0.2.0/24"])
 * example_public_ip = azure.network.PublicIp("example",
 *     name="test",
 *     location=example.location,
 *     resource_group_name=example.name,
 *     allocation_method="Static",
 *     domain_name_label=example.name,
 *     tags={
 *         "environment": "staging",
 *     })
 * example_load_balancer = azure.lb.LoadBalancer("example",
 *     name="test",
 *     location=example.location,
 *     resource_group_name=example.name,
 *     frontend_ip_configurations=[azure.lb.LoadBalancerFrontendIpConfigurationArgs(
 *         name="PublicIPAddress",
 *         public_ip_address_id=example_public_ip.id,
 *     )])
 * bpepool = azure.lb.BackendAddressPool("bpepool",
 *     loadbalancer_id=example_load_balancer.id,
 *     name="BackEndAddressPool")
 * lbnatpool = azure.lb.NatPool("lbnatpool",
 *     resource_group_name=example.name,
 *     name="ssh",
 *     loadbalancer_id=example_load_balancer.id,
 *     protocol="Tcp",
 *     frontend_port_start=50000,
 *     frontend_port_end=50119,
 *     backend_port=22,
 *     frontend_ip_configuration_name="PublicIPAddress")
 * example_probe = azure.lb.Probe("example",
 *     loadbalancer_id=example_load_balancer.id,
 *     name="http-probe",
 *     protocol="Http",
 *     request_path="/health",
 *     port=8080)
 * example_scale_set = azure.compute.ScaleSet("example",
 *     name="mytestscaleset-1",
 *     location=example.location,
 *     resource_group_name=example.name,
 *     automatic_os_upgrade=True,
 *     upgrade_policy_mode="Rolling",
 *     rolling_upgrade_policy=azure.compute.ScaleSetRollingUpgradePolicyArgs(
 *         max_batch_instance_percent=20,
 *         max_unhealthy_instance_percent=20,
 *         max_unhealthy_upgraded_instance_percent=5,
 *         pause_time_between_batches="PT0S",
 *     ),
 *     health_probe_id=example_probe.id,
 *     sku=azure.compute.ScaleSetSkuArgs(
 *         name="Standard_F2",
 *         tier="Standard",
 *         capacity=2,
 *     ),
 *     storage_profile_image_reference=azure.compute.ScaleSetStorageProfileImageReferenceArgs(
 *         publisher="Canonical",
 *         offer="0001-com-ubuntu-server-jammy",
 *         sku="22_04-lts",
 *         version="latest",
 *     ),
 *     storage_profile_os_disk=azure.compute.ScaleSetStorageProfileOsDiskArgs(
 *         name="",
 *         caching="ReadWrite",
 *         create_option="FromImage",
 *         managed_disk_type="Standard_LRS",
 *     ),
 *     storage_profile_data_disks=[azure.compute.ScaleSetStorageProfileDataDiskArgs(
 *         lun=0,
 *         caching="ReadWrite",
 *         create_option="Empty",
 *         disk_size_gb=10,
 *     )],
 *     os_profile=azure.compute.ScaleSetOsProfileArgs(
 *         computer_name_prefix="testvm",
 *         admin_username="myadmin",
 *     ),
 *     os_profile_linux_config=azure.compute.ScaleSetOsProfileLinuxConfigArgs(
 *         disable_password_authentication=True,
 *         ssh_keys=[azure.compute.ScaleSetOsProfileLinuxConfigSshKeyArgs(
 *             path="/home/myadmin/.ssh/authorized_keys",
 *             key_data=std.file(input="~/.ssh/demo_key.pub").result,
 *         )],
 *     ),
 *     network_profiles=[azure.compute.ScaleSetNetworkProfileArgs(
 *         name="mynetworkprofile",
 *         primary=True,
 *         ip_configurations=[azure.compute.ScaleSetNetworkProfileIpConfigurationArgs(
 *             name="TestIPConfiguration",
 *             primary=True,
 *             subnet_id=example_subnet.id,
 *             load_balancer_backend_address_pool_ids=[bpepool.id],
 *             load_balancer_inbound_nat_rules_ids=[lbnatpool.id],
 *         )],
 *     )],
 *     tags={
 *         "environment": "staging",
 *     })
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Azure = Pulumi.Azure;
 * using Std = Pulumi.Std;
 * return await Deployment.RunAsync(() =>
 * {
 *     var example = new Azure.Core.ResourceGroup("example", new()
 *     {
 *         Name = "example-resources",
 *         Location = "West Europe",
 *     });
 *     var exampleVirtualNetwork = new Azure.Network.VirtualNetwork("example", new()
 *     {
 *         Name = "acctvn",
 *         AddressSpaces = new[]
 *         {
 *             "10.0.0.0/16",
 *         },
 *         Location = example.Location,
 *         ResourceGroupName = example.Name,
 *     });
 *     var exampleSubnet = new Azure.Network.Subnet("example", new()
 *     {
 *         Name = "acctsub",
 *         ResourceGroupName = example.Name,
 *         VirtualNetworkName = exampleVirtualNetwork.Name,
 *         AddressPrefixes = new[]
 *         {
 *             "10.0.2.0/24",
 *         },
 *     });
 *     var examplePublicIp = new Azure.Network.PublicIp("example", new()
 *     {
 *         Name = "test",
 *         Location = example.Location,
 *         ResourceGroupName = example.Name,
 *         AllocationMethod = "Static",
 *         DomainNameLabel = example.Name,
 *         Tags =
 *         {
 *             { "environment", "staging" },
 *         },
 *     });
 *     var exampleLoadBalancer = new Azure.Lb.LoadBalancer("example", new()
 *     {
 *         Name = "test",
 *         Location = example.Location,
 *         ResourceGroupName = example.Name,
 *         FrontendIpConfigurations = new[]
 *         {
 *             new Azure.Lb.Inputs.LoadBalancerFrontendIpConfigurationArgs
 *             {
 *                 Name = "PublicIPAddress",
 *                 PublicIpAddressId = examplePublicIp.Id,
 *             },
 *         },
 *     });
 *     var bpepool = new Azure.Lb.BackendAddressPool("bpepool", new()
 *     {
 *         LoadbalancerId = exampleLoadBalancer.Id,
 *         Name = "BackEndAddressPool",
 *     });
 *     var lbnatpool = new Azure.Lb.NatPool("lbnatpool", new()
 *     {
 *         ResourceGroupName = example.Name,
 *         Name = "ssh",
 *         LoadbalancerId = exampleLoadBalancer.Id,
 *         Protocol = "Tcp",
 *         FrontendPortStart = 50000,
 *         FrontendPortEnd = 50119,
 *         BackendPort = 22,
 *         FrontendIpConfigurationName = "PublicIPAddress",
 *     });
 *     var exampleProbe = new Azure.Lb.Probe("example", new()
 *     {
 *         LoadbalancerId = exampleLoadBalancer.Id,
 *         Name = "http-probe",
 *         Protocol = "Http",
 *         RequestPath = "/health",
 *         Port = 8080,
 *     });
 *     var exampleScaleSet = new Azure.Compute.ScaleSet("example", new()
 *     {
 *         Name = "mytestscaleset-1",
 *         Location = example.Location,
 *         ResourceGroupName = example.Name,
 *         AutomaticOsUpgrade = true,
 *         UpgradePolicyMode = "Rolling",
 *         RollingUpgradePolicy = new Azure.Compute.Inputs.ScaleSetRollingUpgradePolicyArgs
 *         {
 *             MaxBatchInstancePercent = 20,
 *             MaxUnhealthyInstancePercent = 20,
 *             MaxUnhealthyUpgradedInstancePercent = 5,
 *             PauseTimeBetweenBatches = "PT0S",
 *         },
 *         HealthProbeId = exampleProbe.Id,
 *         Sku = new Azure.Compute.Inputs.ScaleSetSkuArgs
 *         {
 *             Name = "Standard_F2",
 *             Tier = "Standard",
 *             Capacity = 2,
 *         },
 *         StorageProfileImageReference = new Azure.Compute.Inputs.ScaleSetStorageProfileImageReferenceArgs
 *         {
 *             Publisher = "Canonical",
 *             Offer = "0001-com-ubuntu-server-jammy",
 *             Sku = "22_04-lts",
 *             Version = "latest",
 *         },
 *         StorageProfileOsDisk = new Azure.Compute.Inputs.ScaleSetStorageProfileOsDiskArgs
 *         {
 *             Name = "",
 *             Caching = "ReadWrite",
 *             CreateOption = "FromImage",
 *             ManagedDiskType = "Standard_LRS",
 *         },
 *         StorageProfileDataDisks = new[]
 *         {
 *             new Azure.Compute.Inputs.ScaleSetStorageProfileDataDiskArgs
 *             {
 *                 Lun = 0,
 *                 Caching = "ReadWrite",
 *                 CreateOption = "Empty",
 *                 DiskSizeGb = 10,
 *             },
 *         },
 *         OsProfile = new Azure.Compute.Inputs.ScaleSetOsProfileArgs
 *         {
 *             ComputerNamePrefix = "testvm",
 *             AdminUsername = "myadmin",
 *         },
 *         OsProfileLinuxConfig = new Azure.Compute.Inputs.ScaleSetOsProfileLinuxConfigArgs
 *         {
 *             DisablePasswordAuthentication = true,
 *             SshKeys = new[]
 *             {
 *                 new Azure.Compute.Inputs.ScaleSetOsProfileLinuxConfigSshKeyArgs
 *                 {
 *                     Path = "/home/myadmin/.ssh/authorized_keys",
 *                     KeyData = Std.File.Invoke(new()
 *                     {
 *                         Input = "~/.ssh/demo_key.pub",
 *                     }).Apply(invoke => invoke.Result),
 *                 },
 *             },
 *         },
 *         NetworkProfiles = new[]
 *         {
 *             new Azure.Compute.Inputs.ScaleSetNetworkProfileArgs
 *             {
 *                 Name = "mynetworkprofile",
 *                 Primary = true,
 *                 IpConfigurations = new[]
 *                 {
 *                     new Azure.Compute.Inputs.ScaleSetNetworkProfileIpConfigurationArgs
 *                     {
 *                         Name = "TestIPConfiguration",
 *                         Primary = true,
 *                         SubnetId = exampleSubnet.Id,
 *                         LoadBalancerBackendAddressPoolIds = new[]
 *                         {
 *                             bpepool.Id,
 *                         },
 *                         LoadBalancerInboundNatRulesIds = new[]
 *                         {
 *                             lbnatpool.Id,
 *                         },
 *                     },
 *                 },
 *             },
 *         },
 *         Tags =
 *         {
 *             { "environment", "staging" },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/compute"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/core"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/lb"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/network"
 * 	"github.com/pulumi/pulumi-std/sdk/go/std"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		example, err := core.NewResourceGroup(ctx, "example", &core.ResourceGroupArgs{
 * 			Name:     pulumi.String("example-resources"),
 * 			Location: pulumi.String("West Europe"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		exampleVirtualNetwork, err := network.NewVirtualNetwork(ctx, "example", &network.VirtualNetworkArgs{
 * 			Name: pulumi.String("acctvn"),
 * 			AddressSpaces: pulumi.StringArray{
 * 				pulumi.String("10.0.0.0/16"),
 * 			},
 * 			Location:          example.Location,
 * 			ResourceGroupName: example.Name,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		exampleSubnet, err := network.NewSubnet(ctx, "example", &network.SubnetArgs{
 * 			Name:               pulumi.String("acctsub"),
 * 			ResourceGroupName:  example.Name,
 * 			VirtualNetworkName: exampleVirtualNetwork.Name,
 * 			AddressPrefixes: pulumi.StringArray{
 * 				pulumi.String("10.0.2.0/24"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		examplePublicIp, err := network.NewPublicIp(ctx, "example", &network.PublicIpArgs{
 * 			Name:              pulumi.String("test"),
 * 			Location:          example.Location,
 * 			ResourceGroupName: example.Name,
 * 			AllocationMethod:  pulumi.String("Static"),
 * 			DomainNameLabel:   example.Name,
 * 			Tags: pulumi.StringMap{
 * 				"environment": pulumi.String("staging"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		exampleLoadBalancer, err := lb.NewLoadBalancer(ctx, "example", &lb.LoadBalancerArgs{
 * 			Name:              pulumi.String("test"),
 * 			Location:          example.Location,
 * 			ResourceGroupName: example.Name,
 * 			FrontendIpConfigurations: lb.LoadBalancerFrontendIpConfigurationArray{
 * 				&lb.LoadBalancerFrontendIpConfigurationArgs{
 * 					Name:              pulumi.String("PublicIPAddress"),
 * 					PublicIpAddressId: examplePublicIp.ID(),
 * 				},
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		bpepool, err := lb.NewBackendAddressPool(ctx, "bpepool", &lb.BackendAddressPoolArgs{
 * 			LoadbalancerId: exampleLoadBalancer.ID(),
 * 			Name:           pulumi.String("BackEndAddressPool"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		lbnatpool, err := lb.NewNatPool(ctx, "lbnatpool", &lb.NatPoolArgs{
 * 			ResourceGroupName:           example.Name,
 * 			Name:                        pulumi.String("ssh"),
 * 			LoadbalancerId:              exampleLoadBalancer.ID(),
 * 			Protocol:                    pulumi.String("Tcp"),
 * 			FrontendPortStart:           pulumi.Int(50000),
 * 			FrontendPortEnd:             pulumi.Int(50119),
 * 			BackendPort:                 pulumi.Int(22),
 * 			FrontendIpConfigurationName: pulumi.String("PublicIPAddress"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		exampleProbe, err := lb.NewProbe(ctx, "example", &lb.ProbeArgs{
 * 			LoadbalancerId: exampleLoadBalancer.ID(),
 * 			Name:           pulumi.String("http-probe"),
 * 			Protocol:       pulumi.String("Http"),
 * 			RequestPath:    pulumi.String("/health"),
 * 			Port:           pulumi.Int(8080),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		invokeFile, err := std.File(ctx, &std.FileArgs{
 * 			Input: "~/.ssh/demo_key.pub",
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = compute.NewScaleSet(ctx, "example", &compute.ScaleSetArgs{
 * 			Name:               pulumi.String("mytestscaleset-1"),
 * 			Location:           example.Location,
 * 			ResourceGroupName:  example.Name,
 * 			AutomaticOsUpgrade: pulumi.Bool(true),
 * 			UpgradePolicyMode:  pulumi.String("Rolling"),
 * 			RollingUpgradePolicy: &compute.ScaleSetRollingUpgradePolicyArgs{
 * 				MaxBatchInstancePercent:             pulumi.Int(20),
 * 				MaxUnhealthyInstancePercent:         pulumi.Int(20),
 * 				MaxUnhealthyUpgradedInstancePercent: pulumi.Int(5),
 * 				PauseTimeBetweenBatches:             pulumi.String("PT0S"),
 * 			},
 * 			HealthProbeId: exampleProbe.ID(),
 * 			Sku: &compute.ScaleSetSkuArgs{
 * 				Name:     pulumi.String("Standard_F2"),
 * 				Tier:     pulumi.String("Standard"),
 * 				Capacity: pulumi.Int(2),
 * 			},
 * 			StorageProfileImageReference: &compute.ScaleSetStorageProfileImageReferenceArgs{
 * 				Publisher: pulumi.String("Canonical"),
 * 				Offer:     pulumi.String("0001-com-ubuntu-server-jammy"),
 * 				Sku:       pulumi.String("22_04-lts"),
 * 				Version:   pulumi.String("latest"),
 * 			},
 * 			StorageProfileOsDisk: &compute.ScaleSetStorageProfileOsDiskArgs{
 * 				Name:            pulumi.String(""),
 * 				Caching:         pulumi.String("ReadWrite"),
 * 				CreateOption:    pulumi.String("FromImage"),
 * 				ManagedDiskType: pulumi.String("Standard_LRS"),
 * 			},
 * 			StorageProfileDataDisks: compute.ScaleSetStorageProfileDataDiskArray{
 * 				&compute.ScaleSetStorageProfileDataDiskArgs{
 * 					Lun:          pulumi.Int(0),
 * 					Caching:      pulumi.String("ReadWrite"),
 * 					CreateOption: pulumi.String("Empty"),
 * 					DiskSizeGb:   pulumi.Int(10),
 * 				},
 * 			},
 * 			OsProfile: &compute.ScaleSetOsProfileArgs{
 * 				ComputerNamePrefix: pulumi.String("testvm"),
 * 				AdminUsername:      pulumi.String("myadmin"),
 * 			},
 * 			OsProfileLinuxConfig: &compute.ScaleSetOsProfileLinuxConfigArgs{
 * 				DisablePasswordAuthentication: pulumi.Bool(true),
 * 				SshKeys: compute.ScaleSetOsProfileLinuxConfigSshKeyArray{
 * 					&compute.ScaleSetOsProfileLinuxConfigSshKeyArgs{
 * 						Path:    pulumi.String("/home/myadmin/.ssh/authorized_keys"),
 * 						KeyData: invokeFile.Result,
 * 					},
 * 				},
 * 			},
 * 			NetworkProfiles: compute.ScaleSetNetworkProfileArray{
 * 				&compute.ScaleSetNetworkProfileArgs{
 * 					Name:    pulumi.String("mynetworkprofile"),
 * 					Primary: pulumi.Bool(true),
 * 					IpConfigurations: compute.ScaleSetNetworkProfileIpConfigurationArray{
 * 						&compute.ScaleSetNetworkProfileIpConfigurationArgs{
 * 							Name:     pulumi.String("TestIPConfiguration"),
 * 							Primary:  pulumi.Bool(true),
 * 							SubnetId: exampleSubnet.ID(),
 * 							LoadBalancerBackendAddressPoolIds: pulumi.StringArray{
 * 								bpepool.ID(),
 * 							},
 * 							LoadBalancerInboundNatRulesIds: pulumi.StringArray{
 * 								lbnatpool.ID(),
 * 							},
 * 						},
 * 					},
 * 				},
 * 			},
 * 			Tags: pulumi.StringMap{
 * 				"environment": pulumi.String("staging"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.azure.core.ResourceGroup;
 * import com.pulumi.azure.core.ResourceGroupArgs;
 * import com.pulumi.azure.network.VirtualNetwork;
 * import com.pulumi.azure.network.VirtualNetworkArgs;
 * import com.pulumi.azure.network.Subnet;
 * import com.pulumi.azure.network.SubnetArgs;
 * import com.pulumi.azure.network.PublicIp;
 * import com.pulumi.azure.network.PublicIpArgs;
 * import com.pulumi.azure.lb.LoadBalancer;
 * import com.pulumi.azure.lb.LoadBalancerArgs;
 * import com.pulumi.azure.lb.inputs.LoadBalancerFrontendIpConfigurationArgs;
 * import com.pulumi.azure.lb.BackendAddressPool;
 * import com.pulumi.azure.lb.BackendAddressPoolArgs;
 * import com.pulumi.azure.lb.NatPool;
 * import com.pulumi.azure.lb.NatPoolArgs;
 * import com.pulumi.azure.lb.Probe;
 * import com.pulumi.azure.lb.ProbeArgs;
 * import com.pulumi.azure.compute.ScaleSet;
 * import com.pulumi.azure.compute.ScaleSetArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetRollingUpgradePolicyArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetSkuArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetStorageProfileImageReferenceArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetStorageProfileOsDiskArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetStorageProfileDataDiskArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetOsProfileArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetOsProfileLinuxConfigArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetNetworkProfileArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var example = new ResourceGroup("example", ResourceGroupArgs.builder()
 *             .name("example-resources")
 *             .location("West Europe")
 *             .build());
 *         var exampleVirtualNetwork = new VirtualNetwork("exampleVirtualNetwork", VirtualNetworkArgs.builder()
 *             .name("acctvn")
 *             .addressSpaces("10.0.0.0/16")
 *             .location(example.location())
 *             .resourceGroupName(example.name())
 *             .build());
 *         var exampleSubnet = new Subnet("exampleSubnet", SubnetArgs.builder()
 *             .name("acctsub")
 *             .resourceGroupName(example.name())
 *             .virtualNetworkName(exampleVirtualNetwork.name())
 *             .addressPrefixes("10.0.2.0/24")
 *             .build());
 *         var examplePublicIp = new PublicIp("examplePublicIp", PublicIpArgs.builder()
 *             .name("test")
 *             .location(example.location())
 *             .resourceGroupName(example.name())
 *             .allocationMethod("Static")
 *             .domainNameLabel(example.name())
 *             .tags(Map.of("environment", "staging"))
 *             .build());
 *         var exampleLoadBalancer = new LoadBalancer("exampleLoadBalancer", LoadBalancerArgs.builder()
 *             .name("test")
 *             .location(example.location())
 *             .resourceGroupName(example.name())
 *             .frontendIpConfigurations(LoadBalancerFrontendIpConfigurationArgs.builder()
 *                 .name("PublicIPAddress")
 *                 .publicIpAddressId(examplePublicIp.id())
 *                 .build())
 *             .build());
 *         var bpepool = new BackendAddressPool("bpepool", BackendAddressPoolArgs.builder()
 *             .loadbalancerId(exampleLoadBalancer.id())
 *             .name("BackEndAddressPool")
 *             .build());
 *         var lbnatpool = new NatPool("lbnatpool", NatPoolArgs.builder()
 *             .resourceGroupName(example.name())
 *             .name("ssh")
 *             .loadbalancerId(exampleLoadBalancer.id())
 *             .protocol("Tcp")
 *             .frontendPortStart(50000)
 *             .frontendPortEnd(50119)
 *             .backendPort(22)
 *             .frontendIpConfigurationName("PublicIPAddress")
 *             .build());
 *         var exampleProbe = new Probe("exampleProbe", ProbeArgs.builder()
 *             .loadbalancerId(exampleLoadBalancer.id())
 *             .name("http-probe")
 *             .protocol("Http")
 *             .requestPath("/health")
 *             .port(8080)
 *             .build());
 *         var exampleScaleSet = new ScaleSet("exampleScaleSet", ScaleSetArgs.builder()
 *             .name("mytestscaleset-1")
 *             .location(example.location())
 *             .resourceGroupName(example.name())
 *             .automaticOsUpgrade(true)
 *             .upgradePolicyMode("Rolling")
 *             .rollingUpgradePolicy(ScaleSetRollingUpgradePolicyArgs.builder()
 *                 .maxBatchInstancePercent(20)
 *                 .maxUnhealthyInstancePercent(20)
 *                 .maxUnhealthyUpgradedInstancePercent(5)
 *                 .pauseTimeBetweenBatches("PT0S")
 *                 .build())
 *             .healthProbeId(exampleProbe.id())
 *             .sku(ScaleSetSkuArgs.builder()
 *                 .name("Standard_F2")
 *                 .tier("Standard")
 *                 .capacity(2)
 *                 .build())
 *             .storageProfileImageReference(ScaleSetStorageProfileImageReferenceArgs.builder()
 *                 .publisher("Canonical")
 *                 .offer("0001-com-ubuntu-server-jammy")
 *                 .sku("22_04-lts")
 *                 .version("latest")
 *                 .build())
 *             .storageProfileOsDisk(ScaleSetStorageProfileOsDiskArgs.builder()
 *                 .name("")
 *                 .caching("ReadWrite")
 *                 .createOption("FromImage")
 *                 .managedDiskType("Standard_LRS")
 *                 .build())
 *             .storageProfileDataDisks(ScaleSetStorageProfileDataDiskArgs.builder()
 *                 .lun(0)
 *                 .caching("ReadWrite")
 *                 .createOption("Empty")
 *                 .diskSizeGb(10)
 *                 .build())
 *             .osProfile(ScaleSetOsProfileArgs.builder()
 *                 .computerNamePrefix("testvm")
 *                 .adminUsername("myadmin")
 *                 .build())
 *             .osProfileLinuxConfig(ScaleSetOsProfileLinuxConfigArgs.builder()
 *                 .disablePasswordAuthentication(true)
 *                 .sshKeys(ScaleSetOsProfileLinuxConfigSshKeyArgs.builder()
 *                     .path("/home/myadmin/.ssh/authorized_keys")
 *                     .keyData(StdFunctions.file(FileArgs.builder()
 *                         .input("~/.ssh/demo_key.pub")
 *                         .build()).result())
 *                     .build())
 *                 .build())
 *             .networkProfiles(ScaleSetNetworkProfileArgs.builder()
 *                 .name("mynetworkprofile")
 *                 .primary(true)
 *                 .ipConfigurations(ScaleSetNetworkProfileIpConfigurationArgs.builder()
 *                     .name("TestIPConfiguration")
 *                     .primary(true)
 *                     .subnetId(exampleSubnet.id())
 *                     .loadBalancerBackendAddressPoolIds(bpepool.id())
 *                     .loadBalancerInboundNatRulesIds(lbnatpool.id())
 *                     .build())
 *                 .build())
 *             .tags(Map.of("environment", "staging"))
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   example:
 *     type: azure:core:ResourceGroup
 *     properties:
 *       name: example-resources
 *       location: West Europe
 *   exampleVirtualNetwork:
 *     type: azure:network:VirtualNetwork
 *     name: example
 *     properties:
 *       name: acctvn
 *       addressSpaces:
 *         - 10.0.0.0/16
 *       location: ${example.location}
 *       resourceGroupName: ${example.name}
 *   exampleSubnet:
 *     type: azure:network:Subnet
 *     name: example
 *     properties:
 *       name: acctsub
 *       resourceGroupName: ${example.name}
 *       virtualNetworkName: ${exampleVirtualNetwork.name}
 *       addressPrefixes:
 *         - 10.0.2.0/24
 *   examplePublicIp:
 *     type: azure:network:PublicIp
 *     name: example
 *     properties:
 *       name: test
 *       location: ${example.location}
 *       resourceGroupName: ${example.name}
 *       allocationMethod: Static
 *       domainNameLabel: ${example.name}
 *       tags:
 *         environment: staging
 *   exampleLoadBalancer:
 *     type: azure:lb:LoadBalancer
 *     name: example
 *     properties:
 *       name: test
 *       location: ${example.location}
 *       resourceGroupName: ${example.name}
 *       frontendIpConfigurations:
 *         - name: PublicIPAddress
 *           publicIpAddressId: ${examplePublicIp.id}
 *   bpepool:
 *     type: azure:lb:BackendAddressPool
 *     properties:
 *       loadbalancerId: ${exampleLoadBalancer.id}
 *       name: BackEndAddressPool
 *   lbnatpool:
 *     type: azure:lb:NatPool
 *     properties:
 *       resourceGroupName: ${example.name}
 *       name: ssh
 *       loadbalancerId: ${exampleLoadBalancer.id}
 *       protocol: Tcp
 *       frontendPortStart: 50000
 *       frontendPortEnd: 50119
 *       backendPort: 22
 *       frontendIpConfigurationName: PublicIPAddress
 *   exampleProbe:
 *     type: azure:lb:Probe
 *     name: example
 *     properties:
 *       loadbalancerId: ${exampleLoadBalancer.id}
 *       name: http-probe
 *       protocol: Http
 *       requestPath: /health
 *       port: 8080
 *   exampleScaleSet:
 *     type: azure:compute:ScaleSet
 *     name: example
 *     properties:
 *       name: mytestscaleset-1
 *       location: ${example.location}
 *       resourceGroupName: ${example.name}
 *       automaticOsUpgrade: true
 *       upgradePolicyMode: Rolling
 *       rollingUpgradePolicy:
 *         maxBatchInstancePercent: 20
 *         maxUnhealthyInstancePercent: 20
 *         maxUnhealthyUpgradedInstancePercent: 5
 *         pauseTimeBetweenBatches: PT0S
 *       healthProbeId: ${exampleProbe.id}
 *       sku:
 *         name: Standard_F2
 *         tier: Standard
 *         capacity: 2
 *       storageProfileImageReference:
 *         publisher: Canonical
 *         offer: 0001-com-ubuntu-server-jammy
 *         sku: 22_04-lts
 *         version: latest
 *       storageProfileOsDisk:
 *         name:
 *         caching: ReadWrite
 *         createOption: FromImage
 *         managedDiskType: Standard_LRS
 *       storageProfileDataDisks:
 *         - lun: 0
 *           caching: ReadWrite
 *           createOption: Empty
 *           diskSizeGb: 10
 *       osProfile:
 *         computerNamePrefix: testvm
 *         adminUsername: myadmin
 *       osProfileLinuxConfig:
 *         disablePasswordAuthentication: true
 *         sshKeys:
 *           - path: /home/myadmin/.ssh/authorized_keys
 *             keyData:
 *               fn::invoke:
 *                 Function: std:file
 *                 Arguments:
 *                   input: ~/.ssh/demo_key.pub
 *                 Return: result
 *       networkProfiles:
 *         - name: mynetworkprofile
 *           primary: true
 *           ipConfigurations:
 *             - name: TestIPConfiguration
 *               primary: true
 *               subnetId: ${exampleSubnet.id}
 *               loadBalancerBackendAddressPoolIds:
 *                 - ${bpepool.id}
 *               loadBalancerInboundNatRulesIds:
 *                 - ${lbnatpool.id}
 *       tags:
 *         environment: staging
 * ```
 * 
 * ### With Unmanaged Disks
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as azure from "@pulumi/azure";
 * import * as std from "@pulumi/std";
 * const example = new azure.core.ResourceGroup("example", {
 *     name: "example-resources",
 *     location: "West Europe",
 * });
 * const exampleVirtualNetwork = new azure.network.VirtualNetwork("example", {
 *     name: "acctvn",
 *     addressSpaces: ["10.0.0.0/16"],
 *     location: example.location,
 *     resourceGroupName: example.name,
 * });
 * const exampleSubnet = new azure.network.Subnet("example", {
 *     name: "acctsub",
 *     resourceGroupName: example.name,
 *     virtualNetworkName: exampleVirtualNetwork.name,
 *     addressPrefixes: ["10.0.2.0/24"],
 * });
 * const exampleAccount = new azure.storage.Account("example", {
 *     name: "accsa",
 *     resourceGroupName: example.name,
 *     location: example.location,
 *     accountTier: "Standard",
 *     accountReplicationType: "LRS",
 *     tags: {
 *         environment: "staging",
 *     },
 * });
 * const exampleContainer = new azure.storage.Container("example", {
 *     name: "vhds",
 *     storageAccountName: exampleAccount.name,
 *     containerAccessType: "private",
 * });
 * const exampleScaleSet = new azure.compute.ScaleSet("example", {
 *     name: "mytestscaleset-1",
 *     location: example.location,
 *     resourceGroupName: example.name,
 *     upgradePolicyMode: "Manual",
 *     sku: {
 *         name: "Standard_F2",
 *         tier: "Standard",
 *         capacity: 2,
 *     },
 *     osProfile: {
 *         computerNamePrefix: "testvm",
 *         adminUsername: "myadmin",
 *     },
 *     osProfileLinuxConfig: {
 *         disablePasswordAuthentication: true,
 *         sshKeys: [{
 *             path: "/home/myadmin/.ssh/authorized_keys",
 *             keyData: std.file({
 *                 input: "~/.ssh/demo_key.pub",
 *             }).then(invoke => invoke.result),
 *         }],
 *     },
 *     networkProfiles: [{
 *         name: "TestNetworkProfile",
 *         primary: true,
 *         ipConfigurations: [{
 *             name: "TestIPConfiguration",
 *             primary: true,
 *             subnetId: exampleSubnet.id,
 *         }],
 *     }],
 *     storageProfileOsDisk: {
 *         name: "osDiskProfile",
 *         caching: "ReadWrite",
 *         createOption: "FromImage",
 *         vhdContainers: [pulumi.interpolate`${exampleAccount.primaryBlobEndpoint}${exampleContainer.name}`],
 *     },
 *     storageProfileImageReference: {
 *         publisher: "Canonical",
 *         offer: "0001-com-ubuntu-server-jammy",
 *         sku: "22_04-lts",
 *         version: "latest",
 *     },
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_azure as azure
 * import pulumi_std as std
 * example = azure.core.ResourceGroup("example",
 *     name="example-resources",
 *     location="West Europe")
 * example_virtual_network = azure.network.VirtualNetwork("example",
 *     name="acctvn",
 *     address_spaces=["10.0.0.0/16"],
 *     location=example.location,
 *     resource_group_name=example.name)
 * example_subnet = azure.network.Subnet("example",
 *     name="acctsub",
 *     resource_group_name=example.name,
 *     virtual_network_name=example_virtual_network.name,
 *     address_prefixes=["10.0.2.0/24"])
 * example_account = azure.storage.Account("example",
 *     name="accsa",
 *     resource_group_name=example.name,
 *     location=example.location,
 *     account_tier="Standard",
 *     account_replication_type="LRS",
 *     tags={
 *         "environment": "staging",
 *     })
 * example_container = azure.storage.Container("example",
 *     name="vhds",
 *     storage_account_name=example_account.name,
 *     container_access_type="private")
 * example_scale_set = azure.compute.ScaleSet("example",
 *     name="mytestscaleset-1",
 *     location=example.location,
 *     resource_group_name=example.name,
 *     upgrade_policy_mode="Manual",
 *     sku=azure.compute.ScaleSetSkuArgs(
 *         name="Standard_F2",
 *         tier="Standard",
 *         capacity=2,
 *     ),
 *     os_profile=azure.compute.ScaleSetOsProfileArgs(
 *         computer_name_prefix="testvm",
 *         admin_username="myadmin",
 *     ),
 *     os_profile_linux_config=azure.compute.ScaleSetOsProfileLinuxConfigArgs(
 *         disable_password_authentication=True,
 *         ssh_keys=[azure.compute.ScaleSetOsProfileLinuxConfigSshKeyArgs(
 *             path="/home/myadmin/.ssh/authorized_keys",
 *             key_data=std.file(input="~/.ssh/demo_key.pub").result,
 *         )],
 *     ),
 *     network_profiles=[azure.compute.ScaleSetNetworkProfileArgs(
 *         name="TestNetworkProfile",
 *         primary=True,
 *         ip_configurations=[azure.compute.ScaleSetNetworkProfileIpConfigurationArgs(
 *             name="TestIPConfiguration",
 *             primary=True,
 *             subnet_id=example_subnet.id,
 *         )],
 *     )],
 *     storage_profile_os_disk=azure.compute.ScaleSetStorageProfileOsDiskArgs(
 *         name="osDiskProfile",
 *         caching="ReadWrite",
 *         create_option="FromImage",
 *         vhd_containers=[pulumi.Output.all(example_account.primary_blob_endpoint, example_container.name).apply(lambda primary_blob_endpoint, name: f"{primary_blob_endpoint}{name}")],
 *     ),
 *     storage_profile_image_reference=azure.compute.ScaleSetStorageProfileImageReferenceArgs(
 *         publisher="Canonical",
 *         offer="0001-com-ubuntu-server-jammy",
 *         sku="22_04-lts",
 *         version="latest",
 *     ))
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Azure = Pulumi.Azure;
 * using Std = Pulumi.Std;
 * return await Deployment.RunAsync(() =>
 * {
 *     var example = new Azure.Core.ResourceGroup("example", new()
 *     {
 *         Name = "example-resources",
 *         Location = "West Europe",
 *     });
 *     var exampleVirtualNetwork = new Azure.Network.VirtualNetwork("example", new()
 *     {
 *         Name = "acctvn",
 *         AddressSpaces = new[]
 *         {
 *             "10.0.0.0/16",
 *         },
 *         Location = example.Location,
 *         ResourceGroupName = example.Name,
 *     });
 *     var exampleSubnet = new Azure.Network.Subnet("example", new()
 *     {
 *         Name = "acctsub",
 *         ResourceGroupName = example.Name,
 *         VirtualNetworkName = exampleVirtualNetwork.Name,
 *         AddressPrefixes = new[]
 *         {
 *             "10.0.2.0/24",
 *         },
 *     });
 *     var exampleAccount = new Azure.Storage.Account("example", new()
 *     {
 *         Name = "accsa",
 *         ResourceGroupName = example.Name,
 *         Location = example.Location,
 *         AccountTier = "Standard",
 *         AccountReplicationType = "LRS",
 *         Tags =
 *         {
 *             { "environment", "staging" },
 *         },
 *     });
 *     var exampleContainer = new Azure.Storage.Container("example", new()
 *     {
 *         Name = "vhds",
 *         StorageAccountName = exampleAccount.Name,
 *         ContainerAccessType = "private",
 *     });
 *     var exampleScaleSet = new Azure.Compute.ScaleSet("example", new()
 *     {
 *         Name = "mytestscaleset-1",
 *         Location = example.Location,
 *         ResourceGroupName = example.Name,
 *         UpgradePolicyMode = "Manual",
 *         Sku = new Azure.Compute.Inputs.ScaleSetSkuArgs
 *         {
 *             Name = "Standard_F2",
 *             Tier = "Standard",
 *             Capacity = 2,
 *         },
 *         OsProfile = new Azure.Compute.Inputs.ScaleSetOsProfileArgs
 *         {
 *             ComputerNamePrefix = "testvm",
 *             AdminUsername = "myadmin",
 *         },
 *         OsProfileLinuxConfig = new Azure.Compute.Inputs.ScaleSetOsProfileLinuxConfigArgs
 *         {
 *             DisablePasswordAuthentication = true,
 *             SshKeys = new[]
 *             {
 *                 new Azure.Compute.Inputs.ScaleSetOsProfileLinuxConfigSshKeyArgs
 *                 {
 *                     Path = "/home/myadmin/.ssh/authorized_keys",
 *                     KeyData = Std.File.Invoke(new()
 *                     {
 *                         Input = "~/.ssh/demo_key.pub",
 *                     }).Apply(invoke => invoke.Result),
 *                 },
 *             },
 *         },
 *         NetworkProfiles = new[]
 *         {
 *             new Azure.Compute.Inputs.ScaleSetNetworkProfileArgs
 *             {
 *                 Name = "TestNetworkProfile",
 *                 Primary = true,
 *                 IpConfigurations = new[]
 *                 {
 *                     new Azure.Compute.Inputs.ScaleSetNetworkProfileIpConfigurationArgs
 *                     {
 *                         Name = "TestIPConfiguration",
 *                         Primary = true,
 *                         SubnetId = exampleSubnet.Id,
 *                     },
 *                 },
 *             },
 *         },
 *         StorageProfileOsDisk = new Azure.Compute.Inputs.ScaleSetStorageProfileOsDiskArgs
 *         {
 *             Name = "osDiskProfile",
 *             Caching = "ReadWrite",
 *             CreateOption = "FromImage",
 *             VhdContainers = new[]
 *             {
 *                 Output.Tuple(exampleAccount.PrimaryBlobEndpoint, exampleContainer.Name).Apply(values =>
 *                 {
 *                     var primaryBlobEndpoint = values.Item1;
 *                     var name = values.Item2;
 *                     return $"{primaryBlobEndpoint}{name}";
 *                 }),
 *             },
 *         },
 *         StorageProfileImageReference = new Azure.Compute.Inputs.ScaleSetStorageProfileImageReferenceArgs
 *         {
 *             Publisher = "Canonical",
 *             Offer = "0001-com-ubuntu-server-jammy",
 *             Sku = "22_04-lts",
 *             Version = "latest",
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"fmt"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/compute"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/core"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/network"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/storage"
 * 	"github.com/pulumi/pulumi-std/sdk/go/std"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		example, err := core.NewResourceGroup(ctx, "example", &core.ResourceGroupArgs{
 * 			Name:     pulumi.String("example-resources"),
 * 			Location: pulumi.String("West Europe"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		exampleVirtualNetwork, err := network.NewVirtualNetwork(ctx, "example", &network.VirtualNetworkArgs{
 * 			Name: pulumi.String("acctvn"),
 * 			AddressSpaces: pulumi.StringArray{
 * 				pulumi.String("10.0.0.0/16"),
 * 			},
 * 			Location:          example.Location,
 * 			ResourceGroupName: example.Name,
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		exampleSubnet, err := network.NewSubnet(ctx, "example", &network.SubnetArgs{
 * 			Name:               pulumi.String("acctsub"),
 * 			ResourceGroupName:  example.Name,
 * 			VirtualNetworkName: exampleVirtualNetwork.Name,
 * 			AddressPrefixes: pulumi.StringArray{
 * 				pulumi.String("10.0.2.0/24"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		exampleAccount, err := storage.NewAccount(ctx, "example", &storage.AccountArgs{
 * 			Name:                   pulumi.String("accsa"),
 * 			ResourceGroupName:      example.Name,
 * 			Location:               example.Location,
 * 			AccountTier:            pulumi.String("Standard"),
 * 			AccountReplicationType: pulumi.String("LRS"),
 * 			Tags: pulumi.StringMap{
 * 				"environment": pulumi.String("staging"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		exampleContainer, err := storage.NewContainer(ctx, "example", &storage.ContainerArgs{
 * 			Name:                pulumi.String("vhds"),
 * 			StorageAccountName:  exampleAccount.Name,
 * 			ContainerAccessType: pulumi.String("private"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		invokeFile, err := std.File(ctx, &std.FileArgs{
 * 			Input: "~/.ssh/demo_key.pub",
 * 		}, nil)
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = compute.NewScaleSet(ctx, "example", &compute.ScaleSetArgs{
 * 			Name:              pulumi.String("mytestscaleset-1"),
 * 			Location:          example.Location,
 * 			ResourceGroupName: example.Name,
 * 			UpgradePolicyMode: pulumi.String("Manual"),
 * 			Sku: &compute.ScaleSetSkuArgs{
 * 				Name:     pulumi.String("Standard_F2"),
 * 				Tier:     pulumi.String("Standard"),
 * 				Capacity: pulumi.Int(2),
 * 			},
 * 			OsProfile: &compute.ScaleSetOsProfileArgs{
 * 				ComputerNamePrefix: pulumi.String("testvm"),
 * 				AdminUsername:      pulumi.String("myadmin"),
 * 			},
 * 			OsProfileLinuxConfig: &compute.ScaleSetOsProfileLinuxConfigArgs{
 * 				DisablePasswordAuthentication: pulumi.Bool(true),
 * 				SshKeys: compute.ScaleSetOsProfileLinuxConfigSshKeyArray{
 * 					&compute.ScaleSetOsProfileLinuxConfigSshKeyArgs{
 * 						Path:    pulumi.String("/home/myadmin/.ssh/authorized_keys"),
 * 						KeyData: invokeFile.Result,
 * 					},
 * 				},
 * 			},
 * 			NetworkProfiles: compute.ScaleSetNetworkProfileArray{
 * 				&compute.ScaleSetNetworkProfileArgs{
 * 					Name:    pulumi.String("TestNetworkProfile"),
 * 					Primary: pulumi.Bool(true),
 * 					IpConfigurations: compute.ScaleSetNetworkProfileIpConfigurationArray{
 * 						&compute.ScaleSetNetworkProfileIpConfigurationArgs{
 * 							Name:     pulumi.String("TestIPConfiguration"),
 * 							Primary:  pulumi.Bool(true),
 * 							SubnetId: exampleSubnet.ID(),
 * 						},
 * 					},
 * 				},
 * 			},
 * 			StorageProfileOsDisk: &compute.ScaleSetStorageProfileOsDiskArgs{
 * 				Name:         pulumi.String("osDiskProfile"),
 * 				Caching:      pulumi.String("ReadWrite"),
 * 				CreateOption: pulumi.String("FromImage"),
 * 				VhdContainers: pulumi.StringArray{
 * 					pulumi.All(exampleAccount.PrimaryBlobEndpoint, exampleContainer.Name).ApplyT(func(_args []interface{}) (string, error) {
 * 						primaryBlobEndpoint := _args[0].(string)
 * 						name := _args[1].(string)
 * 						return fmt.Sprintf("%v%v", primaryBlobEndpoint, name), nil
 * 					}).(pulumi.StringOutput),
 * 				},
 * 			},
 * 			StorageProfileImageReference: &compute.ScaleSetStorageProfileImageReferenceArgs{
 * 				Publisher: pulumi.String("Canonical"),
 * 				Offer:     pulumi.String("0001-com-ubuntu-server-jammy"),
 * 				Sku:       pulumi.String("22_04-lts"),
 * 				Version:   pulumi.String("latest"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.azure.core.ResourceGroup;
 * import com.pulumi.azure.core.ResourceGroupArgs;
 * import com.pulumi.azure.network.VirtualNetwork;
 * import com.pulumi.azure.network.VirtualNetworkArgs;
 * import com.pulumi.azure.network.Subnet;
 * import com.pulumi.azure.network.SubnetArgs;
 * import com.pulumi.azure.storage.Account;
 * import com.pulumi.azure.storage.AccountArgs;
 * import com.pulumi.azure.storage.Container;
 * import com.pulumi.azure.storage.ContainerArgs;
 * import com.pulumi.azure.compute.ScaleSet;
 * import com.pulumi.azure.compute.ScaleSetArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetSkuArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetOsProfileArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetOsProfileLinuxConfigArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetNetworkProfileArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetStorageProfileOsDiskArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetStorageProfileImageReferenceArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var example = new ResourceGroup("example", ResourceGroupArgs.builder()
 *             .name("example-resources")
 *             .location("West Europe")
 *             .build());
 *         var exampleVirtualNetwork = new VirtualNetwork("exampleVirtualNetwork", VirtualNetworkArgs.builder()
 *             .name("acctvn")
 *             .addressSpaces("10.0.0.0/16")
 *             .location(example.location())
 *             .resourceGroupName(example.name())
 *             .build());
 *         var exampleSubnet = new Subnet("exampleSubnet", SubnetArgs.builder()
 *             .name("acctsub")
 *             .resourceGroupName(example.name())
 *             .virtualNetworkName(exampleVirtualNetwork.name())
 *             .addressPrefixes("10.0.2.0/24")
 *             .build());
 *         var exampleAccount = new Account("exampleAccount", AccountArgs.builder()
 *             .name("accsa")
 *             .resourceGroupName(example.name())
 *             .location(example.location())
 *             .accountTier("Standard")
 *             .accountReplicationType("LRS")
 *             .tags(Map.of("environment", "staging"))
 *             .build());
 *         var exampleContainer = new Container("exampleContainer", ContainerArgs.builder()
 *             .name("vhds")
 *             .storageAccountName(exampleAccount.name())
 *             .containerAccessType("private")
 *             .build());
 *         var exampleScaleSet = new ScaleSet("exampleScaleSet", ScaleSetArgs.builder()
 *             .name("mytestscaleset-1")
 *             .location(example.location())
 *             .resourceGroupName(example.name())
 *             .upgradePolicyMode("Manual")
 *             .sku(ScaleSetSkuArgs.builder()
 *                 .name("Standard_F2")
 *                 .tier("Standard")
 *                 .capacity(2)
 *                 .build())
 *             .osProfile(ScaleSetOsProfileArgs.builder()
 *                 .computerNamePrefix("testvm")
 *                 .adminUsername("myadmin")
 *                 .build())
 *             .osProfileLinuxConfig(ScaleSetOsProfileLinuxConfigArgs.builder()
 *                 .disablePasswordAuthentication(true)
 *                 .sshKeys(ScaleSetOsProfileLinuxConfigSshKeyArgs.builder()
 *                     .path("/home/myadmin/.ssh/authorized_keys")
 *                     .keyData(StdFunctions.file(FileArgs.builder()
 *                         .input("~/.ssh/demo_key.pub")
 *                         .build()).result())
 *                     .build())
 *                 .build())
 *             .networkProfiles(ScaleSetNetworkProfileArgs.builder()
 *                 .name("TestNetworkProfile")
 *                 .primary(true)
 *                 .ipConfigurations(ScaleSetNetworkProfileIpConfigurationArgs.builder()
 *                     .name("TestIPConfiguration")
 *                     .primary(true)
 *                     .subnetId(exampleSubnet.id())
 *                     .build())
 *                 .build())
 *             .storageProfileOsDisk(ScaleSetStorageProfileOsDiskArgs.builder()
 *                 .name("osDiskProfile")
 *                 .caching("ReadWrite")
 *                 .createOption("FromImage")
 *                 .vhdContainers(Output.tuple(exampleAccount.primaryBlobEndpoint(), exampleContainer.name()).applyValue(values -> {
 *                     var primaryBlobEndpoint = values.t1;
 *                     var name = values.t2;
 *                     return String.format("%s%s", primaryBlobEndpoint,name);
 *                 }))
 *                 .build())
 *             .storageProfileImageReference(ScaleSetStorageProfileImageReferenceArgs.builder()
 *                 .publisher("Canonical")
 *                 .offer("0001-com-ubuntu-server-jammy")
 *                 .sku("22_04-lts")
 *                 .version("latest")
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   example:
 *     type: azure:core:ResourceGroup
 *     properties:
 *       name: example-resources
 *       location: West Europe
 *   exampleVirtualNetwork:
 *     type: azure:network:VirtualNetwork
 *     name: example
 *     properties:
 *       name: acctvn
 *       addressSpaces:
 *         - 10.0.0.0/16
 *       location: ${example.location}
 *       resourceGroupName: ${example.name}
 *   exampleSubnet:
 *     type: azure:network:Subnet
 *     name: example
 *     properties:
 *       name: acctsub
 *       resourceGroupName: ${example.name}
 *       virtualNetworkName: ${exampleVirtualNetwork.name}
 *       addressPrefixes:
 *         - 10.0.2.0/24
 *   exampleAccount:
 *     type: azure:storage:Account
 *     name: example
 *     properties:
 *       name: accsa
 *       resourceGroupName: ${example.name}
 *       location: ${example.location}
 *       accountTier: Standard
 *       accountReplicationType: LRS
 *       tags:
 *         environment: staging
 *   exampleContainer:
 *     type: azure:storage:Container
 *     name: example
 *     properties:
 *       name: vhds
 *       storageAccountName: ${exampleAccount.name}
 *       containerAccessType: private
 *   exampleScaleSet:
 *     type: azure:compute:ScaleSet
 *     name: example
 *     properties:
 *       name: mytestscaleset-1
 *       location: ${example.location}
 *       resourceGroupName: ${example.name}
 *       upgradePolicyMode: Manual
 *       sku:
 *         name: Standard_F2
 *         tier: Standard
 *         capacity: 2
 *       osProfile:
 *         computerNamePrefix: testvm
 *         adminUsername: myadmin
 *       osProfileLinuxConfig:
 *         disablePasswordAuthentication: true
 *         sshKeys:
 *           - path: /home/myadmin/.ssh/authorized_keys
 *             keyData:
 *               fn::invoke:
 *                 Function: std:file
 *                 Arguments:
 *                   input: ~/.ssh/demo_key.pub
 *                 Return: result
 *       networkProfiles:
 *         - name: TestNetworkProfile
 *           primary: true
 *           ipConfigurations:
 *             - name: TestIPConfiguration
 *               primary: true
 *               subnetId: ${exampleSubnet.id}
 *       storageProfileOsDisk:
 *         name: osDiskProfile
 *         caching: ReadWrite
 *         createOption: FromImage
 *         vhdContainers:
 *           - ${exampleAccount.primaryBlobEndpoint}${exampleContainer.name}
 *       storageProfileImageReference:
 *         publisher: Canonical
 *         offer: 0001-com-ubuntu-server-jammy
 *         sku: 22_04-lts
 *         version: latest
 * ```
 * 
 * ## Example of storage_profile_image_reference with id
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as azure from "@pulumi/azure";
 * const example = new azure.compute.Image("example", {name: "test"});
 * const exampleScaleSet = new azure.compute.ScaleSet("example", {
 *     name: "test",
 *     storageProfileImageReference: {
 *         id: example.id,
 *     },
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_azure as azure
 * example = azure.compute.Image("example", name="test")
 * example_scale_set = azure.compute.ScaleSet("example",
 *     name="test",
 *     storage_profile_image_reference=azure.compute.ScaleSetStorageProfileImageReferenceArgs(
 *         id=example.id,
 *     ))
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Azure = Pulumi.Azure;
 * return await Deployment.RunAsync(() =>
 * {
 *     var example = new Azure.Compute.Image("example", new()
 *     {
 *         Name = "test",
 *     });
 *     var exampleScaleSet = new Azure.Compute.ScaleSet("example", new()
 *     {
 *         Name = "test",
 *         StorageProfileImageReference = new Azure.Compute.Inputs.ScaleSetStorageProfileImageReferenceArgs
 *         {
 *             Id = example.Id,
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/compute"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		example, err := compute.NewImage(ctx, "example", &compute.ImageArgs{
 * 			Name: pulumi.String("test"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = compute.NewScaleSet(ctx, "example", &compute.ScaleSetArgs{
 * 			Name: pulumi.String("test"),
 * 			StorageProfileImageReference: &compute.ScaleSetStorageProfileImageReferenceArgs{
 * 				Id: example.ID(),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.azure.compute.Image;
 * import com.pulumi.azure.compute.ImageArgs;
 * import com.pulumi.azure.compute.ScaleSet;
 * import com.pulumi.azure.compute.ScaleSetArgs;
 * import com.pulumi.azure.compute.inputs.ScaleSetStorageProfileImageReferenceArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var example = new Image("example", ImageArgs.builder()
 *             .name("test")
 *             .build());
 *         var exampleScaleSet = new ScaleSet("exampleScaleSet", ScaleSetArgs.builder()
 *             .name("test")
 *             .storageProfileImageReference(ScaleSetStorageProfileImageReferenceArgs.builder()
 *                 .id(example.id())
 *                 .build())
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   example:
 *     type: azure:compute:Image
 *     properties:
 *       name: test
 *   exampleScaleSet:
 *     type: azure:compute:ScaleSet
 *     name: example
 *     properties:
 *       name: test
 *       storageProfileImageReference:
 *         id: ${example.id}
 * ```
 * 
 * ## Import
 * Virtual Machine Scale Sets can be imported using the `resource id`, e.g.
 * ```sh
 * $ pulumi import azure:compute/scaleSet:ScaleSet scaleset1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mygroup1/providers/Microsoft.Compute/virtualMachineScaleSets/scaleset1
 * ```
 * @property automaticOsUpgrade Automatic OS patches can be applied by Azure to your scaleset. This is particularly useful when `upgrade_policy_mode` is set to `Rolling`. Defaults to `false`.
 * @property bootDiagnostics A `boot_diagnostics` block as referenced below.
 * @property evictionPolicy Specifies the eviction policy for Virtual Machines in this Scale Set. Possible values are `Deallocate` and `Delete`. Changing this forces a new resource to be created.
 * > **NOTE:** `eviction_policy` can only be set when `priority` is set to `Low`.
 * @property extensions Can be specified multiple times to add extension profiles to the scale set. Each `extension` block supports the fields documented below.
 * @property healthProbeId Specifies the identifier for the load balancer health probe. Required when using `Rolling` as your `upgrade_policy_mode`.
 * @property identity An `identity` block as defined below.
 * @property licenseType (Optional, when a Windows machine) Specifies the Windows OS license type. If supplied, the only allowed values are `Windows_Client` and `Windows_Server`.
 * @property location Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created.
 * @property name Specifies the name of the virtual machine scale set resource. Changing this forces a new resource to be created.
 * @property networkProfiles A collection of `network_profile` blocks as documented below.
 * @property osProfile A `os_profile` block as documented below.
 * @property osProfileLinuxConfig A `os_profile_linux_config` block as documented below.
 * @property osProfileSecrets A collection of `os_profile_secrets` blocks as documented below.
 * @property osProfileWindowsConfig A `os_profile_windows_config` block as documented below.
 * @property overprovision Specifies whether the virtual machine scale set should be overprovisioned. Defaults to `true`.
 * @property plan A `plan` block as documented below.
 * @property priority Specifies the priority for the Virtual Machines in the Scale Set. Possible values are `Low` and `Regular`. Changing this forces a new resource to be created.
 * @property proximityPlacementGroupId The ID of the Proximity Placement Group to which this Virtual Machine should be assigned. Changing this forces a new resource to be created
 * @property resourceGroupName The name of the resource group in which to create the virtual machine scale set. Changing this forces a new resource to be created.
 * @property rollingUpgradePolicy A `rolling_upgrade_policy` block as defined below. This is only applicable when the `upgrade_policy_mode` is `Rolling`.
 * @property singlePlacementGroup Specifies whether the scale set is limited to a single placement group with a maximum size of 100 virtual machines. If set to false, managed disks must be used. Changing this forces a new resource to be created. See [documentation](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-placement-groups) for more information. Defaults to `true`.
 * @property sku A `sku` block as documented below.
 * @property storageProfileDataDisks A `storage_profile_data_disk` block as documented below.
 * @property storageProfileImageReference A `storage_profile_image_reference` block as documented below.
 * @property storageProfileOsDisk A `storage_profile_os_disk` block as documented below.
 * @property tags A mapping of tags to assign to the resource.
 * @property upgradePolicyMode Specifies the mode of an upgrade to virtual machines in the scale set. Possible values, `Rolling`, `Manual`, or `Automatic`. When choosing `Rolling`, you will need to set a health probe.
 * @property zones A collection of availability zones to spread the Virtual Machines over. Changing this forces a new resource to be created.
 * > **NOTE:** Availability Zones are [only supported in several regions at this time](https://docs.microsoft.com/azure/availability-zones/az-overview).
 */
public data class ScaleSetArgs(
    public val automaticOsUpgrade: Output? = null,
    public val bootDiagnostics: Output? = null,
    public val evictionPolicy: Output? = null,
    public val extensions: Output>? = null,
    public val healthProbeId: Output? = null,
    public val identity: Output? = null,
    public val licenseType: Output? = null,
    public val location: Output? = null,
    public val name: Output? = null,
    public val networkProfiles: Output>? = null,
    public val osProfile: Output? = null,
    public val osProfileLinuxConfig: Output? = null,
    public val osProfileSecrets: Output>? = null,
    public val osProfileWindowsConfig: Output? = null,
    public val overprovision: Output? = null,
    public val plan: Output? = null,
    public val priority: Output? = null,
    public val proximityPlacementGroupId: Output? = null,
    public val resourceGroupName: Output? = null,
    public val rollingUpgradePolicy: Output? = null,
    public val singlePlacementGroup: Output? = null,
    public val sku: Output? = null,
    public val storageProfileDataDisks: Output>? = null,
    public val storageProfileImageReference: Output? = null,
    public val storageProfileOsDisk: Output? = null,
    public val tags: Output>? = null,
    public val upgradePolicyMode: Output? = null,
    public val zones: Output>? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.azure.compute.ScaleSetArgs =
        com.pulumi.azure.compute.ScaleSetArgs.builder()
            .automaticOsUpgrade(automaticOsUpgrade?.applyValue({ args0 -> args0 }))
            .bootDiagnostics(bootDiagnostics?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .evictionPolicy(evictionPolicy?.applyValue({ args0 -> args0 }))
            .extensions(
                extensions?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .healthProbeId(healthProbeId?.applyValue({ args0 -> args0 }))
            .identity(identity?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .licenseType(licenseType?.applyValue({ args0 -> args0 }))
            .location(location?.applyValue({ args0 -> args0 }))
            .name(name?.applyValue({ args0 -> args0 }))
            .networkProfiles(
                networkProfiles?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .osProfile(osProfile?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .osProfileLinuxConfig(
                osProfileLinuxConfig?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .osProfileSecrets(
                osProfileSecrets?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .osProfileWindowsConfig(
                osProfileWindowsConfig?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .overprovision(overprovision?.applyValue({ args0 -> args0 }))
            .plan(plan?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .priority(priority?.applyValue({ args0 -> args0 }))
            .proximityPlacementGroupId(proximityPlacementGroupId?.applyValue({ args0 -> args0 }))
            .resourceGroupName(resourceGroupName?.applyValue({ args0 -> args0 }))
            .rollingUpgradePolicy(
                rollingUpgradePolicy?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .singlePlacementGroup(singlePlacementGroup?.applyValue({ args0 -> args0 }))
            .sku(sku?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .storageProfileDataDisks(
                storageProfileDataDisks?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 -> args0.toJava() })
                    })
                }),
            )
            .storageProfileImageReference(
                storageProfileImageReference?.applyValue({ args0 ->
                    args0.let({ args0 -> args0.toJava() })
                }),
            )
            .storageProfileOsDisk(
                storageProfileOsDisk?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.key.to(args0.value) }).toMap() }))
            .upgradePolicyMode(upgradePolicyMode?.applyValue({ args0 -> args0 }))
            .zones(zones?.applyValue({ args0 -> args0.map({ args0 -> args0 }) })).build()
}

/**
 * Builder for [ScaleSetArgs].
 */
@PulumiTagMarker
public class ScaleSetArgsBuilder internal constructor() {
    private var automaticOsUpgrade: Output? = null

    private var bootDiagnostics: Output? = null

    private var evictionPolicy: Output? = null

    private var extensions: Output>? = null

    private var healthProbeId: Output? = null

    private var identity: Output? = null

    private var licenseType: Output? = null

    private var location: Output? = null

    private var name: Output? = null

    private var networkProfiles: Output>? = null

    private var osProfile: Output? = null

    private var osProfileLinuxConfig: Output? = null

    private var osProfileSecrets: Output>? = null

    private var osProfileWindowsConfig: Output? = null

    private var overprovision: Output? = null

    private var plan: Output? = null

    private var priority: Output? = null

    private var proximityPlacementGroupId: Output? = null

    private var resourceGroupName: Output? = null

    private var rollingUpgradePolicy: Output? = null

    private var singlePlacementGroup: Output? = null

    private var sku: Output? = null

    private var storageProfileDataDisks: Output>? = null

    private var storageProfileImageReference: Output? = null

    private var storageProfileOsDisk: Output? = null

    private var tags: Output>? = null

    private var upgradePolicyMode: Output? = null

    private var zones: Output>? = null

    /**
     * @param value Automatic OS patches can be applied by Azure to your scaleset. This is particularly useful when `upgrade_policy_mode` is set to `Rolling`. Defaults to `false`.
     */
    @JvmName("hqhaqrnxwhonbhkv")
    public suspend fun automaticOsUpgrade(`value`: Output) {
        this.automaticOsUpgrade = value
    }

    /**
     * @param value A `boot_diagnostics` block as referenced below.
     */
    @JvmName("nfksmaqcvjcprehs")
    public suspend fun bootDiagnostics(`value`: Output) {
        this.bootDiagnostics = value
    }

    /**
     * @param value Specifies the eviction policy for Virtual Machines in this Scale Set. Possible values are `Deallocate` and `Delete`. Changing this forces a new resource to be created.
     * > **NOTE:** `eviction_policy` can only be set when `priority` is set to `Low`.
     */
    @JvmName("wwpkvucqgrhbvpxr")
    public suspend fun evictionPolicy(`value`: Output) {
        this.evictionPolicy = value
    }

    /**
     * @param value Can be specified multiple times to add extension profiles to the scale set. Each `extension` block supports the fields documented below.
     */
    @JvmName("dlmjmlrlrwbvnydu")
    public suspend fun extensions(`value`: Output>) {
        this.extensions = value
    }

    @JvmName("rapudgyrihmowlej")
    public suspend fun extensions(vararg values: Output) {
        this.extensions = Output.all(values.asList())
    }

    /**
     * @param values Can be specified multiple times to add extension profiles to the scale set. Each `extension` block supports the fields documented below.
     */
    @JvmName("incpujyiitksadux")
    public suspend fun extensions(values: List>) {
        this.extensions = Output.all(values)
    }

    /**
     * @param value Specifies the identifier for the load balancer health probe. Required when using `Rolling` as your `upgrade_policy_mode`.
     */
    @JvmName("sgpxtdgdokwahnja")
    public suspend fun healthProbeId(`value`: Output) {
        this.healthProbeId = value
    }

    /**
     * @param value An `identity` block as defined below.
     */
    @JvmName("mtbvdnccyrseusco")
    public suspend fun identity(`value`: Output) {
        this.identity = value
    }

    /**
     * @param value (Optional, when a Windows machine) Specifies the Windows OS license type. If supplied, the only allowed values are `Windows_Client` and `Windows_Server`.
     */
    @JvmName("uflryfkitqylbxdh")
    public suspend fun licenseType(`value`: Output) {
        this.licenseType = value
    }

    /**
     * @param value Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created.
     */
    @JvmName("rvtjmpfmlqboyypn")
    public suspend fun location(`value`: Output) {
        this.location = value
    }

    /**
     * @param value Specifies the name of the virtual machine scale set resource. Changing this forces a new resource to be created.
     */
    @JvmName("ywajxjugxgyjhnow")
    public suspend fun name(`value`: Output) {
        this.name = value
    }

    /**
     * @param value A collection of `network_profile` blocks as documented below.
     */
    @JvmName("yowhstjjwgegswqh")
    public suspend fun networkProfiles(`value`: Output>) {
        this.networkProfiles = value
    }

    @JvmName("iyeptvjdeyopcqso")
    public suspend fun networkProfiles(vararg values: Output) {
        this.networkProfiles = Output.all(values.asList())
    }

    /**
     * @param values A collection of `network_profile` blocks as documented below.
     */
    @JvmName("bfcbtewkkxiqljad")
    public suspend fun networkProfiles(values: List>) {
        this.networkProfiles = Output.all(values)
    }

    /**
     * @param value A `os_profile` block as documented below.
     */
    @JvmName("pgwhvmnhoyivblbw")
    public suspend fun osProfile(`value`: Output) {
        this.osProfile = value
    }

    /**
     * @param value A `os_profile_linux_config` block as documented below.
     */
    @JvmName("ulbidwpimodtsdau")
    public suspend fun osProfileLinuxConfig(`value`: Output) {
        this.osProfileLinuxConfig = value
    }

    /**
     * @param value A collection of `os_profile_secrets` blocks as documented below.
     */
    @JvmName("cmcxelaarotqyggc")
    public suspend fun osProfileSecrets(`value`: Output>) {
        this.osProfileSecrets = value
    }

    @JvmName("uwqbifabsvbiuapr")
    public suspend fun osProfileSecrets(vararg values: Output) {
        this.osProfileSecrets = Output.all(values.asList())
    }

    /**
     * @param values A collection of `os_profile_secrets` blocks as documented below.
     */
    @JvmName("vloyfnwyyuduxdhr")
    public suspend fun osProfileSecrets(values: List>) {
        this.osProfileSecrets = Output.all(values)
    }

    /**
     * @param value A `os_profile_windows_config` block as documented below.
     */
    @JvmName("wgcdxdyikfkcdllm")
    public suspend fun osProfileWindowsConfig(`value`: Output) {
        this.osProfileWindowsConfig = value
    }

    /**
     * @param value Specifies whether the virtual machine scale set should be overprovisioned. Defaults to `true`.
     */
    @JvmName("vpnvjvucxkmfvhdo")
    public suspend fun overprovision(`value`: Output) {
        this.overprovision = value
    }

    /**
     * @param value A `plan` block as documented below.
     */
    @JvmName("tjmsttjiytopjcax")
    public suspend fun plan(`value`: Output) {
        this.plan = value
    }

    /**
     * @param value Specifies the priority for the Virtual Machines in the Scale Set. Possible values are `Low` and `Regular`. Changing this forces a new resource to be created.
     */
    @JvmName("sagykebgsvcoyfmx")
    public suspend fun priority(`value`: Output) {
        this.priority = value
    }

    /**
     * @param value The ID of the Proximity Placement Group to which this Virtual Machine should be assigned. Changing this forces a new resource to be created
     */
    @JvmName("jslxoulacnymrlfp")
    public suspend fun proximityPlacementGroupId(`value`: Output) {
        this.proximityPlacementGroupId = value
    }

    /**
     * @param value The name of the resource group in which to create the virtual machine scale set. Changing this forces a new resource to be created.
     */
    @JvmName("vavsctlfufxpuouf")
    public suspend fun resourceGroupName(`value`: Output) {
        this.resourceGroupName = value
    }

    /**
     * @param value A `rolling_upgrade_policy` block as defined below. This is only applicable when the `upgrade_policy_mode` is `Rolling`.
     */
    @JvmName("kjkdbfiagublqbpx")
    public suspend fun rollingUpgradePolicy(`value`: Output) {
        this.rollingUpgradePolicy = value
    }

    /**
     * @param value Specifies whether the scale set is limited to a single placement group with a maximum size of 100 virtual machines. If set to false, managed disks must be used. Changing this forces a new resource to be created. See [documentation](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-placement-groups) for more information. Defaults to `true`.
     */
    @JvmName("avsmtsfupoivugqf")
    public suspend fun singlePlacementGroup(`value`: Output) {
        this.singlePlacementGroup = value
    }

    /**
     * @param value A `sku` block as documented below.
     */
    @JvmName("pfgikabumoannakv")
    public suspend fun sku(`value`: Output) {
        this.sku = value
    }

    /**
     * @param value A `storage_profile_data_disk` block as documented below.
     */
    @JvmName("dlsgwfhnvukypuod")
    public suspend
    fun storageProfileDataDisks(`value`: Output>) {
        this.storageProfileDataDisks = value
    }

    @JvmName("kulquftnkgulgpck")
    public suspend fun storageProfileDataDisks(
        vararg
        values: Output,
    ) {
        this.storageProfileDataDisks = Output.all(values.asList())
    }

    /**
     * @param values A `storage_profile_data_disk` block as documented below.
     */
    @JvmName("tmhukkykepaehvhh")
    public suspend
    fun storageProfileDataDisks(values: List>) {
        this.storageProfileDataDisks = Output.all(values)
    }

    /**
     * @param value A `storage_profile_image_reference` block as documented below.
     */
    @JvmName("emiwskcxcbfeqtak")
    public suspend
    fun storageProfileImageReference(`value`: Output) {
        this.storageProfileImageReference = value
    }

    /**
     * @param value A `storage_profile_os_disk` block as documented below.
     */
    @JvmName("sslyrumvrksiadnx")
    public suspend fun storageProfileOsDisk(`value`: Output) {
        this.storageProfileOsDisk = value
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     */
    @JvmName("fxdpipigkpvtvjnr")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    /**
     * @param value Specifies the mode of an upgrade to virtual machines in the scale set. Possible values, `Rolling`, `Manual`, or `Automatic`. When choosing `Rolling`, you will need to set a health probe.
     */
    @JvmName("kdwbqwfgbycwyxxi")
    public suspend fun upgradePolicyMode(`value`: Output) {
        this.upgradePolicyMode = value
    }

    /**
     * @param value A collection of availability zones to spread the Virtual Machines over. Changing this forces a new resource to be created.
     * > **NOTE:** Availability Zones are [only supported in several regions at this time](https://docs.microsoft.com/azure/availability-zones/az-overview).
     */
    @JvmName("kygjkmrwvtycspgv")
    public suspend fun zones(`value`: Output>) {
        this.zones = value
    }

    @JvmName("wihcfuyksrnayydm")
    public suspend fun zones(vararg values: Output) {
        this.zones = Output.all(values.asList())
    }

    /**
     * @param values A collection of availability zones to spread the Virtual Machines over. Changing this forces a new resource to be created.
     * > **NOTE:** Availability Zones are [only supported in several regions at this time](https://docs.microsoft.com/azure/availability-zones/az-overview).
     */
    @JvmName("jnbhmiobkfombqrg")
    public suspend fun zones(values: List>) {
        this.zones = Output.all(values)
    }

    /**
     * @param value Automatic OS patches can be applied by Azure to your scaleset. This is particularly useful when `upgrade_policy_mode` is set to `Rolling`. Defaults to `false`.
     */
    @JvmName("pfwedyxwaayixcxb")
    public suspend fun automaticOsUpgrade(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.automaticOsUpgrade = mapped
    }

    /**
     * @param value A `boot_diagnostics` block as referenced below.
     */
    @JvmName("cysvioxgjrsgktod")
    public suspend fun bootDiagnostics(`value`: ScaleSetBootDiagnosticsArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.bootDiagnostics = mapped
    }

    /**
     * @param argument A `boot_diagnostics` block as referenced below.
     */
    @JvmName("nskgelkvqeilqitf")
    public suspend
    fun bootDiagnostics(argument: suspend ScaleSetBootDiagnosticsArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetBootDiagnosticsArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.bootDiagnostics = mapped
    }

    /**
     * @param value Specifies the eviction policy for Virtual Machines in this Scale Set. Possible values are `Deallocate` and `Delete`. Changing this forces a new resource to be created.
     * > **NOTE:** `eviction_policy` can only be set when `priority` is set to `Low`.
     */
    @JvmName("uiqafcwoekxbjsfh")
    public suspend fun evictionPolicy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.evictionPolicy = mapped
    }

    /**
     * @param value Can be specified multiple times to add extension profiles to the scale set. Each `extension` block supports the fields documented below.
     */
    @JvmName("nahiulxswngbwjfa")
    public suspend fun extensions(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.extensions = mapped
    }

    /**
     * @param argument Can be specified multiple times to add extension profiles to the scale set. Each `extension` block supports the fields documented below.
     */
    @JvmName("daqesskqbrwylevg")
    public suspend fun extensions(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ScaleSetExtensionArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.extensions = mapped
    }

    /**
     * @param argument Can be specified multiple times to add extension profiles to the scale set. Each `extension` block supports the fields documented below.
     */
    @JvmName("qpndphcwflfsqdvo")
    public suspend fun extensions(vararg argument: suspend ScaleSetExtensionArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ScaleSetExtensionArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.extensions = mapped
    }

    /**
     * @param argument Can be specified multiple times to add extension profiles to the scale set. Each `extension` block supports the fields documented below.
     */
    @JvmName("ssxfiqeswsqjbnpt")
    public suspend fun extensions(argument: suspend ScaleSetExtensionArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(ScaleSetExtensionArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.extensions = mapped
    }

    /**
     * @param values Can be specified multiple times to add extension profiles to the scale set. Each `extension` block supports the fields documented below.
     */
    @JvmName("djthmyoasxumalrv")
    public suspend fun extensions(vararg values: ScaleSetExtensionArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.extensions = mapped
    }

    /**
     * @param value Specifies the identifier for the load balancer health probe. Required when using `Rolling` as your `upgrade_policy_mode`.
     */
    @JvmName("villhwjatanckyuc")
    public suspend fun healthProbeId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.healthProbeId = mapped
    }

    /**
     * @param value An `identity` block as defined below.
     */
    @JvmName("kjecluqgcdlaxked")
    public suspend fun identity(`value`: ScaleSetIdentityArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.identity = mapped
    }

    /**
     * @param argument An `identity` block as defined below.
     */
    @JvmName("cuaqasyhscctfxfp")
    public suspend fun identity(argument: suspend ScaleSetIdentityArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetIdentityArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.identity = mapped
    }

    /**
     * @param value (Optional, when a Windows machine) Specifies the Windows OS license type. If supplied, the only allowed values are `Windows_Client` and `Windows_Server`.
     */
    @JvmName("ayvpchufjguahjad")
    public suspend fun licenseType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.licenseType = mapped
    }

    /**
     * @param value Specifies the supported Azure location where the resource exists. Changing this forces a new resource to be created.
     */
    @JvmName("yabsbisffxeukokf")
    public suspend fun location(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.location = mapped
    }

    /**
     * @param value Specifies the name of the virtual machine scale set resource. Changing this forces a new resource to be created.
     */
    @JvmName("fdsfbosbmxhtxnhi")
    public suspend fun name(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.name = mapped
    }

    /**
     * @param value A collection of `network_profile` blocks as documented below.
     */
    @JvmName("puhswyqejhhonsju")
    public suspend fun networkProfiles(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.networkProfiles = mapped
    }

    /**
     * @param argument A collection of `network_profile` blocks as documented below.
     */
    @JvmName("njupjvmjuqxsqsqd")
    public suspend
    fun networkProfiles(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ScaleSetNetworkProfileArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.networkProfiles = mapped
    }

    /**
     * @param argument A collection of `network_profile` blocks as documented below.
     */
    @JvmName("benjgxwvxwrrcivs")
    public suspend fun networkProfiles(
        vararg
        argument: suspend ScaleSetNetworkProfileArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            ScaleSetNetworkProfileArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.networkProfiles = mapped
    }

    /**
     * @param argument A collection of `network_profile` blocks as documented below.
     */
    @JvmName("rwphwvlyiauupujv")
    public suspend
    fun networkProfiles(argument: suspend ScaleSetNetworkProfileArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(ScaleSetNetworkProfileArgsBuilder().applySuspend { argument() }.build())
        val mapped = of(toBeMapped)
        this.networkProfiles = mapped
    }

    /**
     * @param values A collection of `network_profile` blocks as documented below.
     */
    @JvmName("puckswpgrppvvtms")
    public suspend fun networkProfiles(vararg values: ScaleSetNetworkProfileArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.networkProfiles = mapped
    }

    /**
     * @param value A `os_profile` block as documented below.
     */
    @JvmName("fjvjlfwrbbwwweru")
    public suspend fun osProfile(`value`: ScaleSetOsProfileArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.osProfile = mapped
    }

    /**
     * @param argument A `os_profile` block as documented below.
     */
    @JvmName("ndbuuxcpcvhpxpub")
    public suspend fun osProfile(argument: suspend ScaleSetOsProfileArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetOsProfileArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.osProfile = mapped
    }

    /**
     * @param value A `os_profile_linux_config` block as documented below.
     */
    @JvmName("qymkfarortjqtlcy")
    public suspend fun osProfileLinuxConfig(`value`: ScaleSetOsProfileLinuxConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.osProfileLinuxConfig = mapped
    }

    /**
     * @param argument A `os_profile_linux_config` block as documented below.
     */
    @JvmName("sqxwbuuaqtoesuwm")
    public suspend
    fun osProfileLinuxConfig(argument: suspend ScaleSetOsProfileLinuxConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetOsProfileLinuxConfigArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.osProfileLinuxConfig = mapped
    }

    /**
     * @param value A collection of `os_profile_secrets` blocks as documented below.
     */
    @JvmName("cbsclteavtqilhdm")
    public suspend fun osProfileSecrets(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.osProfileSecrets = mapped
    }

    /**
     * @param argument A collection of `os_profile_secrets` blocks as documented below.
     */
    @JvmName("xbetfbiggxtagqpq")
    public suspend
    fun osProfileSecrets(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ScaleSetOsProfileSecretArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.osProfileSecrets = mapped
    }

    /**
     * @param argument A collection of `os_profile_secrets` blocks as documented below.
     */
    @JvmName("qqnumrburbuwimef")
    public suspend fun osProfileSecrets(
        vararg
        argument: suspend ScaleSetOsProfileSecretArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            ScaleSetOsProfileSecretArgsBuilder().applySuspend {
                it()
            }.build()
        }
        val mapped = of(toBeMapped)
        this.osProfileSecrets = mapped
    }

    /**
     * @param argument A collection of `os_profile_secrets` blocks as documented below.
     */
    @JvmName("xdxotvnhxdiqawll")
    public suspend
    fun osProfileSecrets(argument: suspend ScaleSetOsProfileSecretArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ScaleSetOsProfileSecretArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.osProfileSecrets = mapped
    }

    /**
     * @param values A collection of `os_profile_secrets` blocks as documented below.
     */
    @JvmName("epmwulrhprbiohbc")
    public suspend fun osProfileSecrets(vararg values: ScaleSetOsProfileSecretArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.osProfileSecrets = mapped
    }

    /**
     * @param value A `os_profile_windows_config` block as documented below.
     */
    @JvmName("nyrygbbjdmgibbww")
    public suspend fun osProfileWindowsConfig(`value`: ScaleSetOsProfileWindowsConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.osProfileWindowsConfig = mapped
    }

    /**
     * @param argument A `os_profile_windows_config` block as documented below.
     */
    @JvmName("ohrbojrsmabghghd")
    public suspend
    fun osProfileWindowsConfig(argument: suspend ScaleSetOsProfileWindowsConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetOsProfileWindowsConfigArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.osProfileWindowsConfig = mapped
    }

    /**
     * @param value Specifies whether the virtual machine scale set should be overprovisioned. Defaults to `true`.
     */
    @JvmName("lskytytvhrfexxdu")
    public suspend fun overprovision(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.overprovision = mapped
    }

    /**
     * @param value A `plan` block as documented below.
     */
    @JvmName("ngpvamalgixavnut")
    public suspend fun plan(`value`: ScaleSetPlanArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.plan = mapped
    }

    /**
     * @param argument A `plan` block as documented below.
     */
    @JvmName("vftwwhmmhpcfoiva")
    public suspend fun plan(argument: suspend ScaleSetPlanArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetPlanArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.plan = mapped
    }

    /**
     * @param value Specifies the priority for the Virtual Machines in the Scale Set. Possible values are `Low` and `Regular`. Changing this forces a new resource to be created.
     */
    @JvmName("xgqdjxtrnlgborlb")
    public suspend fun priority(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.priority = mapped
    }

    /**
     * @param value The ID of the Proximity Placement Group to which this Virtual Machine should be assigned. Changing this forces a new resource to be created
     */
    @JvmName("eaxgfxljusoeiwhd")
    public suspend fun proximityPlacementGroupId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.proximityPlacementGroupId = mapped
    }

    /**
     * @param value The name of the resource group in which to create the virtual machine scale set. Changing this forces a new resource to be created.
     */
    @JvmName("bomibtsmkooikqag")
    public suspend fun resourceGroupName(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.resourceGroupName = mapped
    }

    /**
     * @param value A `rolling_upgrade_policy` block as defined below. This is only applicable when the `upgrade_policy_mode` is `Rolling`.
     */
    @JvmName("mtkahjpluposdxlf")
    public suspend fun rollingUpgradePolicy(`value`: ScaleSetRollingUpgradePolicyArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.rollingUpgradePolicy = mapped
    }

    /**
     * @param argument A `rolling_upgrade_policy` block as defined below. This is only applicable when the `upgrade_policy_mode` is `Rolling`.
     */
    @JvmName("gkjuhsutiuogulvb")
    public suspend
    fun rollingUpgradePolicy(argument: suspend ScaleSetRollingUpgradePolicyArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetRollingUpgradePolicyArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.rollingUpgradePolicy = mapped
    }

    /**
     * @param value Specifies whether the scale set is limited to a single placement group with a maximum size of 100 virtual machines. If set to false, managed disks must be used. Changing this forces a new resource to be created. See [documentation](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-placement-groups) for more information. Defaults to `true`.
     */
    @JvmName("qgakynysmpdokcqu")
    public suspend fun singlePlacementGroup(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.singlePlacementGroup = mapped
    }

    /**
     * @param value A `sku` block as documented below.
     */
    @JvmName("hngwalwgnyruqabn")
    public suspend fun sku(`value`: ScaleSetSkuArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sku = mapped
    }

    /**
     * @param argument A `sku` block as documented below.
     */
    @JvmName("oruyhhorrjbjxjew")
    public suspend fun sku(argument: suspend ScaleSetSkuArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetSkuArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.sku = mapped
    }

    /**
     * @param value A `storage_profile_data_disk` block as documented below.
     */
    @JvmName("fpuvauopcdlrqttn")
    public suspend fun storageProfileDataDisks(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.storageProfileDataDisks = mapped
    }

    /**
     * @param argument A `storage_profile_data_disk` block as documented below.
     */
    @JvmName("myhafetnhfnraiwq")
    public suspend
    fun storageProfileDataDisks(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ScaleSetStorageProfileDataDiskArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.storageProfileDataDisks = mapped
    }

    /**
     * @param argument A `storage_profile_data_disk` block as documented below.
     */
    @JvmName("tjnqapnmietvfrlv")
    public suspend fun storageProfileDataDisks(
        vararg
        argument: suspend ScaleSetStorageProfileDataDiskArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            ScaleSetStorageProfileDataDiskArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.storageProfileDataDisks = mapped
    }

    /**
     * @param argument A `storage_profile_data_disk` block as documented below.
     */
    @JvmName("epxtpimtfygvbwoj")
    public suspend
    fun storageProfileDataDisks(argument: suspend ScaleSetStorageProfileDataDiskArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ScaleSetStorageProfileDataDiskArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.storageProfileDataDisks = mapped
    }

    /**
     * @param values A `storage_profile_data_disk` block as documented below.
     */
    @JvmName("mdbemykqrbeukrbw")
    public suspend fun storageProfileDataDisks(vararg values: ScaleSetStorageProfileDataDiskArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.storageProfileDataDisks = mapped
    }

    /**
     * @param value A `storage_profile_image_reference` block as documented below.
     */
    @JvmName("ehunxevuherkebga")
    public suspend
    fun storageProfileImageReference(`value`: ScaleSetStorageProfileImageReferenceArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.storageProfileImageReference = mapped
    }

    /**
     * @param argument A `storage_profile_image_reference` block as documented below.
     */
    @JvmName("yrhwuvvkjuiobele")
    public suspend
    fun storageProfileImageReference(argument: suspend ScaleSetStorageProfileImageReferenceArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetStorageProfileImageReferenceArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.storageProfileImageReference = mapped
    }

    /**
     * @param value A `storage_profile_os_disk` block as documented below.
     */
    @JvmName("uwcpfgajcgmwvbmy")
    public suspend fun storageProfileOsDisk(`value`: ScaleSetStorageProfileOsDiskArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.storageProfileOsDisk = mapped
    }

    /**
     * @param argument A `storage_profile_os_disk` block as documented below.
     */
    @JvmName("cpjcwlhtupgvxknw")
    public suspend
    fun storageProfileOsDisk(argument: suspend ScaleSetStorageProfileOsDiskArgsBuilder.() -> Unit) {
        val toBeMapped = ScaleSetStorageProfileOsDiskArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.storageProfileOsDisk = mapped
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     */
    @JvmName("icpyfuqlcqppebbe")
    public suspend fun tags(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param values A mapping of tags to assign to the resource.
     */
    @JvmName("qbvfcnkoedecbjvc")
    public fun tags(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value Specifies the mode of an upgrade to virtual machines in the scale set. Possible values, `Rolling`, `Manual`, or `Automatic`. When choosing `Rolling`, you will need to set a health probe.
     */
    @JvmName("kllkjsgholmkoorr")
    public suspend fun upgradePolicyMode(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.upgradePolicyMode = mapped
    }

    /**
     * @param value A collection of availability zones to spread the Virtual Machines over. Changing this forces a new resource to be created.
     * > **NOTE:** Availability Zones are [only supported in several regions at this time](https://docs.microsoft.com/azure/availability-zones/az-overview).
     */
    @JvmName("xqxxoqmlbwaolekl")
    public suspend fun zones(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.zones = mapped
    }

    /**
     * @param values A collection of availability zones to spread the Virtual Machines over. Changing this forces a new resource to be created.
     * > **NOTE:** Availability Zones are [only supported in several regions at this time](https://docs.microsoft.com/azure/availability-zones/az-overview).
     */
    @JvmName("mqqldobbcovtoiad")
    public suspend fun zones(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.zones = mapped
    }

    internal fun build(): ScaleSetArgs = ScaleSetArgs(
        automaticOsUpgrade = automaticOsUpgrade,
        bootDiagnostics = bootDiagnostics,
        evictionPolicy = evictionPolicy,
        extensions = extensions,
        healthProbeId = healthProbeId,
        identity = identity,
        licenseType = licenseType,
        location = location,
        name = name,
        networkProfiles = networkProfiles,
        osProfile = osProfile,
        osProfileLinuxConfig = osProfileLinuxConfig,
        osProfileSecrets = osProfileSecrets,
        osProfileWindowsConfig = osProfileWindowsConfig,
        overprovision = overprovision,
        plan = plan,
        priority = priority,
        proximityPlacementGroupId = proximityPlacementGroupId,
        resourceGroupName = resourceGroupName,
        rollingUpgradePolicy = rollingUpgradePolicy,
        singlePlacementGroup = singlePlacementGroup,
        sku = sku,
        storageProfileDataDisks = storageProfileDataDisks,
        storageProfileImageReference = storageProfileImageReference,
        storageProfileOsDisk = storageProfileOsDisk,
        tags = tags,
        upgradePolicyMode = upgradePolicyMode,
        zones = zones,
    )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy