@@ -22,6 +22,7 @@ import (
2222 "log"
2323 "net/http"
2424 "reflect"
25+ "strings"
2526 "time"
2627
2728 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -61,6 +62,11 @@ func ResourceAccessContextManagerServicePerimeterResource() *schema.Resource {
6162Currently only projects are allowed.
6263Format: projects/{project_number}` ,
6364 },
65+ "access_policy_id" : {
66+ Type : schema .TypeString ,
67+ Computed : true ,
68+ Description : `The name of the Access Policy this resource belongs to.` ,
69+ },
6470 },
6571 UseJSONNumber : true ,
6672 }
@@ -81,7 +87,12 @@ func resourceAccessContextManagerServicePerimeterResourceCreate(d *schema.Resour
8187 obj ["resource" ] = resourceProp
8288 }
8389
84- lockName , err := tpgresource .ReplaceVars (d , config , "{{perimeter_name}}" )
90+ obj , err = resourceAccessContextManagerServicePerimeterResourceEncoder (d , meta , obj )
91+ if err != nil {
92+ return err
93+ }
94+
95+ lockName , err := tpgresource .ReplaceVars (d , config , "{{access_policy_id}}" )
8596 if err != nil {
8697 return err
8798 }
@@ -235,7 +246,7 @@ func resourceAccessContextManagerServicePerimeterResourceDelete(d *schema.Resour
235246
236247 billingProject := ""
237248
238- lockName , err := tpgresource .ReplaceVars (d , config , "{{perimeter_name }}" )
249+ lockName , err := tpgresource .ReplaceVars (d , config , "{{access_policy_id }}" )
239250 if err != nil {
240251 return err
241252 }
@@ -301,6 +312,9 @@ func resourceAccessContextManagerServicePerimeterResourceImport(d *schema.Resour
301312 return nil , err
302313 }
303314
315+ if err := d .Set ("access_policy_id" , fmt .Sprintf ("accessPolicies/%s" , parts ["accessPolicy" ])); err != nil {
316+ return nil , fmt .Errorf ("Error setting access_policy_id: %s" , err )
317+ }
304318 if err := d .Set ("perimeter_name" , fmt .Sprintf ("accessPolicies/%s/servicePerimeters/%s" , parts ["accessPolicy" ], parts ["perimeter" ])); err != nil {
305319 return nil , fmt .Errorf ("Error setting perimeter_name: %s" , err )
306320 }
@@ -318,6 +332,17 @@ func expandNestedAccessContextManagerServicePerimeterResourceResource(v interfac
318332 return v , nil
319333}
320334
335+ func resourceAccessContextManagerServicePerimeterResourceEncoder (d * schema.ResourceData , meta interface {}, obj map [string ]interface {}) (map [string ]interface {}, error ) {
336+ // Set the access_policy_id field from part of the perimeter_name parameter.
337+
338+ // The is logic is inside the encoder since the access_policy_id field is part of
339+ // the mutex lock and encoders run before the lock is set.
340+ parts := strings .Split (d .Get ("perimeter_name" ).(string ), "/" )
341+ d .Set ("access_policy_id" , fmt .Sprintf ("accessPolicies/%s" , parts [1 ]))
342+
343+ return obj , nil
344+ }
345+
321346func flattenNestedAccessContextManagerServicePerimeterResource (d * schema.ResourceData , meta interface {}, res map [string ]interface {}) (map [string ]interface {}, error ) {
322347 var v interface {}
323348 var ok bool
0 commit comments