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

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

// *** WARNING: this file was generated by pulumi-java-gen. ***
// *** Do not edit by hand unless you're certain you know what you are doing! ***

package com.pulumi.azure.compute;

import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetAdditionalCapabilitiesArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetAdminSshKeyArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetAutomaticInstanceRepairArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetAutomaticOsUpgradePolicyArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetBootDiagnosticsArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetDataDiskArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetExtensionArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetGalleryApplicationArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetIdentityArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetNetworkInterfaceArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetOsDiskArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetPlanArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetRollingUpgradePolicyArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetScaleInArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetSecretArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetSourceImageReferenceArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetSpotRestoreArgs;
import com.pulumi.azure.compute.inputs.LinuxVirtualMachineScaleSetTerminationNotificationArgs;
import com.pulumi.core.Output;
import com.pulumi.core.annotations.Import;
import com.pulumi.exceptions.MissingRequiredPropertyException;
import java.lang.Boolean;
import java.lang.Double;
import java.lang.Integer;
import java.lang.String;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Nullable;


public final class LinuxVirtualMachineScaleSetArgs extends com.pulumi.resources.ResourceArgs {

    public static final LinuxVirtualMachineScaleSetArgs Empty = new LinuxVirtualMachineScaleSetArgs();

    /**
     * An `additional_capabilities` block as defined below.
     * 
     */
    @Import(name="additionalCapabilities")
    private @Nullable Output additionalCapabilities;

    /**
     * @return An `additional_capabilities` block as defined below.
     * 
     */
    public Optional> additionalCapabilities() {
        return Optional.ofNullable(this.additionalCapabilities);
    }

    /**
     * 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.
     * 
     */
    @Import(name="adminPassword")
    private @Nullable Output adminPassword;

    /**
     * @return 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.
     * 
     */
    public Optional> adminPassword() {
        return Optional.ofNullable(this.adminPassword);
    }

    /**
     * One or more `admin_ssh_key` blocks as defined below.
     * 
     * > **Note:** One of either `admin_password` or `admin_ssh_key` must be specified.
     * 
     */
    @Import(name="adminSshKeys")
    private @Nullable Output> adminSshKeys;

    /**
     * @return One or more `admin_ssh_key` blocks as defined below.
     * 
     * > **Note:** One of either `admin_password` or `admin_ssh_key` must be specified.
     * 
     */
    public Optional>> adminSshKeys() {
        return Optional.ofNullable(this.adminSshKeys);
    }

    /**
     * The username of the local administrator on each Virtual Machine Scale Set instance. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="adminUsername", required=true)
    private Output adminUsername;

    /**
     * @return The username of the local administrator on each Virtual Machine Scale Set instance. Changing this forces a new resource to be created.
     * 
     */
    public Output adminUsername() {
        return this.adminUsername;
    }

    /**
     * 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 the [product documentation](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs).
     * 
     */
    @Import(name="automaticInstanceRepair")
    private @Nullable Output automaticInstanceRepair;

    /**
     * @return 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 the [product documentation](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs).
     * 
     */
    public Optional> automaticInstanceRepair() {
        return Optional.ofNullable(this.automaticInstanceRepair);
    }

    /**
     * An `automatic_os_upgrade_policy` block as defined below. This can only be specified when `upgrade_mode` is set to either `Automatic` or `Rolling`.
     * 
     */
    @Import(name="automaticOsUpgradePolicy")
    private @Nullable Output automaticOsUpgradePolicy;

    /**
     * @return An `automatic_os_upgrade_policy` block as defined below. This can only be specified when `upgrade_mode` is set to either `Automatic` or `Rolling`.
     * 
     */
    public Optional> automaticOsUpgradePolicy() {
        return Optional.ofNullable(this.automaticOsUpgradePolicy);
    }

    /**
     * A `boot_diagnostics` block as defined below.
     * 
     */
    @Import(name="bootDiagnostics")
    private @Nullable Output bootDiagnostics;

    /**
     * @return A `boot_diagnostics` block as defined below.
     * 
     */
    public Optional> bootDiagnostics() {
        return Optional.ofNullable(this.bootDiagnostics);
    }

    /**
     * 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.
     * 
     */
    @Import(name="capacityReservationGroupId")
    private @Nullable Output capacityReservationGroupId;

    /**
     * @return 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.
     * 
     */
    public Optional> capacityReservationGroupId() {
        return Optional.ofNullable(this.capacityReservationGroupId);
    }

    /**
     * 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.
     * 
     */
    @Import(name="computerNamePrefix")
    private @Nullable Output computerNamePrefix;

    /**
     * @return 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.
     * 
     */
    public Optional> computerNamePrefix() {
        return Optional.ofNullable(this.computerNamePrefix);
    }

    /**
     * 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.
     * 
     */
    @Import(name="customData")
    private @Nullable Output customData;

    /**
     * @return 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.
     * 
     */
    public Optional> customData() {
        return Optional.ofNullable(this.customData);
    }

    /**
     * One or more `data_disk` blocks as defined below.
     * 
     */
    @Import(name="dataDisks")
    private @Nullable Output> dataDisks;

    /**
     * @return One or more `data_disk` blocks as defined below.
     * 
     */
    public Optional>> dataDisks() {
        return Optional.ofNullable(this.dataDisks);
    }

    /**
     * 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`.
     * 
     */
    @Import(name="disablePasswordAuthentication")
    private @Nullable Output disablePasswordAuthentication;

    /**
     * @return 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`.
     * 
     */
    public Optional> disablePasswordAuthentication() {
        return Optional.ofNullable(this.disablePasswordAuthentication);
    }

    /**
     * Should Virtual Machine Extensions be run on Overprovisioned Virtual Machines in the Scale Set? Defaults to `false`.
     * 
     */
    @Import(name="doNotRunExtensionsOnOverprovisionedMachines")
    private @Nullable Output doNotRunExtensionsOnOverprovisionedMachines;

    /**
     * @return Should Virtual Machine Extensions be run on Overprovisioned Virtual Machines in the Scale Set? Defaults to `false`.
     * 
     */
    public Optional> doNotRunExtensionsOnOverprovisionedMachines() {
        return Optional.ofNullable(this.doNotRunExtensionsOnOverprovisionedMachines);
    }

    /**
     * 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.
     * 
     */
    @Import(name="edgeZone")
    private @Nullable Output edgeZone;

    /**
     * @return 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.
     * 
     */
    public Optional> edgeZone() {
        return Optional.ofNullable(this.edgeZone);
    }

    /**
     * Should all of the disks (including the temp disk) attached to this Virtual Machine be encrypted by enabling Encryption at Host?
     * 
     */
    @Import(name="encryptionAtHostEnabled")
    private @Nullable Output encryptionAtHostEnabled;

    /**
     * @return Should all of the disks (including the temp disk) attached to this Virtual Machine be encrypted by enabling Encryption at Host?
     * 
     */
    public Optional> encryptionAtHostEnabled() {
        return Optional.ofNullable(this.encryptionAtHostEnabled);
    }

    /**
     * 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`.
     * 
     */
    @Import(name="evictionPolicy")
    private @Nullable Output evictionPolicy;

    /**
     * @return 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`.
     * 
     */
    public Optional> evictionPolicy() {
        return Optional.ofNullable(this.evictionPolicy);
    }

    /**
     * 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.
     * 
     */
    @Import(name="extensionOperationsEnabled")
    private @Nullable Output extensionOperationsEnabled;

    /**
     * @return 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.
     * 
     */
    public Optional> extensionOperationsEnabled() {
        return Optional.ofNullable(this.extensionOperationsEnabled);
    }

    /**
     * One or more `extension` blocks as defined below
     * 
     */
    @Import(name="extensions")
    private @Nullable Output> extensions;

    /**
     * @return One or more `extension` blocks as defined below
     * 
     */
    public Optional>> extensions() {
        return Optional.ofNullable(this.extensions);
    }

    /**
     * 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`.
     * 
     */
    @Import(name="extensionsTimeBudget")
    private @Nullable Output extensionsTimeBudget;

    /**
     * @return 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`.
     * 
     */
    public Optional> extensionsTimeBudget() {
        return Optional.ofNullable(this.extensionsTimeBudget);
    }

    /**
     * One or more `gallery_application` blocks as defined below.
     * 
     */
    @Import(name="galleryApplications")
    private @Nullable Output> galleryApplications;

    /**
     * @return One or more `gallery_application` blocks as defined below.
     * 
     */
    public Optional>> galleryApplications() {
        return Optional.ofNullable(this.galleryApplications);
    }

    /**
     * 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`.
     * 
     */
    @Import(name="healthProbeId")
    private @Nullable Output healthProbeId;

    /**
     * @return 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`.
     * 
     */
    public Optional> healthProbeId() {
        return Optional.ofNullable(this.healthProbeId);
    }

    /**
     * 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.
     * 
     */
    @Import(name="hostGroupId")
    private @Nullable Output hostGroupId;

    /**
     * @return 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.
     * 
     */
    public Optional> hostGroupId() {
        return Optional.ofNullable(this.hostGroupId);
    }

    /**
     * An `identity` block as defined below.
     * 
     */
    @Import(name="identity")
    private @Nullable Output identity;

    /**
     * @return An `identity` block as defined below.
     * 
     */
    public Optional> identity() {
        return Optional.ofNullable(this.identity);
    }

    /**
     * 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.
     * 
     */
    @Import(name="instances")
    private @Nullable Output instances;

    /**
     * @return 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.
     * 
     */
    public Optional> instances() {
        return Optional.ofNullable(this.instances);
    }

    /**
     * The Azure location where the Linux Virtual Machine Scale Set should exist. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="location")
    private @Nullable Output location;

    /**
     * @return The Azure location where the Linux Virtual Machine Scale Set should exist. Changing this forces a new resource to be created.
     * 
     */
    public Optional> location() {
        return Optional.ofNullable(this.location);
    }

    /**
     * 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`.
     * 
     */
    @Import(name="maxBidPrice")
    private @Nullable Output maxBidPrice;

    /**
     * @return 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`.
     * 
     */
    public Optional> maxBidPrice() {
        return Optional.ofNullable(this.maxBidPrice);
    }

    /**
     * The name of the Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="name")
    private @Nullable Output name;

    /**
     * @return The name of the Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
     * 
     */
    public Optional> name() {
        return Optional.ofNullable(this.name);
    }

    /**
     * One or more `network_interface` blocks as defined below.
     * 
     */
    @Import(name="networkInterfaces", required=true)
    private Output> networkInterfaces;

    /**
     * @return One or more `network_interface` blocks as defined below.
     * 
     */
    public Output> networkInterfaces() {
        return this.networkInterfaces;
    }

    /**
     * An `os_disk` block as defined below.
     * 
     */
    @Import(name="osDisk", required=true)
    private Output osDisk;

    /**
     * @return An `os_disk` block as defined below.
     * 
     */
    public Output osDisk() {
        return this.osDisk;
    }

    /**
     * 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`.
     * 
     */
    @Import(name="overprovision")
    private @Nullable Output overprovision;

    /**
     * @return 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`.
     * 
     */
    public Optional> overprovision() {
        return Optional.ofNullable(this.overprovision);
    }

    /**
     * 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.
     * 
     */
    @Import(name="plan")
    private @Nullable Output plan;

    /**
     * @return 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.
     * 
     */
    public Optional> plan() {
        return Optional.ofNullable(this.plan);
    }

    /**
     * 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.
     * 
     */
    @Import(name="platformFaultDomainCount")
    private @Nullable Output platformFaultDomainCount;

    /**
     * @return 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.
     * 
     */
    public Optional> platformFaultDomainCount() {
        return Optional.ofNullable(this.platformFaultDomainCount);
    }

    /**
     * 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.
     * 
     */
    @Import(name="priority")
    private @Nullable Output priority;

    /**
     * @return 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.
     * 
     */
    public Optional> priority() {
        return Optional.ofNullable(this.priority);
    }

    /**
     * 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.
     * 
     */
    @Import(name="provisionVmAgent")
    private @Nullable Output provisionVmAgent;

    /**
     * @return 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.
     * 
     */
    public Optional> provisionVmAgent() {
        return Optional.ofNullable(this.provisionVmAgent);
    }

    /**
     * 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.
     * 
     */
    @Import(name="proximityPlacementGroupId")
    private @Nullable Output proximityPlacementGroupId;

    /**
     * @return 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.
     * 
     */
    public Optional> proximityPlacementGroupId() {
        return Optional.ofNullable(this.proximityPlacementGroupId);
    }

    /**
     * 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.
     * 
     */
    @Import(name="resourceGroupName", required=true)
    private Output resourceGroupName;

    /**
     * @return 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.
     * 
     */
    public Output resourceGroupName() {
        return this.resourceGroupName;
    }

    /**
     * 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.
     * 
     */
    @Import(name="rollingUpgradePolicy")
    private @Nullable Output rollingUpgradePolicy;

    /**
     * @return 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.
     * 
     */
    public Optional> rollingUpgradePolicy() {
        return Optional.ofNullable(this.rollingUpgradePolicy);
    }

    /**
     * A `scale_in` block as defined below.
     * 
     */
    @Import(name="scaleIn")
    private @Nullable Output scaleIn;

    /**
     * @return A `scale_in` block as defined below.
     * 
     */
    public Optional> scaleIn() {
        return Optional.ofNullable(this.scaleIn);
    }

    /**
     * One or more `secret` blocks as defined below.
     * 
     */
    @Import(name="secrets")
    private @Nullable Output> secrets;

    /**
     * @return One or more `secret` blocks as defined below.
     * 
     */
    public Optional>> secrets() {
        return Optional.ofNullable(this.secrets);
    }

    /**
     * Specifies whether secure boot should be enabled on the virtual machine. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="secureBootEnabled")
    private @Nullable Output secureBootEnabled;

    /**
     * @return Specifies whether secure boot should be enabled on the virtual machine. Changing this forces a new resource to be created.
     * 
     */
    public Optional> secureBootEnabled() {
        return Optional.ofNullable(this.secureBootEnabled);
    }

    /**
     * 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`.
     * 
     */
    @Import(name="singlePlacementGroup")
    private @Nullable Output singlePlacementGroup;

    /**
     * @return 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`.
     * 
     */
    public Optional> singlePlacementGroup() {
        return Optional.ofNullable(this.singlePlacementGroup);
    }

    /**
     * The Virtual Machine SKU for the Scale Set, such as `Standard_F2`.
     * 
     */
    @Import(name="sku", required=true)
    private Output sku;

    /**
     * @return The Virtual Machine SKU for the Scale Set, such as `Standard_F2`.
     * 
     */
    public Output sku() {
        return this.sku;
    }

    /**
     * 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.
     * 
     */
    @Import(name="sourceImageId")
    private @Nullable Output sourceImageId;

    /**
     * @return 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.
     * 
     */
    public Optional> sourceImageId() {
        return Optional.ofNullable(this.sourceImageId);
    }

    /**
     * A `source_image_reference` block as defined below.
     * 
     * > **Note:** One of either `source_image_id` or `source_image_reference` must be set.
     * 
     */
    @Import(name="sourceImageReference")
    private @Nullable Output sourceImageReference;

    /**
     * @return A `source_image_reference` block as defined below.
     * 
     * > **Note:** One of either `source_image_id` or `source_image_reference` must be set.
     * 
     */
    public Optional> sourceImageReference() {
        return Optional.ofNullable(this.sourceImageReference);
    }

    /**
     * A `spot_restore` block as defined below.
     * 
     */
    @Import(name="spotRestore")
    private @Nullable Output spotRestore;

    /**
     * @return A `spot_restore` block as defined below.
     * 
     */
    public Optional> spotRestore() {
        return Optional.ofNullable(this.spotRestore);
    }

    /**
     * A mapping of tags which should be assigned to this Virtual Machine Scale Set.
     * 
     */
    @Import(name="tags")
    private @Nullable Output> tags;

    /**
     * @return A mapping of tags which should be assigned to this Virtual Machine Scale Set.
     * 
     */
    public Optional>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * A `termination_notification` block as defined below.
     * 
     */
    @Import(name="terminationNotification")
    private @Nullable Output terminationNotification;

    /**
     * @return A `termination_notification` block as defined below.
     * 
     */
    public Optional> terminationNotification() {
        return Optional.ofNullable(this.terminationNotification);
    }

    @Import(name="upgradeMode")
    private @Nullable Output upgradeMode;

    public Optional> upgradeMode() {
        return Optional.ofNullable(this.upgradeMode);
    }

    /**
     * The Base64-Encoded User Data which should be used for this Virtual Machine Scale Set.
     * 
     */
    @Import(name="userData")
    private @Nullable Output userData;

    /**
     * @return The Base64-Encoded User Data which should be used for this Virtual Machine Scale Set.
     * 
     */
    public Optional> userData() {
        return Optional.ofNullable(this.userData);
    }

    /**
     * Specifies whether vTPM should be enabled on the virtual machine. Changing this forces a new resource to be created.
     * 
     */
    @Import(name="vtpmEnabled")
    private @Nullable Output vtpmEnabled;

    /**
     * @return Specifies whether vTPM should be enabled on the virtual machine. Changing this forces a new resource to be created.
     * 
     */
    public Optional> vtpmEnabled() {
        return Optional.ofNullable(this.vtpmEnabled);
    }

    /**
     * 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.
     * 
     */
    @Import(name="zoneBalance")
    private @Nullable Output zoneBalance;

    /**
     * @return 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.
     * 
     */
    public Optional> zoneBalance() {
        return Optional.ofNullable(this.zoneBalance);
    }

    /**
     * Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located.
     * 
     * > **Note:** Updating `zones` to remove an existing zone forces a new Virtual Machine Scale Set to be created.
     * 
     */
    @Import(name="zones")
    private @Nullable Output> zones;

    /**
     * @return Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located.
     * 
     * > **Note:** Updating `zones` to remove an existing zone forces a new Virtual Machine Scale Set to be created.
     * 
     */
    public Optional>> zones() {
        return Optional.ofNullable(this.zones);
    }

    private LinuxVirtualMachineScaleSetArgs() {}

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

    public static Builder builder() {
        return new Builder();
    }
    public static Builder builder(LinuxVirtualMachineScaleSetArgs defaults) {
        return new Builder(defaults);
    }

    public static final class Builder {
        private LinuxVirtualMachineScaleSetArgs $;

        public Builder() {
            $ = new LinuxVirtualMachineScaleSetArgs();
        }

        public Builder(LinuxVirtualMachineScaleSetArgs defaults) {
            $ = new LinuxVirtualMachineScaleSetArgs(Objects.requireNonNull(defaults));
        }

        /**
         * @param additionalCapabilities An `additional_capabilities` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder additionalCapabilities(@Nullable Output additionalCapabilities) {
            $.additionalCapabilities = additionalCapabilities;
            return this;
        }

        /**
         * @param additionalCapabilities An `additional_capabilities` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder additionalCapabilities(LinuxVirtualMachineScaleSetAdditionalCapabilitiesArgs additionalCapabilities) {
            return additionalCapabilities(Output.of(additionalCapabilities));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder adminPassword(@Nullable Output adminPassword) {
            $.adminPassword = adminPassword;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder adminPassword(String adminPassword) {
            return adminPassword(Output.of(adminPassword));
        }

        /**
         * @param adminSshKeys One or more `admin_ssh_key` blocks as defined below.
         * 
         * > **Note:** One of either `admin_password` or `admin_ssh_key` must be specified.
         * 
         * @return builder
         * 
         */
        public Builder adminSshKeys(@Nullable Output> adminSshKeys) {
            $.adminSshKeys = adminSshKeys;
            return this;
        }

        /**
         * @param adminSshKeys One or more `admin_ssh_key` blocks as defined below.
         * 
         * > **Note:** One of either `admin_password` or `admin_ssh_key` must be specified.
         * 
         * @return builder
         * 
         */
        public Builder adminSshKeys(List adminSshKeys) {
            return adminSshKeys(Output.of(adminSshKeys));
        }

        /**
         * @param adminSshKeys One or more `admin_ssh_key` blocks as defined below.
         * 
         * > **Note:** One of either `admin_password` or `admin_ssh_key` must be specified.
         * 
         * @return builder
         * 
         */
        public Builder adminSshKeys(LinuxVirtualMachineScaleSetAdminSshKeyArgs... adminSshKeys) {
            return adminSshKeys(List.of(adminSshKeys));
        }

        /**
         * @param adminUsername The username of the local administrator on each Virtual Machine Scale Set instance. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder adminUsername(Output adminUsername) {
            $.adminUsername = adminUsername;
            return this;
        }

        /**
         * @param adminUsername The username of the local administrator on each Virtual Machine Scale Set instance. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder adminUsername(String adminUsername) {
            return adminUsername(Output.of(adminUsername));
        }

        /**
         * @param 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 the [product documentation](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs).
         * 
         * @return builder
         * 
         */
        public Builder automaticInstanceRepair(@Nullable Output automaticInstanceRepair) {
            $.automaticInstanceRepair = automaticInstanceRepair;
            return this;
        }

        /**
         * @param 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 the [product documentation](https://docs.microsoft.com/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-automatic-instance-repairs).
         * 
         * @return builder
         * 
         */
        public Builder automaticInstanceRepair(LinuxVirtualMachineScaleSetAutomaticInstanceRepairArgs automaticInstanceRepair) {
            return automaticInstanceRepair(Output.of(automaticInstanceRepair));
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder automaticOsUpgradePolicy(@Nullable Output automaticOsUpgradePolicy) {
            $.automaticOsUpgradePolicy = automaticOsUpgradePolicy;
            return this;
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder automaticOsUpgradePolicy(LinuxVirtualMachineScaleSetAutomaticOsUpgradePolicyArgs automaticOsUpgradePolicy) {
            return automaticOsUpgradePolicy(Output.of(automaticOsUpgradePolicy));
        }

        /**
         * @param bootDiagnostics A `boot_diagnostics` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder bootDiagnostics(@Nullable Output bootDiagnostics) {
            $.bootDiagnostics = bootDiagnostics;
            return this;
        }

        /**
         * @param bootDiagnostics A `boot_diagnostics` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder bootDiagnostics(LinuxVirtualMachineScaleSetBootDiagnosticsArgs bootDiagnostics) {
            return bootDiagnostics(Output.of(bootDiagnostics));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder capacityReservationGroupId(@Nullable Output capacityReservationGroupId) {
            $.capacityReservationGroupId = capacityReservationGroupId;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder capacityReservationGroupId(String capacityReservationGroupId) {
            return capacityReservationGroupId(Output.of(capacityReservationGroupId));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder computerNamePrefix(@Nullable Output computerNamePrefix) {
            $.computerNamePrefix = computerNamePrefix;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder computerNamePrefix(String computerNamePrefix) {
            return computerNamePrefix(Output.of(computerNamePrefix));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder customData(@Nullable Output customData) {
            $.customData = customData;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder customData(String customData) {
            return customData(Output.of(customData));
        }

        /**
         * @param dataDisks One or more `data_disk` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder dataDisks(@Nullable Output> dataDisks) {
            $.dataDisks = dataDisks;
            return this;
        }

        /**
         * @param dataDisks One or more `data_disk` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder dataDisks(List dataDisks) {
            return dataDisks(Output.of(dataDisks));
        }

        /**
         * @param dataDisks One or more `data_disk` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder dataDisks(LinuxVirtualMachineScaleSetDataDiskArgs... dataDisks) {
            return dataDisks(List.of(dataDisks));
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder disablePasswordAuthentication(@Nullable Output disablePasswordAuthentication) {
            $.disablePasswordAuthentication = disablePasswordAuthentication;
            return this;
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder disablePasswordAuthentication(Boolean disablePasswordAuthentication) {
            return disablePasswordAuthentication(Output.of(disablePasswordAuthentication));
        }

        /**
         * @param doNotRunExtensionsOnOverprovisionedMachines Should Virtual Machine Extensions be run on Overprovisioned Virtual Machines in the Scale Set? Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder doNotRunExtensionsOnOverprovisionedMachines(@Nullable Output doNotRunExtensionsOnOverprovisionedMachines) {
            $.doNotRunExtensionsOnOverprovisionedMachines = doNotRunExtensionsOnOverprovisionedMachines;
            return this;
        }

        /**
         * @param doNotRunExtensionsOnOverprovisionedMachines Should Virtual Machine Extensions be run on Overprovisioned Virtual Machines in the Scale Set? Defaults to `false`.
         * 
         * @return builder
         * 
         */
        public Builder doNotRunExtensionsOnOverprovisionedMachines(Boolean doNotRunExtensionsOnOverprovisionedMachines) {
            return doNotRunExtensionsOnOverprovisionedMachines(Output.of(doNotRunExtensionsOnOverprovisionedMachines));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder edgeZone(@Nullable Output edgeZone) {
            $.edgeZone = edgeZone;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder edgeZone(String edgeZone) {
            return edgeZone(Output.of(edgeZone));
        }

        /**
         * @param encryptionAtHostEnabled Should all of the disks (including the temp disk) attached to this Virtual Machine be encrypted by enabling Encryption at Host?
         * 
         * @return builder
         * 
         */
        public Builder encryptionAtHostEnabled(@Nullable Output encryptionAtHostEnabled) {
            $.encryptionAtHostEnabled = encryptionAtHostEnabled;
            return this;
        }

        /**
         * @param encryptionAtHostEnabled Should all of the disks (including the temp disk) attached to this Virtual Machine be encrypted by enabling Encryption at Host?
         * 
         * @return builder
         * 
         */
        public Builder encryptionAtHostEnabled(Boolean encryptionAtHostEnabled) {
            return encryptionAtHostEnabled(Output.of(encryptionAtHostEnabled));
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder evictionPolicy(@Nullable Output evictionPolicy) {
            $.evictionPolicy = evictionPolicy;
            return this;
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder evictionPolicy(String evictionPolicy) {
            return evictionPolicy(Output.of(evictionPolicy));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder extensionOperationsEnabled(@Nullable Output extensionOperationsEnabled) {
            $.extensionOperationsEnabled = extensionOperationsEnabled;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder extensionOperationsEnabled(Boolean extensionOperationsEnabled) {
            return extensionOperationsEnabled(Output.of(extensionOperationsEnabled));
        }

        /**
         * @param extensions One or more `extension` blocks as defined below
         * 
         * @return builder
         * 
         */
        public Builder extensions(@Nullable Output> extensions) {
            $.extensions = extensions;
            return this;
        }

        /**
         * @param extensions One or more `extension` blocks as defined below
         * 
         * @return builder
         * 
         */
        public Builder extensions(List extensions) {
            return extensions(Output.of(extensions));
        }

        /**
         * @param extensions One or more `extension` blocks as defined below
         * 
         * @return builder
         * 
         */
        public Builder extensions(LinuxVirtualMachineScaleSetExtensionArgs... extensions) {
            return extensions(List.of(extensions));
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder extensionsTimeBudget(@Nullable Output extensionsTimeBudget) {
            $.extensionsTimeBudget = extensionsTimeBudget;
            return this;
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder extensionsTimeBudget(String extensionsTimeBudget) {
            return extensionsTimeBudget(Output.of(extensionsTimeBudget));
        }

        /**
         * @param galleryApplications One or more `gallery_application` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder galleryApplications(@Nullable Output> galleryApplications) {
            $.galleryApplications = galleryApplications;
            return this;
        }

        /**
         * @param galleryApplications One or more `gallery_application` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder galleryApplications(List galleryApplications) {
            return galleryApplications(Output.of(galleryApplications));
        }

        /**
         * @param galleryApplications One or more `gallery_application` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder galleryApplications(LinuxVirtualMachineScaleSetGalleryApplicationArgs... galleryApplications) {
            return galleryApplications(List.of(galleryApplications));
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder healthProbeId(@Nullable Output healthProbeId) {
            $.healthProbeId = healthProbeId;
            return this;
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder healthProbeId(String healthProbeId) {
            return healthProbeId(Output.of(healthProbeId));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder hostGroupId(@Nullable Output hostGroupId) {
            $.hostGroupId = hostGroupId;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder hostGroupId(String hostGroupId) {
            return hostGroupId(Output.of(hostGroupId));
        }

        /**
         * @param identity An `identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder identity(@Nullable Output identity) {
            $.identity = identity;
            return this;
        }

        /**
         * @param identity An `identity` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder identity(LinuxVirtualMachineScaleSetIdentityArgs identity) {
            return identity(Output.of(identity));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder instances(@Nullable Output instances) {
            $.instances = instances;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder instances(Integer instances) {
            return instances(Output.of(instances));
        }

        /**
         * @param location The Azure location where the Linux Virtual Machine Scale Set should exist. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(@Nullable Output location) {
            $.location = location;
            return this;
        }

        /**
         * @param location The Azure location where the Linux Virtual Machine Scale Set should exist. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder location(String location) {
            return location(Output.of(location));
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder maxBidPrice(@Nullable Output maxBidPrice) {
            $.maxBidPrice = maxBidPrice;
            return this;
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder maxBidPrice(Double maxBidPrice) {
            return maxBidPrice(Output.of(maxBidPrice));
        }

        /**
         * @param name The name of the Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(@Nullable Output name) {
            $.name = name;
            return this;
        }

        /**
         * @param name The name of the Linux Virtual Machine Scale Set. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder name(String name) {
            return name(Output.of(name));
        }

        /**
         * @param networkInterfaces One or more `network_interface` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder networkInterfaces(Output> networkInterfaces) {
            $.networkInterfaces = networkInterfaces;
            return this;
        }

        /**
         * @param networkInterfaces One or more `network_interface` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder networkInterfaces(List networkInterfaces) {
            return networkInterfaces(Output.of(networkInterfaces));
        }

        /**
         * @param networkInterfaces One or more `network_interface` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder networkInterfaces(LinuxVirtualMachineScaleSetNetworkInterfaceArgs... networkInterfaces) {
            return networkInterfaces(List.of(networkInterfaces));
        }

        /**
         * @param osDisk An `os_disk` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder osDisk(Output osDisk) {
            $.osDisk = osDisk;
            return this;
        }

        /**
         * @param osDisk An `os_disk` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder osDisk(LinuxVirtualMachineScaleSetOsDiskArgs osDisk) {
            return osDisk(Output.of(osDisk));
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder overprovision(@Nullable Output overprovision) {
            $.overprovision = overprovision;
            return this;
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder overprovision(Boolean overprovision) {
            return overprovision(Output.of(overprovision));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder plan(@Nullable Output plan) {
            $.plan = plan;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder plan(LinuxVirtualMachineScaleSetPlanArgs plan) {
            return plan(Output.of(plan));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder platformFaultDomainCount(@Nullable Output platformFaultDomainCount) {
            $.platformFaultDomainCount = platformFaultDomainCount;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder platformFaultDomainCount(Integer platformFaultDomainCount) {
            return platformFaultDomainCount(Output.of(platformFaultDomainCount));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder priority(@Nullable Output priority) {
            $.priority = priority;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder priority(String priority) {
            return priority(Output.of(priority));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder provisionVmAgent(@Nullable Output provisionVmAgent) {
            $.provisionVmAgent = provisionVmAgent;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder provisionVmAgent(Boolean provisionVmAgent) {
            return provisionVmAgent(Output.of(provisionVmAgent));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder proximityPlacementGroupId(@Nullable Output proximityPlacementGroupId) {
            $.proximityPlacementGroupId = proximityPlacementGroupId;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder proximityPlacementGroupId(String proximityPlacementGroupId) {
            return proximityPlacementGroupId(Output.of(proximityPlacementGroupId));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(Output resourceGroupName) {
            $.resourceGroupName = resourceGroupName;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(String resourceGroupName) {
            return resourceGroupName(Output.of(resourceGroupName));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder rollingUpgradePolicy(@Nullable Output rollingUpgradePolicy) {
            $.rollingUpgradePolicy = rollingUpgradePolicy;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder rollingUpgradePolicy(LinuxVirtualMachineScaleSetRollingUpgradePolicyArgs rollingUpgradePolicy) {
            return rollingUpgradePolicy(Output.of(rollingUpgradePolicy));
        }

        /**
         * @param scaleIn A `scale_in` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder scaleIn(@Nullable Output scaleIn) {
            $.scaleIn = scaleIn;
            return this;
        }

        /**
         * @param scaleIn A `scale_in` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder scaleIn(LinuxVirtualMachineScaleSetScaleInArgs scaleIn) {
            return scaleIn(Output.of(scaleIn));
        }

        /**
         * @param secrets One or more `secret` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder secrets(@Nullable Output> secrets) {
            $.secrets = secrets;
            return this;
        }

        /**
         * @param secrets One or more `secret` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder secrets(List secrets) {
            return secrets(Output.of(secrets));
        }

        /**
         * @param secrets One or more `secret` blocks as defined below.
         * 
         * @return builder
         * 
         */
        public Builder secrets(LinuxVirtualMachineScaleSetSecretArgs... secrets) {
            return secrets(List.of(secrets));
        }

        /**
         * @param secureBootEnabled Specifies whether secure boot should be enabled on the virtual machine. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder secureBootEnabled(@Nullable Output secureBootEnabled) {
            $.secureBootEnabled = secureBootEnabled;
            return this;
        }

        /**
         * @param secureBootEnabled Specifies whether secure boot should be enabled on the virtual machine. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder secureBootEnabled(Boolean secureBootEnabled) {
            return secureBootEnabled(Output.of(secureBootEnabled));
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder singlePlacementGroup(@Nullable Output singlePlacementGroup) {
            $.singlePlacementGroup = singlePlacementGroup;
            return this;
        }

        /**
         * @param 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`.
         * 
         * @return builder
         * 
         */
        public Builder singlePlacementGroup(Boolean singlePlacementGroup) {
            return singlePlacementGroup(Output.of(singlePlacementGroup));
        }

        /**
         * @param sku The Virtual Machine SKU for the Scale Set, such as `Standard_F2`.
         * 
         * @return builder
         * 
         */
        public Builder sku(Output sku) {
            $.sku = sku;
            return this;
        }

        /**
         * @param sku The Virtual Machine SKU for the Scale Set, such as `Standard_F2`.
         * 
         * @return builder
         * 
         */
        public Builder sku(String sku) {
            return sku(Output.of(sku));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder sourceImageId(@Nullable Output sourceImageId) {
            $.sourceImageId = sourceImageId;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder sourceImageId(String sourceImageId) {
            return sourceImageId(Output.of(sourceImageId));
        }

        /**
         * @param sourceImageReference A `source_image_reference` block as defined below.
         * 
         * > **Note:** One of either `source_image_id` or `source_image_reference` must be set.
         * 
         * @return builder
         * 
         */
        public Builder sourceImageReference(@Nullable Output sourceImageReference) {
            $.sourceImageReference = sourceImageReference;
            return this;
        }

        /**
         * @param sourceImageReference A `source_image_reference` block as defined below.
         * 
         * > **Note:** One of either `source_image_id` or `source_image_reference` must be set.
         * 
         * @return builder
         * 
         */
        public Builder sourceImageReference(LinuxVirtualMachineScaleSetSourceImageReferenceArgs sourceImageReference) {
            return sourceImageReference(Output.of(sourceImageReference));
        }

        /**
         * @param spotRestore A `spot_restore` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder spotRestore(@Nullable Output spotRestore) {
            $.spotRestore = spotRestore;
            return this;
        }

        /**
         * @param spotRestore A `spot_restore` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder spotRestore(LinuxVirtualMachineScaleSetSpotRestoreArgs spotRestore) {
            return spotRestore(Output.of(spotRestore));
        }

        /**
         * @param tags A mapping of tags which should be assigned to this Virtual Machine Scale Set.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags A mapping of tags which should be assigned to this Virtual Machine Scale Set.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param terminationNotification A `termination_notification` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder terminationNotification(@Nullable Output terminationNotification) {
            $.terminationNotification = terminationNotification;
            return this;
        }

        /**
         * @param terminationNotification A `termination_notification` block as defined below.
         * 
         * @return builder
         * 
         */
        public Builder terminationNotification(LinuxVirtualMachineScaleSetTerminationNotificationArgs terminationNotification) {
            return terminationNotification(Output.of(terminationNotification));
        }

        public Builder upgradeMode(@Nullable Output upgradeMode) {
            $.upgradeMode = upgradeMode;
            return this;
        }

        public Builder upgradeMode(String upgradeMode) {
            return upgradeMode(Output.of(upgradeMode));
        }

        /**
         * @param userData The Base64-Encoded User Data which should be used for this Virtual Machine Scale Set.
         * 
         * @return builder
         * 
         */
        public Builder userData(@Nullable Output userData) {
            $.userData = userData;
            return this;
        }

        /**
         * @param userData The Base64-Encoded User Data which should be used for this Virtual Machine Scale Set.
         * 
         * @return builder
         * 
         */
        public Builder userData(String userData) {
            return userData(Output.of(userData));
        }

        /**
         * @param vtpmEnabled Specifies whether vTPM should be enabled on the virtual machine. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder vtpmEnabled(@Nullable Output vtpmEnabled) {
            $.vtpmEnabled = vtpmEnabled;
            return this;
        }

        /**
         * @param vtpmEnabled Specifies whether vTPM should be enabled on the virtual machine. Changing this forces a new resource to be created.
         * 
         * @return builder
         * 
         */
        public Builder vtpmEnabled(Boolean vtpmEnabled) {
            return vtpmEnabled(Output.of(vtpmEnabled));
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder zoneBalance(@Nullable Output zoneBalance) {
            $.zoneBalance = zoneBalance;
            return this;
        }

        /**
         * @param 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.
         * 
         * @return builder
         * 
         */
        public Builder zoneBalance(Boolean zoneBalance) {
            return zoneBalance(Output.of(zoneBalance));
        }

        /**
         * @param zones Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located.
         * 
         * > **Note:** Updating `zones` to remove an existing zone forces a new Virtual Machine Scale Set to be created.
         * 
         * @return builder
         * 
         */
        public Builder zones(@Nullable Output> zones) {
            $.zones = zones;
            return this;
        }

        /**
         * @param zones Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located.
         * 
         * > **Note:** Updating `zones` to remove an existing zone forces a new Virtual Machine Scale Set to be created.
         * 
         * @return builder
         * 
         */
        public Builder zones(List zones) {
            return zones(Output.of(zones));
        }

        /**
         * @param zones Specifies a list of Availability Zones in which this Linux Virtual Machine Scale Set should be located.
         * 
         * > **Note:** Updating `zones` to remove an existing zone forces a new Virtual Machine Scale Set to be created.
         * 
         * @return builder
         * 
         */
        public Builder zones(String... zones) {
            return zones(List.of(zones));
        }

        public LinuxVirtualMachineScaleSetArgs build() {
            if ($.adminUsername == null) {
                throw new MissingRequiredPropertyException("LinuxVirtualMachineScaleSetArgs", "adminUsername");
            }
            if ($.networkInterfaces == null) {
                throw new MissingRequiredPropertyException("LinuxVirtualMachineScaleSetArgs", "networkInterfaces");
            }
            if ($.osDisk == null) {
                throw new MissingRequiredPropertyException("LinuxVirtualMachineScaleSetArgs", "osDisk");
            }
            if ($.resourceGroupName == null) {
                throw new MissingRequiredPropertyException("LinuxVirtualMachineScaleSetArgs", "resourceGroupName");
            }
            if ($.sku == null) {
                throw new MissingRequiredPropertyException("LinuxVirtualMachineScaleSetArgs", "sku");
            }
            return $;
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy