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

com.pulumi.azurenative.containerservice.AgentPoolArgs Maven / Gradle / Ivy

There is a newer version: 2.78.0
Show newest version
// *** 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.azurenative.containerservice;

import com.pulumi.azurenative.containerservice.enums.AgentPoolMode;
import com.pulumi.azurenative.containerservice.enums.AgentPoolType;
import com.pulumi.azurenative.containerservice.enums.GPUInstanceProfile;
import com.pulumi.azurenative.containerservice.enums.KubeletDiskType;
import com.pulumi.azurenative.containerservice.enums.OSDiskType;
import com.pulumi.azurenative.containerservice.enums.OSSKU;
import com.pulumi.azurenative.containerservice.enums.OSType;
import com.pulumi.azurenative.containerservice.enums.ScaleDownMode;
import com.pulumi.azurenative.containerservice.enums.ScaleSetEvictionPolicy;
import com.pulumi.azurenative.containerservice.enums.ScaleSetPriority;
import com.pulumi.azurenative.containerservice.enums.WorkloadRuntime;
import com.pulumi.azurenative.containerservice.inputs.AgentPoolUpgradeSettingsArgs;
import com.pulumi.azurenative.containerservice.inputs.CreationDataArgs;
import com.pulumi.azurenative.containerservice.inputs.KubeletConfigArgs;
import com.pulumi.azurenative.containerservice.inputs.LinuxOSConfigArgs;
import com.pulumi.azurenative.containerservice.inputs.PowerStateArgs;
import com.pulumi.core.Either;
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 AgentPoolArgs extends com.pulumi.resources.ResourceArgs {

    public static final AgentPoolArgs Empty = new AgentPoolArgs();

    /**
     * The name of the agent pool.
     * 
     */
    @Import(name="agentPoolName")
    private @Nullable Output agentPoolName;

    /**
     * @return The name of the agent pool.
     * 
     */
    public Optional> agentPoolName() {
        return Optional.ofNullable(this.agentPoolName);
    }

    /**
     * The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'.
     * 
     */
    @Import(name="availabilityZones")
    private @Nullable Output> availabilityZones;

    /**
     * @return The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'.
     * 
     */
    public Optional>> availabilityZones() {
        return Optional.ofNullable(this.availabilityZones);
    }

    /**
     * Number of agents (VMs) to host docker containers. Allowed values must be in the range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for system pools. The default value is 1.
     * 
     */
    @Import(name="count")
    private @Nullable Output count;

    /**
     * @return Number of agents (VMs) to host docker containers. Allowed values must be in the range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for system pools. The default value is 1.
     * 
     */
    public Optional> count() {
        return Optional.ofNullable(this.count);
    }

    /**
     * CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot.
     * 
     */
    @Import(name="creationData")
    private @Nullable Output creationData;

    /**
     * @return CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot.
     * 
     */
    public Optional> creationData() {
        return Optional.ofNullable(this.creationData);
    }

    /**
     * Whether to enable auto-scaler
     * 
     */
    @Import(name="enableAutoScaling")
    private @Nullable Output enableAutoScaling;

    /**
     * @return Whether to enable auto-scaler
     * 
     */
    public Optional> enableAutoScaling() {
        return Optional.ofNullable(this.enableAutoScaling);
    }

    /**
     * This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption
     * 
     */
    @Import(name="enableEncryptionAtHost")
    private @Nullable Output enableEncryptionAtHost;

    /**
     * @return This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption
     * 
     */
    public Optional> enableEncryptionAtHost() {
        return Optional.ofNullable(this.enableEncryptionAtHost);
    }

    /**
     * See [Add a FIPS-enabled node pool](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool-preview) for more details.
     * 
     */
    @Import(name="enableFIPS")
    private @Nullable Output enableFIPS;

    /**
     * @return See [Add a FIPS-enabled node pool](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool-preview) for more details.
     * 
     */
    public Optional> enableFIPS() {
        return Optional.ofNullable(this.enableFIPS);
    }

    /**
     * Some scenarios may require nodes in a node pool to receive their own dedicated public IP addresses. A common scenario is for gaming workloads, where a console needs to make a direct connection to a cloud virtual machine to minimize hops. For more information see [assigning a public IP per node](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools). The default is false.
     * 
     */
    @Import(name="enableNodePublicIP")
    private @Nullable Output enableNodePublicIP;

    /**
     * @return Some scenarios may require nodes in a node pool to receive their own dedicated public IP addresses. A common scenario is for gaming workloads, where a console needs to make a direct connection to a cloud virtual machine to minimize hops. For more information see [assigning a public IP per node](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools). The default is false.
     * 
     */
    public Optional> enableNodePublicIP() {
        return Optional.ofNullable(this.enableNodePublicIP);
    }

    /**
     * Whether to enable UltraSSD
     * 
     */
    @Import(name="enableUltraSSD")
    private @Nullable Output enableUltraSSD;

    /**
     * @return Whether to enable UltraSSD
     * 
     */
    public Optional> enableUltraSSD() {
        return Optional.ofNullable(this.enableUltraSSD);
    }

    /**
     * GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU.
     * 
     */
    @Import(name="gpuInstanceProfile")
    private @Nullable Output> gpuInstanceProfile;

    /**
     * @return GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU.
     * 
     */
    public Optional>> gpuInstanceProfile() {
        return Optional.ofNullable(this.gpuInstanceProfile);
    }

    /**
     * This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. For more information see [Azure dedicated hosts](https://docs.microsoft.com/azure/virtual-machines/dedicated-hosts).
     * 
     */
    @Import(name="hostGroupID")
    private @Nullable Output hostGroupID;

    /**
     * @return This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. For more information see [Azure dedicated hosts](https://docs.microsoft.com/azure/virtual-machines/dedicated-hosts).
     * 
     */
    public Optional> hostGroupID() {
        return Optional.ofNullable(this.hostGroupID);
    }

    /**
     * The Kubelet configuration on the agent pool nodes.
     * 
     */
    @Import(name="kubeletConfig")
    private @Nullable Output kubeletConfig;

    /**
     * @return The Kubelet configuration on the agent pool nodes.
     * 
     */
    public Optional> kubeletConfig() {
        return Optional.ofNullable(this.kubeletConfig);
    }

    /**
     * Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage.
     * 
     */
    @Import(name="kubeletDiskType")
    private @Nullable Output> kubeletDiskType;

    /**
     * @return Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage.
     * 
     */
    public Optional>> kubeletDiskType() {
        return Optional.ofNullable(this.kubeletDiskType);
    }

    /**
     * The OS configuration of Linux agent nodes.
     * 
     */
    @Import(name="linuxOSConfig")
    private @Nullable Output linuxOSConfig;

    /**
     * @return The OS configuration of Linux agent nodes.
     * 
     */
    public Optional> linuxOSConfig() {
        return Optional.ofNullable(this.linuxOSConfig);
    }

    /**
     * The maximum number of nodes for auto-scaling
     * 
     */
    @Import(name="maxCount")
    private @Nullable Output maxCount;

    /**
     * @return The maximum number of nodes for auto-scaling
     * 
     */
    public Optional> maxCount() {
        return Optional.ofNullable(this.maxCount);
    }

    /**
     * The maximum number of pods that can run on a node.
     * 
     */
    @Import(name="maxPods")
    private @Nullable Output maxPods;

    /**
     * @return The maximum number of pods that can run on a node.
     * 
     */
    public Optional> maxPods() {
        return Optional.ofNullable(this.maxPods);
    }

    /**
     * The minimum number of nodes for auto-scaling
     * 
     */
    @Import(name="minCount")
    private @Nullable Output minCount;

    /**
     * @return The minimum number of nodes for auto-scaling
     * 
     */
    public Optional> minCount() {
        return Optional.ofNullable(this.minCount);
    }

    /**
     * A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools
     * 
     */
    @Import(name="mode")
    private @Nullable Output> mode;

    /**
     * @return A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools
     * 
     */
    public Optional>> mode() {
        return Optional.ofNullable(this.mode);
    }

    /**
     * The node labels to be persisted across all nodes in agent pool.
     * 
     */
    @Import(name="nodeLabels")
    private @Nullable Output> nodeLabels;

    /**
     * @return The node labels to be persisted across all nodes in agent pool.
     * 
     */
    public Optional>> nodeLabels() {
        return Optional.ofNullable(this.nodeLabels);
    }

    /**
     * This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}
     * 
     */
    @Import(name="nodePublicIPPrefixID")
    private @Nullable Output nodePublicIPPrefixID;

    /**
     * @return This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}
     * 
     */
    public Optional> nodePublicIPPrefixID() {
        return Optional.ofNullable(this.nodePublicIPPrefixID);
    }

    /**
     * The taints added to new nodes during node pool create and scale. For example, key=value:NoSchedule.
     * 
     */
    @Import(name="nodeTaints")
    private @Nullable Output> nodeTaints;

    /**
     * @return The taints added to new nodes during node pool create and scale. For example, key=value:NoSchedule.
     * 
     */
    public Optional>> nodeTaints() {
        return Optional.ofNullable(this.nodeTaints);
    }

    /**
     * Both patch version <major.minor.patch> (e.g. 1.20.13) and <major.minor> (e.g. 1.20) are supported. When <major.minor> is specified, the latest supported GA patch version is chosen automatically. Updating the cluster with the same <major.minor> once it has been created (e.g. 1.14.x -> 1.14) will not trigger an upgrade, even if a newer patch version is available. As a best practice, you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node pool version must have the same major version as the control plane. The node pool minor version must be within two minor versions of the control plane version. The node pool version cannot be greater than the control plane version. For more information see [upgrading a node pool](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#upgrade-a-node-pool).
     * 
     */
    @Import(name="orchestratorVersion")
    private @Nullable Output orchestratorVersion;

    /**
     * @return Both patch version <major.minor.patch> (e.g. 1.20.13) and <major.minor> (e.g. 1.20) are supported. When <major.minor> is specified, the latest supported GA patch version is chosen automatically. Updating the cluster with the same <major.minor> once it has been created (e.g. 1.14.x -> 1.14) will not trigger an upgrade, even if a newer patch version is available. As a best practice, you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node pool version must have the same major version as the control plane. The node pool minor version must be within two minor versions of the control plane version. The node pool version cannot be greater than the control plane version. For more information see [upgrading a node pool](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#upgrade-a-node-pool).
     * 
     */
    public Optional> orchestratorVersion() {
        return Optional.ofNullable(this.orchestratorVersion);
    }

    /**
     * OS Disk Size in GB to be used to specify the disk size for every machine in the master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified.
     * 
     */
    @Import(name="osDiskSizeGB")
    private @Nullable Output osDiskSizeGB;

    /**
     * @return OS Disk Size in GB to be used to specify the disk size for every machine in the master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified.
     * 
     */
    public Optional> osDiskSizeGB() {
        return Optional.ofNullable(this.osDiskSizeGB);
    }

    /**
     * The default is 'Ephemeral' if the VM supports it and has a cache disk larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed after creation. For more information see [Ephemeral OS](https://docs.microsoft.com/azure/aks/cluster-configuration#ephemeral-os).
     * 
     */
    @Import(name="osDiskType")
    private @Nullable Output> osDiskType;

    /**
     * @return The default is 'Ephemeral' if the VM supports it and has a cache disk larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed after creation. For more information see [Ephemeral OS](https://docs.microsoft.com/azure/aks/cluster-configuration#ephemeral-os).
     * 
     */
    public Optional>> osDiskType() {
        return Optional.ofNullable(this.osDiskType);
    }

    /**
     * Specifies the OS SKU used by the agent pool. The default is Ubuntu if OSType is Linux. The default is Windows2019 when Kubernetes <= 1.24 or Windows2022 when Kubernetes >= 1.25 if OSType is Windows.
     * 
     */
    @Import(name="osSKU")
    private @Nullable Output> osSKU;

    /**
     * @return Specifies the OS SKU used by the agent pool. The default is Ubuntu if OSType is Linux. The default is Windows2019 when Kubernetes <= 1.24 or Windows2022 when Kubernetes >= 1.25 if OSType is Windows.
     * 
     */
    public Optional>> osSKU() {
        return Optional.ofNullable(this.osSKU);
    }

    /**
     * The operating system type. The default is Linux.
     * 
     */
    @Import(name="osType")
    private @Nullable Output> osType;

    /**
     * @return The operating system type. The default is Linux.
     * 
     */
    public Optional>> osType() {
        return Optional.ofNullable(this.osType);
    }

    /**
     * If omitted, pod IPs are statically assigned on the node subnet (see vnetSubnetID for more details). This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
     * 
     */
    @Import(name="podSubnetID")
    private @Nullable Output podSubnetID;

    /**
     * @return If omitted, pod IPs are statically assigned on the node subnet (see vnetSubnetID for more details). This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
     * 
     */
    public Optional> podSubnetID() {
        return Optional.ofNullable(this.podSubnetID);
    }

    /**
     * When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded
     * 
     */
    @Import(name="powerState")
    private @Nullable Output powerState;

    /**
     * @return When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded
     * 
     */
    public Optional> powerState() {
        return Optional.ofNullable(this.powerState);
    }

    /**
     * The ID for Proximity Placement Group.
     * 
     */
    @Import(name="proximityPlacementGroupID")
    private @Nullable Output proximityPlacementGroupID;

    /**
     * @return The ID for Proximity Placement Group.
     * 
     */
    public Optional> proximityPlacementGroupID() {
        return Optional.ofNullable(this.proximityPlacementGroupID);
    }

    /**
     * The name of the resource group. The name is case insensitive.
     * 
     */
    @Import(name="resourceGroupName", required=true)
    private Output resourceGroupName;

    /**
     * @return The name of the resource group. The name is case insensitive.
     * 
     */
    public Output resourceGroupName() {
        return this.resourceGroupName;
    }

    /**
     * The name of the managed cluster resource.
     * 
     */
    @Import(name="resourceName", required=true)
    private Output resourceName;

    /**
     * @return The name of the managed cluster resource.
     * 
     */
    public Output resourceName() {
        return this.resourceName;
    }

    /**
     * This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete.
     * 
     */
    @Import(name="scaleDownMode")
    private @Nullable Output> scaleDownMode;

    /**
     * @return This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete.
     * 
     */
    public Optional>> scaleDownMode() {
        return Optional.ofNullable(this.scaleDownMode);
    }

    /**
     * This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'.
     * 
     */
    @Import(name="scaleSetEvictionPolicy")
    private @Nullable Output> scaleSetEvictionPolicy;

    /**
     * @return This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'.
     * 
     */
    public Optional>> scaleSetEvictionPolicy() {
        return Optional.ofNullable(this.scaleSetEvictionPolicy);
    }

    /**
     * The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'.
     * 
     */
    @Import(name="scaleSetPriority")
    private @Nullable Output> scaleSetPriority;

    /**
     * @return The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'.
     * 
     */
    public Optional>> scaleSetPriority() {
        return Optional.ofNullable(this.scaleSetPriority);
    }

    /**
     * Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see [spot VMs pricing](https://docs.microsoft.com/azure/virtual-machines/spot-vms#pricing)
     * 
     */
    @Import(name="spotMaxPrice")
    private @Nullable Output spotMaxPrice;

    /**
     * @return Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see [spot VMs pricing](https://docs.microsoft.com/azure/virtual-machines/spot-vms#pricing)
     * 
     */
    public Optional> spotMaxPrice() {
        return Optional.ofNullable(this.spotMaxPrice);
    }

    /**
     * The tags to be persisted on the agent pool virtual machine scale set.
     * 
     */
    @Import(name="tags")
    private @Nullable Output> tags;

    /**
     * @return The tags to be persisted on the agent pool virtual machine scale set.
     * 
     */
    public Optional>> tags() {
        return Optional.ofNullable(this.tags);
    }

    /**
     * The type of Agent Pool.
     * 
     */
    @Import(name="type")
    private @Nullable Output> type;

    /**
     * @return The type of Agent Pool.
     * 
     */
    public Optional>> type() {
        return Optional.ofNullable(this.type);
    }

    /**
     * Settings for upgrading the agentpool
     * 
     */
    @Import(name="upgradeSettings")
    private @Nullable Output upgradeSettings;

    /**
     * @return Settings for upgrading the agentpool
     * 
     */
    public Optional> upgradeSettings() {
        return Optional.ofNullable(this.upgradeSettings);
    }

    /**
     * VM size availability varies by region. If a node contains insufficient compute resources (memory, cpu, etc) pods might fail to run correctly. For more details on restricted VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions
     * 
     */
    @Import(name="vmSize")
    private @Nullable Output vmSize;

    /**
     * @return VM size availability varies by region. If a node contains insufficient compute resources (memory, cpu, etc) pods might fail to run correctly. For more details on restricted VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions
     * 
     */
    public Optional> vmSize() {
        return Optional.ofNullable(this.vmSize);
    }

    /**
     * If this is not specified, a VNET and subnet will be generated and used. If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to just nodes. This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
     * 
     */
    @Import(name="vnetSubnetID")
    private @Nullable Output vnetSubnetID;

    /**
     * @return If this is not specified, a VNET and subnet will be generated and used. If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to just nodes. This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
     * 
     */
    public Optional> vnetSubnetID() {
        return Optional.ofNullable(this.vnetSubnetID);
    }

    /**
     * Determines the type of workload a node can run.
     * 
     */
    @Import(name="workloadRuntime")
    private @Nullable Output> workloadRuntime;

    /**
     * @return Determines the type of workload a node can run.
     * 
     */
    public Optional>> workloadRuntime() {
        return Optional.ofNullable(this.workloadRuntime);
    }

    private AgentPoolArgs() {}

    private AgentPoolArgs(AgentPoolArgs $) {
        this.agentPoolName = $.agentPoolName;
        this.availabilityZones = $.availabilityZones;
        this.count = $.count;
        this.creationData = $.creationData;
        this.enableAutoScaling = $.enableAutoScaling;
        this.enableEncryptionAtHost = $.enableEncryptionAtHost;
        this.enableFIPS = $.enableFIPS;
        this.enableNodePublicIP = $.enableNodePublicIP;
        this.enableUltraSSD = $.enableUltraSSD;
        this.gpuInstanceProfile = $.gpuInstanceProfile;
        this.hostGroupID = $.hostGroupID;
        this.kubeletConfig = $.kubeletConfig;
        this.kubeletDiskType = $.kubeletDiskType;
        this.linuxOSConfig = $.linuxOSConfig;
        this.maxCount = $.maxCount;
        this.maxPods = $.maxPods;
        this.minCount = $.minCount;
        this.mode = $.mode;
        this.nodeLabels = $.nodeLabels;
        this.nodePublicIPPrefixID = $.nodePublicIPPrefixID;
        this.nodeTaints = $.nodeTaints;
        this.orchestratorVersion = $.orchestratorVersion;
        this.osDiskSizeGB = $.osDiskSizeGB;
        this.osDiskType = $.osDiskType;
        this.osSKU = $.osSKU;
        this.osType = $.osType;
        this.podSubnetID = $.podSubnetID;
        this.powerState = $.powerState;
        this.proximityPlacementGroupID = $.proximityPlacementGroupID;
        this.resourceGroupName = $.resourceGroupName;
        this.resourceName = $.resourceName;
        this.scaleDownMode = $.scaleDownMode;
        this.scaleSetEvictionPolicy = $.scaleSetEvictionPolicy;
        this.scaleSetPriority = $.scaleSetPriority;
        this.spotMaxPrice = $.spotMaxPrice;
        this.tags = $.tags;
        this.type = $.type;
        this.upgradeSettings = $.upgradeSettings;
        this.vmSize = $.vmSize;
        this.vnetSubnetID = $.vnetSubnetID;
        this.workloadRuntime = $.workloadRuntime;
    }

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

    public static final class Builder {
        private AgentPoolArgs $;

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

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

        /**
         * @param agentPoolName The name of the agent pool.
         * 
         * @return builder
         * 
         */
        public Builder agentPoolName(@Nullable Output agentPoolName) {
            $.agentPoolName = agentPoolName;
            return this;
        }

        /**
         * @param agentPoolName The name of the agent pool.
         * 
         * @return builder
         * 
         */
        public Builder agentPoolName(String agentPoolName) {
            return agentPoolName(Output.of(agentPoolName));
        }

        /**
         * @param availabilityZones The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'.
         * 
         * @return builder
         * 
         */
        public Builder availabilityZones(@Nullable Output> availabilityZones) {
            $.availabilityZones = availabilityZones;
            return this;
        }

        /**
         * @param availabilityZones The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'.
         * 
         * @return builder
         * 
         */
        public Builder availabilityZones(List availabilityZones) {
            return availabilityZones(Output.of(availabilityZones));
        }

        /**
         * @param availabilityZones The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'.
         * 
         * @return builder
         * 
         */
        public Builder availabilityZones(String... availabilityZones) {
            return availabilityZones(List.of(availabilityZones));
        }

        /**
         * @param count Number of agents (VMs) to host docker containers. Allowed values must be in the range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for system pools. The default value is 1.
         * 
         * @return builder
         * 
         */
        public Builder count(@Nullable Output count) {
            $.count = count;
            return this;
        }

        /**
         * @param count Number of agents (VMs) to host docker containers. Allowed values must be in the range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for system pools. The default value is 1.
         * 
         * @return builder
         * 
         */
        public Builder count(Integer count) {
            return count(Output.of(count));
        }

        /**
         * @param creationData CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot.
         * 
         * @return builder
         * 
         */
        public Builder creationData(@Nullable Output creationData) {
            $.creationData = creationData;
            return this;
        }

        /**
         * @param creationData CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot.
         * 
         * @return builder
         * 
         */
        public Builder creationData(CreationDataArgs creationData) {
            return creationData(Output.of(creationData));
        }

        /**
         * @param enableAutoScaling Whether to enable auto-scaler
         * 
         * @return builder
         * 
         */
        public Builder enableAutoScaling(@Nullable Output enableAutoScaling) {
            $.enableAutoScaling = enableAutoScaling;
            return this;
        }

        /**
         * @param enableAutoScaling Whether to enable auto-scaler
         * 
         * @return builder
         * 
         */
        public Builder enableAutoScaling(Boolean enableAutoScaling) {
            return enableAutoScaling(Output.of(enableAutoScaling));
        }

        /**
         * @param enableEncryptionAtHost This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption
         * 
         * @return builder
         * 
         */
        public Builder enableEncryptionAtHost(@Nullable Output enableEncryptionAtHost) {
            $.enableEncryptionAtHost = enableEncryptionAtHost;
            return this;
        }

        /**
         * @param enableEncryptionAtHost This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption
         * 
         * @return builder
         * 
         */
        public Builder enableEncryptionAtHost(Boolean enableEncryptionAtHost) {
            return enableEncryptionAtHost(Output.of(enableEncryptionAtHost));
        }

        /**
         * @param enableFIPS See [Add a FIPS-enabled node pool](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool-preview) for more details.
         * 
         * @return builder
         * 
         */
        public Builder enableFIPS(@Nullable Output enableFIPS) {
            $.enableFIPS = enableFIPS;
            return this;
        }

        /**
         * @param enableFIPS See [Add a FIPS-enabled node pool](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool-preview) for more details.
         * 
         * @return builder
         * 
         */
        public Builder enableFIPS(Boolean enableFIPS) {
            return enableFIPS(Output.of(enableFIPS));
        }

        /**
         * @param enableNodePublicIP Some scenarios may require nodes in a node pool to receive their own dedicated public IP addresses. A common scenario is for gaming workloads, where a console needs to make a direct connection to a cloud virtual machine to minimize hops. For more information see [assigning a public IP per node](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools). The default is false.
         * 
         * @return builder
         * 
         */
        public Builder enableNodePublicIP(@Nullable Output enableNodePublicIP) {
            $.enableNodePublicIP = enableNodePublicIP;
            return this;
        }

        /**
         * @param enableNodePublicIP Some scenarios may require nodes in a node pool to receive their own dedicated public IP addresses. A common scenario is for gaming workloads, where a console needs to make a direct connection to a cloud virtual machine to minimize hops. For more information see [assigning a public IP per node](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#assign-a-public-ip-per-node-for-your-node-pools). The default is false.
         * 
         * @return builder
         * 
         */
        public Builder enableNodePublicIP(Boolean enableNodePublicIP) {
            return enableNodePublicIP(Output.of(enableNodePublicIP));
        }

        /**
         * @param enableUltraSSD Whether to enable UltraSSD
         * 
         * @return builder
         * 
         */
        public Builder enableUltraSSD(@Nullable Output enableUltraSSD) {
            $.enableUltraSSD = enableUltraSSD;
            return this;
        }

        /**
         * @param enableUltraSSD Whether to enable UltraSSD
         * 
         * @return builder
         * 
         */
        public Builder enableUltraSSD(Boolean enableUltraSSD) {
            return enableUltraSSD(Output.of(enableUltraSSD));
        }

        /**
         * @param gpuInstanceProfile GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU.
         * 
         * @return builder
         * 
         */
        public Builder gpuInstanceProfile(@Nullable Output> gpuInstanceProfile) {
            $.gpuInstanceProfile = gpuInstanceProfile;
            return this;
        }

        /**
         * @param gpuInstanceProfile GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU.
         * 
         * @return builder
         * 
         */
        public Builder gpuInstanceProfile(Either gpuInstanceProfile) {
            return gpuInstanceProfile(Output.of(gpuInstanceProfile));
        }

        /**
         * @param gpuInstanceProfile GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU.
         * 
         * @return builder
         * 
         */
        public Builder gpuInstanceProfile(String gpuInstanceProfile) {
            return gpuInstanceProfile(Either.ofLeft(gpuInstanceProfile));
        }

        /**
         * @param gpuInstanceProfile GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU.
         * 
         * @return builder
         * 
         */
        public Builder gpuInstanceProfile(GPUInstanceProfile gpuInstanceProfile) {
            return gpuInstanceProfile(Either.ofRight(gpuInstanceProfile));
        }

        /**
         * @param hostGroupID This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. For more information see [Azure dedicated hosts](https://docs.microsoft.com/azure/virtual-machines/dedicated-hosts).
         * 
         * @return builder
         * 
         */
        public Builder hostGroupID(@Nullable Output hostGroupID) {
            $.hostGroupID = hostGroupID;
            return this;
        }

        /**
         * @param hostGroupID This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. For more information see [Azure dedicated hosts](https://docs.microsoft.com/azure/virtual-machines/dedicated-hosts).
         * 
         * @return builder
         * 
         */
        public Builder hostGroupID(String hostGroupID) {
            return hostGroupID(Output.of(hostGroupID));
        }

        /**
         * @param kubeletConfig The Kubelet configuration on the agent pool nodes.
         * 
         * @return builder
         * 
         */
        public Builder kubeletConfig(@Nullable Output kubeletConfig) {
            $.kubeletConfig = kubeletConfig;
            return this;
        }

        /**
         * @param kubeletConfig The Kubelet configuration on the agent pool nodes.
         * 
         * @return builder
         * 
         */
        public Builder kubeletConfig(KubeletConfigArgs kubeletConfig) {
            return kubeletConfig(Output.of(kubeletConfig));
        }

        /**
         * @param kubeletDiskType Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage.
         * 
         * @return builder
         * 
         */
        public Builder kubeletDiskType(@Nullable Output> kubeletDiskType) {
            $.kubeletDiskType = kubeletDiskType;
            return this;
        }

        /**
         * @param kubeletDiskType Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage.
         * 
         * @return builder
         * 
         */
        public Builder kubeletDiskType(Either kubeletDiskType) {
            return kubeletDiskType(Output.of(kubeletDiskType));
        }

        /**
         * @param kubeletDiskType Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage.
         * 
         * @return builder
         * 
         */
        public Builder kubeletDiskType(String kubeletDiskType) {
            return kubeletDiskType(Either.ofLeft(kubeletDiskType));
        }

        /**
         * @param kubeletDiskType Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage.
         * 
         * @return builder
         * 
         */
        public Builder kubeletDiskType(KubeletDiskType kubeletDiskType) {
            return kubeletDiskType(Either.ofRight(kubeletDiskType));
        }

        /**
         * @param linuxOSConfig The OS configuration of Linux agent nodes.
         * 
         * @return builder
         * 
         */
        public Builder linuxOSConfig(@Nullable Output linuxOSConfig) {
            $.linuxOSConfig = linuxOSConfig;
            return this;
        }

        /**
         * @param linuxOSConfig The OS configuration of Linux agent nodes.
         * 
         * @return builder
         * 
         */
        public Builder linuxOSConfig(LinuxOSConfigArgs linuxOSConfig) {
            return linuxOSConfig(Output.of(linuxOSConfig));
        }

        /**
         * @param maxCount The maximum number of nodes for auto-scaling
         * 
         * @return builder
         * 
         */
        public Builder maxCount(@Nullable Output maxCount) {
            $.maxCount = maxCount;
            return this;
        }

        /**
         * @param maxCount The maximum number of nodes for auto-scaling
         * 
         * @return builder
         * 
         */
        public Builder maxCount(Integer maxCount) {
            return maxCount(Output.of(maxCount));
        }

        /**
         * @param maxPods The maximum number of pods that can run on a node.
         * 
         * @return builder
         * 
         */
        public Builder maxPods(@Nullable Output maxPods) {
            $.maxPods = maxPods;
            return this;
        }

        /**
         * @param maxPods The maximum number of pods that can run on a node.
         * 
         * @return builder
         * 
         */
        public Builder maxPods(Integer maxPods) {
            return maxPods(Output.of(maxPods));
        }

        /**
         * @param minCount The minimum number of nodes for auto-scaling
         * 
         * @return builder
         * 
         */
        public Builder minCount(@Nullable Output minCount) {
            $.minCount = minCount;
            return this;
        }

        /**
         * @param minCount The minimum number of nodes for auto-scaling
         * 
         * @return builder
         * 
         */
        public Builder minCount(Integer minCount) {
            return minCount(Output.of(minCount));
        }

        /**
         * @param mode A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools
         * 
         * @return builder
         * 
         */
        public Builder mode(@Nullable Output> mode) {
            $.mode = mode;
            return this;
        }

        /**
         * @param mode A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools
         * 
         * @return builder
         * 
         */
        public Builder mode(Either mode) {
            return mode(Output.of(mode));
        }

        /**
         * @param mode A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools
         * 
         * @return builder
         * 
         */
        public Builder mode(String mode) {
            return mode(Either.ofLeft(mode));
        }

        /**
         * @param mode A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools
         * 
         * @return builder
         * 
         */
        public Builder mode(AgentPoolMode mode) {
            return mode(Either.ofRight(mode));
        }

        /**
         * @param nodeLabels The node labels to be persisted across all nodes in agent pool.
         * 
         * @return builder
         * 
         */
        public Builder nodeLabels(@Nullable Output> nodeLabels) {
            $.nodeLabels = nodeLabels;
            return this;
        }

        /**
         * @param nodeLabels The node labels to be persisted across all nodes in agent pool.
         * 
         * @return builder
         * 
         */
        public Builder nodeLabels(Map nodeLabels) {
            return nodeLabels(Output.of(nodeLabels));
        }

        /**
         * @param nodePublicIPPrefixID This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}
         * 
         * @return builder
         * 
         */
        public Builder nodePublicIPPrefixID(@Nullable Output nodePublicIPPrefixID) {
            $.nodePublicIPPrefixID = nodePublicIPPrefixID;
            return this;
        }

        /**
         * @param nodePublicIPPrefixID This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}
         * 
         * @return builder
         * 
         */
        public Builder nodePublicIPPrefixID(String nodePublicIPPrefixID) {
            return nodePublicIPPrefixID(Output.of(nodePublicIPPrefixID));
        }

        /**
         * @param nodeTaints The taints added to new nodes during node pool create and scale. For example, key=value:NoSchedule.
         * 
         * @return builder
         * 
         */
        public Builder nodeTaints(@Nullable Output> nodeTaints) {
            $.nodeTaints = nodeTaints;
            return this;
        }

        /**
         * @param nodeTaints The taints added to new nodes during node pool create and scale. For example, key=value:NoSchedule.
         * 
         * @return builder
         * 
         */
        public Builder nodeTaints(List nodeTaints) {
            return nodeTaints(Output.of(nodeTaints));
        }

        /**
         * @param nodeTaints The taints added to new nodes during node pool create and scale. For example, key=value:NoSchedule.
         * 
         * @return builder
         * 
         */
        public Builder nodeTaints(String... nodeTaints) {
            return nodeTaints(List.of(nodeTaints));
        }

        /**
         * @param orchestratorVersion Both patch version <major.minor.patch> (e.g. 1.20.13) and <major.minor> (e.g. 1.20) are supported. When <major.minor> is specified, the latest supported GA patch version is chosen automatically. Updating the cluster with the same <major.minor> once it has been created (e.g. 1.14.x -> 1.14) will not trigger an upgrade, even if a newer patch version is available. As a best practice, you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node pool version must have the same major version as the control plane. The node pool minor version must be within two minor versions of the control plane version. The node pool version cannot be greater than the control plane version. For more information see [upgrading a node pool](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#upgrade-a-node-pool).
         * 
         * @return builder
         * 
         */
        public Builder orchestratorVersion(@Nullable Output orchestratorVersion) {
            $.orchestratorVersion = orchestratorVersion;
            return this;
        }

        /**
         * @param orchestratorVersion Both patch version <major.minor.patch> (e.g. 1.20.13) and <major.minor> (e.g. 1.20) are supported. When <major.minor> is specified, the latest supported GA patch version is chosen automatically. Updating the cluster with the same <major.minor> once it has been created (e.g. 1.14.x -> 1.14) will not trigger an upgrade, even if a newer patch version is available. As a best practice, you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node pool version must have the same major version as the control plane. The node pool minor version must be within two minor versions of the control plane version. The node pool version cannot be greater than the control plane version. For more information see [upgrading a node pool](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#upgrade-a-node-pool).
         * 
         * @return builder
         * 
         */
        public Builder orchestratorVersion(String orchestratorVersion) {
            return orchestratorVersion(Output.of(orchestratorVersion));
        }

        /**
         * @param osDiskSizeGB OS Disk Size in GB to be used to specify the disk size for every machine in the master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified.
         * 
         * @return builder
         * 
         */
        public Builder osDiskSizeGB(@Nullable Output osDiskSizeGB) {
            $.osDiskSizeGB = osDiskSizeGB;
            return this;
        }

        /**
         * @param osDiskSizeGB OS Disk Size in GB to be used to specify the disk size for every machine in the master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified.
         * 
         * @return builder
         * 
         */
        public Builder osDiskSizeGB(Integer osDiskSizeGB) {
            return osDiskSizeGB(Output.of(osDiskSizeGB));
        }

        /**
         * @param osDiskType The default is 'Ephemeral' if the VM supports it and has a cache disk larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed after creation. For more information see [Ephemeral OS](https://docs.microsoft.com/azure/aks/cluster-configuration#ephemeral-os).
         * 
         * @return builder
         * 
         */
        public Builder osDiskType(@Nullable Output> osDiskType) {
            $.osDiskType = osDiskType;
            return this;
        }

        /**
         * @param osDiskType The default is 'Ephemeral' if the VM supports it and has a cache disk larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed after creation. For more information see [Ephemeral OS](https://docs.microsoft.com/azure/aks/cluster-configuration#ephemeral-os).
         * 
         * @return builder
         * 
         */
        public Builder osDiskType(Either osDiskType) {
            return osDiskType(Output.of(osDiskType));
        }

        /**
         * @param osDiskType The default is 'Ephemeral' if the VM supports it and has a cache disk larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed after creation. For more information see [Ephemeral OS](https://docs.microsoft.com/azure/aks/cluster-configuration#ephemeral-os).
         * 
         * @return builder
         * 
         */
        public Builder osDiskType(String osDiskType) {
            return osDiskType(Either.ofLeft(osDiskType));
        }

        /**
         * @param osDiskType The default is 'Ephemeral' if the VM supports it and has a cache disk larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed after creation. For more information see [Ephemeral OS](https://docs.microsoft.com/azure/aks/cluster-configuration#ephemeral-os).
         * 
         * @return builder
         * 
         */
        public Builder osDiskType(OSDiskType osDiskType) {
            return osDiskType(Either.ofRight(osDiskType));
        }

        /**
         * @param osSKU Specifies the OS SKU used by the agent pool. The default is Ubuntu if OSType is Linux. The default is Windows2019 when Kubernetes <= 1.24 or Windows2022 when Kubernetes >= 1.25 if OSType is Windows.
         * 
         * @return builder
         * 
         */
        public Builder osSKU(@Nullable Output> osSKU) {
            $.osSKU = osSKU;
            return this;
        }

        /**
         * @param osSKU Specifies the OS SKU used by the agent pool. The default is Ubuntu if OSType is Linux. The default is Windows2019 when Kubernetes <= 1.24 or Windows2022 when Kubernetes >= 1.25 if OSType is Windows.
         * 
         * @return builder
         * 
         */
        public Builder osSKU(Either osSKU) {
            return osSKU(Output.of(osSKU));
        }

        /**
         * @param osSKU Specifies the OS SKU used by the agent pool. The default is Ubuntu if OSType is Linux. The default is Windows2019 when Kubernetes <= 1.24 or Windows2022 when Kubernetes >= 1.25 if OSType is Windows.
         * 
         * @return builder
         * 
         */
        public Builder osSKU(String osSKU) {
            return osSKU(Either.ofLeft(osSKU));
        }

        /**
         * @param osSKU Specifies the OS SKU used by the agent pool. The default is Ubuntu if OSType is Linux. The default is Windows2019 when Kubernetes <= 1.24 or Windows2022 when Kubernetes >= 1.25 if OSType is Windows.
         * 
         * @return builder
         * 
         */
        public Builder osSKU(OSSKU osSKU) {
            return osSKU(Either.ofRight(osSKU));
        }

        /**
         * @param osType The operating system type. The default is Linux.
         * 
         * @return builder
         * 
         */
        public Builder osType(@Nullable Output> osType) {
            $.osType = osType;
            return this;
        }

        /**
         * @param osType The operating system type. The default is Linux.
         * 
         * @return builder
         * 
         */
        public Builder osType(Either osType) {
            return osType(Output.of(osType));
        }

        /**
         * @param osType The operating system type. The default is Linux.
         * 
         * @return builder
         * 
         */
        public Builder osType(String osType) {
            return osType(Either.ofLeft(osType));
        }

        /**
         * @param osType The operating system type. The default is Linux.
         * 
         * @return builder
         * 
         */
        public Builder osType(OSType osType) {
            return osType(Either.ofRight(osType));
        }

        /**
         * @param podSubnetID If omitted, pod IPs are statically assigned on the node subnet (see vnetSubnetID for more details). This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
         * 
         * @return builder
         * 
         */
        public Builder podSubnetID(@Nullable Output podSubnetID) {
            $.podSubnetID = podSubnetID;
            return this;
        }

        /**
         * @param podSubnetID If omitted, pod IPs are statically assigned on the node subnet (see vnetSubnetID for more details). This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
         * 
         * @return builder
         * 
         */
        public Builder podSubnetID(String podSubnetID) {
            return podSubnetID(Output.of(podSubnetID));
        }

        /**
         * @param powerState When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded
         * 
         * @return builder
         * 
         */
        public Builder powerState(@Nullable Output powerState) {
            $.powerState = powerState;
            return this;
        }

        /**
         * @param powerState When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded
         * 
         * @return builder
         * 
         */
        public Builder powerState(PowerStateArgs powerState) {
            return powerState(Output.of(powerState));
        }

        /**
         * @param proximityPlacementGroupID The ID for Proximity Placement Group.
         * 
         * @return builder
         * 
         */
        public Builder proximityPlacementGroupID(@Nullable Output proximityPlacementGroupID) {
            $.proximityPlacementGroupID = proximityPlacementGroupID;
            return this;
        }

        /**
         * @param proximityPlacementGroupID The ID for Proximity Placement Group.
         * 
         * @return builder
         * 
         */
        public Builder proximityPlacementGroupID(String proximityPlacementGroupID) {
            return proximityPlacementGroupID(Output.of(proximityPlacementGroupID));
        }

        /**
         * @param resourceGroupName The name of the resource group. The name is case insensitive.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(Output resourceGroupName) {
            $.resourceGroupName = resourceGroupName;
            return this;
        }

        /**
         * @param resourceGroupName The name of the resource group. The name is case insensitive.
         * 
         * @return builder
         * 
         */
        public Builder resourceGroupName(String resourceGroupName) {
            return resourceGroupName(Output.of(resourceGroupName));
        }

        /**
         * @param resourceName The name of the managed cluster resource.
         * 
         * @return builder
         * 
         */
        public Builder resourceName(Output resourceName) {
            $.resourceName = resourceName;
            return this;
        }

        /**
         * @param resourceName The name of the managed cluster resource.
         * 
         * @return builder
         * 
         */
        public Builder resourceName(String resourceName) {
            return resourceName(Output.of(resourceName));
        }

        /**
         * @param scaleDownMode This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete.
         * 
         * @return builder
         * 
         */
        public Builder scaleDownMode(@Nullable Output> scaleDownMode) {
            $.scaleDownMode = scaleDownMode;
            return this;
        }

        /**
         * @param scaleDownMode This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete.
         * 
         * @return builder
         * 
         */
        public Builder scaleDownMode(Either scaleDownMode) {
            return scaleDownMode(Output.of(scaleDownMode));
        }

        /**
         * @param scaleDownMode This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete.
         * 
         * @return builder
         * 
         */
        public Builder scaleDownMode(String scaleDownMode) {
            return scaleDownMode(Either.ofLeft(scaleDownMode));
        }

        /**
         * @param scaleDownMode This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete.
         * 
         * @return builder
         * 
         */
        public Builder scaleDownMode(ScaleDownMode scaleDownMode) {
            return scaleDownMode(Either.ofRight(scaleDownMode));
        }

        /**
         * @param scaleSetEvictionPolicy This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'.
         * 
         * @return builder
         * 
         */
        public Builder scaleSetEvictionPolicy(@Nullable Output> scaleSetEvictionPolicy) {
            $.scaleSetEvictionPolicy = scaleSetEvictionPolicy;
            return this;
        }

        /**
         * @param scaleSetEvictionPolicy This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'.
         * 
         * @return builder
         * 
         */
        public Builder scaleSetEvictionPolicy(Either scaleSetEvictionPolicy) {
            return scaleSetEvictionPolicy(Output.of(scaleSetEvictionPolicy));
        }

        /**
         * @param scaleSetEvictionPolicy This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'.
         * 
         * @return builder
         * 
         */
        public Builder scaleSetEvictionPolicy(String scaleSetEvictionPolicy) {
            return scaleSetEvictionPolicy(Either.ofLeft(scaleSetEvictionPolicy));
        }

        /**
         * @param scaleSetEvictionPolicy This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'.
         * 
         * @return builder
         * 
         */
        public Builder scaleSetEvictionPolicy(ScaleSetEvictionPolicy scaleSetEvictionPolicy) {
            return scaleSetEvictionPolicy(Either.ofRight(scaleSetEvictionPolicy));
        }

        /**
         * @param scaleSetPriority The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'.
         * 
         * @return builder
         * 
         */
        public Builder scaleSetPriority(@Nullable Output> scaleSetPriority) {
            $.scaleSetPriority = scaleSetPriority;
            return this;
        }

        /**
         * @param scaleSetPriority The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'.
         * 
         * @return builder
         * 
         */
        public Builder scaleSetPriority(Either scaleSetPriority) {
            return scaleSetPriority(Output.of(scaleSetPriority));
        }

        /**
         * @param scaleSetPriority The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'.
         * 
         * @return builder
         * 
         */
        public Builder scaleSetPriority(String scaleSetPriority) {
            return scaleSetPriority(Either.ofLeft(scaleSetPriority));
        }

        /**
         * @param scaleSetPriority The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'.
         * 
         * @return builder
         * 
         */
        public Builder scaleSetPriority(ScaleSetPriority scaleSetPriority) {
            return scaleSetPriority(Either.ofRight(scaleSetPriority));
        }

        /**
         * @param spotMaxPrice Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see [spot VMs pricing](https://docs.microsoft.com/azure/virtual-machines/spot-vms#pricing)
         * 
         * @return builder
         * 
         */
        public Builder spotMaxPrice(@Nullable Output spotMaxPrice) {
            $.spotMaxPrice = spotMaxPrice;
            return this;
        }

        /**
         * @param spotMaxPrice Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see [spot VMs pricing](https://docs.microsoft.com/azure/virtual-machines/spot-vms#pricing)
         * 
         * @return builder
         * 
         */
        public Builder spotMaxPrice(Double spotMaxPrice) {
            return spotMaxPrice(Output.of(spotMaxPrice));
        }

        /**
         * @param tags The tags to be persisted on the agent pool virtual machine scale set.
         * 
         * @return builder
         * 
         */
        public Builder tags(@Nullable Output> tags) {
            $.tags = tags;
            return this;
        }

        /**
         * @param tags The tags to be persisted on the agent pool virtual machine scale set.
         * 
         * @return builder
         * 
         */
        public Builder tags(Map tags) {
            return tags(Output.of(tags));
        }

        /**
         * @param type The type of Agent Pool.
         * 
         * @return builder
         * 
         */
        public Builder type(@Nullable Output> type) {
            $.type = type;
            return this;
        }

        /**
         * @param type The type of Agent Pool.
         * 
         * @return builder
         * 
         */
        public Builder type(Either type) {
            return type(Output.of(type));
        }

        /**
         * @param type The type of Agent Pool.
         * 
         * @return builder
         * 
         */
        public Builder type(String type) {
            return type(Either.ofLeft(type));
        }

        /**
         * @param type The type of Agent Pool.
         * 
         * @return builder
         * 
         */
        public Builder type(AgentPoolType type) {
            return type(Either.ofRight(type));
        }

        /**
         * @param upgradeSettings Settings for upgrading the agentpool
         * 
         * @return builder
         * 
         */
        public Builder upgradeSettings(@Nullable Output upgradeSettings) {
            $.upgradeSettings = upgradeSettings;
            return this;
        }

        /**
         * @param upgradeSettings Settings for upgrading the agentpool
         * 
         * @return builder
         * 
         */
        public Builder upgradeSettings(AgentPoolUpgradeSettingsArgs upgradeSettings) {
            return upgradeSettings(Output.of(upgradeSettings));
        }

        /**
         * @param vmSize VM size availability varies by region. If a node contains insufficient compute resources (memory, cpu, etc) pods might fail to run correctly. For more details on restricted VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions
         * 
         * @return builder
         * 
         */
        public Builder vmSize(@Nullable Output vmSize) {
            $.vmSize = vmSize;
            return this;
        }

        /**
         * @param vmSize VM size availability varies by region. If a node contains insufficient compute resources (memory, cpu, etc) pods might fail to run correctly. For more details on restricted VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions
         * 
         * @return builder
         * 
         */
        public Builder vmSize(String vmSize) {
            return vmSize(Output.of(vmSize));
        }

        /**
         * @param vnetSubnetID If this is not specified, a VNET and subnet will be generated and used. If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to just nodes. This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
         * 
         * @return builder
         * 
         */
        public Builder vnetSubnetID(@Nullable Output vnetSubnetID) {
            $.vnetSubnetID = vnetSubnetID;
            return this;
        }

        /**
         * @param vnetSubnetID If this is not specified, a VNET and subnet will be generated and used. If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to just nodes. This is of the form: /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}
         * 
         * @return builder
         * 
         */
        public Builder vnetSubnetID(String vnetSubnetID) {
            return vnetSubnetID(Output.of(vnetSubnetID));
        }

        /**
         * @param workloadRuntime Determines the type of workload a node can run.
         * 
         * @return builder
         * 
         */
        public Builder workloadRuntime(@Nullable Output> workloadRuntime) {
            $.workloadRuntime = workloadRuntime;
            return this;
        }

        /**
         * @param workloadRuntime Determines the type of workload a node can run.
         * 
         * @return builder
         * 
         */
        public Builder workloadRuntime(Either workloadRuntime) {
            return workloadRuntime(Output.of(workloadRuntime));
        }

        /**
         * @param workloadRuntime Determines the type of workload a node can run.
         * 
         * @return builder
         * 
         */
        public Builder workloadRuntime(String workloadRuntime) {
            return workloadRuntime(Either.ofLeft(workloadRuntime));
        }

        /**
         * @param workloadRuntime Determines the type of workload a node can run.
         * 
         * @return builder
         * 
         */
        public Builder workloadRuntime(WorkloadRuntime workloadRuntime) {
            return workloadRuntime(Either.ofRight(workloadRuntime));
        }

        public AgentPoolArgs build() {
            if ($.resourceGroupName == null) {
                throw new MissingRequiredPropertyException("AgentPoolArgs", "resourceGroupName");
            }
            if ($.resourceName == null) {
                throw new MissingRequiredPropertyException("AgentPoolArgs", "resourceName");
            }
            return $;
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy