Skip to content

Commit 7317470

Browse files
Change ServicePerimeterResource to use a policy level mutex lock (#12725) (#9042)
[upstream:fb31f70316dfb5b648f2a5ba0412d8511d5cf983] Signed-off-by: Modular Magician <[email protected]>
1 parent 945b6b0 commit 7317470

4 files changed

+36
-2
lines changed

.changelog/12725.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:none
2+
3+
```

google-beta/services/accesscontextmanager/resource_access_context_manager_service_perimeter_dry_run_resource.go

+3
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,9 @@ func resourceAccessContextManagerServicePerimeterDryRunResourceImport(d *schema.
299299
return nil, err
300300
}
301301

302+
if err := d.Set("access_policy_id", fmt.Sprintf("accessPolicies/%s", parts["accessPolicy"])); err != nil {
303+
return nil, fmt.Errorf("Error setting access_policy_id: %s", err)
304+
}
302305
if err := d.Set("perimeter_name", fmt.Sprintf("accessPolicies/%s/servicePerimeters/%s", parts["accessPolicy"], parts["perimeter"])); err != nil {
303306
return nil, fmt.Errorf("Error setting perimeter_name: %s", err)
304307
}

google-beta/services/accesscontextmanager/resource_access_context_manager_service_perimeter_resource.go

+27-2
Original file line numberDiff line numberDiff line change
@@ -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 {
6162
Currently only projects are allowed.
6263
Format: 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+
321346
func flattenNestedAccessContextManagerServicePerimeterResource(d *schema.ResourceData, meta interface{}, res map[string]interface{}) (map[string]interface{}, error) {
322347
var v interface{}
323348
var ok bool

website/docs/r/access_context_manager_service_perimeter_resource.html.markdown

+3
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,9 @@ In addition to the arguments listed above, the following computed attributes are
9696

9797
* `id` - an identifier for the resource with format `{{perimeter_name}}/{{resource}}`
9898

99+
* `access_policy_id` -
100+
The name of the Access Policy this resource belongs to.
101+
99102

100103
## Timeouts
101104

0 commit comments

Comments
 (0)