Skip to content

Commit b0849f0

Browse files
authored
Add diff suppress for time format to google_compute_resource_policies (#11486)
1 parent 049127c commit b0849f0

File tree

4 files changed

+68
-0
lines changed

4 files changed

+68
-0
lines changed

mmv1/products/compute/ResourcePolicy.yaml

+10
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ examples:
4747
primary_resource_id: 'foo'
4848
vars:
4949
name: 'gce-policy'
50+
- !ruby/object:Provider::Terraform::Examples
51+
name: 'resource_policy_hourly_format'
52+
primary_resource_id: 'foo'
53+
skip_docs: true
54+
vars:
55+
name: 'gce-policy'
5056
- !ruby/object:Provider::Terraform::Examples
5157
name: 'resource_policy_full'
5258
primary_resource_id: 'bar'
@@ -78,6 +84,8 @@ examples:
7884
primary_resource_id: 'cgroup'
7985
vars:
8086
name: 'gce-policy'
87+
custom_code: !ruby/object:Provider::Terraform::CustomCode
88+
constants: templates/terraform/constants/compute_resource_policy.go.erb
8189
parameters:
8290
- !ruby/object:Api::Type::ResourceRef
8391
name: region
@@ -143,6 +151,7 @@ properties:
143151
required: true
144152
validation: !ruby/object:Provider::Terraform::Validation
145153
function: 'verify.ValidateHourlyOnly'
154+
diff_suppress_func: 'HourlyFormatSuppressDiff'
146155
- !ruby/object:Api::Type::NestedObject
147156
name: 'dailySchedule'
148157
description: |
@@ -166,6 +175,7 @@ properties:
166175
required: true
167176
validation: !ruby/object:Provider::Terraform::Validation
168177
function: 'verify.ValidateHourlyOnly'
178+
diff_suppress_func: 'HourlyFormatSuppressDiff'
169179
- !ruby/object:Api::Type::NestedObject
170180
name: 'weeklySchedule'
171181
description: |
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// Suppresses a diff on cases like 1:00 when it should be 01:00.
2+
// Because API will normalize this value
3+
func HourlyFormatSuppressDiff(_, old, new string, _ *schema.ResourceData) bool {
4+
return old == "0"+new
5+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
resource "google_compute_resource_policy" "foo" {
2+
name = "<%= ctx[:vars]['name'] %>"
3+
region = "us-central1"
4+
snapshot_schedule_policy {
5+
schedule {
6+
daily_schedule {
7+
days_in_cycle = 1
8+
start_time = "4:00"
9+
}
10+
}
11+
}
12+
}

mmv1/third_party/terraform/services/compute/resource_compute_resource_policy_test.go

+41
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,49 @@ import (
66

77
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
88
"github.com/hashicorp/terraform-provider-google/google/acctest"
9+
"github.com/hashicorp/terraform-provider-google/google/services/compute"
910
)
1011

12+
// Value returned from the API will always be in format "HH:MM", so we need the suppress only on new values
13+
func TestHourlyFormatSuppressDiff(t *testing.T) {
14+
cases := map[string]struct {
15+
Old, New string
16+
ExpectDiffSuppress bool
17+
}{
18+
"Same value": {
19+
Old: "01:00",
20+
New: "01:00",
21+
ExpectDiffSuppress: false,
22+
},
23+
"Same value but different format": {
24+
Old: "01:00",
25+
New: "1:00",
26+
ExpectDiffSuppress: true,
27+
},
28+
"Changed value": {
29+
Old: "01:00",
30+
New: "02:00",
31+
ExpectDiffSuppress: false,
32+
},
33+
"Changed value but different format": {
34+
Old: "01:00",
35+
New: "2:00",
36+
ExpectDiffSuppress: false,
37+
},
38+
"Check interference with unaffected values": {
39+
Old: "11:00",
40+
New: "22:00",
41+
ExpectDiffSuppress: false,
42+
},
43+
}
44+
45+
for tn, tc := range cases {
46+
if compute.HourlyFormatSuppressDiff("", tc.Old, tc.New, nil) != tc.ExpectDiffSuppress {
47+
t.Errorf("bad: %s, %q => %q expect DiffSuppress to return %t", tn, tc.Old, tc.New, tc.ExpectDiffSuppress)
48+
}
49+
}
50+
}
51+
1152
func TestAccComputeResourcePolicy_attached(t *testing.T) {
1253
t.Parallel()
1354

0 commit comments

Comments
 (0)