@@ -22,6 +22,7 @@ import (
22
22
"log"
23
23
"net/http"
24
24
"reflect"
25
+ "strings"
25
26
"time"
26
27
27
28
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
@@ -61,6 +62,11 @@ func ResourceAccessContextManagerServicePerimeterResource() *schema.Resource {
61
62
Currently only projects are allowed.
62
63
Format: projects/{project_number}` ,
63
64
},
65
+ "access_policy_id" : {
66
+ Type : schema .TypeString ,
67
+ Computed : true ,
68
+ Description : `The name of the Access Policy this resource belongs to.` ,
69
+ },
64
70
},
65
71
UseJSONNumber : true ,
66
72
}
@@ -81,7 +87,12 @@ func resourceAccessContextManagerServicePerimeterResourceCreate(d *schema.Resour
81
87
obj ["resource" ] = resourceProp
82
88
}
83
89
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}}" )
85
96
if err != nil {
86
97
return err
87
98
}
@@ -235,7 +246,7 @@ func resourceAccessContextManagerServicePerimeterResourceDelete(d *schema.Resour
235
246
236
247
billingProject := ""
237
248
238
- lockName , err := tpgresource .ReplaceVars (d , config , "{{perimeter_name }}" )
249
+ lockName , err := tpgresource .ReplaceVars (d , config , "{{access_policy_id }}" )
239
250
if err != nil {
240
251
return err
241
252
}
@@ -301,6 +312,9 @@ func resourceAccessContextManagerServicePerimeterResourceImport(d *schema.Resour
301
312
return nil , err
302
313
}
303
314
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
+ }
304
318
if err := d .Set ("perimeter_name" , fmt .Sprintf ("accessPolicies/%s/servicePerimeters/%s" , parts ["accessPolicy" ], parts ["perimeter" ])); err != nil {
305
319
return nil , fmt .Errorf ("Error setting perimeter_name: %s" , err )
306
320
}
@@ -318,6 +332,17 @@ func expandNestedAccessContextManagerServicePerimeterResourceResource(v interfac
318
332
return v , nil
319
333
}
320
334
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
+
321
346
func flattenNestedAccessContextManagerServicePerimeterResource (d * schema.ResourceData , meta interface {}, res map [string ]interface {}) (map [string ]interface {}, error ) {
322
347
var v interface {}
323
348
var ok bool
0 commit comments