---
# ----------------------------------------------------------------------------
#
#     ***     AUTO GENERATED CODE    ***    Type: MMv1     ***
#
# ----------------------------------------------------------------------------
#
#     This file is automatically generated by Magic Modules and manual
#     changes will be clobbered when the file is regenerated.
#
#     Please read more about how to change this file in
#     .github/CONTRIBUTING.md.
#
# ----------------------------------------------------------------------------
subcategory: "Google Distributed Cloud Edge"
description: |-
  "A set of Kubernetes nodes in a cluster with common configuration and specification.
---

# google\_edgecontainer\_node\_pool

"A set of Kubernetes nodes in a cluster with common configuration and specification."


To get more information about NodePool, see:

* [API documentation](https://cloud.google.com/distributed-cloud/edge/latest/docs/reference/container/rest/v1/projects.locations.clusters.nodePools)
* How-to Guides
    * [Google Distributed Cloud Edge](https://cloud.google.com/distributed-cloud/edge/latest/docs)

## Example Usage - Edgecontainer Node Pool


```hcl
resource "google_edgecontainer_cluster" "cluster" {
  name = "default"
  location = "us-central1"

  authorization {
    admin_users {
      username = "admin@hashicorptest.com"
    }
  }

  networking {
    cluster_ipv4_cidr_blocks = ["10.0.0.0/16"]
    services_ipv4_cidr_blocks = ["10.1.0.0/16"]
  }

  fleet {
    project = "projects/${data.google_project.project.number}"
  }
}

resource "google_edgecontainer_node_pool" "default" {
  name = "nodepool-1"
  cluster = google_edgecontainer_cluster.cluster.name
  location = "us-central1"
  node_location = "us-central1-edge-example-edgesite"
  node_count = 3

  labels = {
    my_key    = "my_val"
    other_key = "other_val"
  }
}

data "google_project" "project" {}
```
## Example Usage - Edgecontainer Node Pool With Cmek


```hcl
resource "google_edgecontainer_cluster" "cluster" {
  name = "default"
  location = "us-central1"

  authorization {
    admin_users {
      username = "admin@hashicorptest.com"
    }
  }

  networking {
    cluster_ipv4_cidr_blocks = ["10.0.0.0/16"]
    services_ipv4_cidr_blocks = ["10.1.0.0/16"]
  }

  fleet {
    project = "projects/${data.google_project.project.number}"
  }
}

resource "google_kms_crypto_key_iam_member" "crypto_key" {
  crypto_key_id = google_kms_crypto_key.crypto_key.id
  role          = "roles/cloudkms.cryptoKeyEncrypterDecrypter"
  member        = "serviceAccount:service-${data.google_project.project.number}@gcp-sa-edgecontainer.iam.gserviceaccount.com"
}

resource "google_kms_crypto_key" "crypto_key" {
  name     = "key"
  key_ring = google_kms_key_ring.key_ring.id
}

resource "google_kms_key_ring" "key_ring" {
  name     = "keyring"
  location = "us-central1"
}

resource "google_edgecontainer_node_pool" "default" {
  depends_on = [google_kms_crypto_key_iam_member.crypto_key]

  name = "nodepool-1"
  cluster = google_edgecontainer_cluster.cluster.name
  location = "us-central1"
  node_location = "us-central1-edge-example-edgesite"
  node_count = 3

  local_disk_encryption {
    kms_key = google_kms_crypto_key.crypto_key.id
  }
}

data "google_project" "project" {}
```
## Example Usage - Edgecontainer Local Control Plane Node Pool


```hcl
resource "google_edgecontainer_cluster" "default" {
  name = ""
  location = "us-central1"

  authorization {
    admin_users {
      username = "admin@hashicorptest.com"
    }
  }

  networking {
    cluster_ipv4_cidr_blocks = ["10.0.0.0/16"]
    services_ipv4_cidr_blocks = ["10.1.0.0/16"]
  }

  fleet {
    project = "projects/${data.google_project.project.number}"
  }

  external_load_balancer_ipv4_address_pools = ["10.100.0.0-10.100.0.10"]

  control_plane {
    local {
      node_location = "us-central1-edge-example-edgesite"
      node_count = 1
      machine_filter = "machine-name"
      shared_deployment_policy = "ALLOWED"
    }
  }
}

resource "google_edgecontainer_node_pool" "default" {
  name = "nodepool-1"
  cluster = google_edgecontainer_cluster.cluster.name
  location = "us-central1"
  node_location = "us-central1-edge-example-edgesite"
  node_count = 3
}

data "google_project" "project" {}
```

## Argument Reference

The following arguments are supported:


* `node_location` -
  (Required)
  Name of the Google Distributed Cloud Edge zone where this node pool will be created. For example: `us-central1-edge-customer-a`.

* `node_count` -
  (Required)
  The number of nodes in the pool.

* `name` -
  (Required)
  The resource name of the node pool.

* `location` -
  (Required)
  The location of the resource.

* `cluster` -
  (Required)
  The name of the target Distributed Cloud Edge Cluster.


- - -


* `labels` -
  (Optional)
  Labels associated with this resource.
  **Note**: This field is non-authoritative, and will only manage the labels present in your configuration.
  Please refer to the field `effective_labels` for all of the labels present on the resource.

* `machine_filter` -
  (Optional)
  Only machines matching this filter will be allowed to join the node pool.
  The filtering language accepts strings like "name=<name>", and is
  documented in more detail in [AIP-160](https://google.aip.dev/160).

* `local_disk_encryption` -
  (Optional)
  Local disk encryption options. This field is only used when enabling CMEK support.
  Structure is [documented below](#nested_local_disk_encryption).

* `node_config` -
  (Optional)
  Configuration for each node in the NodePool
  Structure is [documented below](#nested_node_config).

* `project` - (Optional) The ID of the project in which the resource belongs.
    If it is not provided, the provider project is used.


<a name="nested_local_disk_encryption"></a>The `local_disk_encryption` block supports:

* `kms_key` -
  (Optional)
  The Cloud KMS CryptoKey e.g. projects/{project}/locations/{location}/keyRings/{keyRing}/cryptoKeys/{cryptoKey} to use for protecting node local disks.
  If not specified, a Google-managed key will be used instead.

* `kms_key_active_version` -
  (Output)
  The Cloud KMS CryptoKeyVersion currently in use for protecting node local disks. Only applicable if kmsKey is set.

* `kms_key_state` -
  (Output)
  Availability of the Cloud KMS CryptoKey. If not KEY_AVAILABLE, then nodes may go offline as they cannot access their local data.
  This can be caused by a lack of permissions to use the key, or if the key is disabled or deleted.

<a name="nested_node_config"></a>The `node_config` block supports:

* `labels` -
  (Optional)
  "The Kubernetes node labels"

## Attributes Reference

In addition to the arguments listed above, the following computed attributes are exported:

* `id` - an identifier for the resource with format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}/nodePools/{{name}}`

* `create_time` -
  The time when the node pool was created.

* `update_time` -
  The time when the node pool was last updated.

* `node_version` -
  The lowest release version among all worker nodes.

* `terraform_labels` -
  The combination of labels configured directly on the resource
   and default labels configured on the provider.

* `effective_labels` -
  All of labels (key/value pairs) present on the resource in GCP, including the labels configured through Terraform, other clients and services.


## Timeouts

This resource provides the following
[Timeouts](https://developer.hashicorp.com/terraform/plugin/sdkv2/resources/retries-and-customizable-timeouts) configuration options:

- `create` - Default is 480 minutes.
- `update` - Default is 480 minutes.
- `delete` - Default is 480 minutes.

## Import


NodePool can be imported using any of these accepted formats:

* `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}/nodePools/{{name}}`
* `{{project}}/{{location}}/{{cluster}}/{{name}}`
* `{{location}}/{{cluster}}/{{name}}`


In Terraform v1.5.0 and later, use an [`import` block](https://developer.hashicorp.com/terraform/language/import) to import NodePool using one of the formats above. For example:

```tf
import {
  id = "projects/{{project}}/locations/{{location}}/clusters/{{cluster}}/nodePools/{{name}}"
  to = google_edgecontainer_node_pool.default
}
```

When using the [`terraform import` command](https://developer.hashicorp.com/terraform/cli/commands/import), NodePool can be imported using one of the formats above. For example:

```
$ terraform import google_edgecontainer_node_pool.default projects/{{project}}/locations/{{location}}/clusters/{{cluster}}/nodePools/{{name}}
$ terraform import google_edgecontainer_node_pool.default {{project}}/{{location}}/{{cluster}}/{{name}}
$ terraform import google_edgecontainer_node_pool.default {{location}}/{{cluster}}/{{name}}
```

## User Project Overrides

This resource supports [User Project Overrides](https://registry.terraform.io/providers/hashicorp/google/latest/docs/guides/provider_reference#user_project_override).
