@@ -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"
@@ -59,6 +60,11 @@ func ResourceAccessContextManagerIngressPolicy() *schema.Resource {
59
60
ForceNew : true ,
60
61
Description : `A GCP resource that is inside of the service perimeter.` ,
61
62
},
63
+ "access_policy_id" : {
64
+ Type : schema .TypeString ,
65
+ Computed : true ,
66
+ Description : `The name of the Access Policy this resource belongs to.` ,
67
+ },
62
68
},
63
69
UseJSONNumber : true ,
64
70
}
@@ -79,6 +85,18 @@ func resourceAccessContextManagerIngressPolicyCreate(d *schema.ResourceData, met
79
85
obj ["resource" ] = resourceProp
80
86
}
81
87
88
+ obj , err = resourceAccessContextManagerIngressPolicyEncoder (d , meta , obj )
89
+ if err != nil {
90
+ return err
91
+ }
92
+
93
+ lockName , err := tpgresource .ReplaceVars (d , config , "{{access_policy_id}}" )
94
+ if err != nil {
95
+ return err
96
+ }
97
+ transport_tpg .MutexStore .Lock (lockName )
98
+ defer transport_tpg .MutexStore .Unlock (lockName )
99
+
82
100
url , err := tpgresource .ReplaceVars (d , config , "{{AccessContextManagerBasePath}}{{ingress_policy_name}}" )
83
101
if err != nil {
84
102
return err
@@ -222,6 +240,13 @@ func resourceAccessContextManagerIngressPolicyDelete(d *schema.ResourceData, met
222
240
223
241
billingProject := ""
224
242
243
+ lockName , err := tpgresource .ReplaceVars (d , config , "{{access_policy_id}}" )
244
+ if err != nil {
245
+ return err
246
+ }
247
+ transport_tpg .MutexStore .Lock (lockName )
248
+ defer transport_tpg .MutexStore .Unlock (lockName )
249
+
225
250
url , err := tpgresource .ReplaceVars (d , config , "{{AccessContextManagerBasePath}}{{ingress_policy_name}}" )
226
251
if err != nil {
227
252
return err
@@ -281,6 +306,9 @@ func resourceAccessContextManagerIngressPolicyImport(d *schema.ResourceData, met
281
306
return nil , err
282
307
}
283
308
309
+ if err := d .Set ("access_policy_id" , fmt .Sprintf ("accessPolicies/%s" , parts ["accessPolicy" ])); err != nil {
310
+ return nil , fmt .Errorf ("Error setting access_policy_id: %s" , err )
311
+ }
284
312
if err := d .Set ("perimeter" , fmt .Sprintf ("accessPolicies/%s/servicePerimeters/%s" , parts ["accessPolicy" ], parts ["perimeter" ])); err != nil {
285
313
return nil , fmt .Errorf ("Error setting perimeter: %s" , err )
286
314
}
@@ -295,6 +323,17 @@ func expandNestedAccessContextManagerIngressPolicyResource(v interface{}, d tpgr
295
323
return v , nil
296
324
}
297
325
326
+ func resourceAccessContextManagerIngressPolicyEncoder (d * schema.ResourceData , meta interface {}, obj map [string ]interface {}) (map [string ]interface {}, error ) {
327
+ // Set the access_policy_id field from part of the ingress_policy_name parameter.
328
+
329
+ // The is logic is inside the encoder since the access_policy_id field is part of
330
+ // the mutex lock and encoders run before the lock is set.
331
+ parts := strings .Split (d .Get ("ingress_policy_name" ).(string ), "/" )
332
+ d .Set ("access_policy_id" , fmt .Sprintf ("accessPolicies/%s" , parts [1 ]))
333
+
334
+ return obj , nil
335
+ }
336
+
298
337
func flattenNestedAccessContextManagerIngressPolicy (d * schema.ResourceData , meta interface {}, res map [string ]interface {}) (map [string ]interface {}, error ) {
299
338
var v interface {}
300
339
var ok bool
0 commit comments