diff --git a/mmv1/third_party/terraform/services/container/node_config.go.tmpl b/mmv1/third_party/terraform/services/container/node_config.go.tmpl index d2dd092eee96..b3b67b547484 100644 --- a/mmv1/third_party/terraform/services/container/node_config.go.tmpl +++ b/mmv1/third_party/terraform/services/container/node_config.go.tmpl @@ -244,6 +244,25 @@ func schemaGcfsConfig() *schema.Schema { } } +func schemaTaintConfig() *schema.Schema { + return &schema.Schema{ + Type: schema.TypeList, + Optional: true, + MaxItems: 1, + Description: `Taint configuration for this node.`, + Elem: &schema.Resource{ + Schema: map[string]*schema.Schema{ + "architecture_taint_behavior": { + Type: schema.TypeString, + Required: true, + Description: `Architecture taint behavior. Controls, how we apply taints based on the node architecture.`, + ValidateFunc: validation.StringInSlice([]string{"ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED", "NONE", "ARM"}, false), + }, + }, + }, + } +} + func schemaNodeConfig() *schema.Schema { return &schema.Schema{ Type: schema.TypeList, @@ -254,6 +273,7 @@ func schemaNodeConfig() *schema.Schema { MaxItems: 1, Elem: &schema.Resource{ Schema: map[string]*schema.Schema{ + "taint_config": schemaTaintConfig(), "containerd_config": schemaContainerdConfig(), "disk_size_gb": { Type: schema.TypeInt, @@ -1541,6 +1561,10 @@ func expandNodeConfig(d *schema.ResourceData, prefix string, v interface{}) *con nodeConfig := nodeConfigs[0].(map[string]interface{}) + if v, ok := nodeConfig["taint_config"]; ok { + nc.TaintConfig = expandTaintConfig(v) + } + if v, ok := nodeConfig["containerd_config"]; ok { nc.ContainerdConfig = expandContainerdConfig(v) } @@ -2763,6 +2787,28 @@ func expandSoleTenantConfig(v interface{}) *container.SoleTenantConfig { return stConfig } +func expandTaintConfig(v interface{}) *container.TaintConfig { + if v == nil { + return nil + } + ls := v.([]interface{}) + if len(ls) == 0 { + return nil + } + if ls[0] == nil { + return &container.TaintConfig{} + } + cfg := ls[0].(map[string]interface{}) + + taintConfig := &container.TaintConfig{} + + if v, ok := cfg["architecture_taint_behavior"]; ok { + taintConfig.ArchitectureTaintBehavior = v.(string) + } + + return taintConfig +} + {{ if ne $.TargetVersionName `ga` -}} func expandHostMaintenancePolicy(v interface{}) *container.HostMaintenancePolicy { if v == nil { @@ -2834,6 +2880,7 @@ func flattenNodeConfig(c *container.NodeConfig, v interface{}) []map[string]inte config = append(config, map[string]interface{}{ "machine_type": c.MachineType, + "taint_config": flattenTaintConfig(c.TaintConfig), "containerd_config": flattenContainerdConfig(c.ContainerdConfig), "disk_size_gb": c.DiskSizeGb, "disk_type": c.DiskType, @@ -3496,6 +3543,17 @@ func flattenNodeKernelModuleLoading(c *container.NodeKernelModuleLoading) []map[ return result } +func flattenTaintConfig(c *container.TaintConfig) []map[string]interface{} { + result := []map[string]interface{}{} + if c == nil { + return result + } + r := map[string]interface{}{ + "architecture_taint_behavior": c.ArchitectureTaintBehavior, + } + return append(result, r) +} + func flattenContainerdConfig(c *container.ContainerdConfig) []map[string]interface{} { result := []map[string]interface{}{} if c == nil { @@ -3763,6 +3821,43 @@ func nodePoolNodeConfigUpdate(d *schema.ResourceData, config *transport_tpg.Conf } } + if d.HasChange(prefix + "node_config.0.taint_config") { + if _, ok := d.GetOk(prefix + "node_config.0.taint_config"); ok { + req := &container.UpdateNodePoolRequest{ + Name: name, + TaintConfig: expandTaintConfig(d.Get(prefix + "node_config.0.taint_config")), + } + if req.TaintConfig == nil { + req.TaintConfig = &container.TaintConfig{} + req.ForceSendFields = []string{"TaintConfig"} + } + + updateF := func() error { + clusterNodePoolsUpdateCall := NewClient(config, userAgent).Projects.Locations.Clusters.NodePools.Update(nodePoolInfo.fullyQualifiedName(name), req) + if config.UserProjectOverride { + clusterNodePoolsUpdateCall.Header().Add("X-Goog-User-Project", nodePoolInfo.project) + } + op, err := clusterNodePoolsUpdateCall.Do() + if err != nil { + return err + } + + // Wait until it's updated + return ContainerOperationWait(config, op, + nodePoolInfo.project, + nodePoolInfo.location, + "updating GKE node pool taint_config", userAgent, + timeout) + } + + if err := retryWhileIncompatibleOperation(timeout, npLockKey, updateF); err != nil { + return err + } + + log.Printf("[INFO] Updated taint_config for node pool %s", name) + } + } + if d.HasChange(prefix + "node_config.0.containerd_config") { if _, ok := d.GetOk(prefix + "node_config.0.containerd_config"); ok { req := &container.UpdateNodePoolRequest{ diff --git a/mmv1/third_party/terraform/services/container/resource_container_cluster_meta.yaml.tmpl b/mmv1/third_party/terraform/services/container/resource_container_cluster_meta.yaml.tmpl index c8a55fd355da..989f20d60ce1 100644 --- a/mmv1/third_party/terraform/services/container/resource_container_cluster_meta.yaml.tmpl +++ b/mmv1/third_party/terraform/services/container/resource_container_cluster_meta.yaml.tmpl @@ -426,6 +426,7 @@ fields: api_field: 'nodeConfig.taints.key' - field: 'node_config.taint.value' api_field: 'nodeConfig.taints.value' + - api_field: 'nodeConfig.taintConfig.architectureTaintBehavior' - api_field: 'nodeConfig.windowsNodeConfig.osVersion' field: 'node_config.windows_node_config.osversion' - api_field: 'nodeConfig.workloadMetadataConfig.mode' @@ -757,6 +758,8 @@ fields: api_field: 'nodePools.config.taints.key' - field: 'node_pool.node_config.taint.value' api_field: 'nodePools.config.taints.value' + - field: 'node_pool.node_config.taint_config.architecture_taint_behavior' + api_field: 'nodePools.config.taintConfig.architectureTaintBehavior' - field: 'node_pool.node_config.windows_node_config.osversion' api_field: 'nodePools.config.windowsNodeConfig.osVersion' - field: 'node_pool.node_config.workload_metadata_config.mode' diff --git a/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.tmpl b/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.tmpl index f49f0384f4ae..776f65bff3e7 100644 --- a/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.tmpl +++ b/mmv1/third_party/terraform/services/container/resource_container_cluster_test.go.tmpl @@ -18416,3 +18416,191 @@ resource "google_container_cluster" "with_slurm_config" { } `, clusterName, networkName, subnetworkName, enabled) } + +func TestAccContainerCluster_withTaintConfig(t *testing.T) { + t.Parallel() + + cluster := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(t, 10)) + networkName := tpgcompute.BootstrapSharedTestNetwork(t, "gke-cluster") + subnetworkName := tpgcompute.BootstrapSubnet(t, "gke-cluster", networkName) + importIgnore := []string{"min_master_version", "deletion_protection"} + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckContainerClusterDestroyProducer(t), + Steps: []resource.TestStep{ + // Default enum value means adding arm taint to nodes (same as ARM) + { + Config: testAccContainerCluster_withTaintConfig(cluster, networkName, subnetworkName, "ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.taint_config.0.architecture_taint_behavior", "ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.effective_taints.#", "1"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.effective_taints.0.key", "kubernetes.io/arch"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.effective_taints.0.value", "arm64"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.effective_taints.0.effect", "NO_SCHEDULE"), + ), + }, + { + ResourceName: "google_container_cluster.cluster", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: importIgnore, + }, + // NONE variant means no architecture taint will be applied + { + Config: testAccContainerCluster_withTaintConfig(cluster, networkName, subnetworkName, "NONE"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.taint_config.0.architecture_taint_behavior", "NONE"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.effective_taints.#", "0"), + ), + }, + { + ResourceName: "google_container_cluster.cluster", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: importIgnore, + }, + // ARM is a default behavior right now, same as ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED + { + Config: testAccContainerCluster_withTaintConfig(cluster, networkName, subnetworkName, "ARM"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.taint_config.0.architecture_taint_behavior", "ARM"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.effective_taints.#", "1"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.effective_taints.0.key", "kubernetes.io/arch"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.effective_taints.0.value", "arm64"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_config.0.effective_taints.0.effect", "NO_SCHEDULE"), + ), + }, + { + ResourceName: "google_container_cluster.cluster", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: importIgnore, + }, + }, + }) +} + +func testAccContainerCluster_withTaintConfig(cluster, networkName, subnetworkName, behavior string) string { + return fmt.Sprintf(` +data "google_container_engine_versions" "central1a" { + location = "us-central1-a" +} + +resource "google_container_cluster" "cluster" { + name = "%s" + location = "us-central1-a" + initial_node_count = 1 + min_master_version = data.google_container_engine_versions.central1a.release_channel_latest_version["RAPID"] + + network = "%s" + subnetwork = "%s" + + node_config { + machine_type = "t2a-standard-2" + taint_config { + architecture_taint_behavior = "%s" + } + } + + deletion_protection = false +} +`, cluster, networkName, subnetworkName, behavior) +} + +func TestAccContainerCluster_withNodePoolTaintConfig(t *testing.T) { + t.Parallel() + + cluster := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(t, 10)) + networkName := tpgcompute.BootstrapSharedTestNetwork(t, "gke-cluster") + subnetworkName := tpgcompute.BootstrapSubnet(t, "gke-cluster", networkName) + importIgnore := []string{"min_master_version", "deletion_protection"} + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckContainerClusterDestroyProducer(t), + Steps: []resource.TestStep{ + // Default enum value means adding arm taint to nodes (same as ARM) + { + Config: testAccContainerCluster_withNodePoolTaintConfig(cluster, networkName, subnetworkName, "ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.node_config.0.taint_config.0.architecture_taint_behavior", "ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.node_config.0.effective_taints.#", "1"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.node_config.0.effective_taints.0.key", "kubernetes.io/arch"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.node_config.0.effective_taints.0.value", "arm64"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.node_config.0.effective_taints.0.effect", "NO_SCHEDULE"), + ), + }, + { + ResourceName: "google_container_cluster.cluster", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: importIgnore, + }, + }, + }) +} + +func TestAccContainerCluster_withNodePoolTaintConfig_none(t *testing.T) { + t.Parallel() + + cluster := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(t, 10)) + networkName := tpgcompute.BootstrapSharedTestNetwork(t, "gke-cluster") + subnetworkName := tpgcompute.BootstrapSubnet(t, "gke-cluster", networkName) + importIgnore := []string{"min_master_version", "deletion_protection"} + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckContainerClusterDestroyProducer(t), + Steps: []resource.TestStep{ + // NONE variant means no architecture taint will be applied + { + Config: testAccContainerCluster_withNodePoolTaintConfig(cluster, networkName, subnetworkName, "NONE"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.node_config.0.taint_config.0.architecture_taint_behavior", "NONE"), + resource.TestCheckResourceAttr("google_container_cluster.cluster", "node_pool.0.node_config.0.effective_taints.#", "0"), + ), + }, + { + ResourceName: "google_container_cluster.cluster", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: importIgnore, + }, + }, + }) +} + +func testAccContainerCluster_withNodePoolTaintConfig(cluster, networkName, subnetworkName, behavior string) string { + return fmt.Sprintf(` +data "google_container_engine_versions" "central1a" { + location = "us-central1-a" +} + +resource "google_container_cluster" "cluster" { + name = "%s" + location = "us-central1-a" + min_master_version = data.google_container_engine_versions.central1a.release_channel_latest_version["RAPID"] + + network = "%s" + subnetwork = "%s" + + node_pool { + name = "custom-pool" + initial_node_count = 1 + + node_config { + machine_type = "n4a-standard-2" + taint_config { + architecture_taint_behavior = "%s" + } + } + } + + deletion_protection = false +} +`, cluster, networkName, subnetworkName, behavior) +} diff --git a/mmv1/third_party/terraform/services/container/resource_container_node_pool_meta.yaml.tmpl b/mmv1/third_party/terraform/services/container/resource_container_node_pool_meta.yaml.tmpl index c1617d8060d6..a27d23f507d2 100644 --- a/mmv1/third_party/terraform/services/container/resource_container_node_pool_meta.yaml.tmpl +++ b/mmv1/third_party/terraform/services/container/resource_container_node_pool_meta.yaml.tmpl @@ -316,6 +316,8 @@ fields: api_field: 'config.taints.key' - field: 'node_config.taint.value' api_field: 'config.taints.value' + - field: 'node_config.taint_config.architecture_taint_behavior' + api_field: 'config.taintConfig.architectureTaintBehavior' - field: 'node_config.windows_node_config.osversion' api_field: 'config.windowsNodeConfig.osVersion' - field: 'node_config.workload_metadata_config.mode' diff --git a/mmv1/third_party/terraform/services/container/resource_container_node_pool_test.go.tmpl b/mmv1/third_party/terraform/services/container/resource_container_node_pool_test.go.tmpl index fdfd9fda5e1b..4c3909b5bdb3 100644 --- a/mmv1/third_party/terraform/services/container/resource_container_node_pool_test.go.tmpl +++ b/mmv1/third_party/terraform/services/container/resource_container_node_pool_test.go.tmpl @@ -7057,3 +7057,97 @@ func TestAccContainerNodePool_acceleratorNetworkProfile_Lifecycle(t *testing.T) }, }) } + +func TestAccContainerNodePool_withTaintConfig(t *testing.T) { + t.Parallel() + + cluster := fmt.Sprintf("tf-test-cluster-%s", acctest.RandString(t, 10)) + np := fmt.Sprintf("tf-test-nodepool-%s", acctest.RandString(t, 10)) + networkName := tpgcompute.BootstrapSharedTestNetwork(t, "gke-cluster") + subnetworkName := tpgcompute.BootstrapSubnet(t, "gke-cluster", networkName) + + acctest.VcrTest(t, resource.TestCase{ + PreCheck: func() { acctest.AccTestPreCheck(t) }, + ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t), + CheckDestroy: testAccCheckContainerNodePoolDestroyProducer(t), + Steps: []resource.TestStep{ + // Default enum value means adding arm taint to nodes (same as ARM) + { + Config: testAccContainerNodePool_withTaintConfig(cluster, np, networkName, subnetworkName, "ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.taint_config.0.architecture_taint_behavior", "ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED"), + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.effective_taints.#", "1"), + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.effective_taints.0.key", "kubernetes.io/arch"), + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.effective_taints.0.value", "arm64"), + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.effective_taints.0.effect", "NO_SCHEDULE"), + ), + }, + // NONE variant means no architecture taint will be applied + { + ResourceName: "google_container_node_pool.np", + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccContainerNodePool_withTaintConfig(cluster, np, networkName, subnetworkName, "NONE"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.taint_config.0.architecture_taint_behavior", "NONE"), + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.effective_taints.#", "0"), + ), + }, + // ARM is a default behavior right now, same as ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED + { + ResourceName: "google_container_node_pool.np", + ImportState: true, + ImportStateVerify: true, + }, + { + Config: testAccContainerNodePool_withTaintConfig(cluster, np, networkName, subnetworkName, "ARM"), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.taint_config.0.architecture_taint_behavior", "ARM"), + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.effective_taints.#", "1"), + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.effective_taints.0.key", "kubernetes.io/arch"), + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.effective_taints.0.value", "arm64"), + resource.TestCheckResourceAttr("google_container_node_pool.np", "node_config.0.effective_taints.0.effect", "NO_SCHEDULE"), + ), + }, + { + ResourceName: "google_container_node_pool.np", + ImportState: true, + ImportStateVerify: true, + }, + }, + }) +} + +func testAccContainerNodePool_withTaintConfig(cluster, np, networkName, subnetworkName, behavior string) string { + return fmt.Sprintf(` +data "google_container_engine_versions" "central1a" { + location = "us-central1-a" +} + +resource "google_container_cluster" "cluster" { + name = "%s" + location = "us-central1-a" + initial_node_count = 1 + deletion_protection = false + network = "%s" + subnetwork = "%s" + min_master_version = data.google_container_engine_versions.central1a.release_channel_latest_version["RAPID"] +} + +resource "google_container_node_pool" "np" { + name = "%s" + location = "us-central1-a" + cluster = google_container_cluster.cluster.name + initial_node_count = 1 + + node_config { + machine_type = "n4a-standard-2" + taint_config { + architecture_taint_behavior = "%s" + } + } +} +`, cluster, networkName, subnetworkName, np, behavior) +} diff --git a/mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown b/mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown index 9cce7de5895e..6a60c0c59a46 100644 --- a/mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown +++ b/mmv1/third_party/terraform/website/docs/r/container_cluster.html.markdown @@ -277,8 +277,7 @@ region are guaranteed to support the same version. manages the default node pool, which isn't recommended to be used with Terraform. Structure is [documented below](#nested_node_config). -* `node_pool` - (Optional) List of node pools associated with this cluster. - See [google_container_node_pool](container_node_pool.html) for schema. +* `node_pool` - (Optional) List of node pools associated with this cluster. Structure is [documented below](#nested_node_pool). See [google_container_node_pool](container_node_pool.html) for exact schema. **Warning:** node pools defined inside a cluster can't be changed (or added/removed) after cluster creation without deleting and recreating the entire cluster. Unless you absolutely need the ability to say "these are the _only_ node pools associated with this cluster", use the @@ -1115,6 +1114,8 @@ gvnic { * `storage_pools` - (Optional) The list of Storage Pools where boot disks are provisioned. +* `taint_config` - (Optional) Taint configuration for the node pool. Structure is [documented below](#nested_taint_config). + * `tags` - (Optional) The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets for network firewalls. @@ -1301,6 +1302,18 @@ workload_identity_config { } ``` +The `node_pool` block supports: + +* `node_config` - (Optional) The node configuration of the pool. Structure is [documented below](#nested_node_pool_node_config). + +The `node_config` block supports: + +* `taint_config` - (Optional) Taint configuration for the node pool. Structure is [documented below](#nested_node_pool_node_config_taint_config). + +The `taint_config` block supports: + +* `architecture_taint_behavior` - (Optional) Specifies the behavior for applying architecture taints to node pool nodes. Valid values are `ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED`, `NONE`, or `ARM`. + The `node_pool_auto_config` block supports: * `node_kubelet_config` - (Optional) Kubelet configuration for Autopilot clusters. Currently, only `insecure_kubelet_readonly_port_enabled` is supported here. @@ -1903,6 +1916,13 @@ registry_hosts { * `no_unsafe_webhooks` - (Optional) Whether to block unsafe webhooks in the cluster. * `no_standard_node_pools` - (Optional) Whether to block non autopilot managed node pools in the cluster. +The `taint_config` block supports: + +* `architecture_taint_behavior` - (Optional) The taint behavior to be applied to the nodes based on the architecture. + Accepted values are: + * `ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED`: Default value. This should not be used. + * `NONE`: Do not apply any taints based on architecture. + * `ARM`: Apply ARM taint to the nodes. ## Attributes Reference diff --git a/mmv1/third_party/terraform/website/docs/r/container_node_pool.html.markdown b/mmv1/third_party/terraform/website/docs/r/container_node_pool.html.markdown index bac2ba6f43f8..fa2928701231 100644 --- a/mmv1/third_party/terraform/website/docs/r/container_node_pool.html.markdown +++ b/mmv1/third_party/terraform/website/docs/r/container_node_pool.html.markdown @@ -144,8 +144,9 @@ cluster. * `name_prefix` - (Optional) Creates a unique name for the node pool beginning with the specified prefix. Conflicts with `name`. -* `node_config` - (Optional) Parameters used in creating the node pool. See - [google_container_cluster](container_cluster.html#nested_node_config) for schema. +* `node_config` - (Optional) Parameters used in creating the node pool. Structure is [documented below](#nested_node_config). See [google_container_cluster](container_cluster.html#nested_node_config) for exact schema. + +* `taint_config` - (Optional) Taint configuration for the node pool. Structure is [documented below](#nested_taint_config). * `network_config` - (Optional) The network configuration of the pool. Such as configuration for [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Or enabling private nodes. Structure is @@ -324,6 +325,22 @@ cluster. * `key` (Optional) The label key of a reservation resource. To target a SPECIFIC_RESERVATION by name, specify "compute.googleapis.com/reservation-name" as the key and specify the name of your reservation as its value. * `values` (Optional) The list of label values of reservation resources. For example: the name of the specific reservation when using a key of "compute.googleapis.com/reservation-name" +The `node_config` block supports: + +* `taint_config` - (Optional) Taint configuration for the node pool. Structure is [documented below](#nested_node_config_taint_config). + +The `taint_config` block supports: + +* `architecture_taint_behavior` - (Optional) Specifies the behavior for applying architecture taints to node pool nodes. Valid values are `ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED`, `NONE`, or `ARM`. + +The `taint_config` block supports: + +* `architecture_taint_behavior` - (Optional) The taint behavior to be applied to the nodes based on the architecture. + Accepted values are: + * `ARCHITECTURE_TAINT_BEHAVIOR_UNSPECIFIED`: Default value. This should not be used. + * `NONE`: Do not apply any taints based on architecture. + * `ARM`: Apply ARM taint to the nodes. + ## Attributes Reference In addition to the arguments listed above, the following computed attributes are exported: