Skip to content

Commit 858054b

Browse files
Add the clusterupgrade feature config for the fleet Feature resource. (#9614) (#16951)
* Add support for gkehub clusterupgrade feature * Fix gkehub Feature indentation * Remove unnecessary tostring() call * Make upgrade type and version fields required for specifying overrides * Ignore update_time in tests * Replace tabulations with spaces [upstream:1cb7c590d6069f54e520750c948ffad37700baeb] Signed-off-by: Modular Magician <[email protected]>
1 parent 246ade5 commit 858054b

File tree

4 files changed

+546
-0
lines changed

4 files changed

+546
-0
lines changed

.changelog/9614.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
gkehub2: added `clusterupgrade` to `google_gke_hub_feature` resource.
3+
```

google/services/gkehub2/resource_gke_hub_feature.go

+330
Original file line numberDiff line numberDiff line change
@@ -471,6 +471,84 @@ Please refer to the field 'effective_labels' for all of the labels present on th
471471
MaxItems: 1,
472472
Elem: &schema.Resource{
473473
Schema: map[string]*schema.Schema{
474+
"clusterupgrade": {
475+
Type: schema.TypeList,
476+
Optional: true,
477+
Description: `Clusterupgrade feature spec.`,
478+
MaxItems: 1,
479+
Elem: &schema.Resource{
480+
Schema: map[string]*schema.Schema{
481+
"post_conditions": {
482+
Type: schema.TypeList,
483+
Computed: true,
484+
Optional: true,
485+
Description: `Post conditions to override for the specified upgrade.`,
486+
MaxItems: 1,
487+
Elem: &schema.Resource{
488+
Schema: map[string]*schema.Schema{
489+
"soaking": {
490+
Type: schema.TypeString,
491+
Required: true,
492+
Description: `Amount of time to "soak" after a rollout has been finished before marking it COMPLETE. Cannot exceed 30 days.`,
493+
},
494+
},
495+
},
496+
},
497+
"upstream_fleets": {
498+
Type: schema.TypeList,
499+
Required: true,
500+
Description: `Specified if other fleet should be considered as a source of upgrades. Currently, at most one upstream fleet is allowed. The fleet name should be either fleet project number or id.`,
501+
Elem: &schema.Schema{
502+
Type: schema.TypeString,
503+
},
504+
},
505+
"gke_upgrade_overrides": {
506+
Type: schema.TypeList,
507+
Optional: true,
508+
Description: `Configuration overrides for individual upgrades.`,
509+
Elem: &schema.Resource{
510+
Schema: map[string]*schema.Schema{
511+
"post_conditions": {
512+
Type: schema.TypeList,
513+
Required: true,
514+
Description: `Post conditions to override for the specified upgrade.`,
515+
MaxItems: 1,
516+
Elem: &schema.Resource{
517+
Schema: map[string]*schema.Schema{
518+
"soaking": {
519+
Type: schema.TypeString,
520+
Required: true,
521+
Description: `Amount of time to "soak" after a rollout has been finished before marking it COMPLETE. Cannot exceed 30 days.`,
522+
},
523+
},
524+
},
525+
},
526+
"upgrade": {
527+
Type: schema.TypeList,
528+
Required: true,
529+
Description: `Which upgrade to override.`,
530+
MaxItems: 1,
531+
Elem: &schema.Resource{
532+
Schema: map[string]*schema.Schema{
533+
"name": {
534+
Type: schema.TypeString,
535+
Required: true,
536+
Description: `Name of the upgrade, e.g., "k8s_control_plane". It should be a valid upgrade name. It must not exceet 99 characters.`,
537+
},
538+
"version": {
539+
Type: schema.TypeString,
540+
Required: true,
541+
Description: `Version of the upgrade, e.g., "1.22.1-gke.100". It should be a valid version. It must not exceet 99 characters.`,
542+
},
543+
},
544+
},
545+
},
546+
},
547+
},
548+
},
549+
},
550+
},
551+
},
474552
"fleetobservability": {
475553
Type: schema.TypeList,
476554
Optional: true,
@@ -1017,6 +1095,8 @@ func flattenGKEHub2FeatureSpec(v interface{}, d *schema.ResourceData, config *tr
10171095
flattenGKEHub2FeatureSpecMulticlusteringress(original["multiclusteringress"], d, config)
10181096
transformed["fleetobservability"] =
10191097
flattenGKEHub2FeatureSpecFleetobservability(original["fleetobservability"], d, config)
1098+
transformed["clusterupgrade"] =
1099+
flattenGKEHub2FeatureSpecClusterupgrade(original["clusterupgrade"], d, config)
10201100
return []interface{}{transformed}
10211101
}
10221102
func flattenGKEHub2FeatureSpecMulticlusteringress(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
@@ -1098,6 +1178,103 @@ func flattenGKEHub2FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfi
10981178
return v
10991179
}
11001180

1181+
func flattenGKEHub2FeatureSpecClusterupgrade(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1182+
if v == nil {
1183+
return nil
1184+
}
1185+
original := v.(map[string]interface{})
1186+
if len(original) == 0 {
1187+
return nil
1188+
}
1189+
transformed := make(map[string]interface{})
1190+
transformed["upstream_fleets"] =
1191+
flattenGKEHub2FeatureSpecClusterupgradeUpstreamFleets(original["upstreamFleets"], d, config)
1192+
transformed["post_conditions"] =
1193+
flattenGKEHub2FeatureSpecClusterupgradePostConditions(original["postConditions"], d, config)
1194+
transformed["gke_upgrade_overrides"] =
1195+
flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverrides(original["gkeUpgradeOverrides"], d, config)
1196+
return []interface{}{transformed}
1197+
}
1198+
func flattenGKEHub2FeatureSpecClusterupgradeUpstreamFleets(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1199+
return v
1200+
}
1201+
1202+
func flattenGKEHub2FeatureSpecClusterupgradePostConditions(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1203+
if v == nil {
1204+
return nil
1205+
}
1206+
original := v.(map[string]interface{})
1207+
if len(original) == 0 {
1208+
return nil
1209+
}
1210+
transformed := make(map[string]interface{})
1211+
transformed["soaking"] =
1212+
flattenGKEHub2FeatureSpecClusterupgradePostConditionsSoaking(original["soaking"], d, config)
1213+
return []interface{}{transformed}
1214+
}
1215+
func flattenGKEHub2FeatureSpecClusterupgradePostConditionsSoaking(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1216+
return v
1217+
}
1218+
1219+
func flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverrides(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1220+
if v == nil {
1221+
return v
1222+
}
1223+
l := v.([]interface{})
1224+
transformed := make([]interface{}, 0, len(l))
1225+
for _, raw := range l {
1226+
original := raw.(map[string]interface{})
1227+
if len(original) < 1 {
1228+
// Do not include empty json objects coming back from the api
1229+
continue
1230+
}
1231+
transformed = append(transformed, map[string]interface{}{
1232+
"upgrade": flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgrade(original["upgrade"], d, config),
1233+
"post_conditions": flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesPostConditions(original["postConditions"], d, config),
1234+
})
1235+
}
1236+
return transformed
1237+
}
1238+
func flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgrade(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1239+
if v == nil {
1240+
return nil
1241+
}
1242+
original := v.(map[string]interface{})
1243+
if len(original) == 0 {
1244+
return nil
1245+
}
1246+
transformed := make(map[string]interface{})
1247+
transformed["name"] =
1248+
flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgradeName(original["name"], d, config)
1249+
transformed["version"] =
1250+
flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgradeVersion(original["version"], d, config)
1251+
return []interface{}{transformed}
1252+
}
1253+
func flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgradeName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1254+
return v
1255+
}
1256+
1257+
func flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgradeVersion(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1258+
return v
1259+
}
1260+
1261+
func flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesPostConditions(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1262+
if v == nil {
1263+
return nil
1264+
}
1265+
original := v.(map[string]interface{})
1266+
if len(original) == 0 {
1267+
return nil
1268+
}
1269+
transformed := make(map[string]interface{})
1270+
transformed["soaking"] =
1271+
flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesPostConditionsSoaking(original["soaking"], d, config)
1272+
return []interface{}{transformed}
1273+
}
1274+
func flattenGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesPostConditionsSoaking(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
1275+
return v
1276+
}
1277+
11011278
func flattenGKEHub2FeatureFleetDefaultMemberConfig(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
11021279
if v == nil {
11031280
return nil
@@ -1683,6 +1860,13 @@ func expandGKEHub2FeatureSpec(v interface{}, d tpgresource.TerraformResourceData
16831860
transformed["fleetobservability"] = transformedFleetobservability
16841861
}
16851862

1863+
transformedClusterupgrade, err := expandGKEHub2FeatureSpecClusterupgrade(original["clusterupgrade"], d, config)
1864+
if err != nil {
1865+
return nil, err
1866+
} else if val := reflect.ValueOf(transformedClusterupgrade); val.IsValid() && !tpgresource.IsEmptyValue(val) {
1867+
transformed["clusterupgrade"] = transformedClusterupgrade
1868+
}
1869+
16861870
return transformed, nil
16871871
}
16881872

@@ -1800,6 +1984,152 @@ func expandGKEHub2FeatureSpecFleetobservabilityLoggingConfigFleetScopeLogsConfig
18001984
return v, nil
18011985
}
18021986

1987+
func expandGKEHub2FeatureSpecClusterupgrade(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
1988+
l := v.([]interface{})
1989+
if len(l) == 0 || l[0] == nil {
1990+
return nil, nil
1991+
}
1992+
raw := l[0]
1993+
original := raw.(map[string]interface{})
1994+
transformed := make(map[string]interface{})
1995+
1996+
transformedUpstreamFleets, err := expandGKEHub2FeatureSpecClusterupgradeUpstreamFleets(original["upstream_fleets"], d, config)
1997+
if err != nil {
1998+
return nil, err
1999+
} else if val := reflect.ValueOf(transformedUpstreamFleets); val.IsValid() && !tpgresource.IsEmptyValue(val) {
2000+
transformed["upstreamFleets"] = transformedUpstreamFleets
2001+
}
2002+
2003+
transformedPostConditions, err := expandGKEHub2FeatureSpecClusterupgradePostConditions(original["post_conditions"], d, config)
2004+
if err != nil {
2005+
return nil, err
2006+
} else if val := reflect.ValueOf(transformedPostConditions); val.IsValid() && !tpgresource.IsEmptyValue(val) {
2007+
transformed["postConditions"] = transformedPostConditions
2008+
}
2009+
2010+
transformedGkeUpgradeOverrides, err := expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverrides(original["gke_upgrade_overrides"], d, config)
2011+
if err != nil {
2012+
return nil, err
2013+
} else if val := reflect.ValueOf(transformedGkeUpgradeOverrides); val.IsValid() && !tpgresource.IsEmptyValue(val) {
2014+
transformed["gkeUpgradeOverrides"] = transformedGkeUpgradeOverrides
2015+
}
2016+
2017+
return transformed, nil
2018+
}
2019+
2020+
func expandGKEHub2FeatureSpecClusterupgradeUpstreamFleets(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2021+
return v, nil
2022+
}
2023+
2024+
func expandGKEHub2FeatureSpecClusterupgradePostConditions(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2025+
l := v.([]interface{})
2026+
if len(l) == 0 || l[0] == nil {
2027+
return nil, nil
2028+
}
2029+
raw := l[0]
2030+
original := raw.(map[string]interface{})
2031+
transformed := make(map[string]interface{})
2032+
2033+
transformedSoaking, err := expandGKEHub2FeatureSpecClusterupgradePostConditionsSoaking(original["soaking"], d, config)
2034+
if err != nil {
2035+
return nil, err
2036+
} else if val := reflect.ValueOf(transformedSoaking); val.IsValid() && !tpgresource.IsEmptyValue(val) {
2037+
transformed["soaking"] = transformedSoaking
2038+
}
2039+
2040+
return transformed, nil
2041+
}
2042+
2043+
func expandGKEHub2FeatureSpecClusterupgradePostConditionsSoaking(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2044+
return v, nil
2045+
}
2046+
2047+
func expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverrides(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2048+
l := v.([]interface{})
2049+
req := make([]interface{}, 0, len(l))
2050+
for _, raw := range l {
2051+
if raw == nil {
2052+
continue
2053+
}
2054+
original := raw.(map[string]interface{})
2055+
transformed := make(map[string]interface{})
2056+
2057+
transformedUpgrade, err := expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgrade(original["upgrade"], d, config)
2058+
if err != nil {
2059+
return nil, err
2060+
} else if val := reflect.ValueOf(transformedUpgrade); val.IsValid() && !tpgresource.IsEmptyValue(val) {
2061+
transformed["upgrade"] = transformedUpgrade
2062+
}
2063+
2064+
transformedPostConditions, err := expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesPostConditions(original["post_conditions"], d, config)
2065+
if err != nil {
2066+
return nil, err
2067+
} else if val := reflect.ValueOf(transformedPostConditions); val.IsValid() && !tpgresource.IsEmptyValue(val) {
2068+
transformed["postConditions"] = transformedPostConditions
2069+
}
2070+
2071+
req = append(req, transformed)
2072+
}
2073+
return req, nil
2074+
}
2075+
2076+
func expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgrade(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2077+
l := v.([]interface{})
2078+
if len(l) == 0 || l[0] == nil {
2079+
return nil, nil
2080+
}
2081+
raw := l[0]
2082+
original := raw.(map[string]interface{})
2083+
transformed := make(map[string]interface{})
2084+
2085+
transformedName, err := expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgradeName(original["name"], d, config)
2086+
if err != nil {
2087+
return nil, err
2088+
} else if val := reflect.ValueOf(transformedName); val.IsValid() && !tpgresource.IsEmptyValue(val) {
2089+
transformed["name"] = transformedName
2090+
}
2091+
2092+
transformedVersion, err := expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgradeVersion(original["version"], d, config)
2093+
if err != nil {
2094+
return nil, err
2095+
} else if val := reflect.ValueOf(transformedVersion); val.IsValid() && !tpgresource.IsEmptyValue(val) {
2096+
transformed["version"] = transformedVersion
2097+
}
2098+
2099+
return transformed, nil
2100+
}
2101+
2102+
func expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgradeName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2103+
return v, nil
2104+
}
2105+
2106+
func expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesUpgradeVersion(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2107+
return v, nil
2108+
}
2109+
2110+
func expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesPostConditions(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2111+
l := v.([]interface{})
2112+
if len(l) == 0 || l[0] == nil {
2113+
return nil, nil
2114+
}
2115+
raw := l[0]
2116+
original := raw.(map[string]interface{})
2117+
transformed := make(map[string]interface{})
2118+
2119+
transformedSoaking, err := expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesPostConditionsSoaking(original["soaking"], d, config)
2120+
if err != nil {
2121+
return nil, err
2122+
} else if val := reflect.ValueOf(transformedSoaking); val.IsValid() && !tpgresource.IsEmptyValue(val) {
2123+
transformed["soaking"] = transformedSoaking
2124+
}
2125+
2126+
return transformed, nil
2127+
}
2128+
2129+
func expandGKEHub2FeatureSpecClusterupgradeGkeUpgradeOverridesPostConditionsSoaking(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
2130+
return v, nil
2131+
}
2132+
18032133
func expandGKEHub2FeatureFleetDefaultMemberConfig(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
18042134
l := v.([]interface{})
18052135
if len(l) == 0 || l[0] == nil {

0 commit comments

Comments
 (0)