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

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

Go to download

Build cloud applications and infrastructure by combining the safety and reliability of infrastructure as code with the power of the Kotlin programming language.

There is a newer version: 6.14.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.azure.compute.kotlin

import com.pulumi.azure.compute.LinuxVirtualMachineScaleSetArgs.builder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetAdditionalCapabilitiesArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetAdditionalCapabilitiesArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetAdminSshKeyArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetAdminSshKeyArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetAutomaticInstanceRepairArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetAutomaticInstanceRepairArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetAutomaticOsUpgradePolicyArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetAutomaticOsUpgradePolicyArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetBootDiagnosticsArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetBootDiagnosticsArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetDataDiskArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetDataDiskArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetExtensionArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetExtensionArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetGalleryApplicationArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetIdentityArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetIdentityArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetNetworkInterfaceArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetNetworkInterfaceArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetOsDiskArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetOsDiskArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetPlanArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetPlanArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetRollingUpgradePolicyArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetRollingUpgradePolicyArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetScaleInArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetScaleInArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetSecretArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetSecretArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetSourceImageReferenceArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetSourceImageReferenceArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetSpotRestoreArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetSpotRestoreArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetTerminateNotificationArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetTerminateNotificationArgsBuilder
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetTerminationNotificationArgs
import com.pulumi.azure.compute.kotlin.inputs.LinuxVirtualMachineScaleSetTerminationNotificationArgsBuilder
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.Deprecated
import kotlin.Double
import kotlin.Int
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 Linux Virtual Machine Scale Set.
 * ## Disclaimers
 * > **NOTE:** This provider will automatically update & reimage the nodes in the Scale Set (if Required) during an Update - this behaviour can be configured using the `features` setting within the Provider block.
 * ## Example Usage
 * This example provisions a basic Linux Virtual Machine Scale Set on an internal network.
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as azure from "@pulumi/azure";
 * const firstPublicKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+wWK73dCr+jgQOAxNsHAnNNNMEMWOHYEccp6wJm2gotpr9katuF/ZAdou5AaW1C61slRkHRkpRRX9FA9CYBiitZgvCCz+3nWNN7l/Up54Zps/pHWGZLHNJZRYyAB6j5yVLMVHIHriY49d/GZTZVNB8GoJv9Gakwc/fuEZYYl4YDFiGMBP///TzlI4jhiJzjKnEvqPFki5p2ZRJqcbCiF4pJrxUQR/RXqVFQdbRLZgYfJ8xGB878RENq3yQ39d8dVOkq4edbkzwcUmwwwkYVPIoDGsYLaRHnG+To7FvMeyO7xDVQkMKzopTQV8AuKpyvpqu0a9pWOMaiCyDytO7GGN [email protected]";
 * const example = new azure.core.ResourceGroup("example", {
 *     name: "example-resources",
 *     location: "West Europe",
 * });
 * const exampleVirtualNetwork = new azure.network.VirtualNetwork("example", {
 *     name: "example-network",
 *     resourceGroupName: example.name,
 *     location: example.location,
 *     addressSpaces: ["10.0.0.0/16"],
 * });
 * const internal = new azure.network.Subnet("internal", {
 *     name: "internal",
 *     resourceGroupName: example.name,
 *     virtualNetworkName: exampleVirtualNetwork.name,
 *     addressPrefixes: ["10.0.2.0/24"],
 * });
 * const exampleLinuxVirtualMachineScaleSet = new azure.compute.LinuxVirtualMachineScaleSet("example", {
 *     name: "example-vmss",
 *     resourceGroupName: example.name,
 *     location: example.location,
 *     sku: "Standard_F2",
 *     instances: 1,
 *     adminUsername: "adminuser",
 *     adminSshKeys: [{
 *         username: "adminuser",
 *         publicKey: firstPublicKey,
 *     }],
 *     sourceImageReference: {
 *         publisher: "Canonical",
 *         offer: "0001-com-ubuntu-server-jammy",
 *         sku: "22_04-lts",
 *         version: "latest",
 *     },
 *     osDisk: {
 *         storageAccountType: "Standard_LRS",
 *         caching: "ReadWrite",
 *     },
 *     networkInterfaces: [{
 *         name: "example",
 *         primary: true,
 *         ipConfigurations: [{
 *             name: "internal",
 *             primary: true,
 *             subnetId: internal.id,
 *         }],
 *     }],
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_azure as azure
 * first_public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+wWK73dCr+jgQOAxNsHAnNNNMEMWOHYEccp6wJm2gotpr9katuF/ZAdou5AaW1C61slRkHRkpRRX9FA9CYBiitZgvCCz+3nWNN7l/Up54Zps/pHWGZLHNJZRYyAB6j5yVLMVHIHriY49d/GZTZVNB8GoJv9Gakwc/fuEZYYl4YDFiGMBP///TzlI4jhiJzjKnEvqPFki5p2ZRJqcbCiF4pJrxUQR/RXqVFQdbRLZgYfJ8xGB878RENq3yQ39d8dVOkq4edbkzwcUmwwwkYVPIoDGsYLaRHnG+To7FvMeyO7xDVQkMKzopTQV8AuKpyvpqu0a9pWOMaiCyDytO7GGN [email protected]"
 * example = azure.core.ResourceGroup("example",
 *     name="example-resources",
 *     location="West Europe")
 * example_virtual_network = azure.network.VirtualNetwork("example",
 *     name="example-network",
 *     resource_group_name=example.name,
 *     location=example.location,
 *     address_spaces=["10.0.0.0/16"])
 * internal = azure.network.Subnet("internal",
 *     name="internal",
 *     resource_group_name=example.name,
 *     virtual_network_name=example_virtual_network.name,
 *     address_prefixes=["10.0.2.0/24"])
 * example_linux_virtual_machine_scale_set = azure.compute.LinuxVirtualMachineScaleSet("example",
 *     name="example-vmss",
 *     resource_group_name=example.name,
 *     location=example.location,
 *     sku="Standard_F2",
 *     instances=1,
 *     admin_username="adminuser",
 *     admin_ssh_keys=[azure.compute.LinuxVirtualMachineScaleSetAdminSshKeyArgs(
 *         username="adminuser",
 *         public_key=first_public_key,
 *     )],
 *     source_image_reference=azure.compute.LinuxVirtualMachineScaleSetSourceImageReferenceArgs(
 *         publisher="Canonical",
 *         offer="0001-com-ubuntu-server-jammy",
 *         sku="22_04-lts",
 *         version="latest",
 *     ),
 *     os_disk=azure.compute.LinuxVirtualMachineScaleSetOsDiskArgs(
 *         storage_account_type="Standard_LRS",
 *         caching="ReadWrite",
 *     ),
 *     network_interfaces=[azure.compute.LinuxVirtualMachineScaleSetNetworkInterfaceArgs(
 *         name="example",
 *         primary=True,
 *         ip_configurations=[azure.compute.LinuxVirtualMachineScaleSetNetworkInterfaceIpConfigurationArgs(
 *             name="internal",
 *             primary=True,
 *             subnet_id=internal.id,
 *         )],
 *     )])
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Azure = Pulumi.Azure;
 * return await Deployment.RunAsync(() =>
 * {
 *     var firstPublicKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+wWK73dCr+jgQOAxNsHAnNNNMEMWOHYEccp6wJm2gotpr9katuF/ZAdou5AaW1C61slRkHRkpRRX9FA9CYBiitZgvCCz+3nWNN7l/Up54Zps/pHWGZLHNJZRYyAB6j5yVLMVHIHriY49d/GZTZVNB8GoJv9Gakwc/fuEZYYl4YDFiGMBP///TzlI4jhiJzjKnEvqPFki5p2ZRJqcbCiF4pJrxUQR/RXqVFQdbRLZgYfJ8xGB878RENq3yQ39d8dVOkq4edbkzwcUmwwwkYVPIoDGsYLaRHnG+To7FvMeyO7xDVQkMKzopTQV8AuKpyvpqu0a9pWOMaiCyDytO7GGN [email protected]";
 *     var example = new Azure.Core.ResourceGroup("example", new()
 *     {
 *         Name = "example-resources",
 *         Location = "West Europe",
 *     });
 *     var exampleVirtualNetwork = new Azure.Network.VirtualNetwork("example", new()
 *     {
 *         Name = "example-network",
 *         ResourceGroupName = example.Name,
 *         Location = example.Location,
 *         AddressSpaces = new[]
 *         {
 *             "10.0.0.0/16",
 *         },
 *     });
 *     var @internal = new Azure.Network.Subnet("internal", new()
 *     {
 *         Name = "internal",
 *         ResourceGroupName = example.Name,
 *         VirtualNetworkName = exampleVirtualNetwork.Name,
 *         AddressPrefixes = new[]
 *         {
 *             "10.0.2.0/24",
 *         },
 *     });
 *     var exampleLinuxVirtualMachineScaleSet = new Azure.Compute.LinuxVirtualMachineScaleSet("example", new()
 *     {
 *         Name = "example-vmss",
 *         ResourceGroupName = example.Name,
 *         Location = example.Location,
 *         Sku = "Standard_F2",
 *         Instances = 1,
 *         AdminUsername = "adminuser",
 *         AdminSshKeys = new[]
 *         {
 *             new Azure.Compute.Inputs.LinuxVirtualMachineScaleSetAdminSshKeyArgs
 *             {
 *                 Username = "adminuser",
 *                 PublicKey = firstPublicKey,
 *             },
 *         },
 *         SourceImageReference = new Azure.Compute.Inputs.LinuxVirtualMachineScaleSetSourceImageReferenceArgs
 *         {
 *             Publisher = "Canonical",
 *             Offer = "0001-com-ubuntu-server-jammy",
 *             Sku = "22_04-lts",
 *             Version = "latest",
 *         },
 *         OsDisk = new Azure.Compute.Inputs.LinuxVirtualMachineScaleSetOsDiskArgs
 *         {
 *             StorageAccountType = "Standard_LRS",
 *             Caching = "ReadWrite",
 *         },
 *         NetworkInterfaces = new[]
 *         {
 *             new Azure.Compute.Inputs.LinuxVirtualMachineScaleSetNetworkInterfaceArgs
 *             {
 *                 Name = "example",
 *                 Primary = true,
 *                 IpConfigurations = new[]
 *                 {
 *                     new Azure.Compute.Inputs.LinuxVirtualMachineScaleSetNetworkInterfaceIpConfigurationArgs
 *                     {
 *                         Name = "internal",
 *                         Primary = true,
 *                         SubnetId = @internal.Id,
 *                     },
 *                 },
 *             },
 *         },
 *     });
 * });
 * ```
 * ```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/network"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		firstPublicKey := "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+wWK73dCr+jgQOAxNsHAnNNNMEMWOHYEccp6wJm2gotpr9katuF/ZAdou5AaW1C61slRkHRkpRRX9FA9CYBiitZgvCCz+3nWNN7l/Up54Zps/pHWGZLHNJZRYyAB6j5yVLMVHIHriY49d/GZTZVNB8GoJv9Gakwc/fuEZYYl4YDFiGMBP///TzlI4jhiJzjKnEvqPFki5p2ZRJqcbCiF4pJrxUQR/RXqVFQdbRLZgYfJ8xGB878RENq3yQ39d8dVOkq4edbkzwcUmwwwkYVPIoDGsYLaRHnG+To7FvMeyO7xDVQkMKzopTQV8AuKpyvpqu0a9pWOMaiCyDytO7GGN [email protected]"
 * 		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("example-network"),
 * 			ResourceGroupName: example.Name,
 * 			Location:          example.Location,
 * 			AddressSpaces: pulumi.StringArray{
 * 				pulumi.String("10.0.0.0/16"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		internal, err := network.NewSubnet(ctx, "internal", &network.SubnetArgs{
 * 			Name:               pulumi.String("internal"),
 * 			ResourceGroupName:  example.Name,
 * 			VirtualNetworkName: exampleVirtualNetwork.Name,
 * 			AddressPrefixes: pulumi.StringArray{
 * 				pulumi.String("10.0.2.0/24"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = compute.NewLinuxVirtualMachineScaleSet(ctx, "example", &compute.LinuxVirtualMachineScaleSetArgs{
 * 			Name:              pulumi.String("example-vmss"),
 * 			ResourceGroupName: example.Name,
 * 			Location:          example.Location,
 * 			Sku:               pulumi.String("Standard_F2"),
 * 			Instances:         pulumi.Int(1),
 * 			AdminUsername:     pulumi.String("adminuser"),
 * 			AdminSshKeys: compute.LinuxVirtualMachineScaleSetAdminSshKeyArray{
 * 				&compute.LinuxVirtualMachineScaleSetAdminSshKeyArgs{
 * 					Username:  pulumi.String("adminuser"),
 * 					PublicKey: pulumi.String(firstPublicKey),
 * 				},
 * 			},
 * 			SourceImageReference: &compute.LinuxVirtualMachineScaleSetSourceImageReferenceArgs{
 * 				Publisher: pulumi.String("Canonical"),
 * 				Offer:     pulumi.String("0001-com-ubuntu-server-jammy"),
 * 				Sku:       pulumi.String("22_04-lts"),
 * 				Version:   pulumi.String("latest"),
 * 			},
 * 			OsDisk: &compute.LinuxVirtualMachineScaleSetOsDiskArgs{
 * 				StorageAccountType: pulumi.String("Standard_LRS"),
 * 				Caching:            pulumi.String("ReadWrite"),
 * 			},
 * 			NetworkInterfaces: compute.LinuxVirtualMachineScaleSetNetworkInterfaceArray{
 * 				&compute.LinuxVirtualMachineScaleSetNetworkInterfaceArgs{
 * 					Name:    pulumi.String("example"),
 * 					Primary: pulumi.Bool(true),
 * 					IpConfigurations: compute.LinuxVirtualMachineScaleSetNetworkInterfaceIpConfigurationArray{
 * 						&compute.LinuxVirtualMachineScaleSetNetworkInterfaceIpConfigurationArgs{
 * 							Name:     pulumi.String("internal"),
 * 							Primary:  pulumi.Bool(true),
 * 							SubnetId: internal.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.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.compute.LinuxVirtualMachineScaleSet;
 * import com.pulumi.azure.compute.LinuxVirtualMachineScaleSetArgs;
 * import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetAdminSshKeyArgs;
 * import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetSourceImageReferenceArgs;
 * import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetOsDiskArgs;
 * import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetNetworkInterfaceArgs;
 * 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) {
 *         final var firstPublicKey = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+wWK73dCr+jgQOAxNsHAnNNNMEMWOHYEccp6wJm2gotpr9katuF/ZAdou5AaW1C61slRkHRkpRRX9FA9CYBiitZgvCCz+3nWNN7l/Up54Zps/pHWGZLHNJZRYyAB6j5yVLMVHIHriY49d/GZTZVNB8GoJv9Gakwc/fuEZYYl4YDFiGMBP///TzlI4jhiJzjKnEvqPFki5p2ZRJqcbCiF4pJrxUQR/RXqVFQdbRLZgYfJ8xGB878RENq3yQ39d8dVOkq4edbkzwcUmwwwkYVPIoDGsYLaRHnG+To7FvMeyO7xDVQkMKzopTQV8AuKpyvpqu0a9pWOMaiCyDytO7GGN [email protected]";
 *         var example = new ResourceGroup("example", ResourceGroupArgs.builder()
 *             .name("example-resources")
 *             .location("West Europe")
 *             .build());
 *         var exampleVirtualNetwork = new VirtualNetwork("exampleVirtualNetwork", VirtualNetworkArgs.builder()
 *             .name("example-network")
 *             .resourceGroupName(example.name())
 *             .location(example.location())
 *             .addressSpaces("10.0.0.0/16")
 *             .build());
 *         var internal = new Subnet("internal", SubnetArgs.builder()
 *             .name("internal")
 *             .resourceGroupName(example.name())
 *             .virtualNetworkName(exampleVirtualNetwork.name())
 *             .addressPrefixes("10.0.2.0/24")
 *             .build());
 *         var exampleLinuxVirtualMachineScaleSet = new LinuxVirtualMachineScaleSet("exampleLinuxVirtualMachineScaleSet", LinuxVirtualMachineScaleSetArgs.builder()
 *             .name("example-vmss")
 *             .resourceGroupName(example.name())
 *             .location(example.location())
 *             .sku("Standard_F2")
 *             .instances(1)
 *             .adminUsername("adminuser")
 *             .adminSshKeys(LinuxVirtualMachineScaleSetAdminSshKeyArgs.builder()
 *                 .username("adminuser")
 *                 .publicKey(firstPublicKey)
 *                 .build())
 *             .sourceImageReference(LinuxVirtualMachineScaleSetSourceImageReferenceArgs.builder()
 *                 .publisher("Canonical")
 *                 .offer("0001-com-ubuntu-server-jammy")
 *                 .sku("22_04-lts")
 *                 .version("latest")
 *                 .build())
 *             .osDisk(LinuxVirtualMachineScaleSetOsDiskArgs.builder()
 *                 .storageAccountType("Standard_LRS")
 *                 .caching("ReadWrite")
 *                 .build())
 *             .networkInterfaces(LinuxVirtualMachineScaleSetNetworkInterfaceArgs.builder()
 *                 .name("example")
 *                 .primary(true)
 *                 .ipConfigurations(LinuxVirtualMachineScaleSetNetworkInterfaceIpConfigurationArgs.builder()
 *                     .name("internal")
 *                     .primary(true)
 *                     .subnetId(internal.id())
 *                     .build())
 *                 .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: example-network
 *       resourceGroupName: ${example.name}
 *       location: ${example.location}
 *       addressSpaces:
 *         - 10.0.0.0/16
 *   internal:
 *     type: azure:network:Subnet
 *     properties:
 *       name: internal
 *       resourceGroupName: ${example.name}
 *       virtualNetworkName: ${exampleVirtualNetwork.name}
 *       addressPrefixes:
 *         - 10.0.2.0/24
 *   exampleLinuxVirtualMachineScaleSet:
 *     type: azure:compute:LinuxVirtualMachineScaleSet
 *     name: example
 *     properties:
 *       name: example-vmss
 *       resourceGroupName: ${example.name}
 *       location: ${example.location}
 *       sku: Standard_F2
 *       instances: 1
 *       adminUsername: adminuser
 *       adminSshKeys:
 *         - username: adminuser
 *           publicKey: ${firstPublicKey}
 *       sourceImageReference:
 *         publisher: Canonical
 *         offer: 0001-com-ubuntu-server-jammy
 *         sku: 22_04-lts
 *         version: latest
 *       osDisk:
 *         storageAccountType: Standard_LRS
 *         caching: ReadWrite
 *       networkInterfaces:
 *         - name: example
 *           primary: true
 *           ipConfigurations:
 *             - name: internal
 *               primary: true
 *               subnetId: ${internal.id}
 * variables:
 *   firstPublicKey: ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC+wWK73dCr+jgQOAxNsHAnNNNMEMWOHYEccp6wJm2gotpr9katuF/ZAdou5AaW1C61slRkHRkpRRX9FA9CYBiitZgvCCz+3nWNN7l/Up54Zps/pHWGZLHNJZRYyAB6j5yVLMVHIHriY49d/GZTZVNB8GoJv9Gakwc/fuEZYYl4YDFiGMBP///TzlI4jhiJzjKnEvqPFki5p2ZRJqcbCiF4pJrxUQR/RXqVFQdbRLZgYfJ8xGB878RENq3yQ39d8dVOkq4edbkzwcUmwwwkYVPIoDGsYLaRHnG+To7FvMeyO7xDVQkMKzopTQV8AuKpyvpqu0a9pWOMaiCyDytO7GGN [email protected]
 * ```
 * 
 * ## Import
 * Linux Virtual Machine Scale Sets can be imported using the `resource id`, e.g.
 * ```sh
 * $ pulumi import azure:compute/linuxVirtualMachineScaleSet:LinuxVirtualMachineScaleSet example /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/mygroup1/providers/Microsoft.Compute/virtualMachineScaleSets/scaleset1
 * ```
 * @property additionalCapabilities An `additional_capabilities` block as defined below.
 * @property adminPassword The Password which should be used for the local-administrator on this Virtual Machine. Changing this forces a new resource to be created.
 * > **NOTE:** When an `admin_password` is specified `disable_password_authentication` must be set to `false`.
 * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
 * @property adminSshKeys One or more `admin_ssh_key` blocks as defined below.
 * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
 * @property adminUsername The username of the local administrator on each Virtual Machine Scale Set instance. Changing this forces a new resource to be created.
 * @property automaticInstanceRepair An `automatic_instance_repair` block as defined below. To enable the automatic instance repair, this Virtual Machine Scale Set must have a valid `health_probe_id` or an [Application Health Extension](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-health-extension).
 * > **NOTE:** For more information about Automatic Instance Repair, please refer to [this doc](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs).
 * @property automaticOsUpgradePolicy An `automatic_os_upgrade_policy` block as defined below. This can only be specified when `upgrade_mode` is set to either `Automatic` or `Rolling`.
 * @property bootDiagnostics A `boot_diagnostics` block as defined below.
 * @property capacityReservationGroupId Specifies the ID of the Capacity Reservation Group which the Virtual Machine Scale Set should be allocated to. Changing this forces a new resource to be created.
 * > **NOTE:** `capacity_reservation_group_id` cannot be used with `proximity_placement_group_id`
 * > **NOTE:** `single_placement_group` must be set to `false` when `capacity_reservation_group_id` is specified.
 * @property computerNamePrefix The prefix which should be used for the name of the Virtual Machines in this Scale Set. If unspecified this defaults to the value for the `name` field. If the value of the `name` field is not a valid `computer_name_prefix`, then you must specify `computer_name_prefix`. Changing this forces a new resource to be created.
 * @property customData The Base64-Encoded Custom Data which should be used for this Virtual Machine Scale Set.
 * > **NOTE:** When Custom Data has been configured, it's not possible to remove it without tainting the Virtual Machine Scale Set, due to a limitation of the Azure API.
 * @property dataDisks One or more `data_disk` blocks as defined below.
 * @property disablePasswordAuthentication Should Password Authentication be disabled on this Virtual Machine Scale Set? Defaults to `true`.
 * > In general we'd recommend using SSH Keys for authentication rather than Passwords - but there's tradeoff's to each - please [see this thread for more information](https://security.stackexchange.com/questions/69407/why-is-using-an-ssh-key-more-secure-than-using-passwords).
 * > **NOTE:** When a `admin_password` is specified `disable_password_authentication` must be set to `false`.
 * @property doNotRunExtensionsOnOverprovisionedMachines Should Virtual Machine Extensions be run on Overprovisioned Virtual Machines in the Scale Set? Defaults to `false`.
 * @property edgeZone Specifies the Edge Zone within the Azure Region where this Linux Virtual Machine Scale Set should exist. Changing this forces a new Linux Virtual Machine Scale Set to be created.
 * @property encryptionAtHostEnabled Should all of the disks (including the temp disk) attached to this Virtual Machine be encrypted by enabling Encryption at Host?
 * @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:** This can only be configured when `priority` is set to `Spot`.
 * @property extensionOperationsEnabled Should extension operations be allowed on the Virtual Machine Scale Set? Possible values are `true` or `false`. Defaults to `true`. Changing this forces a new Linux Virtual Machine Scale Set to be created.
 * > **NOTE:** `extension_operations_enabled` may only be set to `false` if there are no extensions defined in the `extension` field.
 * @property extensions One or more `extension` blocks as defined below
 * @property extensionsTimeBudget Specifies the duration allocated for all extensions to start. The time duration should be between `15` minutes and `120` minutes (inclusive) and should be specified in ISO 8601 format. Defaults to `PT1H30M`.
 * @property galleryApplication One or more `gallery_application` blocks as defined below.
 * @property galleryApplications
 * @property healthProbeId The ID of a Load Balancer Probe which should be used to determine the health of an instance. This is Required and can only be specified when `upgrade_mode` is set to `Automatic` or `Rolling`.
 * @property hostGroupId Specifies the ID of the dedicated host group that the virtual machine scale set resides in. Changing this forces a new resource to be created.
 * @property identity An `identity` block as defined below.
 * @property instances The number of Virtual Machines in the Scale Set. Defaults to `0`.
 * > **NOTE:** If you're using AutoScaling, you may wish to use [`Ignore Changes` functionality](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) to ignore changes to this field.
 * @property location The Azure location where the Linux Virtual Machine Scale Set should exist. Changing this forces a new resource to be created.
 * @property maxBidPrice The maximum price you're willing to pay for each Virtual Machine in this Scale Set, in US Dollars; which must be greater than the current spot price. If this bid price falls below the current spot price the Virtual Machines in the Scale Set will be evicted using the `eviction_policy`. Defaults to `-1`, which means that each Virtual Machine in this Scale Set should not be evicted for price reasons.
 * > **NOTE:** This can only be configured when `priority` is set to `Spot`.
 * @property name The name of the Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
 * @property networkInterfaces One or more `network_interface` blocks as defined below.
 * @property osDisk An `os_disk` block as defined below.
 * @property overprovision Should Azure over-provision Virtual Machines in this Scale Set? This means that multiple Virtual Machines will be provisioned and Azure will keep the instances which become available first - which improves provisioning success rates and improves deployment time. You're not billed for these over-provisioned VM's and they don't count towards the Subscription Quota. Defaults to `true`.
 * @property plan A `plan` block as defined below. Changing this forces a new resource to be created.
 * > **NOTE:** When using an image from Azure Marketplace a `plan` must be specified.
 * @property platformFaultDomainCount Specifies the number of fault domains that are used by this Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
 * @property priority The Priority of this Virtual Machine Scale Set. Possible values are `Regular` and `Spot`. Defaults to `Regular`. Changing this value forces a new resource.
 * > **NOTE:** When `priority` is set to `Spot` an `eviction_policy` must be specified.
 * @property provisionVmAgent Should the Azure VM Agent be provisioned on each Virtual Machine in the Scale Set? Defaults to `true`. Changing this value forces a new resource to be created.
 * @property proximityPlacementGroupId The ID of the Proximity Placement Group in which the Virtual Machine Scale Set should be assigned to. Changing this forces a new resource to be created.
 * @property resourceGroupName The name of the Resource Group in which the Linux Virtual Machine Scale Set should be exist. Changing this forces a new resource to be created.
 * @property rollingUpgradePolicy A `rolling_upgrade_policy` block as defined below. This is Required and can only be specified when `upgrade_mode` is set to `Automatic` or `Rolling`. Changing this forces a new resource to be created.
 * @property scaleIn A `scale_in` block as defined below.
 * @property scaleInPolicy
 * @property secrets One or more `secret` blocks as defined below.
 * @property secureBootEnabled Specifies whether secure boot should be enabled on the virtual machine. Changing this forces a new resource to be created.
 * @property singlePlacementGroup Should this Virtual Machine Scale Set be limited to a Single Placement Group, which means the number of instances will be capped at 100 Virtual Machines. Defaults to `true`.
 * @property sku The Virtual Machine SKU for the Scale Set, such as `Standard_F2`.
 * @property sourceImageId The ID of an Image which each Virtual Machine in this Scale Set should be based on. Possible Image ID types include `Image ID`, `Shared Image ID`, `Shared Image Version ID`, `Community Gallery Image ID`, `Community Gallery Image Version ID`, `Shared Gallery Image ID` and `Shared Gallery Image Version ID`.
 * > **NOTE:** One of either `source_image_id` or `source_image_reference` must be set.
 * @property sourceImageReference A `source_image_reference` block as defined below.
 * > **NOTE:** One of either `source_image_id` or `source_image_reference` must be set.
 * @property spotRestore A `spot_restore` block as defined below.
 * @property tags A mapping of tags which should be assigned to this Virtual Machine Scale Set.
 * @property terminateNotification A `terminate_notification` block as defined below.
 * > **Note:** This property has been deprecated in favour of the `termination_notification` property and will be removed in version 4.0 of the provider.
 * @property terminationNotification A `termination_notification` block as defined below.
 * @property upgradeMode
 * @property userData The Base64-Encoded User Data which should be used for this Virtual Machine Scale Set.
 * @property vtpmEnabled Specifies whether vTPM should be enabled on the virtual machine. Changing this forces a new resource to be created.
 * @property zoneBalance Should the Virtual Machines in this Scale Set be strictly evenly distributed across Availability Zones? Defaults to `false`. Changing this forces a new resource to be created.
 * > **NOTE:** This can only be set to `true` when one or more `zones` are configured.
 * @property zones Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located. Changing this forces a new Linux Virtual Machine Scale Set to be created.
 */
public data class LinuxVirtualMachineScaleSetArgs(
    public val additionalCapabilities: Output? =
        null,
    public val adminPassword: Output? = null,
    public val adminSshKeys: Output>? = null,
    public val adminUsername: Output? = null,
    public val automaticInstanceRepair:
    Output? = null,
    public val automaticOsUpgradePolicy:
    Output? = null,
    public val bootDiagnostics: Output? = null,
    public val capacityReservationGroupId: Output? = null,
    public val computerNamePrefix: Output? = null,
    public val customData: Output? = null,
    public val dataDisks: Output>? = null,
    public val disablePasswordAuthentication: Output? = null,
    public val doNotRunExtensionsOnOverprovisionedMachines: Output? = null,
    public val edgeZone: Output? = null,
    public val encryptionAtHostEnabled: Output? = null,
    public val evictionPolicy: Output? = null,
    public val extensionOperationsEnabled: Output? = null,
    public val extensions: Output>? = null,
    public val extensionsTimeBudget: Output? = null,
    public val galleryApplication: Output>? =
        null,
    @Deprecated(
        message = """
  `gallery_applications` has been renamed to `gallery_application` and will be deprecated in 4.0
  """,
    )
    public val galleryApplications: Output>? =
        null,
    public val healthProbeId: Output? = null,
    public val hostGroupId: Output? = null,
    public val identity: Output? = null,
    public val instances: Output? = null,
    public val location: Output? = null,
    public val maxBidPrice: Output? = null,
    public val name: Output? = null,
    public val networkInterfaces: Output>? =
        null,
    public val osDisk: Output? = null,
    public val overprovision: Output? = null,
    public val plan: Output? = null,
    public val platformFaultDomainCount: Output? = null,
    public val priority: Output? = null,
    public val provisionVmAgent: Output? = null,
    public val proximityPlacementGroupId: Output? = null,
    public val resourceGroupName: Output? = null,
    public val rollingUpgradePolicy: Output? =
        null,
    public val scaleIn: Output? = null,
    @Deprecated(
        message = """
  `scale_in_policy` will be removed in favour of the `scale_in` code block in version 4.0 of the
      AzureRM Provider.
  """,
    )
    public val scaleInPolicy: Output? = null,
    public val secrets: Output>? = null,
    public val secureBootEnabled: Output? = null,
    public val singlePlacementGroup: Output? = null,
    public val sku: Output? = null,
    public val sourceImageId: Output? = null,
    public val sourceImageReference: Output? =
        null,
    public val spotRestore: Output? = null,
    public val tags: Output>? = null,
    @Deprecated(
        message = """
  `terminate_notification` has been renamed to `termination_notification` and will be removed in
      4.0.
  """,
    )
    public val terminateNotification: Output? =
        null,
    public val terminationNotification:
    Output? = null,
    public val upgradeMode: Output? = null,
    public val userData: Output? = null,
    public val vtpmEnabled: Output? = null,
    public val zoneBalance: Output? = null,
    public val zones: Output>? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.azure.compute.LinuxVirtualMachineScaleSetArgs =
        com.pulumi.azure.compute.LinuxVirtualMachineScaleSetArgs.builder()
            .additionalCapabilities(
                additionalCapabilities?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .adminPassword(adminPassword?.applyValue({ args0 -> args0 }))
            .adminSshKeys(
                adminSshKeys?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .adminUsername(adminUsername?.applyValue({ args0 -> args0 }))
            .automaticInstanceRepair(
                automaticInstanceRepair?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .automaticOsUpgradePolicy(
                automaticOsUpgradePolicy?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .bootDiagnostics(bootDiagnostics?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .capacityReservationGroupId(capacityReservationGroupId?.applyValue({ args0 -> args0 }))
            .computerNamePrefix(computerNamePrefix?.applyValue({ args0 -> args0 }))
            .customData(customData?.applyValue({ args0 -> args0 }))
            .dataDisks(
                dataDisks?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .disablePasswordAuthentication(disablePasswordAuthentication?.applyValue({ args0 -> args0 }))
            .doNotRunExtensionsOnOverprovisionedMachines(
                doNotRunExtensionsOnOverprovisionedMachines?.applyValue({ args0 ->
                    args0
                }),
            )
            .edgeZone(edgeZone?.applyValue({ args0 -> args0 }))
            .encryptionAtHostEnabled(encryptionAtHostEnabled?.applyValue({ args0 -> args0 }))
            .evictionPolicy(evictionPolicy?.applyValue({ args0 -> args0 }))
            .extensionOperationsEnabled(extensionOperationsEnabled?.applyValue({ args0 -> args0 }))
            .extensions(
                extensions?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .extensionsTimeBudget(extensionsTimeBudget?.applyValue({ args0 -> args0 }))
            .galleryApplication(
                galleryApplication?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 -> args0.toJava() })
                    })
                }),
            )
            .galleryApplications(
                galleryApplications?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 -> args0.toJava() })
                    })
                }),
            )
            .healthProbeId(healthProbeId?.applyValue({ args0 -> args0 }))
            .hostGroupId(hostGroupId?.applyValue({ args0 -> args0 }))
            .identity(identity?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .instances(instances?.applyValue({ args0 -> args0 }))
            .location(location?.applyValue({ args0 -> args0 }))
            .maxBidPrice(maxBidPrice?.applyValue({ args0 -> args0 }))
            .name(name?.applyValue({ args0 -> args0 }))
            .networkInterfaces(
                networkInterfaces?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .osDisk(osDisk?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .overprovision(overprovision?.applyValue({ args0 -> args0 }))
            .plan(plan?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .platformFaultDomainCount(platformFaultDomainCount?.applyValue({ args0 -> args0 }))
            .priority(priority?.applyValue({ args0 -> args0 }))
            .provisionVmAgent(provisionVmAgent?.applyValue({ args0 -> args0 }))
            .proximityPlacementGroupId(proximityPlacementGroupId?.applyValue({ args0 -> args0 }))
            .resourceGroupName(resourceGroupName?.applyValue({ args0 -> args0 }))
            .rollingUpgradePolicy(
                rollingUpgradePolicy?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .scaleIn(scaleIn?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .scaleInPolicy(scaleInPolicy?.applyValue({ args0 -> args0 }))
            .secrets(
                secrets?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .secureBootEnabled(secureBootEnabled?.applyValue({ args0 -> args0 }))
            .singlePlacementGroup(singlePlacementGroup?.applyValue({ args0 -> args0 }))
            .sku(sku?.applyValue({ args0 -> args0 }))
            .sourceImageId(sourceImageId?.applyValue({ args0 -> args0 }))
            .sourceImageReference(
                sourceImageReference?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .spotRestore(spotRestore?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.key.to(args0.value) }).toMap() }))
            .terminateNotification(
                terminateNotification?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .terminationNotification(
                terminationNotification?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .upgradeMode(upgradeMode?.applyValue({ args0 -> args0 }))
            .userData(userData?.applyValue({ args0 -> args0 }))
            .vtpmEnabled(vtpmEnabled?.applyValue({ args0 -> args0 }))
            .zoneBalance(zoneBalance?.applyValue({ args0 -> args0 }))
            .zones(zones?.applyValue({ args0 -> args0.map({ args0 -> args0 }) })).build()
}

/**
 * Builder for [LinuxVirtualMachineScaleSetArgs].
 */
@PulumiTagMarker
public class LinuxVirtualMachineScaleSetArgsBuilder internal constructor() {
    private var additionalCapabilities: Output? =
        null

    private var adminPassword: Output? = null

    private var adminSshKeys: Output>? = null

    private var adminUsername: Output? = null

    private var automaticInstanceRepair:
        Output? = null

    private var automaticOsUpgradePolicy:
        Output? = null

    private var bootDiagnostics: Output? = null

    private var capacityReservationGroupId: Output? = null

    private var computerNamePrefix: Output? = null

    private var customData: Output? = null

    private var dataDisks: Output>? = null

    private var disablePasswordAuthentication: Output? = null

    private var doNotRunExtensionsOnOverprovisionedMachines: Output? = null

    private var edgeZone: Output? = null

    private var encryptionAtHostEnabled: Output? = null

    private var evictionPolicy: Output? = null

    private var extensionOperationsEnabled: Output? = null

    private var extensions: Output>? = null

    private var extensionsTimeBudget: Output? = null

    private var galleryApplication: Output>? =
        null

    private var galleryApplications: Output>? =
        null

    private var healthProbeId: Output? = null

    private var hostGroupId: Output? = null

    private var identity: Output? = null

    private var instances: Output? = null

    private var location: Output? = null

    private var maxBidPrice: Output? = null

    private var name: Output? = null

    private var networkInterfaces: Output>? =
        null

    private var osDisk: Output? = null

    private var overprovision: Output? = null

    private var plan: Output? = null

    private var platformFaultDomainCount: Output? = null

    private var priority: Output? = null

    private var provisionVmAgent: Output? = null

    private var proximityPlacementGroupId: Output? = null

    private var resourceGroupName: Output? = null

    private var rollingUpgradePolicy: Output? =
        null

    private var scaleIn: Output? = null

    private var scaleInPolicy: Output? = null

    private var secrets: Output>? = null

    private var secureBootEnabled: Output? = null

    private var singlePlacementGroup: Output? = null

    private var sku: Output? = null

    private var sourceImageId: Output? = null

    private var sourceImageReference: Output? =
        null

    private var spotRestore: Output? = null

    private var tags: Output>? = null

    private var terminateNotification: Output? =
        null

    private var terminationNotification:
        Output? = null

    private var upgradeMode: Output? = null

    private var userData: Output? = null

    private var vtpmEnabled: Output? = null

    private var zoneBalance: Output? = null

    private var zones: Output>? = null

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

    /**
     * @param value The Password which should be used for the local-administrator on this Virtual Machine. Changing this forces a new resource to be created.
     * > **NOTE:** When an `admin_password` is specified `disable_password_authentication` must be set to `false`.
     * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
     */
    @JvmName("rapudpojmhixtfck")
    public suspend fun adminPassword(`value`: Output) {
        this.adminPassword = value
    }

    /**
     * @param value One or more `admin_ssh_key` blocks as defined below.
     * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
     */
    @JvmName("mucldgyluxajnese")
    public suspend
    fun adminSshKeys(`value`: Output>) {
        this.adminSshKeys = value
    }

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

    /**
     * @param values One or more `admin_ssh_key` blocks as defined below.
     * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
     */
    @JvmName("pkclgyixwrsyjimf")
    public suspend
    fun adminSshKeys(values: List>) {
        this.adminSshKeys = Output.all(values)
    }

    /**
     * @param value The username of the local administrator on each Virtual Machine Scale Set instance. Changing this forces a new resource to be created.
     */
    @JvmName("xdqwavyhjdlpyhdk")
    public suspend fun adminUsername(`value`: Output) {
        this.adminUsername = value
    }

    /**
     * @param value An `automatic_instance_repair` block as defined below. To enable the automatic instance repair, this Virtual Machine Scale Set must have a valid `health_probe_id` or an [Application Health Extension](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-health-extension).
     * > **NOTE:** For more information about Automatic Instance Repair, please refer to [this doc](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs).
     */
    @JvmName("blveleihlgbosgau")
    public suspend
    fun automaticInstanceRepair(`value`: Output) {
        this.automaticInstanceRepair = value
    }

    /**
     * @param value An `automatic_os_upgrade_policy` block as defined below. This can only be specified when `upgrade_mode` is set to either `Automatic` or `Rolling`.
     */
    @JvmName("jhlaqoqxdwgsmbyg")
    public suspend
    fun automaticOsUpgradePolicy(`value`: Output) {
        this.automaticOsUpgradePolicy = value
    }

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

    /**
     * @param value Specifies the ID of the Capacity Reservation Group which the Virtual Machine Scale Set should be allocated to. Changing this forces a new resource to be created.
     * > **NOTE:** `capacity_reservation_group_id` cannot be used with `proximity_placement_group_id`
     * > **NOTE:** `single_placement_group` must be set to `false` when `capacity_reservation_group_id` is specified.
     */
    @JvmName("gbxftuylwpteakqd")
    public suspend fun capacityReservationGroupId(`value`: Output) {
        this.capacityReservationGroupId = value
    }

    /**
     * @param value The prefix which should be used for the name of the Virtual Machines in this Scale Set. If unspecified this defaults to the value for the `name` field. If the value of the `name` field is not a valid `computer_name_prefix`, then you must specify `computer_name_prefix`. Changing this forces a new resource to be created.
     */
    @JvmName("bpxeftayrtscfyto")
    public suspend fun computerNamePrefix(`value`: Output) {
        this.computerNamePrefix = value
    }

    /**
     * @param value The Base64-Encoded Custom Data which should be used for this Virtual Machine Scale Set.
     * > **NOTE:** When Custom Data has been configured, it's not possible to remove it without tainting the Virtual Machine Scale Set, due to a limitation of the Azure API.
     */
    @JvmName("fyodyryuskdufnpn")
    public suspend fun customData(`value`: Output) {
        this.customData = value
    }

    /**
     * @param value One or more `data_disk` blocks as defined below.
     */
    @JvmName("ycrgjpjikigixfbj")
    public suspend fun dataDisks(`value`: Output>) {
        this.dataDisks = value
    }

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

    /**
     * @param values One or more `data_disk` blocks as defined below.
     */
    @JvmName("skqjvoxqdkkhmfaq")
    public suspend fun dataDisks(values: List>) {
        this.dataDisks = Output.all(values)
    }

    /**
     * @param value Should Password Authentication be disabled on this Virtual Machine Scale Set? Defaults to `true`.
     * > In general we'd recommend using SSH Keys for authentication rather than Passwords - but there's tradeoff's to each - please [see this thread for more information](https://security.stackexchange.com/questions/69407/why-is-using-an-ssh-key-more-secure-than-using-passwords).
     * > **NOTE:** When a `admin_password` is specified `disable_password_authentication` must be set to `false`.
     */
    @JvmName("xijgluhoadpnffog")
    public suspend fun disablePasswordAuthentication(`value`: Output) {
        this.disablePasswordAuthentication = value
    }

    /**
     * @param value Should Virtual Machine Extensions be run on Overprovisioned Virtual Machines in the Scale Set? Defaults to `false`.
     */
    @JvmName("dweahltqmvkgorai")
    public suspend fun doNotRunExtensionsOnOverprovisionedMachines(`value`: Output) {
        this.doNotRunExtensionsOnOverprovisionedMachines = value
    }

    /**
     * @param value Specifies the Edge Zone within the Azure Region where this Linux Virtual Machine Scale Set should exist. Changing this forces a new Linux Virtual Machine Scale Set to be created.
     */
    @JvmName("uwivdivsdyayvlwe")
    public suspend fun edgeZone(`value`: Output) {
        this.edgeZone = value
    }

    /**
     * @param value Should all of the disks (including the temp disk) attached to this Virtual Machine be encrypted by enabling Encryption at Host?
     */
    @JvmName("uhghbthlrkiqtgrg")
    public suspend fun encryptionAtHostEnabled(`value`: Output) {
        this.encryptionAtHostEnabled = 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:** This can only be configured when `priority` is set to `Spot`.
     */
    @JvmName("hrxsbtsprarovasd")
    public suspend fun evictionPolicy(`value`: Output) {
        this.evictionPolicy = value
    }

    /**
     * @param value Should extension operations be allowed on the Virtual Machine Scale Set? Possible values are `true` or `false`. Defaults to `true`. Changing this forces a new Linux Virtual Machine Scale Set to be created.
     * > **NOTE:** `extension_operations_enabled` may only be set to `false` if there are no extensions defined in the `extension` field.
     */
    @JvmName("moxocuebniyukkjw")
    public suspend fun extensionOperationsEnabled(`value`: Output) {
        this.extensionOperationsEnabled = value
    }

    /**
     * @param value One or more `extension` blocks as defined below
     */
    @JvmName("gyostjnodenaaauo")
    public suspend fun extensions(`value`: Output>) {
        this.extensions = value
    }

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

    /**
     * @param values One or more `extension` blocks as defined below
     */
    @JvmName("ruajxfciaqslblvy")
    public suspend fun extensions(values: List>) {
        this.extensions = Output.all(values)
    }

    /**
     * @param value Specifies the duration allocated for all extensions to start. The time duration should be between `15` minutes and `120` minutes (inclusive) and should be specified in ISO 8601 format. Defaults to `PT1H30M`.
     */
    @JvmName("vhmutxadhoxdvaur")
    public suspend fun extensionsTimeBudget(`value`: Output) {
        this.extensionsTimeBudget = value
    }

    /**
     * @param value One or more `gallery_application` blocks as defined below.
     */
    @JvmName("gfjniwdmusyqkihj")
    public suspend
    fun galleryApplication(`value`: Output>) {
        this.galleryApplication = value
    }

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

    /**
     * @param values One or more `gallery_application` blocks as defined below.
     */
    @JvmName("nwjnqhtxyobbibki")
    public suspend
    fun galleryApplication(values: List>) {
        this.galleryApplication = Output.all(values)
    }

    /**
     * @param value
     */
    @Deprecated(
        message = """
  `gallery_applications` has been renamed to `gallery_application` and will be deprecated in 4.0
  """,
    )
    @JvmName("rrfryakwvqtamttk")
    public suspend
    fun galleryApplications(`value`: Output>) {
        this.galleryApplications = value
    }

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

    /**
     * @param values
     */
    @Deprecated(
        message = """
  `gallery_applications` has been renamed to `gallery_application` and will be deprecated in 4.0
  """,
    )
    @JvmName("ytwnoytgbuesywnk")
    public suspend
    fun galleryApplications(values: List>) {
        this.galleryApplications = Output.all(values)
    }

    /**
     * @param value The ID of a Load Balancer Probe which should be used to determine the health of an instance. This is Required and can only be specified when `upgrade_mode` is set to `Automatic` or `Rolling`.
     */
    @JvmName("bnhixwpogarnkkod")
    public suspend fun healthProbeId(`value`: Output) {
        this.healthProbeId = value
    }

    /**
     * @param value Specifies the ID of the dedicated host group that the virtual machine scale set resides in. Changing this forces a new resource to be created.
     */
    @JvmName("ybopdjojhtwquqwh")
    public suspend fun hostGroupId(`value`: Output) {
        this.hostGroupId = value
    }

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

    /**
     * @param value The number of Virtual Machines in the Scale Set. Defaults to `0`.
     * > **NOTE:** If you're using AutoScaling, you may wish to use [`Ignore Changes` functionality](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) to ignore changes to this field.
     */
    @JvmName("rkeripfiqmcgjqtk")
    public suspend fun instances(`value`: Output) {
        this.instances = value
    }

    /**
     * @param value The Azure location where the Linux Virtual Machine Scale Set should exist. Changing this forces a new resource to be created.
     */
    @JvmName("nnvigcxnhjxvionj")
    public suspend fun location(`value`: Output) {
        this.location = value
    }

    /**
     * @param value The maximum price you're willing to pay for each Virtual Machine in this Scale Set, in US Dollars; which must be greater than the current spot price. If this bid price falls below the current spot price the Virtual Machines in the Scale Set will be evicted using the `eviction_policy`. Defaults to `-1`, which means that each Virtual Machine in this Scale Set should not be evicted for price reasons.
     * > **NOTE:** This can only be configured when `priority` is set to `Spot`.
     */
    @JvmName("nlyeowrqxjmcnpbi")
    public suspend fun maxBidPrice(`value`: Output) {
        this.maxBidPrice = value
    }

    /**
     * @param value The name of the Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
     */
    @JvmName("tfjlfknsimadufeo")
    public suspend fun name(`value`: Output) {
        this.name = value
    }

    /**
     * @param value One or more `network_interface` blocks as defined below.
     */
    @JvmName("qkgyxxrjanqevetk")
    public suspend
    fun networkInterfaces(`value`: Output>) {
        this.networkInterfaces = value
    }

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

    /**
     * @param values One or more `network_interface` blocks as defined below.
     */
    @JvmName("jcikfctjhmkfnvwm")
    public suspend
    fun networkInterfaces(values: List>) {
        this.networkInterfaces = Output.all(values)
    }

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

    /**
     * @param value Should Azure over-provision Virtual Machines in this Scale Set? This means that multiple Virtual Machines will be provisioned and Azure will keep the instances which become available first - which improves provisioning success rates and improves deployment time. You're not billed for these over-provisioned VM's and they don't count towards the Subscription Quota. Defaults to `true`.
     */
    @JvmName("qihlwshmblexwnhw")
    public suspend fun overprovision(`value`: Output) {
        this.overprovision = value
    }

    /**
     * @param value A `plan` block as defined below. Changing this forces a new resource to be created.
     * > **NOTE:** When using an image from Azure Marketplace a `plan` must be specified.
     */
    @JvmName("xrqkltiqrstdvslc")
    public suspend fun plan(`value`: Output) {
        this.plan = value
    }

    /**
     * @param value Specifies the number of fault domains that are used by this Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
     */
    @JvmName("yxhudgmsgckodilm")
    public suspend fun platformFaultDomainCount(`value`: Output) {
        this.platformFaultDomainCount = value
    }

    /**
     * @param value The Priority of this Virtual Machine Scale Set. Possible values are `Regular` and `Spot`. Defaults to `Regular`. Changing this value forces a new resource.
     * > **NOTE:** When `priority` is set to `Spot` an `eviction_policy` must be specified.
     */
    @JvmName("tadtbeycssarposw")
    public suspend fun priority(`value`: Output) {
        this.priority = value
    }

    /**
     * @param value Should the Azure VM Agent be provisioned on each Virtual Machine in the Scale Set? Defaults to `true`. Changing this value forces a new resource to be created.
     */
    @JvmName("lpulpemholyxlchg")
    public suspend fun provisionVmAgent(`value`: Output) {
        this.provisionVmAgent = value
    }

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

    /**
     * @param value The name of the Resource Group in which the Linux Virtual Machine Scale Set should be exist. Changing this forces a new resource to be created.
     */
    @JvmName("ctwmfgtxmvrtfbiy")
    public suspend fun resourceGroupName(`value`: Output) {
        this.resourceGroupName = value
    }

    /**
     * @param value A `rolling_upgrade_policy` block as defined below. This is Required and can only be specified when `upgrade_mode` is set to `Automatic` or `Rolling`. Changing this forces a new resource to be created.
     */
    @JvmName("sgtkhtxerlaxschd")
    public suspend
    fun rollingUpgradePolicy(`value`: Output) {
        this.rollingUpgradePolicy = value
    }

    /**
     * @param value A `scale_in` block as defined below.
     */
    @JvmName("povollfpofvaibph")
    public suspend fun scaleIn(`value`: Output) {
        this.scaleIn = value
    }

    /**
     * @param value
     */
    @Deprecated(
        message = """
  `scale_in_policy` will be removed in favour of the `scale_in` code block in version 4.0 of the
      AzureRM Provider.
  """,
    )
    @JvmName("mhfvgvlvumrneexg")
    public suspend fun scaleInPolicy(`value`: Output) {
        this.scaleInPolicy = value
    }

    /**
     * @param value One or more `secret` blocks as defined below.
     */
    @JvmName("xvgcekjcwsvbcqbt")
    public suspend fun secrets(`value`: Output>) {
        this.secrets = value
    }

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

    /**
     * @param values One or more `secret` blocks as defined below.
     */
    @JvmName("wcakexeyiodgfgnj")
    public suspend fun secrets(values: List>) {
        this.secrets = Output.all(values)
    }

    /**
     * @param value Specifies whether secure boot should be enabled on the virtual machine. Changing this forces a new resource to be created.
     */
    @JvmName("nlkvfvpbnlbjockq")
    public suspend fun secureBootEnabled(`value`: Output) {
        this.secureBootEnabled = value
    }

    /**
     * @param value Should this Virtual Machine Scale Set be limited to a Single Placement Group, which means the number of instances will be capped at 100 Virtual Machines. Defaults to `true`.
     */
    @JvmName("lepmgowuthdrsweu")
    public suspend fun singlePlacementGroup(`value`: Output) {
        this.singlePlacementGroup = value
    }

    /**
     * @param value The Virtual Machine SKU for the Scale Set, such as `Standard_F2`.
     */
    @JvmName("gugdaunegcssdmod")
    public suspend fun sku(`value`: Output) {
        this.sku = value
    }

    /**
     * @param value The ID of an Image which each Virtual Machine in this Scale Set should be based on. Possible Image ID types include `Image ID`, `Shared Image ID`, `Shared Image Version ID`, `Community Gallery Image ID`, `Community Gallery Image Version ID`, `Shared Gallery Image ID` and `Shared Gallery Image Version ID`.
     * > **NOTE:** One of either `source_image_id` or `source_image_reference` must be set.
     */
    @JvmName("ynpgappkhcfwxdmx")
    public suspend fun sourceImageId(`value`: Output) {
        this.sourceImageId = value
    }

    /**
     * @param value A `source_image_reference` block as defined below.
     * > **NOTE:** One of either `source_image_id` or `source_image_reference` must be set.
     */
    @JvmName("oosgksjcqxfymfov")
    public suspend
    fun sourceImageReference(`value`: Output) {
        this.sourceImageReference = value
    }

    /**
     * @param value A `spot_restore` block as defined below.
     */
    @JvmName("tkyhmcjakwrmjlpp")
    public suspend fun spotRestore(`value`: Output) {
        this.spotRestore = value
    }

    /**
     * @param value A mapping of tags which should be assigned to this Virtual Machine Scale Set.
     */
    @JvmName("yjmwnptcvdawhxxc")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    /**
     * @param value A `terminate_notification` block as defined below.
     * > **Note:** This property has been deprecated in favour of the `termination_notification` property and will be removed in version 4.0 of the provider.
     */
    @Deprecated(
        message = """
  `terminate_notification` has been renamed to `termination_notification` and will be removed in
      4.0.
  """,
    )
    @JvmName("fwntyywsepxlyqyc")
    public suspend
    fun terminateNotification(`value`: Output) {
        this.terminateNotification = value
    }

    /**
     * @param value A `termination_notification` block as defined below.
     */
    @JvmName("neknafpfwsibfcuq")
    public suspend
    fun terminationNotification(`value`: Output) {
        this.terminationNotification = value
    }

    /**
     * @param value
     */
    @JvmName("toxfgvmwbvauufar")
    public suspend fun upgradeMode(`value`: Output) {
        this.upgradeMode = value
    }

    /**
     * @param value The Base64-Encoded User Data which should be used for this Virtual Machine Scale Set.
     */
    @JvmName("mfryjqdbgvpckyhl")
    public suspend fun userData(`value`: Output) {
        this.userData = value
    }

    /**
     * @param value Specifies whether vTPM should be enabled on the virtual machine. Changing this forces a new resource to be created.
     */
    @JvmName("hdxkkeousltclhsy")
    public suspend fun vtpmEnabled(`value`: Output) {
        this.vtpmEnabled = value
    }

    /**
     * @param value Should the Virtual Machines in this Scale Set be strictly evenly distributed across Availability Zones? Defaults to `false`. Changing this forces a new resource to be created.
     * > **NOTE:** This can only be set to `true` when one or more `zones` are configured.
     */
    @JvmName("xgslesbrgmecmnta")
    public suspend fun zoneBalance(`value`: Output) {
        this.zoneBalance = value
    }

    /**
     * @param value Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located. Changing this forces a new Linux Virtual Machine Scale Set to be created.
     */
    @JvmName("galxqjpjvlwcbivg")
    public suspend fun zones(`value`: Output>) {
        this.zones = value
    }

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

    /**
     * @param values Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located. Changing this forces a new Linux Virtual Machine Scale Set to be created.
     */
    @JvmName("fekwebtuyagpwixi")
    public suspend fun zones(values: List>) {
        this.zones = Output.all(values)
    }

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

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

    /**
     * @param value The Password which should be used for the local-administrator on this Virtual Machine. Changing this forces a new resource to be created.
     * > **NOTE:** When an `admin_password` is specified `disable_password_authentication` must be set to `false`.
     * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
     */
    @JvmName("nqoxpcvtbnpyadeq")
    public suspend fun adminPassword(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.adminPassword = mapped
    }

    /**
     * @param value One or more `admin_ssh_key` blocks as defined below.
     * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
     */
    @JvmName("eilwebhkvsuoveku")
    public suspend fun adminSshKeys(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.adminSshKeys = mapped
    }

    /**
     * @param argument One or more `admin_ssh_key` blocks as defined below.
     * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
     */
    @JvmName("nuechtjikgwvnfed")
    public suspend
    fun adminSshKeys(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetAdminSshKeyArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.adminSshKeys = mapped
    }

    /**
     * @param argument One or more `admin_ssh_key` blocks as defined below.
     * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
     */
    @JvmName("ueiyaicrjdfqucce")
    public suspend fun adminSshKeys(
        vararg
        argument: suspend LinuxVirtualMachineScaleSetAdminSshKeyArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetAdminSshKeyArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.adminSshKeys = mapped
    }

    /**
     * @param argument One or more `admin_ssh_key` blocks as defined below.
     * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
     */
    @JvmName("vwrkwnjlkspmrkpm")
    public suspend
    fun adminSshKeys(argument: suspend LinuxVirtualMachineScaleSetAdminSshKeyArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            LinuxVirtualMachineScaleSetAdminSshKeyArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.adminSshKeys = mapped
    }

    /**
     * @param values One or more `admin_ssh_key` blocks as defined below.
     * > **NOTE:** One of either `admin_password` or `admin_ssh_key` must be specified.
     */
    @JvmName("jcguqbjyhifiwbrr")
    public suspend fun adminSshKeys(vararg values: LinuxVirtualMachineScaleSetAdminSshKeyArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.adminSshKeys = mapped
    }

    /**
     * @param value The username of the local administrator on each Virtual Machine Scale Set instance. Changing this forces a new resource to be created.
     */
    @JvmName("vyvqrmxffydamkfj")
    public suspend fun adminUsername(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.adminUsername = mapped
    }

    /**
     * @param value An `automatic_instance_repair` block as defined below. To enable the automatic instance repair, this Virtual Machine Scale Set must have a valid `health_probe_id` or an [Application Health Extension](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-health-extension).
     * > **NOTE:** For more information about Automatic Instance Repair, please refer to [this doc](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs).
     */
    @JvmName("vfydwjijqyihprhr")
    public suspend
    fun automaticInstanceRepair(`value`: LinuxVirtualMachineScaleSetAutomaticInstanceRepairArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.automaticInstanceRepair = mapped
    }

    /**
     * @param argument An `automatic_instance_repair` block as defined below. To enable the automatic instance repair, this Virtual Machine Scale Set must have a valid `health_probe_id` or an [Application Health Extension](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-health-extension).
     * > **NOTE:** For more information about Automatic Instance Repair, please refer to [this doc](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs).
     */
    @JvmName("mbkgblaonopcajke")
    public suspend
    fun automaticInstanceRepair(argument: suspend LinuxVirtualMachineScaleSetAutomaticInstanceRepairArgsBuilder.() -> Unit) {
        val toBeMapped = LinuxVirtualMachineScaleSetAutomaticInstanceRepairArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.automaticInstanceRepair = mapped
    }

    /**
     * @param value An `automatic_os_upgrade_policy` block as defined below. This can only be specified when `upgrade_mode` is set to either `Automatic` or `Rolling`.
     */
    @JvmName("wcnnfdexaldfphyh")
    public suspend
    fun automaticOsUpgradePolicy(`value`: LinuxVirtualMachineScaleSetAutomaticOsUpgradePolicyArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.automaticOsUpgradePolicy = mapped
    }

    /**
     * @param argument An `automatic_os_upgrade_policy` block as defined below. This can only be specified when `upgrade_mode` is set to either `Automatic` or `Rolling`.
     */
    @JvmName("vkddepfskdomgwgk")
    public suspend
    fun automaticOsUpgradePolicy(argument: suspend LinuxVirtualMachineScaleSetAutomaticOsUpgradePolicyArgsBuilder.() -> Unit) {
        val toBeMapped = LinuxVirtualMachineScaleSetAutomaticOsUpgradePolicyArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.automaticOsUpgradePolicy = mapped
    }

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

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

    /**
     * @param value Specifies the ID of the Capacity Reservation Group which the Virtual Machine Scale Set should be allocated to. Changing this forces a new resource to be created.
     * > **NOTE:** `capacity_reservation_group_id` cannot be used with `proximity_placement_group_id`
     * > **NOTE:** `single_placement_group` must be set to `false` when `capacity_reservation_group_id` is specified.
     */
    @JvmName("jrmtmegsbyegnxha")
    public suspend fun capacityReservationGroupId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.capacityReservationGroupId = mapped
    }

    /**
     * @param value The prefix which should be used for the name of the Virtual Machines in this Scale Set. If unspecified this defaults to the value for the `name` field. If the value of the `name` field is not a valid `computer_name_prefix`, then you must specify `computer_name_prefix`. Changing this forces a new resource to be created.
     */
    @JvmName("nfrbofmsuxhqaxmd")
    public suspend fun computerNamePrefix(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.computerNamePrefix = mapped
    }

    /**
     * @param value The Base64-Encoded Custom Data which should be used for this Virtual Machine Scale Set.
     * > **NOTE:** When Custom Data has been configured, it's not possible to remove it without tainting the Virtual Machine Scale Set, due to a limitation of the Azure API.
     */
    @JvmName("dhoksvuuymidqihs")
    public suspend fun customData(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.customData = mapped
    }

    /**
     * @param value One or more `data_disk` blocks as defined below.
     */
    @JvmName("tkgamooporicduyg")
    public suspend fun dataDisks(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.dataDisks = mapped
    }

    /**
     * @param argument One or more `data_disk` blocks as defined below.
     */
    @JvmName("gqksjllexcptcsjk")
    public suspend
    fun dataDisks(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetDataDiskArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.dataDisks = mapped
    }

    /**
     * @param argument One or more `data_disk` blocks as defined below.
     */
    @JvmName("itejfpmewtyiikoq")
    public suspend fun dataDisks(
        vararg
        argument: suspend LinuxVirtualMachineScaleSetDataDiskArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetDataDiskArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.dataDisks = mapped
    }

    /**
     * @param argument One or more `data_disk` blocks as defined below.
     */
    @JvmName("dcvwxthhqfneyyfa")
    public suspend
    fun dataDisks(argument: suspend LinuxVirtualMachineScaleSetDataDiskArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            LinuxVirtualMachineScaleSetDataDiskArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.dataDisks = mapped
    }

    /**
     * @param values One or more `data_disk` blocks as defined below.
     */
    @JvmName("yvtfggmclyxcefuv")
    public suspend fun dataDisks(vararg values: LinuxVirtualMachineScaleSetDataDiskArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.dataDisks = mapped
    }

    /**
     * @param value Should Password Authentication be disabled on this Virtual Machine Scale Set? Defaults to `true`.
     * > In general we'd recommend using SSH Keys for authentication rather than Passwords - but there's tradeoff's to each - please [see this thread for more information](https://security.stackexchange.com/questions/69407/why-is-using-an-ssh-key-more-secure-than-using-passwords).
     * > **NOTE:** When a `admin_password` is specified `disable_password_authentication` must be set to `false`.
     */
    @JvmName("rueajtmghgavlktp")
    public suspend fun disablePasswordAuthentication(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.disablePasswordAuthentication = mapped
    }

    /**
     * @param value Should Virtual Machine Extensions be run on Overprovisioned Virtual Machines in the Scale Set? Defaults to `false`.
     */
    @JvmName("pyoepseljjiorqen")
    public suspend fun doNotRunExtensionsOnOverprovisionedMachines(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.doNotRunExtensionsOnOverprovisionedMachines = mapped
    }

    /**
     * @param value Specifies the Edge Zone within the Azure Region where this Linux Virtual Machine Scale Set should exist. Changing this forces a new Linux Virtual Machine Scale Set to be created.
     */
    @JvmName("iebiltwnufhcgvwr")
    public suspend fun edgeZone(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.edgeZone = mapped
    }

    /**
     * @param value Should all of the disks (including the temp disk) attached to this Virtual Machine be encrypted by enabling Encryption at Host?
     */
    @JvmName("uqlwjpgathiuqsfg")
    public suspend fun encryptionAtHostEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.encryptionAtHostEnabled = 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:** This can only be configured when `priority` is set to `Spot`.
     */
    @JvmName("yislwkxyafmaarvk")
    public suspend fun evictionPolicy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.evictionPolicy = mapped
    }

    /**
     * @param value Should extension operations be allowed on the Virtual Machine Scale Set? Possible values are `true` or `false`. Defaults to `true`. Changing this forces a new Linux Virtual Machine Scale Set to be created.
     * > **NOTE:** `extension_operations_enabled` may only be set to `false` if there are no extensions defined in the `extension` field.
     */
    @JvmName("yhcwopvcvcqluhkj")
    public suspend fun extensionOperationsEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.extensionOperationsEnabled = mapped
    }

    /**
     * @param value One or more `extension` blocks as defined below
     */
    @JvmName("wnuructbsufhlieg")
    public suspend fun extensions(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.extensions = mapped
    }

    /**
     * @param argument One or more `extension` blocks as defined below
     */
    @JvmName("krpylvywshawblwx")
    public suspend
    fun extensions(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetExtensionArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.extensions = mapped
    }

    /**
     * @param argument One or more `extension` blocks as defined below
     */
    @JvmName("trgvumgceqglunge")
    public suspend fun extensions(
        vararg
        argument: suspend LinuxVirtualMachineScaleSetExtensionArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetExtensionArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.extensions = mapped
    }

    /**
     * @param argument One or more `extension` blocks as defined below
     */
    @JvmName("peyhfrntngcplmad")
    public suspend
    fun extensions(argument: suspend LinuxVirtualMachineScaleSetExtensionArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            LinuxVirtualMachineScaleSetExtensionArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.extensions = mapped
    }

    /**
     * @param values One or more `extension` blocks as defined below
     */
    @JvmName("dvnkylqgwsikbrce")
    public suspend fun extensions(vararg values: LinuxVirtualMachineScaleSetExtensionArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.extensions = mapped
    }

    /**
     * @param value Specifies the duration allocated for all extensions to start. The time duration should be between `15` minutes and `120` minutes (inclusive) and should be specified in ISO 8601 format. Defaults to `PT1H30M`.
     */
    @JvmName("kfplrgdnfpjaeuvw")
    public suspend fun extensionsTimeBudget(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.extensionsTimeBudget = mapped
    }

    /**
     * @param value One or more `gallery_application` blocks as defined below.
     */
    @JvmName("nrqdcnslhwssxive")
    public suspend
    fun galleryApplication(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.galleryApplication = mapped
    }

    /**
     * @param argument One or more `gallery_application` blocks as defined below.
     */
    @JvmName("mbwyluvwdsyyubbd")
    public suspend
    fun galleryApplication(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.galleryApplication = mapped
    }

    /**
     * @param argument One or more `gallery_application` blocks as defined below.
     */
    @JvmName("dutrlnwpelrdseiu")
    public suspend fun galleryApplication(
        vararg
        argument: suspend LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.galleryApplication = mapped
    }

    /**
     * @param argument One or more `gallery_application` blocks as defined below.
     */
    @JvmName("qvdunknwpkhnejml")
    public suspend
    fun galleryApplication(argument: suspend LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder().applySuspend
                { argument() }.build(),
        )
        val mapped = of(toBeMapped)
        this.galleryApplication = mapped
    }

    /**
     * @param values One or more `gallery_application` blocks as defined below.
     */
    @JvmName("uxjqsnykxpuboyan")
    public suspend fun galleryApplication(
        vararg
        values: LinuxVirtualMachineScaleSetGalleryApplicationArgs,
    ) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.galleryApplication = mapped
    }

    /**
     * @param value
     */
    @Deprecated(
        message = """
  `gallery_applications` has been renamed to `gallery_application` and will be deprecated in 4.0
  """,
    )
    @JvmName("sawcrkftrshisrjb")
    public suspend
    fun galleryApplications(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.galleryApplications = mapped
    }

    /**
     * @param argument
     */
    @Deprecated(
        message = """
  `gallery_applications` has been renamed to `gallery_application` and will be deprecated in 4.0
  """,
    )
    @JvmName("kyssppatkmxoudfk")
    public suspend
    fun galleryApplications(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.galleryApplications = mapped
    }

    /**
     * @param argument
     */
    @Deprecated(
        message = """
  `gallery_applications` has been renamed to `gallery_application` and will be deprecated in 4.0
  """,
    )
    @JvmName("nndxyhyxlrhgqagt")
    public suspend fun galleryApplications(
        vararg
        argument: suspend LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.galleryApplications = mapped
    }

    /**
     * @param argument
     */
    @Deprecated(
        message = """
  `gallery_applications` has been renamed to `gallery_application` and will be deprecated in 4.0
  """,
    )
    @JvmName("xfaxbqybvurovyfw")
    public suspend
    fun galleryApplications(argument: suspend LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            LinuxVirtualMachineScaleSetGalleryApplicationArgsBuilder().applySuspend
                { argument() }.build(),
        )
        val mapped = of(toBeMapped)
        this.galleryApplications = mapped
    }

    /**
     * @param values
     */
    @Deprecated(
        message = """
  `gallery_applications` has been renamed to `gallery_application` and will be deprecated in 4.0
  """,
    )
    @JvmName("smhlwjnlyyteykjs")
    public suspend fun galleryApplications(
        vararg
        values: LinuxVirtualMachineScaleSetGalleryApplicationArgs,
    ) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.galleryApplications = mapped
    }

    /**
     * @param value The ID of a Load Balancer Probe which should be used to determine the health of an instance. This is Required and can only be specified when `upgrade_mode` is set to `Automatic` or `Rolling`.
     */
    @JvmName("fbuajyxyepbkqnjl")
    public suspend fun healthProbeId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.healthProbeId = mapped
    }

    /**
     * @param value Specifies the ID of the dedicated host group that the virtual machine scale set resides in. Changing this forces a new resource to be created.
     */
    @JvmName("xkwkehbljuoafctv")
    public suspend fun hostGroupId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.hostGroupId = mapped
    }

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

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

    /**
     * @param value The number of Virtual Machines in the Scale Set. Defaults to `0`.
     * > **NOTE:** If you're using AutoScaling, you may wish to use [`Ignore Changes` functionality](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) to ignore changes to this field.
     */
    @JvmName("argavpkjjbabhbdi")
    public suspend fun instances(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.instances = mapped
    }

    /**
     * @param value The Azure location where the Linux Virtual Machine Scale Set should exist. Changing this forces a new resource to be created.
     */
    @JvmName("kvfrbvqrntixogcg")
    public suspend fun location(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.location = mapped
    }

    /**
     * @param value The maximum price you're willing to pay for each Virtual Machine in this Scale Set, in US Dollars; which must be greater than the current spot price. If this bid price falls below the current spot price the Virtual Machines in the Scale Set will be evicted using the `eviction_policy`. Defaults to `-1`, which means that each Virtual Machine in this Scale Set should not be evicted for price reasons.
     * > **NOTE:** This can only be configured when `priority` is set to `Spot`.
     */
    @JvmName("gdtbbgbpprgucroy")
    public suspend fun maxBidPrice(`value`: Double?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.maxBidPrice = mapped
    }

    /**
     * @param value The name of the Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
     */
    @JvmName("pvuswncbynrljpve")
    public suspend fun name(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.name = mapped
    }

    /**
     * @param value One or more `network_interface` blocks as defined below.
     */
    @JvmName("fwiykwgojiahoqsw")
    public suspend
    fun networkInterfaces(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.networkInterfaces = mapped
    }

    /**
     * @param argument One or more `network_interface` blocks as defined below.
     */
    @JvmName("dumvwridkgtjpplw")
    public suspend
    fun networkInterfaces(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetNetworkInterfaceArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.networkInterfaces = mapped
    }

    /**
     * @param argument One or more `network_interface` blocks as defined below.
     */
    @JvmName("wswjjwikrwyaccgj")
    public suspend fun networkInterfaces(
        vararg
        argument: suspend LinuxVirtualMachineScaleSetNetworkInterfaceArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetNetworkInterfaceArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.networkInterfaces = mapped
    }

    /**
     * @param argument One or more `network_interface` blocks as defined below.
     */
    @JvmName("duwtuktdhypywrkq")
    public suspend
    fun networkInterfaces(argument: suspend LinuxVirtualMachineScaleSetNetworkInterfaceArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            LinuxVirtualMachineScaleSetNetworkInterfaceArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.networkInterfaces = mapped
    }

    /**
     * @param values One or more `network_interface` blocks as defined below.
     */
    @JvmName("emiupkjvqrvxdtdi")
    public suspend fun networkInterfaces(
        vararg
        values: LinuxVirtualMachineScaleSetNetworkInterfaceArgs,
    ) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.networkInterfaces = mapped
    }

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

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

    /**
     * @param value Should Azure over-provision Virtual Machines in this Scale Set? This means that multiple Virtual Machines will be provisioned and Azure will keep the instances which become available first - which improves provisioning success rates and improves deployment time. You're not billed for these over-provisioned VM's and they don't count towards the Subscription Quota. Defaults to `true`.
     */
    @JvmName("kvkygddycvspyxli")
    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 defined below. Changing this forces a new resource to be created.
     * > **NOTE:** When using an image from Azure Marketplace a `plan` must be specified.
     */
    @JvmName("sqvobpuukvhomisi")
    public suspend fun plan(`value`: LinuxVirtualMachineScaleSetPlanArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.plan = mapped
    }

    /**
     * @param argument A `plan` block as defined below. Changing this forces a new resource to be created.
     * > **NOTE:** When using an image from Azure Marketplace a `plan` must be specified.
     */
    @JvmName("ibswfohrtyoexnvb")
    public suspend fun plan(argument: suspend LinuxVirtualMachineScaleSetPlanArgsBuilder.() -> Unit) {
        val toBeMapped = LinuxVirtualMachineScaleSetPlanArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.plan = mapped
    }

    /**
     * @param value Specifies the number of fault domains that are used by this Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
     */
    @JvmName("qttufmdidafnersm")
    public suspend fun platformFaultDomainCount(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.platformFaultDomainCount = mapped
    }

    /**
     * @param value The Priority of this Virtual Machine Scale Set. Possible values are `Regular` and `Spot`. Defaults to `Regular`. Changing this value forces a new resource.
     * > **NOTE:** When `priority` is set to `Spot` an `eviction_policy` must be specified.
     */
    @JvmName("mdgithwjbgopyfiw")
    public suspend fun priority(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.priority = mapped
    }

    /**
     * @param value Should the Azure VM Agent be provisioned on each Virtual Machine in the Scale Set? Defaults to `true`. Changing this value forces a new resource to be created.
     */
    @JvmName("ccrthoccaeagcpdu")
    public suspend fun provisionVmAgent(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.provisionVmAgent = mapped
    }

    /**
     * @param value The ID of the Proximity Placement Group in which the Virtual Machine Scale Set should be assigned to. Changing this forces a new resource to be created.
     */
    @JvmName("vpwwsjanoygiqlhd")
    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 the Linux Virtual Machine Scale Set should be exist. Changing this forces a new resource to be created.
     */
    @JvmName("nsgsucthxrltvssw")
    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 Required and can only be specified when `upgrade_mode` is set to `Automatic` or `Rolling`. Changing this forces a new resource to be created.
     */
    @JvmName("dteimhumluplfhgh")
    public suspend
    fun rollingUpgradePolicy(`value`: LinuxVirtualMachineScaleSetRollingUpgradePolicyArgs?) {
        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 Required and can only be specified when `upgrade_mode` is set to `Automatic` or `Rolling`. Changing this forces a new resource to be created.
     */
    @JvmName("axvhmcofmvciqglb")
    public suspend
    fun rollingUpgradePolicy(argument: suspend LinuxVirtualMachineScaleSetRollingUpgradePolicyArgsBuilder.() -> Unit) {
        val toBeMapped = LinuxVirtualMachineScaleSetRollingUpgradePolicyArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.rollingUpgradePolicy = mapped
    }

    /**
     * @param value A `scale_in` block as defined below.
     */
    @JvmName("oyqtpywhrqrfcbis")
    public suspend fun scaleIn(`value`: LinuxVirtualMachineScaleSetScaleInArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.scaleIn = mapped
    }

    /**
     * @param argument A `scale_in` block as defined below.
     */
    @JvmName("rlbbsyhtxehdfaxt")
    public suspend
    fun scaleIn(argument: suspend LinuxVirtualMachineScaleSetScaleInArgsBuilder.() -> Unit) {
        val toBeMapped = LinuxVirtualMachineScaleSetScaleInArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.scaleIn = mapped
    }

    /**
     * @param value
     */
    @Deprecated(
        message = """
  `scale_in_policy` will be removed in favour of the `scale_in` code block in version 4.0 of the
      AzureRM Provider.
  """,
    )
    @JvmName("wwugoydrdtprxdvo")
    public suspend fun scaleInPolicy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.scaleInPolicy = mapped
    }

    /**
     * @param value One or more `secret` blocks as defined below.
     */
    @JvmName("aomhnghdyaspjgwr")
    public suspend fun secrets(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.secrets = mapped
    }

    /**
     * @param argument One or more `secret` blocks as defined below.
     */
    @JvmName("ufgxmoeugenolqwl")
    public suspend
    fun secrets(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetSecretArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.secrets = mapped
    }

    /**
     * @param argument One or more `secret` blocks as defined below.
     */
    @JvmName("htyqbnjehkaqxgct")
    public suspend fun secrets(
        vararg
        argument: suspend LinuxVirtualMachineScaleSetSecretArgsBuilder.() -> Unit,
    ) {
        val toBeMapped = argument.toList().map {
            LinuxVirtualMachineScaleSetSecretArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.secrets = mapped
    }

    /**
     * @param argument One or more `secret` blocks as defined below.
     */
    @JvmName("rxxnhvbrnyqnevwi")
    public suspend
    fun secrets(argument: suspend LinuxVirtualMachineScaleSetSecretArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            LinuxVirtualMachineScaleSetSecretArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.secrets = mapped
    }

    /**
     * @param values One or more `secret` blocks as defined below.
     */
    @JvmName("rdarsoykfwmixyoc")
    public suspend fun secrets(vararg values: LinuxVirtualMachineScaleSetSecretArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.secrets = mapped
    }

    /**
     * @param value Specifies whether secure boot should be enabled on the virtual machine. Changing this forces a new resource to be created.
     */
    @JvmName("tjfetausefsrhlvf")
    public suspend fun secureBootEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.secureBootEnabled = mapped
    }

    /**
     * @param value Should this Virtual Machine Scale Set be limited to a Single Placement Group, which means the number of instances will be capped at 100 Virtual Machines. Defaults to `true`.
     */
    @JvmName("dkghmgpekkiukmup")
    public suspend fun singlePlacementGroup(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.singlePlacementGroup = mapped
    }

    /**
     * @param value The Virtual Machine SKU for the Scale Set, such as `Standard_F2`.
     */
    @JvmName("ljnvruyrntnjupyo")
    public suspend fun sku(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sku = mapped
    }

    /**
     * @param value The ID of an Image which each Virtual Machine in this Scale Set should be based on. Possible Image ID types include `Image ID`, `Shared Image ID`, `Shared Image Version ID`, `Community Gallery Image ID`, `Community Gallery Image Version ID`, `Shared Gallery Image ID` and `Shared Gallery Image Version ID`.
     * > **NOTE:** One of either `source_image_id` or `source_image_reference` must be set.
     */
    @JvmName("ppnqlqpaprxrxsda")
    public suspend fun sourceImageId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sourceImageId = mapped
    }

    /**
     * @param value A `source_image_reference` block as defined below.
     * > **NOTE:** One of either `source_image_id` or `source_image_reference` must be set.
     */
    @JvmName("qdydcepdrpuneskk")
    public suspend
    fun sourceImageReference(`value`: LinuxVirtualMachineScaleSetSourceImageReferenceArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sourceImageReference = mapped
    }

    /**
     * @param argument A `source_image_reference` block as defined below.
     * > **NOTE:** One of either `source_image_id` or `source_image_reference` must be set.
     */
    @JvmName("nosnrskngykvfsvu")
    public suspend
    fun sourceImageReference(argument: suspend LinuxVirtualMachineScaleSetSourceImageReferenceArgsBuilder.() -> Unit) {
        val toBeMapped = LinuxVirtualMachineScaleSetSourceImageReferenceArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.sourceImageReference = mapped
    }

    /**
     * @param value A `spot_restore` block as defined below.
     */
    @JvmName("plhqwmhygsdefupw")
    public suspend fun spotRestore(`value`: LinuxVirtualMachineScaleSetSpotRestoreArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.spotRestore = mapped
    }

    /**
     * @param argument A `spot_restore` block as defined below.
     */
    @JvmName("hfhcmtgbqcltfoei")
    public suspend
    fun spotRestore(argument: suspend LinuxVirtualMachineScaleSetSpotRestoreArgsBuilder.() -> Unit) {
        val toBeMapped = LinuxVirtualMachineScaleSetSpotRestoreArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.spotRestore = mapped
    }

    /**
     * @param value A mapping of tags which should be assigned to this Virtual Machine Scale Set.
     */
    @JvmName("moraelupjydtbhli")
    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 which should be assigned to this Virtual Machine Scale Set.
     */
    @JvmName("rqsmteuqpcnkxxfw")
    public fun tags(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value A `terminate_notification` block as defined below.
     * > **Note:** This property has been deprecated in favour of the `termination_notification` property and will be removed in version 4.0 of the provider.
     */
    @Deprecated(
        message = """
  `terminate_notification` has been renamed to `termination_notification` and will be removed in
      4.0.
  """,
    )
    @JvmName("frxngaucqyxeekqs")
    public suspend
    fun terminateNotification(`value`: LinuxVirtualMachineScaleSetTerminateNotificationArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.terminateNotification = mapped
    }

    /**
     * @param argument A `terminate_notification` block as defined below.
     * > **Note:** This property has been deprecated in favour of the `termination_notification` property and will be removed in version 4.0 of the provider.
     */
    @Deprecated(
        message = """
  `terminate_notification` has been renamed to `termination_notification` and will be removed in
      4.0.
  """,
    )
    @JvmName("gybcumcvfdoxvrwf")
    public suspend
    fun terminateNotification(argument: suspend LinuxVirtualMachineScaleSetTerminateNotificationArgsBuilder.() -> Unit) {
        val toBeMapped = LinuxVirtualMachineScaleSetTerminateNotificationArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.terminateNotification = mapped
    }

    /**
     * @param value A `termination_notification` block as defined below.
     */
    @JvmName("nxnbutewegtwgoxi")
    public suspend
    fun terminationNotification(`value`: LinuxVirtualMachineScaleSetTerminationNotificationArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.terminationNotification = mapped
    }

    /**
     * @param argument A `termination_notification` block as defined below.
     */
    @JvmName("suwepakicgkkmcxj")
    public suspend
    fun terminationNotification(argument: suspend LinuxVirtualMachineScaleSetTerminationNotificationArgsBuilder.() -> Unit) {
        val toBeMapped = LinuxVirtualMachineScaleSetTerminationNotificationArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.terminationNotification = mapped
    }

    /**
     * @param value
     */
    @JvmName("jecojgfcvuashqjy")
    public suspend fun upgradeMode(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.upgradeMode = mapped
    }

    /**
     * @param value The Base64-Encoded User Data which should be used for this Virtual Machine Scale Set.
     */
    @JvmName("feymxudvixamnjfd")
    public suspend fun userData(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.userData = mapped
    }

    /**
     * @param value Specifies whether vTPM should be enabled on the virtual machine. Changing this forces a new resource to be created.
     */
    @JvmName("fujvbeixkuyqhjkg")
    public suspend fun vtpmEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.vtpmEnabled = mapped
    }

    /**
     * @param value Should the Virtual Machines in this Scale Set be strictly evenly distributed across Availability Zones? Defaults to `false`. Changing this forces a new resource to be created.
     * > **NOTE:** This can only be set to `true` when one or more `zones` are configured.
     */
    @JvmName("wmhskitslojljeyg")
    public suspend fun zoneBalance(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.zoneBalance = mapped
    }

    /**
     * @param value Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located. Changing this forces a new Linux Virtual Machine Scale Set to be created.
     */
    @JvmName("bbqiclecwpdbarwb")
    public suspend fun zones(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.zones = mapped
    }

    /**
     * @param values Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located. Changing this forces a new Linux Virtual Machine Scale Set to be created.
     */
    @JvmName("wblkyfvycujhnlfn")
    public suspend fun zones(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.zones = mapped
    }

    internal fun build(): LinuxVirtualMachineScaleSetArgs = LinuxVirtualMachineScaleSetArgs(
        additionalCapabilities = additionalCapabilities,
        adminPassword = adminPassword,
        adminSshKeys = adminSshKeys,
        adminUsername = adminUsername,
        automaticInstanceRepair = automaticInstanceRepair,
        automaticOsUpgradePolicy = automaticOsUpgradePolicy,
        bootDiagnostics = bootDiagnostics,
        capacityReservationGroupId = capacityReservationGroupId,
        computerNamePrefix = computerNamePrefix,
        customData = customData,
        dataDisks = dataDisks,
        disablePasswordAuthentication = disablePasswordAuthentication,
        doNotRunExtensionsOnOverprovisionedMachines = doNotRunExtensionsOnOverprovisionedMachines,
        edgeZone = edgeZone,
        encryptionAtHostEnabled = encryptionAtHostEnabled,
        evictionPolicy = evictionPolicy,
        extensionOperationsEnabled = extensionOperationsEnabled,
        extensions = extensions,
        extensionsTimeBudget = extensionsTimeBudget,
        galleryApplication = galleryApplication,
        galleryApplications = galleryApplications,
        healthProbeId = healthProbeId,
        hostGroupId = hostGroupId,
        identity = identity,
        instances = instances,
        location = location,
        maxBidPrice = maxBidPrice,
        name = name,
        networkInterfaces = networkInterfaces,
        osDisk = osDisk,
        overprovision = overprovision,
        plan = plan,
        platformFaultDomainCount = platformFaultDomainCount,
        priority = priority,
        provisionVmAgent = provisionVmAgent,
        proximityPlacementGroupId = proximityPlacementGroupId,
        resourceGroupName = resourceGroupName,
        rollingUpgradePolicy = rollingUpgradePolicy,
        scaleIn = scaleIn,
        scaleInPolicy = scaleInPolicy,
        secrets = secrets,
        secureBootEnabled = secureBootEnabled,
        singlePlacementGroup = singlePlacementGroup,
        sku = sku,
        sourceImageId = sourceImageId,
        sourceImageReference = sourceImageReference,
        spotRestore = spotRestore,
        tags = tags,
        terminateNotification = terminateNotification,
        terminationNotification = terminationNotification,
        upgradeMode = upgradeMode,
        userData = userData,
        vtpmEnabled = vtpmEnabled,
        zoneBalance = zoneBalance,
        zones = zones,
    )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy