Skip to content

Commit 7c0dde5

Browse files
add field maintenance_window.start_time to google_compute_node_group (#4656) (#3125)
Signed-off-by: Modular Magician <[email protected]>
1 parent 17bf5f5 commit 7c0dde5

File tree

5 files changed

+91
-5
lines changed

5 files changed

+91
-5
lines changed

.changelog/4656.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: added field `maintenance_window.start_time` to `google_compute_node_group`
3+
```

google-beta/resource_compute_node_group.go

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,23 @@ than or equal to max-nodes. The default value is 0.`,
110110
Description: `Specifies how to handle instances when a node in the group undergoes maintenance. Set to one of: DEFAULT, RESTART_IN_PLACE, or MIGRATE_WITHIN_NODE_GROUP. The default value is DEFAULT.`,
111111
Default: "DEFAULT",
112112
},
113+
"maintenance_window": {
114+
Type: schema.TypeList,
115+
Optional: true,
116+
ForceNew: true,
117+
Description: `contains properties for the timeframe of maintenance`,
118+
MaxItems: 1,
119+
Elem: &schema.Resource{
120+
Schema: map[string]*schema.Schema{
121+
"start_time": {
122+
Type: schema.TypeString,
123+
Required: true,
124+
ForceNew: true,
125+
Description: `instances.start time of the window. This must be in UTC format that resolves to one of 00:00, 04:00, 08:00, 12:00, 16:00, or 20:00. For example, both 13:00-5 and 08:00 are valid.`,
126+
},
127+
},
128+
},
129+
},
113130
"name": {
114131
Type: schema.TypeString,
115132
Optional: true,
@@ -182,6 +199,12 @@ func resourceComputeNodeGroupCreate(d *schema.ResourceData, meta interface{}) er
182199
} else if v, ok := d.GetOkExists("maintenance_policy"); !isEmptyValue(reflect.ValueOf(maintenancePolicyProp)) && (ok || !reflect.DeepEqual(v, maintenancePolicyProp)) {
183200
obj["maintenancePolicy"] = maintenancePolicyProp
184201
}
202+
maintenanceWindowProp, err := expandComputeNodeGroupMaintenanceWindow(d.Get("maintenance_window"), d, config)
203+
if err != nil {
204+
return err
205+
} else if v, ok := d.GetOkExists("maintenance_window"); !isEmptyValue(reflect.ValueOf(maintenanceWindowProp)) && (ok || !reflect.DeepEqual(v, maintenanceWindowProp)) {
206+
obj["maintenanceWindow"] = maintenanceWindowProp
207+
}
185208
autoscalingPolicyProp, err := expandComputeNodeGroupAutoscalingPolicy(d.Get("autoscaling_policy"), d, config)
186209
if err != nil {
187210
return err
@@ -293,6 +316,9 @@ func resourceComputeNodeGroupRead(d *schema.ResourceData, meta interface{}) erro
293316
if err := d.Set("maintenance_policy", flattenComputeNodeGroupMaintenancePolicy(res["maintenancePolicy"], d, config)); err != nil {
294317
return fmt.Errorf("Error reading NodeGroup: %s", err)
295318
}
319+
if err := d.Set("maintenance_window", flattenComputeNodeGroupMaintenanceWindow(res["maintenanceWindow"], d, config)); err != nil {
320+
return fmt.Errorf("Error reading NodeGroup: %s", err)
321+
}
296322
if err := d.Set("autoscaling_policy", flattenComputeNodeGroupAutoscalingPolicy(res["autoscalingPolicy"], d, config)); err != nil {
297323
return fmt.Errorf("Error reading NodeGroup: %s", err)
298324
}
@@ -469,6 +495,23 @@ func flattenComputeNodeGroupMaintenancePolicy(v interface{}, d *schema.ResourceD
469495
return v
470496
}
471497

498+
func flattenComputeNodeGroupMaintenanceWindow(v interface{}, d *schema.ResourceData, config *Config) interface{} {
499+
if v == nil {
500+
return nil
501+
}
502+
original := v.(map[string]interface{})
503+
if len(original) == 0 {
504+
return nil
505+
}
506+
transformed := make(map[string]interface{})
507+
transformed["start_time"] =
508+
flattenComputeNodeGroupMaintenanceWindowStartTime(original["startTime"], d, config)
509+
return []interface{}{transformed}
510+
}
511+
func flattenComputeNodeGroupMaintenanceWindowStartTime(v interface{}, d *schema.ResourceData, config *Config) interface{} {
512+
return v
513+
}
514+
472515
func flattenComputeNodeGroupAutoscalingPolicy(v interface{}, d *schema.ResourceData, config *Config) interface{} {
473516
if v == nil {
474517
return nil
@@ -555,6 +598,29 @@ func expandComputeNodeGroupMaintenancePolicy(v interface{}, d TerraformResourceD
555598
return v, nil
556599
}
557600

601+
func expandComputeNodeGroupMaintenanceWindow(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
602+
l := v.([]interface{})
603+
if len(l) == 0 || l[0] == nil {
604+
return nil, nil
605+
}
606+
raw := l[0]
607+
original := raw.(map[string]interface{})
608+
transformed := make(map[string]interface{})
609+
610+
transformedStartTime, err := expandComputeNodeGroupMaintenanceWindowStartTime(original["start_time"], d, config)
611+
if err != nil {
612+
return nil, err
613+
} else if val := reflect.ValueOf(transformedStartTime); val.IsValid() && !isEmptyValue(val) {
614+
transformed["startTime"] = transformedStartTime
615+
}
616+
617+
return transformed, nil
618+
}
619+
620+
func expandComputeNodeGroupMaintenanceWindowStartTime(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
621+
return v, nil
622+
}
623+
558624
func expandComputeNodeGroupAutoscalingPolicy(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
559625
l := v.([]interface{})
560626
if len(l) == 0 || l[0] == nil {

google-beta/resource_compute_node_group_generated_test.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ resource "google_compute_node_template" "soletenant-tmpl" {
6161
6262
resource "google_compute_node_group" "nodes" {
6363
name = "tf-test-soletenant-group%{random_suffix}"
64-
zone = "us-central1-a"
64+
zone = "us-central1-f"
6565
description = "example google_compute_node_group for Terraform Google Provider"
6666
6767
size = 1
@@ -108,9 +108,12 @@ resource "google_compute_node_template" "soletenant-tmpl" {
108108
109109
resource "google_compute_node_group" "nodes" {
110110
name = "tf-test-soletenant-group%{random_suffix}"
111-
zone = "us-central1-a"
111+
zone = "us-central1-f"
112112
description = "example google_compute_node_group for Terraform Google Provider"
113113
maintenance_policy = "RESTART_IN_PLACE"
114+
maintenance_window {
115+
start_time = "08:00"
116+
}
114117
size = 1
115118
node_template = google_compute_node_template.soletenant-tmpl.id
116119
autoscaling_policy {

google-beta/resource_dataflow_flex_template_job_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88

99
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
1010
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
11-
"google.golang.org/api/compute/v1"
11+
compute "google.golang.org/api/compute/v1"
1212
)
1313

1414
func TestAccDataflowFlexTemplateJob_basic(t *testing.T) {

website/docs/r/compute_node_group.html.markdown

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ resource "google_compute_node_template" "soletenant-tmpl" {
5353
5454
resource "google_compute_node_group" "nodes" {
5555
name = "soletenant-group"
56-
zone = "us-central1-a"
56+
zone = "us-central1-f"
5757
description = "example google_compute_node_group for Terraform Google Provider"
5858
5959
size = 1
@@ -77,9 +77,12 @@ resource "google_compute_node_template" "soletenant-tmpl" {
7777
7878
resource "google_compute_node_group" "nodes" {
7979
name = "soletenant-group"
80-
zone = "us-central1-a"
80+
zone = "us-central1-f"
8181
description = "example google_compute_node_group for Terraform Google Provider"
8282
maintenance_policy = "RESTART_IN_PLACE"
83+
maintenance_window {
84+
start_time = "08:00"
85+
}
8386
size = 1
8487
node_template = google_compute_node_template.soletenant-tmpl.id
8588
autoscaling_policy {
@@ -119,6 +122,11 @@ The following arguments are supported:
119122
(Optional)
120123
Specifies how to handle instances when a node in the group undergoes maintenance. Set to one of: DEFAULT, RESTART_IN_PLACE, or MIGRATE_WITHIN_NODE_GROUP. The default value is DEFAULT.
121124

125+
* `maintenance_window` -
126+
(Optional)
127+
contains properties for the timeframe of maintenance
128+
Structure is documented below.
129+
122130
* `autoscaling_policy` -
123131
(Optional)
124132
If you use sole-tenant nodes for your workloads, you can use the node
@@ -133,6 +141,12 @@ The following arguments are supported:
133141
If it is not provided, the provider project is used.
134142

135143

144+
The `maintenance_window` block supports:
145+
146+
* `start_time` -
147+
(Required)
148+
instances.start time of the window. This must be in UTC format that resolves to one of 00:00, 04:00, 08:00, 12:00, 16:00, or 20:00. For example, both 13:00-5 and 08:00 are valid.
149+
136150
The `autoscaling_policy` block supports:
137151

138152
* `mode` -

0 commit comments

Comments
 (0)