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

com.pulumi.gcp.container.kotlin.inputs.ClusterNodePoolNodeConfigArgs.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: 8.10.0.0
Show newest version
@file:Suppress("NAME_SHADOWING", "DEPRECATION")

package com.pulumi.gcp.container.kotlin.inputs

import com.pulumi.core.Output
import com.pulumi.core.Output.of
import com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigArgs.builder
import com.pulumi.kotlin.ConvertibleToJava
import com.pulumi.kotlin.PulumiTagMarker
import com.pulumi.kotlin.applySuspend
import kotlin.Any
import kotlin.Boolean
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

/**
 *
 * @property advancedMachineFeatures Specifies options for controlling
 * advanced machine features. Structure is documented below.
 * @property bootDiskKmsKey The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: 
 * @property confidentialNodes Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below.
 * @property diskSizeGb Size of the disk attached to each node, specified
 * in GB. The smallest allowed disk size is 10GB. Defaults to 100GB.
 * @property diskType Type of the disk attached to each node
 * (e.g. 'pd-standard', 'pd-balanced' or 'pd-ssd'). If unspecified, the default disk type is 'pd-standard'
 * @property effectiveTaints List of kubernetes taints applied to each node. Structure is documented above.
 * @property enableConfidentialStorage Enabling Confidential Storage will create boot disk with confidential mode. It is disabled by default.
 * @property ephemeralStorageConfig Parameters for the ephemeral storage filesystem. If unspecified, ephemeral storage is backed by the boot disk. Structure is documented below.
 * @property ephemeralStorageLocalSsdConfig Parameters for the ephemeral storage filesystem. If unspecified, ephemeral storage is backed by the boot disk. Structure is documented below.
 * @property fastSocket Parameters for the NCCL Fast Socket feature. If unspecified, NCCL Fast Socket will not be enabled on the node pool.
 * Node Pool must enable gvnic.
 * GKE version 1.25.2-gke.1700 or later.
 * Structure is documented below.
 * @property gcfsConfig Parameters for the Google Container Filesystem (GCFS).
 * If unspecified, GCFS will not be enabled on the node pool. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version` from GKE versions 1.19 or later to use it.
 * For GKE versions 1.19, 1.20, and 1.21, the recommended minimum `node_version` would be 1.19.15-gke.1300, 1.20.11-gke.1300, and 1.21.5-gke.1300 respectively.
 * A `machine_type` that has more than 16 GiB of memory is also recommended.
 * GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming).
 * Structure is documented below.
 * @property guestAccelerators List of the type and count of accelerator cards attached to the instance.
 * Structure documented below.
 * @property gvnic Google Virtual NIC (gVNIC) is a virtual network interface.
 * Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure.
 * gVNIC is an alternative to the virtIO-based ethernet driver. GKE nodes must use a Container-Optimized OS node image.
 * GKE node version 1.15.11-gke.15 or later
 * Structure is documented below.
 * @property hostMaintenancePolicy The maintenance policy for the hosts on which the GKE VMs run on.
 * @property imageType The image type to use for this node. Note that changing the image type
 * will delete and recreate all nodes in the node pool.
 * @property kubeletConfig Kubelet configuration, currently supported attributes can be found [here](https://cloud.google.com/sdk/gcloud/reference/beta/container/node-pools/create#--system-config-from-file).
 * Structure is documented below.
 * ```
 * kubelet_config {
 * cpu_manager_policy   = "static"
 * cpu_cfs_quota        = true
 * cpu_cfs_quota_period = "100us"
 * pod_pids_limit       = 1024
 * }
 * ```
 * @property labels The Kubernetes labels (key/value pairs) to be applied to each node. The kubernetes.io/ and k8s.io/ prefixes are
 * reserved by Kubernetes Core components and cannot be specified.
 * @property linuxNodeConfig Parameters that can be configured on Linux nodes. Structure is documented below.
 * @property localNvmeSsdBlockConfig Parameters for the local NVMe SSDs. Structure is documented below.
 * @property localSsdCount The amount of local SSD disks that will be
 * attached to each cluster node. Defaults to 0.
 * @property loggingVariant Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.
 * @property machineType The name of a Google Compute Engine machine type.
 * Defaults to `e2-medium`. To create a custom machine type, value should be set as specified
 * [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType).
 * @property metadata The metadata key/value pairs assigned to instances in
 * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to
 * `true` by the API; if `metadata` is set but that default value is not
 * included, the provider will attempt to unset the value. To avoid this, set the
 * value in your config.
 * @property minCpuPlatform Minimum CPU platform to be used by this instance.
 * The instance may be scheduled on the specified or newer CPU platform. Applicable
 * values are the friendly names of CPU platforms, such as `Intel Haswell`. See the
 * [official documentation](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform)
 * for more information.
 * @property nodeGroup Setting this field will assign instances of this pool to run on the specified node group. This is useful for running workloads on [sole tenant nodes](https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes).
 * @property oauthScopes The set of Google API scopes to be made available
 * on all of the node VMs under the "default" service account.
 * Use the "https://www.googleapis.com/auth/cloud-platform" scope to grant access to all APIs. It is recommended that you set `service_account` to a non-default service account and grant IAM roles to that service account for only the resources that it needs.
 * See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes) for information on migrating off of legacy access scopes.
 * @property preemptible A boolean that represents whether or not the underlying node VMs
 * are preemptible. See the [official documentation](https://cloud.google.com/container-engine/docs/preemptible-vm)
 * for more information. Defaults to false.
 * @property reservationAffinity The configuration of the desired reservation which instances could take capacity from. Structure is documented below.
 * @property resourceLabels The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels)
 * for how these labels are applied to clusters, node pools and nodes.
 * @property resourceManagerTags A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`.
 * @property sandboxConfig Sandbox configuration for this node.
 * @property secondaryBootDisks Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.
 * @property serviceAccount The service account to be used by the Node VMs.
 * If not specified, the "default" service account is used.
 * @property shieldedInstanceConfig Shielded Instance options. Structure is documented below.
 * @property soleTenantConfig Allows specifying multiple [node affinities](https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes#node_affinity_and_anti-affinity) useful for running workloads on [sole tenant nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/sole-tenancy). `node_affinity` structure is documented below.
 * @property spot A boolean that represents whether the underlying node VMs are spot.
 * See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms)
 * for more information. Defaults to false.
 * @property tags The list of instance tags applied to all nodes. Tags are used to identify
 * valid sources or targets for network firewalls.
 * @property taints A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
 * to apply to nodes. GKE's API can only set this field on cluster creation.
 * However, GKE will add taints to your nodes if you enable certain features such
 * as GPUs. If this field is set, any diffs on this field will cause the provider to
 * recreate the underlying resource. Taint values can be updated safely in
 * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use
 * this field to manage taints. If you do, `lifecycle.ignore_changes` is
 * recommended. Structure is documented below.
 * @property workloadMetadataConfig Metadata configuration to expose to workloads on the node pool.
 * Structure is documented below.
 */
public data class ClusterNodePoolNodeConfigArgs(
    public val advancedMachineFeatures: Output? =
        null,
    public val bootDiskKmsKey: Output? = null,
    public val confidentialNodes: Output? = null,
    public val diskSizeGb: Output? = null,
    public val diskType: Output? = null,
    public val effectiveTaints: Output>? = null,
    public val enableConfidentialStorage: Output? = null,
    public val ephemeralStorageConfig: Output? =
        null,
    public val ephemeralStorageLocalSsdConfig: Output? = null,
    public val fastSocket: Output? = null,
    public val gcfsConfig: Output? = null,
    public val guestAccelerators: Output>? = null,
    public val gvnic: Output? = null,
    public val hostMaintenancePolicy: Output? =
        null,
    public val imageType: Output? = null,
    public val kubeletConfig: Output? = null,
    public val labels: Output>? = null,
    public val linuxNodeConfig: Output? = null,
    public val localNvmeSsdBlockConfig: Output? =
        null,
    public val localSsdCount: Output? = null,
    public val loggingVariant: Output? = null,
    public val machineType: Output? = null,
    public val metadata: Output>? = null,
    public val minCpuPlatform: Output? = null,
    public val nodeGroup: Output? = null,
    public val oauthScopes: Output>? = null,
    public val preemptible: Output? = null,
    public val reservationAffinity: Output? = null,
    public val resourceLabels: Output>? = null,
    public val resourceManagerTags: Output>? = null,
    public val sandboxConfig: Output? = null,
    public val secondaryBootDisks: Output>? =
        null,
    public val serviceAccount: Output? = null,
    public val shieldedInstanceConfig: Output? =
        null,
    public val soleTenantConfig: Output? = null,
    public val spot: Output? = null,
    public val tags: Output>? = null,
    public val taints: Output>? = null,
    public val workloadMetadataConfig: Output? =
        null,
) : ConvertibleToJava {
    override fun toJava(): com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigArgs =
        com.pulumi.gcp.container.inputs.ClusterNodePoolNodeConfigArgs.builder()
            .advancedMachineFeatures(
                advancedMachineFeatures?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .bootDiskKmsKey(bootDiskKmsKey?.applyValue({ args0 -> args0 }))
            .confidentialNodes(confidentialNodes?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .diskSizeGb(diskSizeGb?.applyValue({ args0 -> args0 }))
            .diskType(diskType?.applyValue({ args0 -> args0 }))
            .effectiveTaints(
                effectiveTaints?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .enableConfidentialStorage(enableConfidentialStorage?.applyValue({ args0 -> args0 }))
            .ephemeralStorageConfig(
                ephemeralStorageConfig?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .ephemeralStorageLocalSsdConfig(
                ephemeralStorageLocalSsdConfig?.applyValue({ args0 ->
                    args0.let({ args0 -> args0.toJava() })
                }),
            )
            .fastSocket(fastSocket?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .gcfsConfig(gcfsConfig?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .guestAccelerators(
                guestAccelerators?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 ->
                            args0.toJava()
                        })
                    })
                }),
            )
            .gvnic(gvnic?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .hostMaintenancePolicy(
                hostMaintenancePolicy?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .imageType(imageType?.applyValue({ args0 -> args0 }))
            .kubeletConfig(kubeletConfig?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .labels(labels?.applyValue({ args0 -> args0.map({ args0 -> args0.key.to(args0.value) }).toMap() }))
            .linuxNodeConfig(linuxNodeConfig?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .localNvmeSsdBlockConfig(
                localNvmeSsdBlockConfig?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .localSsdCount(localSsdCount?.applyValue({ args0 -> args0 }))
            .loggingVariant(loggingVariant?.applyValue({ args0 -> args0 }))
            .machineType(machineType?.applyValue({ args0 -> args0 }))
            .metadata(
                metadata?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.key.to(args0.value)
                    }).toMap()
                }),
            )
            .minCpuPlatform(minCpuPlatform?.applyValue({ args0 -> args0 }))
            .nodeGroup(nodeGroup?.applyValue({ args0 -> args0 }))
            .oauthScopes(oauthScopes?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .preemptible(preemptible?.applyValue({ args0 -> args0 }))
            .reservationAffinity(
                reservationAffinity?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .resourceLabels(
                resourceLabels?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.key.to(args0.value)
                    }).toMap()
                }),
            )
            .resourceManagerTags(
                resourceManagerTags?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.key.to(args0.value)
                    }).toMap()
                }),
            )
            .sandboxConfig(sandboxConfig?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .secondaryBootDisks(
                secondaryBootDisks?.applyValue({ args0 ->
                    args0.map({ args0 ->
                        args0.let({ args0 -> args0.toJava() })
                    })
                }),
            )
            .serviceAccount(serviceAccount?.applyValue({ args0 -> args0 }))
            .shieldedInstanceConfig(
                shieldedInstanceConfig?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            )
            .soleTenantConfig(soleTenantConfig?.applyValue({ args0 -> args0.let({ args0 -> args0.toJava() }) }))
            .spot(spot?.applyValue({ args0 -> args0 }))
            .tags(tags?.applyValue({ args0 -> args0.map({ args0 -> args0 }) }))
            .taints(taints?.applyValue({ args0 -> args0.map({ args0 -> args0.let({ args0 -> args0.toJava() }) }) }))
            .workloadMetadataConfig(
                workloadMetadataConfig?.applyValue({ args0 ->
                    args0.let({ args0 ->
                        args0.toJava()
                    })
                }),
            ).build()
}

/**
 * Builder for [ClusterNodePoolNodeConfigArgs].
 */
@PulumiTagMarker
public class ClusterNodePoolNodeConfigArgsBuilder internal constructor() {
    private var advancedMachineFeatures: Output? =
        null

    private var bootDiskKmsKey: Output? = null

    private var confidentialNodes: Output? = null

    private var diskSizeGb: Output? = null

    private var diskType: Output? = null

    private var effectiveTaints: Output>? = null

    private var enableConfidentialStorage: Output? = null

    private var ephemeralStorageConfig: Output? =
        null

    private var ephemeralStorageLocalSsdConfig:
        Output? = null

    private var fastSocket: Output? = null

    private var gcfsConfig: Output? = null

    private var guestAccelerators: Output>? = null

    private var gvnic: Output? = null

    private var hostMaintenancePolicy: Output? =
        null

    private var imageType: Output? = null

    private var kubeletConfig: Output? = null

    private var labels: Output>? = null

    private var linuxNodeConfig: Output? = null

    private var localNvmeSsdBlockConfig: Output? =
        null

    private var localSsdCount: Output? = null

    private var loggingVariant: Output? = null

    private var machineType: Output? = null

    private var metadata: Output>? = null

    private var minCpuPlatform: Output? = null

    private var nodeGroup: Output? = null

    private var oauthScopes: Output>? = null

    private var preemptible: Output? = null

    private var reservationAffinity: Output? = null

    private var resourceLabels: Output>? = null

    private var resourceManagerTags: Output>? = null

    private var sandboxConfig: Output? = null

    private var secondaryBootDisks: Output>? =
        null

    private var serviceAccount: Output? = null

    private var shieldedInstanceConfig: Output? =
        null

    private var soleTenantConfig: Output? = null

    private var spot: Output? = null

    private var tags: Output>? = null

    private var taints: Output>? = null

    private var workloadMetadataConfig: Output? =
        null

    /**
     * @param value Specifies options for controlling
     * advanced machine features. Structure is documented below.
     */
    @JvmName("wdlbqgveaofkiimf")
    public suspend fun advancedMachineFeatures(`value`: Output) {
        this.advancedMachineFeatures = value
    }

    /**
     * @param value The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: 
     */
    @JvmName("hjkxgcfplxfyfork")
    public suspend fun bootDiskKmsKey(`value`: Output) {
        this.bootDiskKmsKey = value
    }

    /**
     * @param value Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below.
     */
    @JvmName("iemkadtocsxotylo")
    public suspend fun confidentialNodes(`value`: Output) {
        this.confidentialNodes = value
    }

    /**
     * @param value Size of the disk attached to each node, specified
     * in GB. The smallest allowed disk size is 10GB. Defaults to 100GB.
     */
    @JvmName("hrtxtwoxyshjafwu")
    public suspend fun diskSizeGb(`value`: Output) {
        this.diskSizeGb = value
    }

    /**
     * @param value Type of the disk attached to each node
     * (e.g. 'pd-standard', 'pd-balanced' or 'pd-ssd'). If unspecified, the default disk type is 'pd-standard'
     */
    @JvmName("pedrmuwnyghlbgux")
    public suspend fun diskType(`value`: Output) {
        this.diskType = value
    }

    /**
     * @param value List of kubernetes taints applied to each node. Structure is documented above.
     */
    @JvmName("mejkdsmmirvtvxyt")
    public suspend fun effectiveTaints(`value`: Output>) {
        this.effectiveTaints = value
    }

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

    /**
     * @param values List of kubernetes taints applied to each node. Structure is documented above.
     */
    @JvmName("gcetmvspphhsccwg")
    public suspend fun effectiveTaints(values: List>) {
        this.effectiveTaints = Output.all(values)
    }

    /**
     * @param value Enabling Confidential Storage will create boot disk with confidential mode. It is disabled by default.
     */
    @JvmName("edeauuwsqoqglmcx")
    public suspend fun enableConfidentialStorage(`value`: Output) {
        this.enableConfidentialStorage = value
    }

    /**
     * @param value Parameters for the ephemeral storage filesystem. If unspecified, ephemeral storage is backed by the boot disk. Structure is documented below.
     */
    @JvmName("rowqinybfgutpmhq")
    public suspend fun ephemeralStorageConfig(`value`: Output) {
        this.ephemeralStorageConfig = value
    }

    /**
     * @param value Parameters for the ephemeral storage filesystem. If unspecified, ephemeral storage is backed by the boot disk. Structure is documented below.
     */
    @JvmName("fyqibhlskcjducan")
    public suspend fun ephemeralStorageLocalSsdConfig(`value`: Output) {
        this.ephemeralStorageLocalSsdConfig = value
    }

    /**
     * @param value Parameters for the NCCL Fast Socket feature. If unspecified, NCCL Fast Socket will not be enabled on the node pool.
     * Node Pool must enable gvnic.
     * GKE version 1.25.2-gke.1700 or later.
     * Structure is documented below.
     */
    @JvmName("bbdjuwlrexkojagi")
    public suspend fun fastSocket(`value`: Output) {
        this.fastSocket = value
    }

    /**
     * @param value Parameters for the Google Container Filesystem (GCFS).
     * If unspecified, GCFS will not be enabled on the node pool. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version` from GKE versions 1.19 or later to use it.
     * For GKE versions 1.19, 1.20, and 1.21, the recommended minimum `node_version` would be 1.19.15-gke.1300, 1.20.11-gke.1300, and 1.21.5-gke.1300 respectively.
     * A `machine_type` that has more than 16 GiB of memory is also recommended.
     * GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming).
     * Structure is documented below.
     */
    @JvmName("ekpiesfcqoijofql")
    public suspend fun gcfsConfig(`value`: Output) {
        this.gcfsConfig = value
    }

    /**
     * @param value List of the type and count of accelerator cards attached to the instance.
     * Structure documented below.
     */
    @JvmName("ergigcdswdbadwmc")
    public suspend fun guestAccelerators(`value`: Output>) {
        this.guestAccelerators = value
    }

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

    /**
     * @param values List of the type and count of accelerator cards attached to the instance.
     * Structure documented below.
     */
    @JvmName("mppustbgmpaedplt")
    public suspend fun guestAccelerators(values: List>) {
        this.guestAccelerators = Output.all(values)
    }

    /**
     * @param value Google Virtual NIC (gVNIC) is a virtual network interface.
     * Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure.
     * gVNIC is an alternative to the virtIO-based ethernet driver. GKE nodes must use a Container-Optimized OS node image.
     * GKE node version 1.15.11-gke.15 or later
     * Structure is documented below.
     */
    @JvmName("vkdwcrnhggetvhyj")
    public suspend fun gvnic(`value`: Output) {
        this.gvnic = value
    }

    /**
     * @param value The maintenance policy for the hosts on which the GKE VMs run on.
     */
    @JvmName("fbhylmsaxjxoyhqf")
    public suspend fun hostMaintenancePolicy(`value`: Output) {
        this.hostMaintenancePolicy = value
    }

    /**
     * @param value The image type to use for this node. Note that changing the image type
     * will delete and recreate all nodes in the node pool.
     */
    @JvmName("undaofdowofdpawm")
    public suspend fun imageType(`value`: Output) {
        this.imageType = value
    }

    /**
     * @param value Kubelet configuration, currently supported attributes can be found [here](https://cloud.google.com/sdk/gcloud/reference/beta/container/node-pools/create#--system-config-from-file).
     * Structure is documented below.
     * ```
     * kubelet_config {
     * cpu_manager_policy   = "static"
     * cpu_cfs_quota        = true
     * cpu_cfs_quota_period = "100us"
     * pod_pids_limit       = 1024
     * }
     * ```
     */
    @JvmName("sngyqonwiaxgxvkv")
    public suspend fun kubeletConfig(`value`: Output) {
        this.kubeletConfig = value
    }

    /**
     * @param value The Kubernetes labels (key/value pairs) to be applied to each node. The kubernetes.io/ and k8s.io/ prefixes are
     * reserved by Kubernetes Core components and cannot be specified.
     */
    @JvmName("hweglricjwbcfqho")
    public suspend fun labels(`value`: Output>) {
        this.labels = value
    }

    /**
     * @param value Parameters that can be configured on Linux nodes. Structure is documented below.
     */
    @JvmName("bxgrrhuueseiclxo")
    public suspend fun linuxNodeConfig(`value`: Output) {
        this.linuxNodeConfig = value
    }

    /**
     * @param value Parameters for the local NVMe SSDs. Structure is documented below.
     */
    @JvmName("gtrbqingjkfnqmdr")
    public suspend fun localNvmeSsdBlockConfig(`value`: Output) {
        this.localNvmeSsdBlockConfig = value
    }

    /**
     * @param value The amount of local SSD disks that will be
     * attached to each cluster node. Defaults to 0.
     */
    @JvmName("saobfgfilogkhwwp")
    public suspend fun localSsdCount(`value`: Output) {
        this.localSsdCount = value
    }

    /**
     * @param value Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.
     */
    @JvmName("lfeuhbqkjjksatdl")
    public suspend fun loggingVariant(`value`: Output) {
        this.loggingVariant = value
    }

    /**
     * @param value The name of a Google Compute Engine machine type.
     * Defaults to `e2-medium`. To create a custom machine type, value should be set as specified
     * [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType).
     */
    @JvmName("kgbkhioykklfqwbp")
    public suspend fun machineType(`value`: Output) {
        this.machineType = value
    }

    /**
     * @param value The metadata key/value pairs assigned to instances in
     * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to
     * `true` by the API; if `metadata` is set but that default value is not
     * included, the provider will attempt to unset the value. To avoid this, set the
     * value in your config.
     */
    @JvmName("lwtcinqjhohbesfa")
    public suspend fun metadata(`value`: Output>) {
        this.metadata = value
    }

    /**
     * @param value Minimum CPU platform to be used by this instance.
     * The instance may be scheduled on the specified or newer CPU platform. Applicable
     * values are the friendly names of CPU platforms, such as `Intel Haswell`. See the
     * [official documentation](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform)
     * for more information.
     */
    @JvmName("yxlcjimfhcndcgwm")
    public suspend fun minCpuPlatform(`value`: Output) {
        this.minCpuPlatform = value
    }

    /**
     * @param value Setting this field will assign instances of this pool to run on the specified node group. This is useful for running workloads on [sole tenant nodes](https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes).
     */
    @JvmName("neemaptmywryftbc")
    public suspend fun nodeGroup(`value`: Output) {
        this.nodeGroup = value
    }

    /**
     * @param value The set of Google API scopes to be made available
     * on all of the node VMs under the "default" service account.
     * Use the "https://www.googleapis.com/auth/cloud-platform" scope to grant access to all APIs. It is recommended that you set `service_account` to a non-default service account and grant IAM roles to that service account for only the resources that it needs.
     * See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes) for information on migrating off of legacy access scopes.
     */
    @JvmName("votrdylagvlaxeuu")
    public suspend fun oauthScopes(`value`: Output>) {
        this.oauthScopes = value
    }

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

    /**
     * @param values The set of Google API scopes to be made available
     * on all of the node VMs under the "default" service account.
     * Use the "https://www.googleapis.com/auth/cloud-platform" scope to grant access to all APIs. It is recommended that you set `service_account` to a non-default service account and grant IAM roles to that service account for only the resources that it needs.
     * See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes) for information on migrating off of legacy access scopes.
     */
    @JvmName("lfqibcqjdrnnljff")
    public suspend fun oauthScopes(values: List>) {
        this.oauthScopes = Output.all(values)
    }

    /**
     * @param value A boolean that represents whether or not the underlying node VMs
     * are preemptible. See the [official documentation](https://cloud.google.com/container-engine/docs/preemptible-vm)
     * for more information. Defaults to false.
     */
    @JvmName("xaklkincvpseyblu")
    public suspend fun preemptible(`value`: Output) {
        this.preemptible = value
    }

    /**
     * @param value The configuration of the desired reservation which instances could take capacity from. Structure is documented below.
     */
    @JvmName("hwtavlfrpuvqbafg")
    public suspend fun reservationAffinity(`value`: Output) {
        this.reservationAffinity = value
    }

    /**
     * @param value The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels)
     * for how these labels are applied to clusters, node pools and nodes.
     */
    @JvmName("soomvapwtprjohwn")
    public suspend fun resourceLabels(`value`: Output>) {
        this.resourceLabels = value
    }

    /**
     * @param value A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`.
     */
    @JvmName("ibyjhsputqmkqgmn")
    public suspend fun resourceManagerTags(`value`: Output>) {
        this.resourceManagerTags = value
    }

    /**
     * @param value Sandbox configuration for this node.
     */
    @JvmName("oatufucfuaanxxrw")
    public suspend fun sandboxConfig(`value`: Output) {
        this.sandboxConfig = value
    }

    /**
     * @param value Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.
     */
    @JvmName("vkwwhabcwjuusifr")
    public suspend fun secondaryBootDisks(`value`: Output>) {
        this.secondaryBootDisks = value
    }

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

    /**
     * @param values Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.
     */
    @JvmName("nfmwujibuydtaoob")
    public suspend fun secondaryBootDisks(values: List>) {
        this.secondaryBootDisks = Output.all(values)
    }

    /**
     * @param value The service account to be used by the Node VMs.
     * If not specified, the "default" service account is used.
     */
    @JvmName("elvftvfbgwvrwtbg")
    public suspend fun serviceAccount(`value`: Output) {
        this.serviceAccount = value
    }

    /**
     * @param value Shielded Instance options. Structure is documented below.
     */
    @JvmName("axornkhauhichnsk")
    public suspend fun shieldedInstanceConfig(`value`: Output) {
        this.shieldedInstanceConfig = value
    }

    /**
     * @param value Allows specifying multiple [node affinities](https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes#node_affinity_and_anti-affinity) useful for running workloads on [sole tenant nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/sole-tenancy). `node_affinity` structure is documented below.
     */
    @JvmName("vstwiwmvesakwsdv")
    public suspend fun soleTenantConfig(`value`: Output) {
        this.soleTenantConfig = value
    }

    /**
     * @param value A boolean that represents whether the underlying node VMs are spot.
     * See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms)
     * for more information. Defaults to false.
     */
    @JvmName("vtlnspmrhaubsvrd")
    public suspend fun spot(`value`: Output) {
        this.spot = value
    }

    /**
     * @param value The list of instance tags applied to all nodes. Tags are used to identify
     * valid sources or targets for network firewalls.
     */
    @JvmName("xldhpgqpkxrjvgrv")
    public suspend fun tags(`value`: Output>) {
        this.tags = value
    }

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

    /**
     * @param values The list of instance tags applied to all nodes. Tags are used to identify
     * valid sources or targets for network firewalls.
     */
    @JvmName("bclgnjnjhfikpvuk")
    public suspend fun tags(values: List>) {
        this.tags = Output.all(values)
    }

    /**
     * @param value A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
     * to apply to nodes. GKE's API can only set this field on cluster creation.
     * However, GKE will add taints to your nodes if you enable certain features such
     * as GPUs. If this field is set, any diffs on this field will cause the provider to
     * recreate the underlying resource. Taint values can be updated safely in
     * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use
     * this field to manage taints. If you do, `lifecycle.ignore_changes` is
     * recommended. Structure is documented below.
     */
    @JvmName("vmgqxvhnqkflepsp")
    public suspend fun taints(`value`: Output>) {
        this.taints = value
    }

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

    /**
     * @param values A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
     * to apply to nodes. GKE's API can only set this field on cluster creation.
     * However, GKE will add taints to your nodes if you enable certain features such
     * as GPUs. If this field is set, any diffs on this field will cause the provider to
     * recreate the underlying resource. Taint values can be updated safely in
     * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use
     * this field to manage taints. If you do, `lifecycle.ignore_changes` is
     * recommended. Structure is documented below.
     */
    @JvmName("dgqrfjvvobxobrtp")
    public suspend fun taints(values: List>) {
        this.taints = Output.all(values)
    }

    /**
     * @param value Metadata configuration to expose to workloads on the node pool.
     * Structure is documented below.
     */
    @JvmName("dbfnjtsqkkemufwq")
    public suspend fun workloadMetadataConfig(`value`: Output) {
        this.workloadMetadataConfig = value
    }

    /**
     * @param value Specifies options for controlling
     * advanced machine features. Structure is documented below.
     */
    @JvmName("jihvqivogquaupje")
    public suspend fun advancedMachineFeatures(`value`: ClusterNodePoolNodeConfigAdvancedMachineFeaturesArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.advancedMachineFeatures = mapped
    }

    /**
     * @param argument Specifies options for controlling
     * advanced machine features. Structure is documented below.
     */
    @JvmName("ucdwxyvsrsesoqny")
    public suspend fun advancedMachineFeatures(argument: suspend ClusterNodePoolNodeConfigAdvancedMachineFeaturesArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigAdvancedMachineFeaturesArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.advancedMachineFeatures = mapped
    }

    /**
     * @param value The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: 
     */
    @JvmName("lovmcnbtbmnjwhtt")
    public suspend fun bootDiskKmsKey(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.bootDiskKmsKey = mapped
    }

    /**
     * @param value Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below.
     */
    @JvmName("ofahxlgagatswslk")
    public suspend fun confidentialNodes(`value`: ClusterNodePoolNodeConfigConfidentialNodesArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.confidentialNodes = mapped
    }

    /**
     * @param argument Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below.
     */
    @JvmName("kwwhkgxiansqinrm")
    public suspend fun confidentialNodes(argument: suspend ClusterNodePoolNodeConfigConfidentialNodesArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigConfidentialNodesArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.confidentialNodes = mapped
    }

    /**
     * @param value Size of the disk attached to each node, specified
     * in GB. The smallest allowed disk size is 10GB. Defaults to 100GB.
     */
    @JvmName("vaushffpeqnvegse")
    public suspend fun diskSizeGb(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.diskSizeGb = mapped
    }

    /**
     * @param value Type of the disk attached to each node
     * (e.g. 'pd-standard', 'pd-balanced' or 'pd-ssd'). If unspecified, the default disk type is 'pd-standard'
     */
    @JvmName("knqihtlwljonkwrx")
    public suspend fun diskType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.diskType = mapped
    }

    /**
     * @param value List of kubernetes taints applied to each node. Structure is documented above.
     */
    @JvmName("ryoicrnsxrsgarrj")
    public suspend fun effectiveTaints(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.effectiveTaints = mapped
    }

    /**
     * @param argument List of kubernetes taints applied to each node. Structure is documented above.
     */
    @JvmName("xxylvvhpsuvouffq")
    public suspend fun effectiveTaints(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ClusterNodePoolNodeConfigEffectiveTaintArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.effectiveTaints = mapped
    }

    /**
     * @param argument List of kubernetes taints applied to each node. Structure is documented above.
     */
    @JvmName("rajnnsafdaawkuph")
    public suspend fun effectiveTaints(vararg argument: suspend ClusterNodePoolNodeConfigEffectiveTaintArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ClusterNodePoolNodeConfigEffectiveTaintArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.effectiveTaints = mapped
    }

    /**
     * @param argument List of kubernetes taints applied to each node. Structure is documented above.
     */
    @JvmName("meewyrwkpegxsiob")
    public suspend fun effectiveTaints(argument: suspend ClusterNodePoolNodeConfigEffectiveTaintArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ClusterNodePoolNodeConfigEffectiveTaintArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.effectiveTaints = mapped
    }

    /**
     * @param values List of kubernetes taints applied to each node. Structure is documented above.
     */
    @JvmName("vuqkfdbaoohrmixp")
    public suspend fun effectiveTaints(vararg values: ClusterNodePoolNodeConfigEffectiveTaintArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.effectiveTaints = mapped
    }

    /**
     * @param value Enabling Confidential Storage will create boot disk with confidential mode. It is disabled by default.
     */
    @JvmName("cmmvewhdiayoopaf")
    public suspend fun enableConfidentialStorage(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.enableConfidentialStorage = mapped
    }

    /**
     * @param value Parameters for the ephemeral storage filesystem. If unspecified, ephemeral storage is backed by the boot disk. Structure is documented below.
     */
    @JvmName("whftemsxjqyujxmr")
    public suspend fun ephemeralStorageConfig(`value`: ClusterNodePoolNodeConfigEphemeralStorageConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ephemeralStorageConfig = mapped
    }

    /**
     * @param argument Parameters for the ephemeral storage filesystem. If unspecified, ephemeral storage is backed by the boot disk. Structure is documented below.
     */
    @JvmName("saawpoekqjxbjbuf")
    public suspend fun ephemeralStorageConfig(argument: suspend ClusterNodePoolNodeConfigEphemeralStorageConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigEphemeralStorageConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.ephemeralStorageConfig = mapped
    }

    /**
     * @param value Parameters for the ephemeral storage filesystem. If unspecified, ephemeral storage is backed by the boot disk. Structure is documented below.
     */
    @JvmName("mcqukbaewfdasjsw")
    public suspend fun ephemeralStorageLocalSsdConfig(`value`: ClusterNodePoolNodeConfigEphemeralStorageLocalSsdConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.ephemeralStorageLocalSsdConfig = mapped
    }

    /**
     * @param argument Parameters for the ephemeral storage filesystem. If unspecified, ephemeral storage is backed by the boot disk. Structure is documented below.
     */
    @JvmName("giinqmtirtrdjxaj")
    public suspend fun ephemeralStorageLocalSsdConfig(argument: suspend ClusterNodePoolNodeConfigEphemeralStorageLocalSsdConfigArgsBuilder.() -> Unit) {
        val toBeMapped =
            ClusterNodePoolNodeConfigEphemeralStorageLocalSsdConfigArgsBuilder().applySuspend {
                argument()
            }.build()
        val mapped = of(toBeMapped)
        this.ephemeralStorageLocalSsdConfig = mapped
    }

    /**
     * @param value Parameters for the NCCL Fast Socket feature. If unspecified, NCCL Fast Socket will not be enabled on the node pool.
     * Node Pool must enable gvnic.
     * GKE version 1.25.2-gke.1700 or later.
     * Structure is documented below.
     */
    @JvmName("pbqpcpdjckqadayl")
    public suspend fun fastSocket(`value`: ClusterNodePoolNodeConfigFastSocketArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.fastSocket = mapped
    }

    /**
     * @param argument Parameters for the NCCL Fast Socket feature. If unspecified, NCCL Fast Socket will not be enabled on the node pool.
     * Node Pool must enable gvnic.
     * GKE version 1.25.2-gke.1700 or later.
     * Structure is documented below.
     */
    @JvmName("ymggmqgltocktpps")
    public suspend fun fastSocket(argument: suspend ClusterNodePoolNodeConfigFastSocketArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigFastSocketArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.fastSocket = mapped
    }

    /**
     * @param value Parameters for the Google Container Filesystem (GCFS).
     * If unspecified, GCFS will not be enabled on the node pool. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version` from GKE versions 1.19 or later to use it.
     * For GKE versions 1.19, 1.20, and 1.21, the recommended minimum `node_version` would be 1.19.15-gke.1300, 1.20.11-gke.1300, and 1.21.5-gke.1300 respectively.
     * A `machine_type` that has more than 16 GiB of memory is also recommended.
     * GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming).
     * Structure is documented below.
     */
    @JvmName("qtvapsllekbvklwq")
    public suspend fun gcfsConfig(`value`: ClusterNodePoolNodeConfigGcfsConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.gcfsConfig = mapped
    }

    /**
     * @param argument Parameters for the Google Container Filesystem (GCFS).
     * If unspecified, GCFS will not be enabled on the node pool. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version` from GKE versions 1.19 or later to use it.
     * For GKE versions 1.19, 1.20, and 1.21, the recommended minimum `node_version` would be 1.19.15-gke.1300, 1.20.11-gke.1300, and 1.21.5-gke.1300 respectively.
     * A `machine_type` that has more than 16 GiB of memory is also recommended.
     * GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming).
     * Structure is documented below.
     */
    @JvmName("cdarhfgpwqxgyyjn")
    public suspend fun gcfsConfig(argument: suspend ClusterNodePoolNodeConfigGcfsConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigGcfsConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.gcfsConfig = mapped
    }

    /**
     * @param value List of the type and count of accelerator cards attached to the instance.
     * Structure documented below.
     */
    @JvmName("fncivsouuxsjjxvm")
    public suspend fun guestAccelerators(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.guestAccelerators = mapped
    }

    /**
     * @param argument List of the type and count of accelerator cards attached to the instance.
     * Structure documented below.
     */
    @JvmName("ycpjmcxlbsgjddwd")
    public suspend fun guestAccelerators(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ClusterNodePoolNodeConfigGuestAcceleratorArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.guestAccelerators = mapped
    }

    /**
     * @param argument List of the type and count of accelerator cards attached to the instance.
     * Structure documented below.
     */
    @JvmName("iofmrmrkviugycgl")
    public suspend fun guestAccelerators(vararg argument: suspend ClusterNodePoolNodeConfigGuestAcceleratorArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ClusterNodePoolNodeConfigGuestAcceleratorArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.guestAccelerators = mapped
    }

    /**
     * @param argument List of the type and count of accelerator cards attached to the instance.
     * Structure documented below.
     */
    @JvmName("alkmqpiohilwpeag")
    public suspend fun guestAccelerators(argument: suspend ClusterNodePoolNodeConfigGuestAcceleratorArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ClusterNodePoolNodeConfigGuestAcceleratorArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.guestAccelerators = mapped
    }

    /**
     * @param values List of the type and count of accelerator cards attached to the instance.
     * Structure documented below.
     */
    @JvmName("xfpeybpfunnqusyd")
    public suspend fun guestAccelerators(vararg values: ClusterNodePoolNodeConfigGuestAcceleratorArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.guestAccelerators = mapped
    }

    /**
     * @param value Google Virtual NIC (gVNIC) is a virtual network interface.
     * Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure.
     * gVNIC is an alternative to the virtIO-based ethernet driver. GKE nodes must use a Container-Optimized OS node image.
     * GKE node version 1.15.11-gke.15 or later
     * Structure is documented below.
     */
    @JvmName("kckphxmqobbxkdfm")
    public suspend fun gvnic(`value`: ClusterNodePoolNodeConfigGvnicArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.gvnic = mapped
    }

    /**
     * @param argument Google Virtual NIC (gVNIC) is a virtual network interface.
     * Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure.
     * gVNIC is an alternative to the virtIO-based ethernet driver. GKE nodes must use a Container-Optimized OS node image.
     * GKE node version 1.15.11-gke.15 or later
     * Structure is documented below.
     */
    @JvmName("nvcilwublqugtixn")
    public suspend fun gvnic(argument: suspend ClusterNodePoolNodeConfigGvnicArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigGvnicArgsBuilder().applySuspend { argument() }.build()
        val mapped = of(toBeMapped)
        this.gvnic = mapped
    }

    /**
     * @param value The maintenance policy for the hosts on which the GKE VMs run on.
     */
    @JvmName("vwwgnlvgwsjrrbpx")
    public suspend fun hostMaintenancePolicy(`value`: ClusterNodePoolNodeConfigHostMaintenancePolicyArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.hostMaintenancePolicy = mapped
    }

    /**
     * @param argument The maintenance policy for the hosts on which the GKE VMs run on.
     */
    @JvmName("dhrflfnlopsykaup")
    public suspend fun hostMaintenancePolicy(argument: suspend ClusterNodePoolNodeConfigHostMaintenancePolicyArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigHostMaintenancePolicyArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.hostMaintenancePolicy = mapped
    }

    /**
     * @param value The image type to use for this node. Note that changing the image type
     * will delete and recreate all nodes in the node pool.
     */
    @JvmName("fleeslkghlmyanyu")
    public suspend fun imageType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.imageType = mapped
    }

    /**
     * @param value Kubelet configuration, currently supported attributes can be found [here](https://cloud.google.com/sdk/gcloud/reference/beta/container/node-pools/create#--system-config-from-file).
     * Structure is documented below.
     * ```
     * kubelet_config {
     * cpu_manager_policy   = "static"
     * cpu_cfs_quota        = true
     * cpu_cfs_quota_period = "100us"
     * pod_pids_limit       = 1024
     * }
     * ```
     */
    @JvmName("mmfavpgxeycnends")
    public suspend fun kubeletConfig(`value`: ClusterNodePoolNodeConfigKubeletConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.kubeletConfig = mapped
    }

    /**
     * @param argument Kubelet configuration, currently supported attributes can be found [here](https://cloud.google.com/sdk/gcloud/reference/beta/container/node-pools/create#--system-config-from-file).
     * Structure is documented below.
     * ```
     * kubelet_config {
     * cpu_manager_policy   = "static"
     * cpu_cfs_quota        = true
     * cpu_cfs_quota_period = "100us"
     * pod_pids_limit       = 1024
     * }
     * ```
     */
    @JvmName("uoaoqketrrkkqhwc")
    public suspend fun kubeletConfig(argument: suspend ClusterNodePoolNodeConfigKubeletConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigKubeletConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.kubeletConfig = mapped
    }

    /**
     * @param value The Kubernetes labels (key/value pairs) to be applied to each node. The kubernetes.io/ and k8s.io/ prefixes are
     * reserved by Kubernetes Core components and cannot be specified.
     */
    @JvmName("ugsdbpnvxyfcbpph")
    public suspend fun labels(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.labels = mapped
    }

    /**
     * @param values The Kubernetes labels (key/value pairs) to be applied to each node. The kubernetes.io/ and k8s.io/ prefixes are
     * reserved by Kubernetes Core components and cannot be specified.
     */
    @JvmName("ewacjawpsuemgoue")
    public fun labels(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.labels = mapped
    }

    /**
     * @param value Parameters that can be configured on Linux nodes. Structure is documented below.
     */
    @JvmName("xoqaprxvdhdirsnp")
    public suspend fun linuxNodeConfig(`value`: ClusterNodePoolNodeConfigLinuxNodeConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.linuxNodeConfig = mapped
    }

    /**
     * @param argument Parameters that can be configured on Linux nodes. Structure is documented below.
     */
    @JvmName("hjlfudcvqkxmgvih")
    public suspend fun linuxNodeConfig(argument: suspend ClusterNodePoolNodeConfigLinuxNodeConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigLinuxNodeConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.linuxNodeConfig = mapped
    }

    /**
     * @param value Parameters for the local NVMe SSDs. Structure is documented below.
     */
    @JvmName("ffefishuqhfupfrr")
    public suspend fun localNvmeSsdBlockConfig(`value`: ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.localNvmeSsdBlockConfig = mapped
    }

    /**
     * @param argument Parameters for the local NVMe SSDs. Structure is documented below.
     */
    @JvmName("heqkibcpyoyosyis")
    public suspend fun localNvmeSsdBlockConfig(argument: suspend ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigLocalNvmeSsdBlockConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.localNvmeSsdBlockConfig = mapped
    }

    /**
     * @param value The amount of local SSD disks that will be
     * attached to each cluster node. Defaults to 0.
     */
    @JvmName("lojoekymcjnjloug")
    public suspend fun localSsdCount(`value`: Int?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.localSsdCount = mapped
    }

    /**
     * @param value Parameter for specifying the type of logging agent used in a node pool. This will override any cluster-wide default value. Valid values include DEFAULT and MAX_THROUGHPUT. See [Increasing logging agent throughput](https://cloud.google.com/stackdriver/docs/solutions/gke/managing-logs#throughput) for more information.
     */
    @JvmName("amfdkcyuocnpjlem")
    public suspend fun loggingVariant(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.loggingVariant = mapped
    }

    /**
     * @param value The name of a Google Compute Engine machine type.
     * Defaults to `e2-medium`. To create a custom machine type, value should be set as specified
     * [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType).
     */
    @JvmName("ewhaoqakvtbolbmd")
    public suspend fun machineType(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.machineType = mapped
    }

    /**
     * @param value The metadata key/value pairs assigned to instances in
     * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to
     * `true` by the API; if `metadata` is set but that default value is not
     * included, the provider will attempt to unset the value. To avoid this, set the
     * value in your config.
     */
    @JvmName("pwhkhryqyuvlmspo")
    public suspend fun metadata(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.metadata = mapped
    }

    /**
     * @param values The metadata key/value pairs assigned to instances in
     * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to
     * `true` by the API; if `metadata` is set but that default value is not
     * included, the provider will attempt to unset the value. To avoid this, set the
     * value in your config.
     */
    @JvmName("ydgkctrhnobhbmji")
    public fun metadata(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.metadata = mapped
    }

    /**
     * @param value Minimum CPU platform to be used by this instance.
     * The instance may be scheduled on the specified or newer CPU platform. Applicable
     * values are the friendly names of CPU platforms, such as `Intel Haswell`. See the
     * [official documentation](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform)
     * for more information.
     */
    @JvmName("uqunjtajvtjcyhiu")
    public suspend fun minCpuPlatform(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.minCpuPlatform = mapped
    }

    /**
     * @param value Setting this field will assign instances of this pool to run on the specified node group. This is useful for running workloads on [sole tenant nodes](https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes).
     */
    @JvmName("fsrexnganomlpkth")
    public suspend fun nodeGroup(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.nodeGroup = mapped
    }

    /**
     * @param value The set of Google API scopes to be made available
     * on all of the node VMs under the "default" service account.
     * Use the "https://www.googleapis.com/auth/cloud-platform" scope to grant access to all APIs. It is recommended that you set `service_account` to a non-default service account and grant IAM roles to that service account for only the resources that it needs.
     * See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes) for information on migrating off of legacy access scopes.
     */
    @JvmName("qhqdplipedyhxjus")
    public suspend fun oauthScopes(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.oauthScopes = mapped
    }

    /**
     * @param values The set of Google API scopes to be made available
     * on all of the node VMs under the "default" service account.
     * Use the "https://www.googleapis.com/auth/cloud-platform" scope to grant access to all APIs. It is recommended that you set `service_account` to a non-default service account and grant IAM roles to that service account for only the resources that it needs.
     * See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/access-scopes) for information on migrating off of legacy access scopes.
     */
    @JvmName("kocikwwiiaijdngc")
    public suspend fun oauthScopes(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.oauthScopes = mapped
    }

    /**
     * @param value A boolean that represents whether or not the underlying node VMs
     * are preemptible. See the [official documentation](https://cloud.google.com/container-engine/docs/preemptible-vm)
     * for more information. Defaults to false.
     */
    @JvmName("vqjgljfiwbhwkxnj")
    public suspend fun preemptible(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.preemptible = mapped
    }

    /**
     * @param value The configuration of the desired reservation which instances could take capacity from. Structure is documented below.
     */
    @JvmName("ahcpfitvycfduhhe")
    public suspend fun reservationAffinity(`value`: ClusterNodePoolNodeConfigReservationAffinityArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.reservationAffinity = mapped
    }

    /**
     * @param argument The configuration of the desired reservation which instances could take capacity from. Structure is documented below.
     */
    @JvmName("ktlvckoichnqkrqh")
    public suspend fun reservationAffinity(argument: suspend ClusterNodePoolNodeConfigReservationAffinityArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigReservationAffinityArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.reservationAffinity = mapped
    }

    /**
     * @param value The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels)
     * for how these labels are applied to clusters, node pools and nodes.
     */
    @JvmName("owfotlkrthuphagw")
    public suspend fun resourceLabels(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.resourceLabels = mapped
    }

    /**
     * @param values The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels)
     * for how these labels are applied to clusters, node pools and nodes.
     */
    @JvmName("qsbeweqbrhffcbed")
    public fun resourceLabels(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.resourceLabels = mapped
    }

    /**
     * @param value A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`.
     */
    @JvmName("gadjlqwbjgtgosde")
    public suspend fun resourceManagerTags(`value`: Map?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.resourceManagerTags = mapped
    }

    /**
     * @param values A map of resource manager tag keys and values to be attached to the nodes for managing Compute Engine firewalls using Network Firewall Policies. Tags must be according to specifications found [here](https://cloud.google.com/vpc/docs/tags-firewalls-overview#specifications). A maximum of 5 tag key-value pairs can be specified. Existing tags will be replaced with new values. Tags must be in one of the following formats ([KEY]=[VALUE]) 1. `tagKeys/{tag_key_id}=tagValues/{tag_value_id}` 2. `{org_id}/{tag_key_name}={tag_value_name}` 3. `{project_id}/{tag_key_name}={tag_value_name}`.
     */
    @JvmName("efdgifnvhdqeqjog")
    public fun resourceManagerTags(vararg values: Pair) {
        val toBeMapped = values.toMap()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.resourceManagerTags = mapped
    }

    /**
     * @param value Sandbox configuration for this node.
     */
    @JvmName("oewnyreayinybysn")
    public suspend fun sandboxConfig(`value`: ClusterNodePoolNodeConfigSandboxConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.sandboxConfig = mapped
    }

    /**
     * @param argument Sandbox configuration for this node.
     */
    @JvmName("eryranihywxhoqnt")
    public suspend fun sandboxConfig(argument: suspend ClusterNodePoolNodeConfigSandboxConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigSandboxConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.sandboxConfig = mapped
    }

    /**
     * @param value Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.
     */
    @JvmName("fprffnjxicaukrlo")
    public suspend fun secondaryBootDisks(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.secondaryBootDisks = mapped
    }

    /**
     * @param argument Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.
     */
    @JvmName("nfxpuswnapajwyym")
    public suspend fun secondaryBootDisks(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ClusterNodePoolNodeConfigSecondaryBootDiskArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.secondaryBootDisks = mapped
    }

    /**
     * @param argument Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.
     */
    @JvmName("ebscjuhskmajxxky")
    public suspend fun secondaryBootDisks(vararg argument: suspend ClusterNodePoolNodeConfigSecondaryBootDiskArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ClusterNodePoolNodeConfigSecondaryBootDiskArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.secondaryBootDisks = mapped
    }

    /**
     * @param argument Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.
     */
    @JvmName("nthyyvmgbrijvnhe")
    public suspend fun secondaryBootDisks(argument: suspend ClusterNodePoolNodeConfigSecondaryBootDiskArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ClusterNodePoolNodeConfigSecondaryBootDiskArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.secondaryBootDisks = mapped
    }

    /**
     * @param values Parameters for secondary boot disks to preload container images and data on new nodes. Structure is documented below. `gcfs_config` must be `enabled=true` for this feature to work. `min_master_version` must also be set to use GKE 1.28.3-gke.106700 or later versions.
     */
    @JvmName("quupyrfydjksiuuj")
    public suspend fun secondaryBootDisks(vararg values: ClusterNodePoolNodeConfigSecondaryBootDiskArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.secondaryBootDisks = mapped
    }

    /**
     * @param value The service account to be used by the Node VMs.
     * If not specified, the "default" service account is used.
     */
    @JvmName("vlgwtdwesiotqdxj")
    public suspend fun serviceAccount(`value`: String?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.serviceAccount = mapped
    }

    /**
     * @param value Shielded Instance options. Structure is documented below.
     */
    @JvmName("icjkgooouctafdyo")
    public suspend fun shieldedInstanceConfig(`value`: ClusterNodePoolNodeConfigShieldedInstanceConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.shieldedInstanceConfig = mapped
    }

    /**
     * @param argument Shielded Instance options. Structure is documented below.
     */
    @JvmName("iakbqhtfoyygsjdj")
    public suspend fun shieldedInstanceConfig(argument: suspend ClusterNodePoolNodeConfigShieldedInstanceConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigShieldedInstanceConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.shieldedInstanceConfig = mapped
    }

    /**
     * @param value Allows specifying multiple [node affinities](https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes#node_affinity_and_anti-affinity) useful for running workloads on [sole tenant nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/sole-tenancy). `node_affinity` structure is documented below.
     */
    @JvmName("rpvhxhmmvtmroavq")
    public suspend fun soleTenantConfig(`value`: ClusterNodePoolNodeConfigSoleTenantConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.soleTenantConfig = mapped
    }

    /**
     * @param argument Allows specifying multiple [node affinities](https://cloud.google.com/compute/docs/nodes/sole-tenant-nodes#node_affinity_and_anti-affinity) useful for running workloads on [sole tenant nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/sole-tenancy). `node_affinity` structure is documented below.
     */
    @JvmName("qmnpxfbwwtdlfgbf")
    public suspend fun soleTenantConfig(argument: suspend ClusterNodePoolNodeConfigSoleTenantConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigSoleTenantConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.soleTenantConfig = mapped
    }

    /**
     * @param value A boolean that represents whether the underlying node VMs are spot.
     * See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/concepts/spot-vms)
     * for more information. Defaults to false.
     */
    @JvmName("egvbugkjjslghtgt")
    public suspend fun spot(`value`: Boolean?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.spot = mapped
    }

    /**
     * @param value The list of instance tags applied to all nodes. Tags are used to identify
     * valid sources or targets for network firewalls.
     */
    @JvmName("lsrcyyurskqdqinb")
    public suspend fun tags(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param values The list of instance tags applied to all nodes. Tags are used to identify
     * valid sources or targets for network firewalls.
     */
    @JvmName("ibjxxhcntwcwqsto")
    public suspend fun tags(vararg values: String) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.tags = mapped
    }

    /**
     * @param value A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
     * to apply to nodes. GKE's API can only set this field on cluster creation.
     * However, GKE will add taints to your nodes if you enable certain features such
     * as GPUs. If this field is set, any diffs on this field will cause the provider to
     * recreate the underlying resource. Taint values can be updated safely in
     * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use
     * this field to manage taints. If you do, `lifecycle.ignore_changes` is
     * recommended. Structure is documented below.
     */
    @JvmName("yxxxwjlhirihrlic")
    public suspend fun taints(`value`: List?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.taints = mapped
    }

    /**
     * @param argument A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
     * to apply to nodes. GKE's API can only set this field on cluster creation.
     * However, GKE will add taints to your nodes if you enable certain features such
     * as GPUs. If this field is set, any diffs on this field will cause the provider to
     * recreate the underlying resource. Taint values can be updated safely in
     * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use
     * this field to manage taints. If you do, `lifecycle.ignore_changes` is
     * recommended. Structure is documented below.
     */
    @JvmName("psddbiarvkdjydve")
    public suspend fun taints(argument: List Unit>) {
        val toBeMapped = argument.toList().map {
            ClusterNodePoolNodeConfigTaintArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.taints = mapped
    }

    /**
     * @param argument A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
     * to apply to nodes. GKE's API can only set this field on cluster creation.
     * However, GKE will add taints to your nodes if you enable certain features such
     * as GPUs. If this field is set, any diffs on this field will cause the provider to
     * recreate the underlying resource. Taint values can be updated safely in
     * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use
     * this field to manage taints. If you do, `lifecycle.ignore_changes` is
     * recommended. Structure is documented below.
     */
    @JvmName("ahrfaeujqhvrengp")
    public suspend fun taints(vararg argument: suspend ClusterNodePoolNodeConfigTaintArgsBuilder.() -> Unit) {
        val toBeMapped = argument.toList().map {
            ClusterNodePoolNodeConfigTaintArgsBuilder().applySuspend { it() }.build()
        }
        val mapped = of(toBeMapped)
        this.taints = mapped
    }

    /**
     * @param argument A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
     * to apply to nodes. GKE's API can only set this field on cluster creation.
     * However, GKE will add taints to your nodes if you enable certain features such
     * as GPUs. If this field is set, any diffs on this field will cause the provider to
     * recreate the underlying resource. Taint values can be updated safely in
     * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use
     * this field to manage taints. If you do, `lifecycle.ignore_changes` is
     * recommended. Structure is documented below.
     */
    @JvmName("prskiyabuifqxlni")
    public suspend fun taints(argument: suspend ClusterNodePoolNodeConfigTaintArgsBuilder.() -> Unit) {
        val toBeMapped = listOf(
            ClusterNodePoolNodeConfigTaintArgsBuilder().applySuspend {
                argument()
            }.build(),
        )
        val mapped = of(toBeMapped)
        this.taints = mapped
    }

    /**
     * @param values A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)
     * to apply to nodes. GKE's API can only set this field on cluster creation.
     * However, GKE will add taints to your nodes if you enable certain features such
     * as GPUs. If this field is set, any diffs on this field will cause the provider to
     * recreate the underlying resource. Taint values can be updated safely in
     * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use
     * this field to manage taints. If you do, `lifecycle.ignore_changes` is
     * recommended. Structure is documented below.
     */
    @JvmName("ppabrwvndwknrbey")
    public suspend fun taints(vararg values: ClusterNodePoolNodeConfigTaintArgs) {
        val toBeMapped = values.toList()
        val mapped = toBeMapped.let({ args0 -> of(args0) })
        this.taints = mapped
    }

    /**
     * @param value Metadata configuration to expose to workloads on the node pool.
     * Structure is documented below.
     */
    @JvmName("fgscmjeokgjpceii")
    public suspend fun workloadMetadataConfig(`value`: ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs?) {
        val toBeMapped = value
        val mapped = toBeMapped?.let({ args0 -> of(args0) })
        this.workloadMetadataConfig = mapped
    }

    /**
     * @param argument Metadata configuration to expose to workloads on the node pool.
     * Structure is documented below.
     */
    @JvmName("tvtrgmsjubowychf")
    public suspend fun workloadMetadataConfig(argument: suspend ClusterNodePoolNodeConfigWorkloadMetadataConfigArgsBuilder.() -> Unit) {
        val toBeMapped = ClusterNodePoolNodeConfigWorkloadMetadataConfigArgsBuilder().applySuspend {
            argument()
        }.build()
        val mapped = of(toBeMapped)
        this.workloadMetadataConfig = mapped
    }

    internal fun build(): ClusterNodePoolNodeConfigArgs = ClusterNodePoolNodeConfigArgs(
        advancedMachineFeatures = advancedMachineFeatures,
        bootDiskKmsKey = bootDiskKmsKey,
        confidentialNodes = confidentialNodes,
        diskSizeGb = diskSizeGb,
        diskType = diskType,
        effectiveTaints = effectiveTaints,
        enableConfidentialStorage = enableConfidentialStorage,
        ephemeralStorageConfig = ephemeralStorageConfig,
        ephemeralStorageLocalSsdConfig = ephemeralStorageLocalSsdConfig,
        fastSocket = fastSocket,
        gcfsConfig = gcfsConfig,
        guestAccelerators = guestAccelerators,
        gvnic = gvnic,
        hostMaintenancePolicy = hostMaintenancePolicy,
        imageType = imageType,
        kubeletConfig = kubeletConfig,
        labels = labels,
        linuxNodeConfig = linuxNodeConfig,
        localNvmeSsdBlockConfig = localNvmeSsdBlockConfig,
        localSsdCount = localSsdCount,
        loggingVariant = loggingVariant,
        machineType = machineType,
        metadata = metadata,
        minCpuPlatform = minCpuPlatform,
        nodeGroup = nodeGroup,
        oauthScopes = oauthScopes,
        preemptible = preemptible,
        reservationAffinity = reservationAffinity,
        resourceLabels = resourceLabels,
        resourceManagerTags = resourceManagerTags,
        sandboxConfig = sandboxConfig,
        secondaryBootDisks = secondaryBootDisks,
        serviceAccount = serviceAccount,
        shieldedInstanceConfig = shieldedInstanceConfig,
        soleTenantConfig = soleTenantConfig,
        spot = spot,
        tags = tags,
        taints = taints,
        workloadMetadataConfig = workloadMetadataConfig,
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy