Skip to content

Commit 7ca9028

Browse files
modular-magiciannat-henderson
authored andcommitted
Fix for permadiff in container cluster caused by beta resource. (#2488)
1 parent e28676c commit 7ca9028

File tree

2 files changed

+3
-113
lines changed

2 files changed

+3
-113
lines changed

google/resource_container_cluster.go

+3-76
Original file line numberDiff line numberDiff line change
@@ -812,6 +812,9 @@ func resourceContainerClusterRead(d *schema.ResourceData, meta interface{}) erro
812812
d.Set("monitoring_service", cluster.MonitoringService)
813813
d.Set("network", cluster.NetworkConfig.Network)
814814
d.Set("subnetwork", cluster.NetworkConfig.Subnetwork)
815+
if err := d.Set("cluster_autoscaling", nil); err != nil {
816+
return err
817+
}
815818
if err := d.Set("node_config", flattenNodeConfig(cluster.NodeConfig)); err != nil {
816819
return err
817820
}
@@ -1453,63 +1456,6 @@ func expandMaintenancePolicy(configured interface{}) *containerBeta.MaintenanceP
14531456
}
14541457
}
14551458

1456-
func expandClusterAutoscaling(configured interface{}, d *schema.ResourceData) *containerBeta.ClusterAutoscaling {
1457-
l, ok := configured.([]interface{})
1458-
if !ok || l == nil || len(l) == 0 || l[0] == nil {
1459-
// Before master version 1.11.2, we must send 'nil' values if autoscaling isn't
1460-
// turned on - the cluster will return an error even if we're setting
1461-
// EnableNodeAutoprovisioning to false.
1462-
cmv, err := version.NewVersion(d.Get("master_version").(string))
1463-
if err != nil {
1464-
log.Printf("[DEBUG] Could not parse master_version into version (%q), trying min_master_version.", d.Get("master_version").(string))
1465-
cmv, err = version.NewVersion(d.Get("min_master_version").(string))
1466-
if err != nil {
1467-
log.Printf("[DEBUG] Could not parse min_master_version into version (%q), assuming we are not already using cluster autoscaling.", d.Get("min_master_version").(string))
1468-
// This deserves a little explanation. The only reason we would ever want to send
1469-
// `EnableNodeAutoprovisioning: false` is because we think we might need to
1470-
// disable it (e.g. it is already enabled). Otherwise, there is no difference
1471-
// between sending `nil` and sending `EnableNodeAutoprovisioning: false`.
1472-
// The only circumstance in which neither master_version nor min_master_version
1473-
// can be parsed into version objects would be if the user has not set either one,
1474-
// and we have not yet had a `read` call. e.g. first-time creates, and possibly
1475-
// some circumstance related to import. It is probably safe to assume that
1476-
// we are not going to be changing cluster autoscaling from on to off in those
1477-
// circumstances. Therefore, if we don't know what version we're running, and
1478-
// the user has not requested cluster autoscaling, we'll fail "safe" and not touch
1479-
// it.
1480-
cmv, _ = version.NewVersion("0.0.0")
1481-
}
1482-
}
1483-
dmv, _ := version.NewVersion("1.11.2")
1484-
if cmv.LessThan(dmv) {
1485-
return nil
1486-
} else {
1487-
return &containerBeta.ClusterAutoscaling{
1488-
EnableNodeAutoprovisioning: false,
1489-
ForceSendFields: []string{"EnableNodeAutoprovisioning"},
1490-
}
1491-
}
1492-
}
1493-
r := &containerBeta.ClusterAutoscaling{}
1494-
if config, ok := l[0].(map[string]interface{}); ok {
1495-
r.EnableNodeAutoprovisioning = config["enabled"].(bool)
1496-
if limits, ok := config["resource_limits"]; ok {
1497-
if lmts, ok := limits.([]interface{}); ok {
1498-
for _, v := range lmts {
1499-
limit := v.(map[string]interface{})
1500-
r.ResourceLimits = append(r.ResourceLimits, &containerBeta.ResourceLimit{
1501-
ResourceType: limit["resource_type"].(string),
1502-
// Here we're relying on *not* setting ForceSendFields for 0-values.
1503-
Minimum: int64(limit["minimum"].(int)),
1504-
Maximum: int64(limit["maximum"].(int)),
1505-
})
1506-
}
1507-
}
1508-
}
1509-
}
1510-
return r
1511-
}
1512-
15131459
func expandMasterAuth(configured interface{}) *containerBeta.MasterAuth {
15141460
l := configured.([]interface{})
15151461
if len(l) == 0 || l[0] == nil {
@@ -1732,25 +1678,6 @@ func flattenMasterAuth(ma *containerBeta.MasterAuth) []map[string]interface{} {
17321678
return masterAuth
17331679
}
17341680

1735-
func flattenClusterAutoscaling(a *containerBeta.ClusterAutoscaling) []map[string]interface{} {
1736-
r := make(map[string]interface{})
1737-
if a == nil || !a.EnableNodeAutoprovisioning {
1738-
r["enabled"] = false
1739-
} else {
1740-
resourceLimits := make([]interface{}, 0, len(a.ResourceLimits))
1741-
for _, rl := range a.ResourceLimits {
1742-
resourceLimits = append(resourceLimits, map[string]interface{}{
1743-
"resource_type": rl.ResourceType,
1744-
"minimum": rl.Minimum,
1745-
"maximum": rl.Maximum,
1746-
})
1747-
}
1748-
r["resource_limits"] = resourceLimits
1749-
r["enabled"] = true
1750-
}
1751-
return []map[string]interface{}{r}
1752-
}
1753-
17541681
func flattenMasterAuthorizedNetworksConfig(c *containerBeta.MasterAuthorizedNetworksConfig) []map[string]interface{} {
17551682
if c == nil {
17561683
return nil

google/resource_container_cluster_test.go

-37
Original file line numberDiff line numberDiff line change
@@ -1995,43 +1995,6 @@ resource "google_container_cluster" "with_node_pool" {
19951995
}`, cluster, nodePool)
19961996
}
19971997

1998-
func testAccContainerCluster_autoprovisioning(cluster string, autoprovisioning bool) string {
1999-
config := fmt.Sprintf(`
2000-
data "google_container_engine_versions" "central1a" {
2001-
zone = "us-central1-a"
2002-
}
2003-
2004-
resource "google_container_cluster" "with_autoprovisioning" {
2005-
name = "%s"
2006-
zone = "us-central1-a"
2007-
min_master_version = "${data.google_container_engine_versions.central1a.latest_master_version}"
2008-
node_version = "${data.google_container_engine_versions.central1a.latest_node_version}"
2009-
initial_node_count = 3
2010-
`, cluster)
2011-
if autoprovisioning {
2012-
config += `
2013-
cluster_autoscaling {
2014-
enabled = true
2015-
resource_limits {
2016-
resource_type = "cpu"
2017-
maximum = 2
2018-
}
2019-
resource_limits {
2020-
resource_type = "memory"
2021-
maximum = 2048
2022-
}
2023-
}`
2024-
} else {
2025-
config += `
2026-
cluster_autoscaling {
2027-
enabled = false
2028-
}`
2029-
}
2030-
config += `
2031-
}`
2032-
return config
2033-
}
2034-
20351998
func testAccContainerCluster_withNodePoolAutoscaling(cluster, np string) string {
20361999
return fmt.Sprintf(`
20372000
resource "google_container_cluster" "with_node_pool" {

0 commit comments

Comments
 (0)