From b7a90a9a148eb0e73e2ac17326cce86ff0cc17e8 Mon Sep 17 00:00:00 2001 From: Alex R Date: Thu, 18 Nov 2021 20:28:01 +0300 Subject: [PATCH] Add spotVM for GKE Node Pools (#5443) * Add spotVM for GKE Node Pools Signed-off-by: Alex R * Add spot test Signed-off-by: Alex R * Guard for beta only Signed-off-by: Alex R * Add beta note to docs Signed-off-by: Alex R --- .../resource_container_node_pool_test.go.erb | 3 +++ .../terraform/utils/node_config.go.erb | 16 ++++++++++++++++ .../docs/r/container_cluster.html.markdown | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/mmv1/third_party/terraform/tests/resource_container_node_pool_test.go.erb b/mmv1/third_party/terraform/tests/resource_container_node_pool_test.go.erb index ce1f4cf7c594..9baab935d66c 100644 --- a/mmv1/third_party/terraform/tests/resource_container_node_pool_test.go.erb +++ b/mmv1/third_party/terraform/tests/resource_container_node_pool_test.go.erb @@ -1478,6 +1478,9 @@ resource "google_container_node_pool" "with_workload_metadata_config" { cluster = google_container_cluster.cluster.name initial_node_count = 1 node_config { +<% unless version == 'ga' -%> + spot = true +<% end -%> oauth_scopes = [ "https://www.googleapis.com/auth/logging.write", "https://www.googleapis.com/auth/monitoring", diff --git a/mmv1/third_party/terraform/utils/node_config.go.erb b/mmv1/third_party/terraform/utils/node_config.go.erb index 090e317b264c..864cdfb2af65 100644 --- a/mmv1/third_party/terraform/utils/node_config.go.erb +++ b/mmv1/third_party/terraform/utils/node_config.go.erb @@ -204,6 +204,16 @@ func schemaNodeConfig() *schema.Schema { Description: `Whether the nodes are created as preemptible VM instances.`, }, +<% unless version == 'ga' -%> + "spot": { + Type: schema.TypeBool, + Optional: true, + ForceNew: true, + Default: false, + Description: `Whether the nodes are created as spot VM instances.`, + }, +<% end -%> + "service_account": { Type: schema.TypeString, Optional: true, @@ -497,6 +507,9 @@ func expandNodeConfig(v interface{}) *container.NodeConfig { // Preemptible Is Optional+Default, so it always has a value nc.Preemptible = nodeConfig["preemptible"].(bool) +<% unless version == 'ga' -%> + nc.Spot = nodeConfig["spot"].(bool) +<% end -%> if v, ok := nodeConfig["min_cpu_platform"]; ok { nc.MinCpuPlatform = v.(string) @@ -638,6 +651,9 @@ func flattenNodeConfig(c *container.NodeConfig) []map[string]interface{} { "labels": c.Labels, "tags": c.Tags, "preemptible": c.Preemptible, +<% unless version == 'ga' -%> + "spot": c.Spot, +<% end -%> "min_cpu_platform": c.MinCpuPlatform, "shielded_instance_config": flattenShieldedInstanceConfig(c.ShieldedInstanceConfig), "taint": flattenTaints(c.Taints), 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 316112f1a5a6..689ec9ee6701 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 @@ -678,6 +678,10 @@ gcfs_config { are preemptible. See the [official documentation](https://cloud.google.com/container-engine/docs/preemptible-vm) for more information. Defaults to false. +* `spot` - (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) 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. + * `sandbox_config` - (Optional, [Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html)) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. Structure is [documented below](#nested_sandbox_config).