@@ -573,6 +573,12 @@ responses.`,
573
573
Optional : true ,
574
574
Description : `An optional description of this resource.` ,
575
575
},
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
+ },
576
582
"enable_cdn" : {
577
583
Type : schema .TypeBool ,
578
584
Optional : true ,
@@ -1223,6 +1229,12 @@ func resourceComputeBackendServiceCreate(d *schema.ResourceData, meta interface{
1223
1229
} else if v , ok := d .GetOkExists ("security_policy" ); ! isEmptyValue (reflect .ValueOf (securityPolicyProp )) && (ok || ! reflect .DeepEqual (v , securityPolicyProp )) {
1224
1230
obj ["securityPolicy" ] = securityPolicyProp
1225
1231
}
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
+ }
1226
1238
securitySettingsProp , err := expandComputeBackendServiceSecuritySettings (d .Get ("security_settings" ), d , config )
1227
1239
if err != nil {
1228
1240
return err
@@ -1313,6 +1325,25 @@ func resourceComputeBackendServiceCreate(d *schema.ResourceData, meta interface{
1313
1325
return waitErr
1314
1326
}
1315
1327
}
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
+ }
1316
1347
1317
1348
log .Printf ("[DEBUG] Finished creating BackendService %q: %#v" , d .Id (), res )
1318
1349
@@ -1446,6 +1477,9 @@ func resourceComputeBackendServiceRead(d *schema.ResourceData, meta interface{})
1446
1477
if err := d .Set ("security_policy" , flattenComputeBackendServiceSecurityPolicy (res ["securityPolicy" ], d , config )); err != nil {
1447
1478
return fmt .Errorf ("Error reading BackendService: %s" , err )
1448
1479
}
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
+ }
1449
1483
if err := d .Set ("security_settings" , flattenComputeBackendServiceSecuritySettings (res ["securitySettings" ], d , config )); err != nil {
1450
1484
return fmt .Errorf ("Error reading BackendService: %s" , err )
1451
1485
}
@@ -1607,6 +1641,12 @@ func resourceComputeBackendServiceUpdate(d *schema.ResourceData, meta interface{
1607
1641
} else if v , ok := d .GetOkExists ("security_policy" ); ! isEmptyValue (reflect .ValueOf (v )) && (ok || ! reflect .DeepEqual (v , securityPolicyProp )) {
1608
1642
obj ["securityPolicy" ] = securityPolicyProp
1609
1643
}
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
+ }
1610
1650
securitySettingsProp , err := expandComputeBackendServiceSecuritySettings (d .Get ("security_settings" ), d , config )
1611
1651
if err != nil {
1612
1652
return err
@@ -1684,6 +1724,25 @@ func resourceComputeBackendServiceUpdate(d *schema.ResourceData, meta interface{
1684
1724
return waitErr
1685
1725
}
1686
1726
}
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
+ }
1687
1746
return resourceComputeBackendServiceRead (d , meta )
1688
1747
}
1689
1748
@@ -2773,6 +2832,10 @@ func flattenComputeBackendServiceSecurityPolicy(v interface{}, d *schema.Resourc
2773
2832
return v
2774
2833
}
2775
2834
2835
+ func flattenComputeBackendServiceEdgeSecurityPolicy (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
2836
+ return v
2837
+ }
2838
+
2776
2839
func flattenComputeBackendServiceSecuritySettings (v interface {}, d * schema.ResourceData , config * Config ) interface {} {
2777
2840
if v == nil {
2778
2841
return nil
@@ -3707,6 +3770,10 @@ func expandComputeBackendServiceSecurityPolicy(v interface{}, d TerraformResourc
3707
3770
return v , nil
3708
3771
}
3709
3772
3773
+ func expandComputeBackendServiceEdgeSecurityPolicy (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
3774
+ return v , nil
3775
+ }
3776
+
3710
3777
func expandComputeBackendServiceSecuritySettings (v interface {}, d TerraformResourceData , config * Config ) (interface {}, error ) {
3711
3778
l := v .([]interface {})
3712
3779
if len (l ) == 0 || l [0 ] == nil {
0 commit comments