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

com.pulumi.azure.containerservice.kotlin.KubernetesClusterNodePoolArgs.kt Maven / Gradle / Ivy

Go to download

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

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

package com.pulumi.azure.containerservice.kotlin

import com.pulumi.azure.containerservice.KubernetesClusterNodePoolArgs.builder
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolKubeletConfigArgs
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolKubeletConfigArgsBuilder
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolLinuxOsConfigArgs
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolLinuxOsConfigArgsBuilder
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolNodeNetworkProfileArgs
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolNodeNetworkProfileArgsBuilder
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolUpgradeSettingsArgs
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolUpgradeSettingsArgsBuilder
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolWindowsProfileArgs
import com.pulumi.azure.containerservice.kotlin.inputs.KubernetesClusterNodePoolWindowsProfileArgsBuilder
import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.Boolean
import kotlin.Double
import kotlin.Int
import kotlin.Pair
import kotlin.String
import kotlin.Suppress
import kotlin.Unit
import kotlin.collections.List
import kotlin.collections.Map
import kotlin.jvm.JvmName

/**
 * Manages a Node Pool within a Kubernetes Cluster
 * > **NOTE:** Multiple Node Pools are only supported when the Kubernetes Cluster is using Virtual Machine Scale Sets.
 * ## Example Usage
 * This example provisions a basic Kubernetes Node Pool.
 * 
 * ```typescript
 * import * as pulumi from "@pulumi/pulumi";
 * import * as azure from "@pulumi/azure";
 * const example = new azure.core.ResourceGroup("example", {
 *     name: "example-resources",
 *     location: "West Europe",
 * });
 * const exampleKubernetesCluster = new azure.containerservice.KubernetesCluster("example", {
 *     name: "example-aks1",
 *     location: example.location,
 *     resourceGroupName: example.name,
 *     dnsPrefix: "exampleaks1",
 *     defaultNodePool: {
 *         name: "default",
 *         nodeCount: 1,
 *         vmSize: "Standard_D2_v2",
 *     },
 *     servicePrincipal: {
 *         clientId: "00000000-0000-0000-0000-000000000000",
 *         clientSecret: "00000000000000000000000000000000",
 *     },
 * });
 * const exampleKubernetesClusterNodePool = new azure.containerservice.KubernetesClusterNodePool("example", {
 *     name: "internal",
 *     kubernetesClusterId: exampleKubernetesCluster.id,
 *     vmSize: "Standard_DS2_v2",
 *     nodeCount: 1,
 *     tags: {
 *         Environment: "Production",
 *     },
 * });
 * ```
 * ```python
 * import pulumi
 * import pulumi_azure as azure
 * example = azure.core.ResourceGroup("example",
 *     name="example-resources",
 *     location="West Europe")
 * example_kubernetes_cluster = azure.containerservice.KubernetesCluster("example",
 *     name="example-aks1",
 *     location=example.location,
 *     resource_group_name=example.name,
 *     dns_prefix="exampleaks1",
 *     default_node_pool={
 *         "name": "default",
 *         "node_count": 1,
 *         "vm_size": "Standard_D2_v2",
 *     },
 *     service_principal={
 *         "client_id": "00000000-0000-0000-0000-000000000000",
 *         "client_secret": "00000000000000000000000000000000",
 *     })
 * example_kubernetes_cluster_node_pool = azure.containerservice.KubernetesClusterNodePool("example",
 *     name="internal",
 *     kubernetes_cluster_id=example_kubernetes_cluster.id,
 *     vm_size="Standard_DS2_v2",
 *     node_count=1,
 *     tags={
 *         "Environment": "Production",
 *     })
 * ```
 * ```csharp
 * using System.Collections.Generic;
 * using System.Linq;
 * using Pulumi;
 * using Azure = Pulumi.Azure;
 * return await Deployment.RunAsync(() =>
 * {
 *     var example = new Azure.Core.ResourceGroup("example", new()
 *     {
 *         Name = "example-resources",
 *         Location = "West Europe",
 *     });
 *     var exampleKubernetesCluster = new Azure.ContainerService.KubernetesCluster("example", new()
 *     {
 *         Name = "example-aks1",
 *         Location = example.Location,
 *         ResourceGroupName = example.Name,
 *         DnsPrefix = "exampleaks1",
 *         DefaultNodePool = new Azure.ContainerService.Inputs.KubernetesClusterDefaultNodePoolArgs
 *         {
 *             Name = "default",
 *             NodeCount = 1,
 *             VmSize = "Standard_D2_v2",
 *         },
 *         ServicePrincipal = new Azure.ContainerService.Inputs.KubernetesClusterServicePrincipalArgs
 *         {
 *             ClientId = "00000000-0000-0000-0000-000000000000",
 *             ClientSecret = "00000000000000000000000000000000",
 *         },
 *     });
 *     var exampleKubernetesClusterNodePool = new Azure.ContainerService.KubernetesClusterNodePool("example", new()
 *     {
 *         Name = "internal",
 *         KubernetesClusterId = exampleKubernetesCluster.Id,
 *         VmSize = "Standard_DS2_v2",
 *         NodeCount = 1,
 *         Tags =
 *         {
 *             { "Environment", "Production" },
 *         },
 *     });
 * });
 * ```
 * ```go
 * package main
 * import (
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/containerservice"
 * 	"github.com/pulumi/pulumi-azure/sdk/v5/go/azure/core"
 * 	"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
 * )
 * func main() {
 * 	pulumi.Run(func(ctx *pulumi.Context) error {
 * 		example, err := core.NewResourceGroup(ctx, "example", &core.ResourceGroupArgs{
 * 			Name:     pulumi.String("example-resources"),
 * 			Location: pulumi.String("West Europe"),
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		exampleKubernetesCluster, err := containerservice.NewKubernetesCluster(ctx, "example", &containerservice.KubernetesClusterArgs{
 * 			Name:              pulumi.String("example-aks1"),
 * 			Location:          example.Location,
 * 			ResourceGroupName: example.Name,
 * 			DnsPrefix:         pulumi.String("exampleaks1"),
 * 			DefaultNodePool: &containerservice.KubernetesClusterDefaultNodePoolArgs{
 * 				Name:      pulumi.String("default"),
 * 				NodeCount: pulumi.Int(1),
 * 				VmSize:    pulumi.String("Standard_D2_v2"),
 * 			},
 * 			ServicePrincipal: &containerservice.KubernetesClusterServicePrincipalArgs{
 * 				ClientId:     pulumi.String("00000000-0000-0000-0000-000000000000"),
 * 				ClientSecret: pulumi.String("00000000000000000000000000000000"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		_, err = containerservice.NewKubernetesClusterNodePool(ctx, "example", &containerservice.KubernetesClusterNodePoolArgs{
 * 			Name:                pulumi.String("internal"),
 * 			KubernetesClusterId: exampleKubernetesCluster.ID(),
 * 			VmSize:              pulumi.String("Standard_DS2_v2"),
 * 			NodeCount:           pulumi.Int(1),
 * 			Tags: pulumi.StringMap{
 * 				"Environment": pulumi.String("Production"),
 * 			},
 * 		})
 * 		if err != nil {
 * 			return err
 * 		}
 * 		return nil
 * 	})
 * }
 * ```
 * ```java
 * package generated_program;
 * import com.pulumi.Context;
 * import com.pulumi.Pulumi;
 * import com.pulumi.core.Output;
 * import com.pulumi.azure.core.ResourceGroup;
 * import com.pulumi.azure.core.ResourceGroupArgs;
 * import com.pulumi.azure.containerservice.KubernetesCluster;
 * import com.pulumi.azure.containerservice.KubernetesClusterArgs;
 * import com.pulumi.azure.containerservice.inputs.KubernetesClusterDefaultNodePoolArgs;
 * import com.pulumi.azure.containerservice.inputs.KubernetesClusterServicePrincipalArgs;
 * import com.pulumi.azure.containerservice.KubernetesClusterNodePool;
 * import com.pulumi.azure.containerservice.KubernetesClusterNodePoolArgs;
 * import java.util.List;
 * import java.util.ArrayList;
 * import java.util.Map;
 * import java.io.File;
 * import java.nio.file.Files;
 * import java.nio.file.Paths;
 * public class App {
 *     public static void main(String[] args) {
 *         Pulumi.run(App::stack);
 *     }
 *     public static void stack(Context ctx) {
 *         var example = new ResourceGroup("example", ResourceGroupArgs.builder()
 *             .name("example-resources")
 *             .location("West Europe")
 *             .build());
 *         var exampleKubernetesCluster = new KubernetesCluster("exampleKubernetesCluster", KubernetesClusterArgs.builder()
 *             .name("example-aks1")
 *             .location(example.location())
 *             .resourceGroupName(example.name())
 *             .dnsPrefix("exampleaks1")
 *             .defaultNodePool(KubernetesClusterDefaultNodePoolArgs.builder()
 *                 .name("default")
 *                 .nodeCount(1)
 *                 .vmSize("Standard_D2_v2")
 *                 .build())
 *             .servicePrincipal(KubernetesClusterServicePrincipalArgs.builder()
 *                 .clientId("00000000-0000-0000-0000-000000000000")
 *                 .clientSecret("00000000000000000000000000000000")
 *                 .build())
 *             .build());
 *         var exampleKubernetesClusterNodePool = new KubernetesClusterNodePool("exampleKubernetesClusterNodePool", KubernetesClusterNodePoolArgs.builder()
 *             .name("internal")
 *             .kubernetesClusterId(exampleKubernetesCluster.id())
 *             .vmSize("Standard_DS2_v2")
 *             .nodeCount(1)
 *             .tags(Map.of("Environment", "Production"))
 *             .build());
 *     }
 * }
 * ```
 * ```yaml
 * resources:
 *   example:
 *     type: azure:core:ResourceGroup
 *     properties:
 *       name: example-resources
 *       location: West Europe
 *   exampleKubernetesCluster:
 *     type: azure:containerservice:KubernetesCluster
 *     name: example
 *     properties:
 *       name: example-aks1
 *       location: ${example.location}
 *       resourceGroupName: ${example.name}
 *       dnsPrefix: exampleaks1
 *       defaultNodePool:
 *         name: default
 *         nodeCount: 1
 *         vmSize: Standard_D2_v2
 *       servicePrincipal:
 *         clientId: 00000000-0000-0000-0000-000000000000
 *         clientSecret: '00000000000000000000000000000000'
 *   exampleKubernetesClusterNodePool:
 *     type: azure:containerservice:KubernetesClusterNodePool
 *     name: example
 *     properties:
 *       name: internal
 *       kubernetesClusterId: ${exampleKubernetesCluster.id}
 *       vmSize: Standard_DS2_v2
 *       nodeCount: 1
 *       tags:
 *         Environment: Production
 * ```
 * 
 * ## Import
 * Kubernetes Cluster Node Pools can be imported using the `resource id`, e.g.
 * ```sh
 * $ pulumi import azure:containerservice/kubernetesClusterNodePool:KubernetesClusterNodePool pool1 /subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/group1/providers/Microsoft.ContainerService/managedClusters/cluster1/agentPools/pool1
 * ```
 * @property capacityReservationGroupId Specifies the ID of the Capacity Reservation Group where this Node Pool should exist. Changing this forces a new resource to be created.
 * @property customCaTrustEnabled Specifies whether to trust a Custom CA.
 * > **Note:** This requires that the Preview Feature `Microsoft.ContainerService/CustomCATrustPreview` is enabled and the Resource Provider is re-registered, see [the documentation](https://learn.microsoft.com/en-us/azure/aks/custom-certificate-authority) for more information.
 * @property enableAutoScaling Whether to enable [auto-scaler](https://docs.microsoft.com/azure/aks/cluster-autoscaler).
 * @property enableHostEncryption Should the nodes in this Node Pool have host encryption enabled? Changing this forces a new resource to be created.
 * > **NOTE:** Additional fields must be configured depending on the value of this field - see below.
 * @property enableNodePublicIp Should each node have a Public IP Address? Changing this forces a new resource to be created.
 * @property evictionPolicy The Eviction Policy which should be used for Virtual Machines within the Virtual Machine Scale Set powering this Node Pool. Possible values are `Deallocate` and `Delete`. Changing this forces a new resource to be created.
 * > **Note:** An Eviction Policy can only be configured when `priority` is set to `Spot` and will default to `Delete` unless otherwise specified.
 * @property fipsEnabled Should the nodes in this Node Pool have Federal Information Processing Standard enabled? Changing this forces a new resource to be created.
 * > **Note:** FIPS support is in Public Preview - more information and details on how to opt into the Preview can be found in [this article](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool-preview).
 * @property gpuInstance Specifies the GPU MIG instance profile for supported GPU VM SKU. The allowed values are `MIG1g`, `MIG2g`, `MIG3g`, `MIG4g` and `MIG7g`. Changing this forces a new resource to be created.
 * @property hostGroupId The fully qualified resource ID of the Dedicated Host Group to provision virtual machines from. Changing this forces a new resource to be created.
 * @property kubeletConfig A `kubelet_config` block as defined below. Changing this forces a new resource to be created.
 * @property kubeletDiskType The type of disk used by kubelet. Possible values are `OS` and `Temporary`.
 * @property kubernetesClusterId The ID of the Kubernetes Cluster where this Node Pool should exist. Changing this forces a new resource to be created.
 * > **NOTE:** The type of Default Node Pool for the Kubernetes Cluster must be `VirtualMachineScaleSets` to attach multiple node pools.
 * @property linuxOsConfig A `linux_os_config` block as defined below. Changing this forces a new resource to be created.
 * @property maxCount
 * @property maxPods The maximum number of pods that can run on each agent. Changing this forces a new resource to be created.
 * @property messageOfTheDay A base64-encoded string which will be written to /etc/motd after decoding. This allows customization of the message of the day for Linux nodes. It cannot be specified for Windows nodes and must be a static string (i.e. will be printed raw and not executed as a script). Changing this forces a new resource to be created.
 * @property minCount
 * @property mode Should this Node Pool be used for System or User resources? Possible values are `System` and `User`. Defaults to `User`.
 * @property name The name of the Node Pool which should be created within the Kubernetes Cluster. Changing this forces a new resource to be created.
 * > **NOTE:** A Windows Node Pool cannot have a `name` longer than 6 characters.
 * @property nodeCount
 * @property nodeLabels A map of Kubernetes labels which should be applied to nodes in this Node Pool.
 * @property nodeNetworkProfile A `node_network_profile` block as documented below.
 * @property nodePublicIpPrefixId Resource ID for the Public IP Addresses Prefix for the nodes in this Node Pool. `enable_node_public_ip` should be `true`. Changing this forces a new resource to be created.
 * @property nodeTaints A list of Kubernetes taints which should be applied to nodes in the agent pool (e.g `key=value:NoSchedule`).
 * @property orchestratorVersion Version of Kubernetes used for the Agents. If not specified, the latest recommended version will be used at provisioning time (but won't auto-upgrade). AKS does not require an exact patch version to be specified, minor version aliases such as `1.22` are also supported. - The minor version's latest GA patch is automatically chosen in that case. More details can be found in [the documentation](https://docs.microsoft.com/en-us/azure/aks/supported-kubernetes-versions?tabs=azure-cli#alias-minor-version).
 * > **Note:** This version must be supported by the Kubernetes Cluster - as such the version of Kubernetes used on the Cluster/Control Plane may need to be upgraded first.
 * @property osDiskSizeGb The Agent Operating System disk size in GB. Changing this forces a new resource to be created.
 * @property osDiskType The type of disk which should be used for the Operating System. Possible values are `Ephemeral` and `Managed`. Defaults to `Managed`. Changing this forces a new resource to be created.
 * @property osSku Specifies the OS SKU used by the agent pool. Possible values are `AzureLinux`, `Ubuntu`, `Windows2019` and `Windows2022`. If not specified, the default is `Ubuntu` if OSType=Linux or `Windows2019` if OSType=Windows. And the default Windows OSSKU will be changed to `Windows2022` after Windows2019 is deprecated. Changing this from `AzureLinux` or `Ubuntu` to `AzureLinux` or `Ubuntu` will not replace the resource, otherwise it forces a new resource to be created.
 * @property osType The Operating System which should be used for this Node Pool. Changing this forces a new resource to be created. Possible values are `Linux` and `Windows`. Defaults to `Linux`.
 * @property podSubnetId The ID of the Subnet where the pods in the Node Pool should exist. Changing this forces a new resource to be created.
 * @property priority The Priority for Virtual Machines within the Virtual Machine Scale Set that powers this Node Pool. Possible values are `Regular` and `Spot`. Defaults to `Regular`. Changing this forces a new resource to be created.
 * @property proximityPlacementGroupId The ID of the Proximity Placement Group where the Virtual Machine Scale Set that powers this Node Pool will be placed. Changing this forces a new resource to be created.
 * > **Note:** When setting `priority` to Spot - you must configure an `eviction_policy`, `spot_max_price` and add the applicable `node_labels` and `node_taints` [as per the Azure Documentation](https://docs.microsoft.com/azure/aks/spot-node-pool).
 * @property scaleDownMode Specifies how the node pool should deal with scaled-down nodes. Allowed values are `Delete` and `Deallocate`. Defaults to `Delete`.
 * @property snapshotId The ID of the Snapshot which should be used to create this Node Pool. Changing this forces a new resource to be created.
 * @property spotMaxPrice The maximum price you're willing to pay in USD per Virtual Machine. Valid values are `-1` (the current on-demand price for a Virtual Machine) or a positive value with up to five decimal places. Changing this forces a new resource to be created.
 * > **Note:** This field can only be configured when `priority` is set to `Spot`.
 * @property tags A mapping of tags to assign to the resource.
 * > At this time there's a bug in the AKS API where Tags for a Node Pool are not stored in the correct case - you may wish to use [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) functionality to ignore changes to the casing until this is fixed in the AKS API.
 * @property ultraSsdEnabled Used to specify whether the UltraSSD is enabled in the Node Pool. Defaults to `false`. See [the documentation](https://docs.microsoft.com/azure/aks/use-ultra-disks) for more information. Changing this forces a new resource to be created.
 * @property upgradeSettings A `upgrade_settings` block as documented below.
 * @property vmSize The SKU which should be used for the Virtual Machines used in this Node Pool. Changing this forces a new resource to be created.
 * @property vnetSubnetId The ID of the Subnet where this Node Pool should exist. Changing this forces a new resource to be created.
 * > **NOTE:** A route table must be configured on this Subnet.
 * @property windowsProfile A `windows_profile` block as documented below. Changing this forces a new resource to be created.
 * @property workloadRuntime Used to specify the workload runtime. Allowed values are `OCIContainer`, `WasmWasi` and `KataMshvVmIsolation`.
 * > **Note:** WebAssembly System Interface node pools are in Public Preview - more information and details on how to opt into the preview can be found in [this article](https://docs.microsoft.com/azure/aks/use-wasi-node-pools)
 * > **Note:** Pod Sandboxing / KataVM Isolation node pools are in Public Preview - more information and details on how to opt into the preview can be found in [this article](https://learn.microsoft.com/azure/aks/use-pod-sandboxing)
 * @property zones Specifies a list of Availability Zones in which this Kubernetes Cluster Node Pool should be located. Changing this forces a new Kubernetes Cluster Node Pool to be created.
 */
public data class KubernetesClusterNodePoolArgs(
    public val capacityReservationGroupId: Output? = null,
    public val customCaTrustEnabled: Output? = null,
    public val enableAutoScaling: Output? = null,
    public val enableHostEncryption: Output? = null,
    public val enableNodePublicIp: Output? = null,
    public val evictionPolicy: Output? = null,
    public val fipsEnabled: Output? = null,
    public val gpuInstance: Output? = null,
    public val hostGroupId: Output? = null,
    public val kubeletConfig: Output? = null,
    public val kubeletDiskType: Output? = null,
    public val kubernetesClusterId: Output? = null,
    public val linuxOsConfig: Output? = null,
    public val maxCount: Output? = null,
    public val maxPods: Output? = null,
    public val messageOfTheDay: Output? = null,
    public val minCount: Output? = null,
    public val mode: Output? = null,
    public val name: Output? = null,
    public val nodeCount: Output? = null,
    public val nodeLabels: Output>? = null,
    public val nodeNetworkProfile: Output? = null,
    public val nodePublicIpPrefixId: Output? = null,
    public val nodeTaints: Output>? = null,
    public val orchestratorVersion: Output? = null,
    public val osDiskSizeGb: Output? = null,
    public val osDiskType: Output? = null,
    public val osSku: Output? = null,
    public val osType: Output? = null,
    public val podSubnetId: Output? = null,
    public val priority: Output? = null,
    public val proximityPlacementGroupId: Output? = null,
    public val scaleDownMode: Output? = null,
    public val snapshotId: Output? = null,
    public val spotMaxPrice: Output? = null,
    public val tags: Output>? = null,
    public val ultraSsdEnabled: Output? = null,
    public val upgradeSettings: Output? = null,
    public val vmSize: Output? = null,
    public val vnetSubnetId: Output? = null,
    public val windowsProfile: Output? = null,
    public val workloadRuntime: Output? = null,
    public val zones: Output>? = null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.azure.containerservice.KubernetesClusterNodePoolArgs =
        com.pulumi.azure.containerservice.KubernetesClusterNodePoolArgs.builder()
            .capacityReservationGroupId(capacityReservationGroupId?.applyValue({ args0 -> args0 }))
            .customCaTrustEnabled(customCaTrustEnabled?.applyValue({ args0 -> args0 }))
            .enableAutoScaling(enableAutoScaling?.applyValue({ args0 -> args0 }))
            .enableHostEncryption(enableHostEncryption?.applyValue({ args0 -> args0 }))
            .enableNodePublicIp(enableNodePublicIp?.applyValue({ args0 -> args0 }))
            .evictionPolicy(evictionPolicy?.applyValue({ args0 -> args0 }))
            .fipsEnabled(fipsEnabled?.applyValue({ args0 -> args0 }))
            .gpuInstance(gpuInstance?.applyValue({ args0 -> args0 }))
            .hostGroupId(hostGroupId?.applyValue({ args0 -> args0 }))
            .kubeletConfig(kubeletConfig?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .kubeletDiskType(kubeletDiskType?.applyValue({ args0 -> args0 }))
            .kubernetesClusterId(kubernetesClusterId?.applyValue({ args0 -> args0 }))
            .linuxOsConfig(linuxOsConfig?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .maxCount(maxCount?.applyValue({ args0 -> args0 }))
            .maxPods(maxPods?.applyValue({ args0 -> args0 }))
            .messageOfTheDay(messageOfTheDay?.applyValue({ args0 -> args0 }))
            .minCount(minCount?.applyValue({ args0 -> args0 }))
            .mode(mode?.applyValue({ args0 -> args0 }))
            .name(name?.applyValue({ args0 -> args0 }))
            .nodeCount(nodeCount?.applyValue({ args0 -> args0 }))
            .nodeLabels(
                nodeLabels?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.key.to(args0.value)
                    }).toMap()
                }),
            )
            .nodeNetworkProfile(
                nodeNetworkProfile?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .nodePublicIpPrefixId(nodePublicIpPrefixId?.applyValue({ args0 -> args0 }))
            .nodeTaints(nodeTaints?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .orchestratorVersion(orchestratorVersion?.applyValue({ args0 -> args0 }))
            .osDiskSizeGb(osDiskSizeGb?.applyValue({ args0 -> args0 }))
            .osDiskType(osDiskType?.applyValue({ args0 -> args0 }))
            .osSku(osSku?.applyValue({ args0 -> args0 }))
            .osType(osType?.applyValue({ args0 -> args0 }))
            .podSubnetId(podSubnetId?.applyValue({ args0 -> args0 }))
            .priority(priority?.applyValue({ args0 -> args0 }))
            .proximityPlacementGroupId(proximityPlacementGroupId?.applyValue({ args0 -> args0 }))
            .scaleDownMode(scaleDownMode?.applyValue({ args0 -> args0 }))
            .snapshotId(snapshotId?.applyValue({ args0 -> args0 }))
            .spotMaxPrice(spotMaxPrice?.applyValue({ args0 -> args0 }))
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0.key.to(args0.value) }).toMap() }))
            .ultraSsdEnabled(ultraSsdEnabled?.applyValue({ args0 -> args0 }))
            .upgradeSettings(upgradeSettings?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .vmSize(vmSize?.applyValue({ args0 -> args0 }))
            .vnetSubnetId(vnetSubnetId?.applyValue({ args0 -> args0 }))
            .windowsProfile(windowsProfile?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .workloadRuntime(workloadRuntime?.applyValue({ args0 -> args0 }))
            .zones(zones?.applyValue({ args0 -> args0.map({ args0 -> args0 }) })).build()
}

/**
 * Builder for [KubernetesClusterNodePoolArgs].
 */
@PulumiTagMarker
public class KubernetesClusterNodePoolArgsBuilder internal constructor() {
    private var capacityReservationGroupId: Output? = null

    private var customCaTrustEnabled: Output? = null

    private var enableAutoScaling: Output? = null

    private var enableHostEncryption: Output? = null

    private var enableNodePublicIp: Output? = null

    private var evictionPolicy: Output? = null

    private var fipsEnabled: Output? = null

    private var gpuInstance: Output? = null

    private var hostGroupId: Output? = null

    private var kubeletConfig: Output? = null

    private var kubeletDiskType: Output? = null

    private var kubernetesClusterId: Output? = null

    private var linuxOsConfig: Output? = null

    private var maxCount: Output? = null

    private var maxPods: Output? = null

    private var messageOfTheDay: Output? = null

    private var minCount: Output? = null

    private var mode: Output? = null

    private var name: Output? = null

    private var nodeCount: Output? = null

    private var nodeLabels: Output>? = null

    private var nodeNetworkProfile: Output? = null

    private var nodePublicIpPrefixId: Output? = null

    private var nodeTaints: Output>? = null

    private var orchestratorVersion: Output? = null

    private var osDiskSizeGb: Output? = null

    private var osDiskType: Output? = null

    private var osSku: Output? = null

    private var osType: Output? = null

    private var podSubnetId: Output? = null

    private var priority: Output? = null

    private var proximityPlacementGroupId: Output? = null

    private var scaleDownMode: Output? = null

    private var snapshotId: Output? = null

    private var spotMaxPrice: Output? = null

    private var tags: Output>? = null

    private var ultraSsdEnabled: Output? = null

    private var upgradeSettings: Output? = null

    private var vmSize: Output? = null

    private var vnetSubnetId: Output? = null

    private var windowsProfile: Output? = null

    private var workloadRuntime: Output? = null

    private var zones: Output>? = null

    /**
     * @param value Specifies the ID of the Capacity Reservation Group where this Node Pool should exist. Changing this forces a new resource to be created.
     */
    @JvmName("knmqdnsrommyjpsp")
    public suspend fun capacityReservationGroupId(`value`: Output) {
        this.capacityReservationGroupId = value
    }

    /**
     * @param value Specifies whether to trust a Custom CA.
     * > **Note:** This requires that the Preview Feature `Microsoft.ContainerService/CustomCATrustPreview` is enabled and the Resource Provider is re-registered, see [the documentation](https://learn.microsoft.com/en-us/azure/aks/custom-certificate-authority) for more information.
     */
    @JvmName("nlpvayhgwnoyguwj")
    public suspend fun customCaTrustEnabled(`value`: Output) {
        this.customCaTrustEnabled = value
    }

    /**
     * @param value Whether to enable [auto-scaler](https://docs.microsoft.com/azure/aks/cluster-autoscaler).
     */
    @JvmName("lannvdkeadfonglw")
    public suspend fun enableAutoScaling(`value`: Output) {
        this.enableAutoScaling = value
    }

    /**
     * @param value Should the nodes in this Node Pool have host encryption enabled? Changing this forces a new resource to be created.
     * > **NOTE:** Additional fields must be configured depending on the value of this field - see below.
     */
    @JvmName("irvoftsetwbqxjsn")
    public suspend fun enableHostEncryption(`value`: Output) {
        this.enableHostEncryption = value
    }

    /**
     * @param value Should each node have a Public IP Address? Changing this forces a new resource to be created.
     */
    @JvmName("pjfxoqbuuhoexkpb")
    public suspend fun enableNodePublicIp(`value`: Output) {
        this.enableNodePublicIp = value
    }

    /**
     * @param value The Eviction Policy which should be used for Virtual Machines within the Virtual Machine Scale Set powering this Node Pool. Possible values are `Deallocate` and `Delete`. Changing this forces a new resource to be created.
     * > **Note:** An Eviction Policy can only be configured when `priority` is set to `Spot` and will default to `Delete` unless otherwise specified.
     */
    @JvmName("wtiahmjqnblaybxe")
    public suspend fun evictionPolicy(`value`: Output) {
        this.evictionPolicy = value
    }

    /**
     * @param value Should the nodes in this Node Pool have Federal Information Processing Standard enabled? Changing this forces a new resource to be created.
     * > **Note:** FIPS support is in Public Preview - more information and details on how to opt into the Preview can be found in [this article](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool-preview).
     */
    @JvmName("kcpxwflvuttsealo")
    public suspend fun fipsEnabled(`value`: Output) {
        this.fipsEnabled = value
    }

    /**
     * @param value Specifies the GPU MIG instance profile for supported GPU VM SKU. The allowed values are `MIG1g`, `MIG2g`, `MIG3g`, `MIG4g` and `MIG7g`. Changing this forces a new resource to be created.
     */
    @JvmName("gswqpmforgheoser")
    public suspend fun gpuInstance(`value`: Output) {
        this.gpuInstance = value
    }

    /**
     * @param value The fully qualified resource ID of the Dedicated Host Group to provision virtual machines from. Changing this forces a new resource to be created.
     */
    @JvmName("fehbbfqihfodqhas")
    public suspend fun hostGroupId(`value`: Output) {
        this.hostGroupId = value
    }

    /**
     * @param value A `kubelet_config` block as defined below. Changing this forces a new resource to be created.
     */
    @JvmName("rvxjvolhkvhalbys")
    public suspend fun kubeletConfig(`value`: Output) {
        this.kubeletConfig = value
    }

    /**
     * @param value The type of disk used by kubelet. Possible values are `OS` and `Temporary`.
     */
    @JvmName("qfadyqngtjxerfac")
    public suspend fun kubeletDiskType(`value`: Output) {
        this.kubeletDiskType = value
    }

    /**
     * @param value The ID of the Kubernetes Cluster where this Node Pool should exist. Changing this forces a new resource to be created.
     * > **NOTE:** The type of Default Node Pool for the Kubernetes Cluster must be `VirtualMachineScaleSets` to attach multiple node pools.
     */
    @JvmName("qcqsfstcequfxcnx")
    public suspend fun kubernetesClusterId(`value`: Output) {
        this.kubernetesClusterId = value
    }

    /**
     * @param value A `linux_os_config` block as defined below. Changing this forces a new resource to be created.
     */
    @JvmName("inlytrkkieacwwpd")
    public suspend fun linuxOsConfig(`value`: Output) {
        this.linuxOsConfig = value
    }

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

    /**
     * @param value The maximum number of pods that can run on each agent. Changing this forces a new resource to be created.
     */
    @JvmName("fonyeokhaavkqlfw")
    public suspend fun maxPods(`value`: Output) {
        this.maxPods = value
    }

    /**
     * @param value A base64-encoded string which will be written to /etc/motd after decoding. This allows customization of the message of the day for Linux nodes. It cannot be specified for Windows nodes and must be a static string (i.e. will be printed raw and not executed as a script). Changing this forces a new resource to be created.
     */
    @JvmName("nehaxhyrduibfcnn")
    public suspend fun messageOfTheDay(`value`: Output) {
        this.messageOfTheDay = value
    }

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

    /**
     * @param value Should this Node Pool be used for System or User resources? Possible values are `System` and `User`. Defaults to `User`.
     */
    @JvmName("usnphefmltkbsqdo")
    public suspend fun mode(`value`: Output) {
        this.mode = value
    }

    /**
     * @param value The name of the Node Pool which should be created within the Kubernetes Cluster. Changing this forces a new resource to be created.
     * > **NOTE:** A Windows Node Pool cannot have a `name` longer than 6 characters.
     */
    @JvmName("bdiqtjfjiaekjlak")
    public suspend fun name(`value`: Output) {
        this.name = value
    }

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

    /**
     * @param value A map of Kubernetes labels which should be applied to nodes in this Node Pool.
     */
    @JvmName("pqgmtqqhpanovsve")
    public suspend fun nodeLabels(`value`: Output>) {
        this.nodeLabels = value
    }

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

    /**
     * @param value Resource ID for the Public IP Addresses Prefix for the nodes in this Node Pool. `enable_node_public_ip` should be `true`. Changing this forces a new resource to be created.
     */
    @JvmName("ybsdvdyptpljffwq")
    public suspend fun nodePublicIpPrefixId(`value`: Output) {
        this.nodePublicIpPrefixId = value
    }

    /**
     * @param value A list of Kubernetes taints which should be applied to nodes in the agent pool (e.g `key=value:NoSchedule`).
     */
    @JvmName("qscxjoqjytmhclgt")
    public suspend fun nodeTaints(`value`: Output>) {
        this.nodeTaints = value
    }

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

    /**
     * @param values A list of Kubernetes taints which should be applied to nodes in the agent pool (e.g `key=value:NoSchedule`).
     */
    @JvmName("oifyvadvfmtdjndv")
    public suspend fun nodeTaints(values: List>) {
        this.nodeTaints = Output.all(values)
    }

    /**
     * @param value Version of Kubernetes used for the Agents. If not specified, the latest recommended version will be used at provisioning time (but won't auto-upgrade). AKS does not require an exact patch version to be specified, minor version aliases such as `1.22` are also supported. - The minor version's latest GA patch is automatically chosen in that case. More details can be found in [the documentation](https://docs.microsoft.com/en-us/azure/aks/supported-kubernetes-versions?tabs=azure-cli#alias-minor-version).
     * > **Note:** This version must be supported by the Kubernetes Cluster - as such the version of Kubernetes used on the Cluster/Control Plane may need to be upgraded first.
     */
    @JvmName("bypexispjhqjbaol")
    public suspend fun orchestratorVersion(`value`: Output) {
        this.orchestratorVersion = value
    }

    /**
     * @param value The Agent Operating System disk size in GB. Changing this forces a new resource to be created.
     */
    @JvmName("hefktvhqlwaiadam")
    public suspend fun osDiskSizeGb(`value`: Output) {
        this.osDiskSizeGb = value
    }

    /**
     * @param value The type of disk which should be used for the Operating System. Possible values are `Ephemeral` and `Managed`. Defaults to `Managed`. Changing this forces a new resource to be created.
     */
    @JvmName("xegqmvcjnofqcktk")
    public suspend fun osDiskType(`value`: Output) {
        this.osDiskType = value
    }

    /**
     * @param value Specifies the OS SKU used by the agent pool. Possible values are `AzureLinux`, `Ubuntu`, `Windows2019` and `Windows2022`. If not specified, the default is `Ubuntu` if OSType=Linux or `Windows2019` if OSType=Windows. And the default Windows OSSKU will be changed to `Windows2022` after Windows2019 is deprecated. Changing this from `AzureLinux` or `Ubuntu` to `AzureLinux` or `Ubuntu` will not replace the resource, otherwise it forces a new resource to be created.
     */
    @JvmName("verotirtjjdpbowy")
    public suspend fun osSku(`value`: Output) {
        this.osSku = value
    }

    /**
     * @param value The Operating System which should be used for this Node Pool. Changing this forces a new resource to be created. Possible values are `Linux` and `Windows`. Defaults to `Linux`.
     */
    @JvmName("awoqbgvuoithrscl")
    public suspend fun osType(`value`: Output) {
        this.osType = value
    }

    /**
     * @param value The ID of the Subnet where the pods in the Node Pool should exist. Changing this forces a new resource to be created.
     */
    @JvmName("skghmhjwmwtxhbep")
    public suspend fun podSubnetId(`value`: Output) {
        this.podSubnetId = value
    }

    /**
     * @param value The Priority for Virtual Machines within the Virtual Machine Scale Set that powers this Node Pool. Possible values are `Regular` and `Spot`. Defaults to `Regular`. Changing this forces a new resource to be created.
     */
    @JvmName("kquhqboipkrtkout")
    public suspend fun priority(`value`: Output) {
        this.priority = value
    }

    /**
     * @param value The ID of the Proximity Placement Group where the Virtual Machine Scale Set that powers this Node Pool will be placed. Changing this forces a new resource to be created.
     * > **Note:** When setting `priority` to Spot - you must configure an `eviction_policy`, `spot_max_price` and add the applicable `node_labels` and `node_taints` [as per the Azure Documentation](https://docs.microsoft.com/azure/aks/spot-node-pool).
     */
    @JvmName("sadqmeluulorbavj")
    public suspend fun proximityPlacementGroupId(`value`: Output) {
        this.proximityPlacementGroupId = value
    }

    /**
     * @param value Specifies how the node pool should deal with scaled-down nodes. Allowed values are `Delete` and `Deallocate`. Defaults to `Delete`.
     */
    @JvmName("mmuwlwoiuxdufwjc")
    public suspend fun scaleDownMode(`value`: Output) {
        this.scaleDownMode = value
    }

    /**
     * @param value The ID of the Snapshot which should be used to create this Node Pool. Changing this forces a new resource to be created.
     */
    @JvmName("nsymuynuicbffhbh")
    public suspend fun snapshotId(`value`: Output) {
        this.snapshotId = value
    }

    /**
     * @param value The maximum price you're willing to pay in USD per Virtual Machine. Valid values are `-1` (the current on-demand price for a Virtual Machine) or a positive value with up to five decimal places. Changing this forces a new resource to be created.
     * > **Note:** This field can only be configured when `priority` is set to `Spot`.
     */
    @JvmName("hvyuacotiptwfogs")
    public suspend fun spotMaxPrice(`value`: Output) {
        this.spotMaxPrice = value
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     * > At this time there's a bug in the AKS API where Tags for a Node Pool are not stored in the correct case - you may wish to use [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) functionality to ignore changes to the casing until this is fixed in the AKS API.
     */
    @JvmName("lymuocmdbyaywjdi")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

    /**
     * @param value Used to specify whether the UltraSSD is enabled in the Node Pool. Defaults to `false`. See [the documentation](https://docs.microsoft.com/azure/aks/use-ultra-disks) for more information. Changing this forces a new resource to be created.
     */
    @JvmName("mkdrqcgdayoeywrn")
    public suspend fun ultraSsdEnabled(`value`: Output) {
        this.ultraSsdEnabled = value
    }

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

    /**
     * @param value The SKU which should be used for the Virtual Machines used in this Node Pool. Changing this forces a new resource to be created.
     */
    @JvmName("cwferoufdeumyqsk")
    public suspend fun vmSize(`value`: Output) {
        this.vmSize = value
    }

    /**
     * @param value The ID of the Subnet where this Node Pool should exist. Changing this forces a new resource to be created.
     * > **NOTE:** A route table must be configured on this Subnet.
     */
    @JvmName("pglwoyhseimadvmj")
    public suspend fun vnetSubnetId(`value`: Output) {
        this.vnetSubnetId = value
    }

    /**
     * @param value A `windows_profile` block as documented below. Changing this forces a new resource to be created.
     */
    @JvmName("kbnkatnxsdtfyjlu")
    public suspend fun windowsProfile(`value`: Output) {
        this.windowsProfile = value
    }

    /**
     * @param value Used to specify the workload runtime. Allowed values are `OCIContainer`, `WasmWasi` and `KataMshvVmIsolation`.
     * > **Note:** WebAssembly System Interface node pools are in Public Preview - more information and details on how to opt into the preview can be found in [this article](https://docs.microsoft.com/azure/aks/use-wasi-node-pools)
     * > **Note:** Pod Sandboxing / KataVM Isolation node pools are in Public Preview - more information and details on how to opt into the preview can be found in [this article](https://learn.microsoft.com/azure/aks/use-pod-sandboxing)
     */
    @JvmName("isfgdivwhlaffvgt")
    public suspend fun workloadRuntime(`value`: Output) {
        this.workloadRuntime = value
    }

    /**
     * @param value Specifies a list of Availability Zones in which this Kubernetes Cluster Node Pool should be located. Changing this forces a new Kubernetes Cluster Node Pool to be created.
     */
    @JvmName("vrhsjwtgmvhvxlkq")
    public suspend fun zones(`value`: Output>) {
        this.zones = value
    }

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

    /**
     * @param values Specifies a list of Availability Zones in which this Kubernetes Cluster Node Pool should be located. Changing this forces a new Kubernetes Cluster Node Pool to be created.
     */
    @JvmName("ljaaxqnyhfewmnnl")
    public suspend fun zones(values: List>) {
        this.zones = Output.all(values)
    }

    /**
     * @param value Specifies the ID of the Capacity Reservation Group where this Node Pool should exist. Changing this forces a new resource to be created.
     */
    @JvmName("vjmuafalpoutiusa")
    public suspend fun capacityReservationGroupId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.capacityReservationGroupId = mapped
    }

    /**
     * @param value Specifies whether to trust a Custom CA.
     * > **Note:** This requires that the Preview Feature `Microsoft.ContainerService/CustomCATrustPreview` is enabled and the Resource Provider is re-registered, see [the documentation](https://learn.microsoft.com/en-us/azure/aks/custom-certificate-authority) for more information.
     */
    @JvmName("wqwgkpkgmrgdkexp")
    public suspend fun customCaTrustEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.customCaTrustEnabled = mapped
    }

    /**
     * @param value Whether to enable [auto-scaler](https://docs.microsoft.com/azure/aks/cluster-autoscaler).
     */
    @JvmName("cseqpxtfnoihjfds")
    public suspend fun enableAutoScaling(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.enableAutoScaling = mapped
    }

    /**
     * @param value Should the nodes in this Node Pool have host encryption enabled? Changing this forces a new resource to be created.
     * > **NOTE:** Additional fields must be configured depending on the value of this field - see below.
     */
    @JvmName("pxunvffcehexfxhk")
    public suspend fun enableHostEncryption(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.enableHostEncryption = mapped
    }

    /**
     * @param value Should each node have a Public IP Address? Changing this forces a new resource to be created.
     */
    @JvmName("dsecxqvmgtteyvvk")
    public suspend fun enableNodePublicIp(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.enableNodePublicIp = mapped
    }

    /**
     * @param value The Eviction Policy which should be used for Virtual Machines within the Virtual Machine Scale Set powering this Node Pool. Possible values are `Deallocate` and `Delete`. Changing this forces a new resource to be created.
     * > **Note:** An Eviction Policy can only be configured when `priority` is set to `Spot` and will default to `Delete` unless otherwise specified.
     */
    @JvmName("eafrfnuxqdyilrst")
    public suspend fun evictionPolicy(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.evictionPolicy = mapped
    }

    /**
     * @param value Should the nodes in this Node Pool have Federal Information Processing Standard enabled? Changing this forces a new resource to be created.
     * > **Note:** FIPS support is in Public Preview - more information and details on how to opt into the Preview can be found in [this article](https://docs.microsoft.com/azure/aks/use-multiple-node-pools#add-a-fips-enabled-node-pool-preview).
     */
    @JvmName("eewtapcrxbfrjulq")
    public suspend fun fipsEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.fipsEnabled = mapped
    }

    /**
     * @param value Specifies the GPU MIG instance profile for supported GPU VM SKU. The allowed values are `MIG1g`, `MIG2g`, `MIG3g`, `MIG4g` and `MIG7g`. Changing this forces a new resource to be created.
     */
    @JvmName("pciqicwxqhjtobkr")
    public suspend fun gpuInstance(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.gpuInstance = mapped
    }

    /**
     * @param value The fully qualified resource ID of the Dedicated Host Group to provision virtual machines from. Changing this forces a new resource to be created.
     */
    @JvmName("tjffsfaesvycsewm")
    public suspend fun hostGroupId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.hostGroupId = mapped
    }

    /**
     * @param value A `kubelet_config` block as defined below. Changing this forces a new resource to be created.
     */
    @JvmName("engmexonqjbynbyx")
    public suspend fun kubeletConfig(`value`: KubernetesClusterNodePoolKubeletConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.kubeletConfig = mapped
    }

    /**
     * @param argument A `kubelet_config` block as defined below. Changing this forces a new resource to be created.
     */
    @JvmName("vvjjnwsohmrniqhx")
    public suspend fun kubeletConfig(argument: suspend KubernetesClusterNodePoolKubeletConfigArgsBuilder.() -> Unit) {
        val toBeMapped = KubernetesClusterNodePoolKubeletConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.kubeletConfig = mapped
    }

    /**
     * @param value The type of disk used by kubelet. Possible values are `OS` and `Temporary`.
     */
    @JvmName("qtrtqqkbdrtorcyk")
    public suspend fun kubeletDiskType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.kubeletDiskType = mapped
    }

    /**
     * @param value The ID of the Kubernetes Cluster where this Node Pool should exist. Changing this forces a new resource to be created.
     * > **NOTE:** The type of Default Node Pool for the Kubernetes Cluster must be `VirtualMachineScaleSets` to attach multiple node pools.
     */
    @JvmName("wrffouchihbhojre")
    public suspend fun kubernetesClusterId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.kubernetesClusterId = mapped
    }

    /**
     * @param value A `linux_os_config` block as defined below. Changing this forces a new resource to be created.
     */
    @JvmName("ssvwpcnqitfdrhcu")
    public suspend fun linuxOsConfig(`value`: KubernetesClusterNodePoolLinuxOsConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.linuxOsConfig = mapped
    }

    /**
     * @param argument A `linux_os_config` block as defined below. Changing this forces a new resource to be created.
     */
    @JvmName("yhrolsjdcmdulmji")
    public suspend fun linuxOsConfig(argument: suspend KubernetesClusterNodePoolLinuxOsConfigArgsBuilder.() -> Unit) {
        val toBeMapped = KubernetesClusterNodePoolLinuxOsConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.linuxOsConfig = mapped
    }

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

    /**
     * @param value The maximum number of pods that can run on each agent. Changing this forces a new resource to be created.
     */
    @JvmName("pmotofuqdoxycfmk")
    public suspend fun maxPods(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.maxPods = mapped
    }

    /**
     * @param value A base64-encoded string which will be written to /etc/motd after decoding. This allows customization of the message of the day for Linux nodes. It cannot be specified for Windows nodes and must be a static string (i.e. will be printed raw and not executed as a script). Changing this forces a new resource to be created.
     */
    @JvmName("mhnwlutfxdpjbsoq")
    public suspend fun messageOfTheDay(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.messageOfTheDay = mapped
    }

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

    /**
     * @param value Should this Node Pool be used for System or User resources? Possible values are `System` and `User`. Defaults to `User`.
     */
    @JvmName("fnluypygurdietkn")
    public suspend fun mode(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.mode = mapped
    }

    /**
     * @param value The name of the Node Pool which should be created within the Kubernetes Cluster. Changing this forces a new resource to be created.
     * > **NOTE:** A Windows Node Pool cannot have a `name` longer than 6 characters.
     */
    @JvmName("wmjforojckeglpyd")
    public suspend fun name(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.name = mapped
    }

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

    /**
     * @param value A map of Kubernetes labels which should be applied to nodes in this Node Pool.
     */
    @JvmName("jswxwhjmmxexrkxi")
    public suspend fun nodeLabels(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.nodeLabels = mapped
    }

    /**
     * @param values A map of Kubernetes labels which should be applied to nodes in this Node Pool.
     */
    @JvmName("xymmqpqnaauoctqe")
    public fun nodeLabels(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.nodeLabels = mapped
    }

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

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

    /**
     * @param value Resource ID for the Public IP Addresses Prefix for the nodes in this Node Pool. `enable_node_public_ip` should be `true`. Changing this forces a new resource to be created.
     */
    @JvmName("gbiiivvbvvqoiahi")
    public suspend fun nodePublicIpPrefixId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.nodePublicIpPrefixId = mapped
    }

    /**
     * @param value A list of Kubernetes taints which should be applied to nodes in the agent pool (e.g `key=value:NoSchedule`).
     */
    @JvmName("wcywhsdohgxijykf")
    public suspend fun nodeTaints(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.nodeTaints = mapped
    }

    /**
     * @param values A list of Kubernetes taints which should be applied to nodes in the agent pool (e.g `key=value:NoSchedule`).
     */
    @JvmName("adqyredlnvtxysgn")
    public suspend fun nodeTaints(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.nodeTaints = mapped
    }

    /**
     * @param value Version of Kubernetes used for the Agents. If not specified, the latest recommended version will be used at provisioning time (but won't auto-upgrade). AKS does not require an exact patch version to be specified, minor version aliases such as `1.22` are also supported. - The minor version's latest GA patch is automatically chosen in that case. More details can be found in [the documentation](https://docs.microsoft.com/en-us/azure/aks/supported-kubernetes-versions?tabs=azure-cli#alias-minor-version).
     * > **Note:** This version must be supported by the Kubernetes Cluster - as such the version of Kubernetes used on the Cluster/Control Plane may need to be upgraded first.
     */
    @JvmName("qbwtxrymdohkopcn")
    public suspend fun orchestratorVersion(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.orchestratorVersion = mapped
    }

    /**
     * @param value The Agent Operating System disk size in GB. Changing this forces a new resource to be created.
     */
    @JvmName("fdfxfxchgeeqdwkj")
    public suspend fun osDiskSizeGb(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.osDiskSizeGb = mapped
    }

    /**
     * @param value The type of disk which should be used for the Operating System. Possible values are `Ephemeral` and `Managed`. Defaults to `Managed`. Changing this forces a new resource to be created.
     */
    @JvmName("yxcccussshcuxvse")
    public suspend fun osDiskType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.osDiskType = mapped
    }

    /**
     * @param value Specifies the OS SKU used by the agent pool. Possible values are `AzureLinux`, `Ubuntu`, `Windows2019` and `Windows2022`. If not specified, the default is `Ubuntu` if OSType=Linux or `Windows2019` if OSType=Windows. And the default Windows OSSKU will be changed to `Windows2022` after Windows2019 is deprecated. Changing this from `AzureLinux` or `Ubuntu` to `AzureLinux` or `Ubuntu` will not replace the resource, otherwise it forces a new resource to be created.
     */
    @JvmName("oshqojrpxwibgiie")
    public suspend fun osSku(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.osSku = mapped
    }

    /**
     * @param value The Operating System which should be used for this Node Pool. Changing this forces a new resource to be created. Possible values are `Linux` and `Windows`. Defaults to `Linux`.
     */
    @JvmName("oabibsmcbgdqotsh")
    public suspend fun osType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.osType = mapped
    }

    /**
     * @param value The ID of the Subnet where the pods in the Node Pool should exist. Changing this forces a new resource to be created.
     */
    @JvmName("bdmlypsiihjtoqnx")
    public suspend fun podSubnetId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.podSubnetId = mapped
    }

    /**
     * @param value The Priority for Virtual Machines within the Virtual Machine Scale Set that powers this Node Pool. Possible values are `Regular` and `Spot`. Defaults to `Regular`. Changing this forces a new resource to be created.
     */
    @JvmName("lbvmfhxjtpijwaqi")
    public suspend fun priority(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.priority = mapped
    }

    /**
     * @param value The ID of the Proximity Placement Group where the Virtual Machine Scale Set that powers this Node Pool will be placed. Changing this forces a new resource to be created.
     * > **Note:** When setting `priority` to Spot - you must configure an `eviction_policy`, `spot_max_price` and add the applicable `node_labels` and `node_taints` [as per the Azure Documentation](https://docs.microsoft.com/azure/aks/spot-node-pool).
     */
    @JvmName("uoehjbnaxupyrnpj")
    public suspend fun proximityPlacementGroupId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.proximityPlacementGroupId = mapped
    }

    /**
     * @param value Specifies how the node pool should deal with scaled-down nodes. Allowed values are `Delete` and `Deallocate`. Defaults to `Delete`.
     */
    @JvmName("ayqohweubcukirdf")
    public suspend fun scaleDownMode(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.scaleDownMode = mapped
    }

    /**
     * @param value The ID of the Snapshot which should be used to create this Node Pool. Changing this forces a new resource to be created.
     */
    @JvmName("tvnicdgtsheqtwfi")
    public suspend fun snapshotId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.snapshotId = mapped
    }

    /**
     * @param value The maximum price you're willing to pay in USD per Virtual Machine. Valid values are `-1` (the current on-demand price for a Virtual Machine) or a positive value with up to five decimal places. Changing this forces a new resource to be created.
     * > **Note:** This field can only be configured when `priority` is set to `Spot`.
     */
    @JvmName("fwuhjmfxbtepmxjc")
    public suspend fun spotMaxPrice(`value`: Double?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.spotMaxPrice = mapped
    }

    /**
     * @param value A mapping of tags to assign to the resource.
     * > At this time there's a bug in the AKS API where Tags for a Node Pool are not stored in the correct case - you may wish to use [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) functionality to ignore changes to the casing until this is fixed in the AKS API.
     */
    @JvmName("rybtsfgxxsslxgti")
    public suspend fun tags(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param values A mapping of tags to assign to the resource.
     * > At this time there's a bug in the AKS API where Tags for a Node Pool are not stored in the correct case - you may wish to use [`ignoreChanges`](https://www.pulumi.com/docs/intro/concepts/programming-model/#ignorechanges) functionality to ignore changes to the casing until this is fixed in the AKS API.
     */
    @JvmName("nqgteupjlabhqhvm")
    public fun tags(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value Used to specify whether the UltraSSD is enabled in the Node Pool. Defaults to `false`. See [the documentation](https://docs.microsoft.com/azure/aks/use-ultra-disks) for more information. Changing this forces a new resource to be created.
     */
    @JvmName("dtvvfewycyolkegs")
    public suspend fun ultraSsdEnabled(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ultraSsdEnabled = mapped
    }

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

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

    /**
     * @param value The SKU which should be used for the Virtual Machines used in this Node Pool. Changing this forces a new resource to be created.
     */
    @JvmName("dsdfvmxlvbgcwvif")
    public suspend fun vmSize(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.vmSize = mapped
    }

    /**
     * @param value The ID of the Subnet where this Node Pool should exist. Changing this forces a new resource to be created.
     * > **NOTE:** A route table must be configured on this Subnet.
     */
    @JvmName("gasettprbechwogt")
    public suspend fun vnetSubnetId(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.vnetSubnetId = mapped
    }

    /**
     * @param value A `windows_profile` block as documented below. Changing this forces a new resource to be created.
     */
    @JvmName("nnatinmkumcyvxqw")
    public suspend fun windowsProfile(`value`: KubernetesClusterNodePoolWindowsProfileArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.windowsProfile = mapped
    }

    /**
     * @param argument A `windows_profile` block as documented below. Changing this forces a new resource to be created.
     */
    @JvmName("rkqrlopvikrufrbm")
    public suspend fun windowsProfile(argument: suspend KubernetesClusterNodePoolWindowsProfileArgsBuilder.() -> Unit) {
        val toBeMapped = KubernetesClusterNodePoolWindowsProfileArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.windowsProfile = mapped
    }

    /**
     * @param value Used to specify the workload runtime. Allowed values are `OCIContainer`, `WasmWasi` and `KataMshvVmIsolation`.
     * > **Note:** WebAssembly System Interface node pools are in Public Preview - more information and details on how to opt into the preview can be found in [this article](https://docs.microsoft.com/azure/aks/use-wasi-node-pools)
     * > **Note:** Pod Sandboxing / KataVM Isolation node pools are in Public Preview - more information and details on how to opt into the preview can be found in [this article](https://learn.microsoft.com/azure/aks/use-pod-sandboxing)
     */
    @JvmName("rnqqxjcorbbnywqg")
    public suspend fun workloadRuntime(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.workloadRuntime = mapped
    }

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

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

    internal fun build(): KubernetesClusterNodePoolArgs = KubernetesClusterNodePoolArgs(
        capacityReservationGroupId = capacityReservationGroupId,
        customCaTrustEnabled = customCaTrustEnabled,
        enableAutoScaling = enableAutoScaling,
        enableHostEncryption = enableHostEncryption,
        enableNodePublicIp = enableNodePublicIp,
        evictionPolicy = evictionPolicy,
        fipsEnabled = fipsEnabled,
        gpuInstance = gpuInstance,
        hostGroupId = hostGroupId,
        kubeletConfig = kubeletConfig,
        kubeletDiskType = kubeletDiskType,
        kubernetesClusterId = kubernetesClusterId,
        linuxOsConfig = linuxOsConfig,
        maxCount = maxCount,
        maxPods = maxPods,
        messageOfTheDay = messageOfTheDay,
        minCount = minCount,
        mode = mode,
        name = name,
        nodeCount = nodeCount,
        nodeLabels = nodeLabels,
        nodeNetworkProfile = nodeNetworkProfile,
        nodePublicIpPrefixId = nodePublicIpPrefixId,
        nodeTaints = nodeTaints,
        orchestratorVersion = orchestratorVersion,
        osDiskSizeGb = osDiskSizeGb,
        osDiskType = osDiskType,
        osSku = osSku,
        osType = osType,
        podSubnetId = podSubnetId,
        priority = priority,
        proximityPlacementGroupId = proximityPlacementGroupId,
        scaleDownMode = scaleDownMode,
        snapshotId = snapshotId,
        spotMaxPrice = spotMaxPrice,
        tags = tags,
        ultraSsdEnabled = ultraSsdEnabled,
        upgradeSettings = upgradeSettings,
        vmSize = vmSize,
        vnetSubnetId = vnetSubnetId,
        windowsProfile = windowsProfile,
        workloadRuntime = workloadRuntime,
        zones = zones,
    )
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy