Skip to content

Commit 2930e07

Browse files
Add support for edge_security_policy to google_compute_backend_service (#7120) (#13494)
* updated backend service for edge security policy * Updated fields for diff suppression, modified post_create custom go code and updated security policy tests. Signed-off-by: Modular Magician <[email protected]> Signed-off-by: Modular Magician <[email protected]>
1 parent a7553ae commit 2930e07

File tree

4 files changed

+86
-4
lines changed

4 files changed

+86
-4
lines changed

.changelog/7120.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: add support for 'edge_security_policy' field to 'google_compute_backend_service' resource.
3+
```

google/resource_compute_backend_service.go

+67
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,12 @@ responses.`,
573573
Optional: true,
574574
Description: `An optional description of this resource.`,
575575
},
576+
"edge_security_policy": {
577+
Type: schema.TypeString,
578+
Optional: true,
579+
DiffSuppressFunc: compareSelfLinkOrResourceName,
580+
Description: `The resource URL for the edge security policy associated with this backend service.`,
581+
},
576582
"enable_cdn": {
577583
Type: schema.TypeBool,
578584
Optional: true,
@@ -1223,6 +1229,12 @@ func resourceComputeBackendServiceCreate(d *schema.ResourceData, meta interface{
12231229
} else if v, ok := d.GetOkExists("security_policy"); !isEmptyValue(reflect.ValueOf(securityPolicyProp)) && (ok || !reflect.DeepEqual(v, securityPolicyProp)) {
12241230
obj["securityPolicy"] = securityPolicyProp
12251231
}
1232+
edgeSecurityPolicyProp, err := expandComputeBackendServiceEdgeSecurityPolicy(d.Get("edge_security_policy"), d, config)
1233+
if err != nil {
1234+
return err
1235+
} else if v, ok := d.GetOkExists("edge_security_policy"); !isEmptyValue(reflect.ValueOf(edgeSecurityPolicyProp)) && (ok || !reflect.DeepEqual(v, edgeSecurityPolicyProp)) {
1236+
obj["edgeSecurityPolicy"] = edgeSecurityPolicyProp
1237+
}
12261238
securitySettingsProp, err := expandComputeBackendServiceSecuritySettings(d.Get("security_settings"), d, config)
12271239
if err != nil {
12281240
return err
@@ -1313,6 +1325,25 @@ func resourceComputeBackendServiceCreate(d *schema.ResourceData, meta interface{
13131325
return waitErr
13141326
}
13151327
}
1328+
// edge security_policy isn't set by Create / Update
1329+
if o, n := d.GetChange("edge_security_policy"); o.(string) != n.(string) {
1330+
pol, err := ParseSecurityPolicyFieldValue(n.(string), d, config)
1331+
if err != nil {
1332+
return errwrap.Wrapf("Error parsing Backend Service edge security policy: {{err}}", err)
1333+
}
1334+
1335+
spr := emptySecurityPolicyReference()
1336+
spr.SecurityPolicy = pol.RelativeLink()
1337+
op, err := config.NewComputeClient(userAgent).BackendServices.SetEdgeSecurityPolicy(project, obj["name"].(string), spr).Do()
1338+
if err != nil {
1339+
return errwrap.Wrapf("Error setting Backend Service edge security policy: {{err}}", err)
1340+
}
1341+
// This uses the create timeout for simplicity, though technically this code appears in both create and update
1342+
waitErr := computeOperationWaitTime(config, op, project, "Setting Backend Service Edge Security Policy", userAgent, d.Timeout(schema.TimeoutCreate))
1343+
if waitErr != nil {
1344+
return waitErr
1345+
}
1346+
}
13161347

13171348
log.Printf("[DEBUG] Finished creating BackendService %q: %#v", d.Id(), res)
13181349

@@ -1446,6 +1477,9 @@ func resourceComputeBackendServiceRead(d *schema.ResourceData, meta interface{})
14461477
if err := d.Set("security_policy", flattenComputeBackendServiceSecurityPolicy(res["securityPolicy"], d, config)); err != nil {
14471478
return fmt.Errorf("Error reading BackendService: %s", err)
14481479
}
1480+
if err := d.Set("edge_security_policy", flattenComputeBackendServiceEdgeSecurityPolicy(res["edgeSecurityPolicy"], d, config)); err != nil {
1481+
return fmt.Errorf("Error reading BackendService: %s", err)
1482+
}
14491483
if err := d.Set("security_settings", flattenComputeBackendServiceSecuritySettings(res["securitySettings"], d, config)); err != nil {
14501484
return fmt.Errorf("Error reading BackendService: %s", err)
14511485
}
@@ -1607,6 +1641,12 @@ func resourceComputeBackendServiceUpdate(d *schema.ResourceData, meta interface{
16071641
} else if v, ok := d.GetOkExists("security_policy"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, securityPolicyProp)) {
16081642
obj["securityPolicy"] = securityPolicyProp
16091643
}
1644+
edgeSecurityPolicyProp, err := expandComputeBackendServiceEdgeSecurityPolicy(d.Get("edge_security_policy"), d, config)
1645+
if err != nil {
1646+
return err
1647+
} else if v, ok := d.GetOkExists("edge_security_policy"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, edgeSecurityPolicyProp)) {
1648+
obj["edgeSecurityPolicy"] = edgeSecurityPolicyProp
1649+
}
16101650
securitySettingsProp, err := expandComputeBackendServiceSecuritySettings(d.Get("security_settings"), d, config)
16111651
if err != nil {
16121652
return err
@@ -1684,6 +1724,25 @@ func resourceComputeBackendServiceUpdate(d *schema.ResourceData, meta interface{
16841724
return waitErr
16851725
}
16861726
}
1727+
// edge security_policy isn't set by Create / Update
1728+
if o, n := d.GetChange("edge_security_policy"); o.(string) != n.(string) {
1729+
pol, err := ParseSecurityPolicyFieldValue(n.(string), d, config)
1730+
if err != nil {
1731+
return errwrap.Wrapf("Error parsing Backend Service edge security policy: {{err}}", err)
1732+
}
1733+
1734+
spr := emptySecurityPolicyReference()
1735+
spr.SecurityPolicy = pol.RelativeLink()
1736+
op, err := config.NewComputeClient(userAgent).BackendServices.SetEdgeSecurityPolicy(project, obj["name"].(string), spr).Do()
1737+
if err != nil {
1738+
return errwrap.Wrapf("Error setting Backend Service edge security policy: {{err}}", err)
1739+
}
1740+
// This uses the create timeout for simplicity, though technically this code appears in both create and update
1741+
waitErr := computeOperationWaitTime(config, op, project, "Setting Backend Service Edge Security Policy", userAgent, d.Timeout(schema.TimeoutCreate))
1742+
if waitErr != nil {
1743+
return waitErr
1744+
}
1745+
}
16871746
return resourceComputeBackendServiceRead(d, meta)
16881747
}
16891748

@@ -2773,6 +2832,10 @@ func flattenComputeBackendServiceSecurityPolicy(v interface{}, d *schema.Resourc
27732832
return v
27742833
}
27752834

2835+
func flattenComputeBackendServiceEdgeSecurityPolicy(v interface{}, d *schema.ResourceData, config *Config) interface{} {
2836+
return v
2837+
}
2838+
27762839
func flattenComputeBackendServiceSecuritySettings(v interface{}, d *schema.ResourceData, config *Config) interface{} {
27772840
if v == nil {
27782841
return nil
@@ -3707,6 +3770,10 @@ func expandComputeBackendServiceSecurityPolicy(v interface{}, d TerraformResourc
37073770
return v, nil
37083771
}
37093772

3773+
func expandComputeBackendServiceEdgeSecurityPolicy(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
3774+
return v, nil
3775+
}
3776+
37103777
func expandComputeBackendServiceSecuritySettings(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
37113778
l := v.([]interface{})
37123779
if len(l) == 0 || l[0] == nil {

google/resource_compute_backend_service_test.go

+12-4
Original file line numberDiff line numberDiff line change
@@ -261,22 +261,23 @@ func TestAccComputeBackendService_withSecurityPolicy(t *testing.T) {
261261
serviceName := fmt.Sprintf("tf-test-%s", randString(t, 10))
262262
checkName := fmt.Sprintf("tf-test-%s", randString(t, 10))
263263
polName := fmt.Sprintf("tf-test-%s", randString(t, 10))
264+
edgePolName := fmt.Sprintf("tf-test-%s", randString(t, 10))
264265

265266
vcrTest(t, resource.TestCase{
266267
PreCheck: func() { testAccPreCheck(t) },
267268
Providers: testAccProviders,
268269
CheckDestroy: testAccCheckComputeBackendServiceDestroyProducer(t),
269270
Steps: []resource.TestStep{
270271
{
271-
Config: testAccComputeBackendService_withSecurityPolicy(serviceName, checkName, polName, "google_compute_security_policy.policy.self_link"),
272+
Config: testAccComputeBackendService_withSecurityPolicy(serviceName, checkName, polName, edgePolName, "google_compute_security_policy.policy.self_link", "google_compute_security_policy.edgePolicy.self_link"),
272273
},
273274
{
274275
ResourceName: "google_compute_backend_service.foobar",
275276
ImportState: true,
276277
ImportStateVerify: true,
277278
},
278279
{
279-
Config: testAccComputeBackendService_withSecurityPolicy(serviceName, checkName, polName, "\"\""),
280+
Config: testAccComputeBackendService_withSecurityPolicy(serviceName, checkName, polName, edgePolName, "\"\"", "\"\""),
280281
},
281282
{
282283
ResourceName: "google_compute_backend_service.foobar",
@@ -1057,12 +1058,13 @@ resource "google_compute_https_health_check" "zero" {
10571058
`, serviceName, checkName)
10581059
}
10591060

1060-
func testAccComputeBackendService_withSecurityPolicy(serviceName, checkName, polName, polLink string) string {
1061+
func testAccComputeBackendService_withSecurityPolicy(serviceName, checkName, polName, edgePolName, polLink string, edgePolLink string) string {
10611062
return fmt.Sprintf(`
10621063
resource "google_compute_backend_service" "foobar" {
10631064
name = "%s"
10641065
health_checks = [google_compute_http_health_check.zero.self_link]
10651066
security_policy = %s
1067+
edge_security_policy = %s
10661068
}
10671069
10681070
resource "google_compute_http_health_check" "zero" {
@@ -1076,7 +1078,13 @@ resource "google_compute_security_policy" "policy" {
10761078
name = "%s"
10771079
description = "basic security policy"
10781080
}
1079-
`, serviceName, polLink, checkName, polName)
1081+
1082+
resource "google_compute_security_policy" "edgePolicy" {
1083+
name = "%s"
1084+
description = "edge security policy"
1085+
type = "CLOUD_ARMOR_EDGE"
1086+
}
1087+
`, serviceName, polLink, edgePolLink, checkName, polName, edgePolName)
10801088
}
10811089

10821090
func testAccComputeBackendService_withMaxConnections(

website/docs/r/compute_backend_service.html.markdown

+4
Original file line numberDiff line numberDiff line change
@@ -459,6 +459,10 @@ The following arguments are supported:
459459
(Optional)
460460
The security policy associated with this backend service.
461461

462+
* `edge_security_policy` -
463+
(Optional)
464+
The resource URL for the edge security policy associated with this backend service.
465+
462466
* `security_settings` -
463467
(Optional)
464468
The security settings that apply to this backend service. This field is applicable to either

0 commit comments

Comments
 (0)