Skip to content

Commit 470eafb

Browse files
add fine-grained resource for service perimeter resource (#3052) (#5574)
* add fine-grained resource for service perimeter resource * exclude from inspec * add sidebar entry and change acctest import * comments, readability Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent b2826a8 commit 470eafb

10 files changed

+777
-21
lines changed

.changelog/3052.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:new-resource
2+
`google_access_context_manager_service_perimeter_resource`
3+
```

google/bootstrap_utils_test.go

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import (
88
"testing"
99
"time"
1010

11+
"github.com/hashicorp/terraform-plugin-sdk/helper/acctest"
1112
"google.golang.org/api/cloudkms/v1"
13+
cloudresourcemanager "google.golang.org/api/cloudresourcemanager/v1"
1214
"google.golang.org/api/iam/v1"
1315
)
1416

@@ -293,3 +295,70 @@ func BootstrapSharedTestNetwork(t *testing.T, testId string) string {
293295
}
294296
return network.Name
295297
}
298+
299+
var SharedServicePerimeterProjectPrefix = "tf-bootstrap-sp-"
300+
301+
func BootstrapServicePerimeterProjects(t *testing.T, desiredProjects int) []*cloudresourcemanager.Project {
302+
if v := os.Getenv("TF_ACC"); v == "" {
303+
log.Println("Acceptance tests and bootstrapping skipped unless env 'TF_ACC' set")
304+
return nil
305+
}
306+
307+
org := getTestOrgFromEnv(t)
308+
config := &Config{
309+
Credentials: getTestCredsFromEnv(),
310+
Project: getTestProjectFromEnv(),
311+
Region: getTestRegionFromEnv(),
312+
Zone: getTestZoneFromEnv(),
313+
}
314+
315+
ConfigureBasePaths(config)
316+
317+
if err := config.LoadAndValidate(context.Background()); err != nil {
318+
t.Fatalf("Bootstrapping failed. Unable to load test config: %s", err)
319+
}
320+
321+
// The filter endpoint works differently if you provide both the parent id and parent type, and
322+
// doesn't seem to allow for prefix matching. Don't change this to include the parent type unless
323+
// that API behavior changes.
324+
prefixFilter := fmt.Sprintf("id:%s* parent.id:%s", SharedServicePerimeterProjectPrefix, org)
325+
res, err := config.clientResourceManager.Projects.List().Filter(prefixFilter).Do()
326+
if err != nil {
327+
t.Errorf("Error getting shared test projects: %s", err)
328+
}
329+
330+
projects := res.Projects
331+
for len(projects) < desiredProjects {
332+
pid := SharedServicePerimeterProjectPrefix + acctest.RandString(10)
333+
project := &cloudresourcemanager.Project{
334+
ProjectId: pid,
335+
Name: "TF Service Perimeter Test",
336+
Parent: &cloudresourcemanager.ResourceId{
337+
Type: "organization",
338+
Id: org,
339+
},
340+
}
341+
op, err := config.clientResourceManager.Projects.Create(project).Do()
342+
if err != nil {
343+
t.Fatalf("Error bootstrapping shared test project: %s", err)
344+
}
345+
346+
opAsMap, err := ConvertToMap(op)
347+
if err != nil {
348+
t.Fatalf("Error bootstrapping shared test project: %s", err)
349+
}
350+
351+
err = resourceManagerOperationWaitTime(config, opAsMap, "creating project", 4)
352+
if err != nil {
353+
t.Fatalf("Error bootstrapping shared test project: %s", err)
354+
}
355+
356+
p, err := config.clientResourceManager.Projects.Get(pid).Do()
357+
if err != nil {
358+
t.Fatalf("Error getting shared test project: %s", err)
359+
}
360+
projects = append(projects, p)
361+
}
362+
363+
return projects
364+
}

google/provider.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -486,9 +486,9 @@ func Provider() terraform.ResourceProvider {
486486
return provider
487487
}
488488

489-
// Generated resources: 98
489+
// Generated resources: 99
490490
// Generated IAM resources: 48
491-
// Total generated resources: 146
491+
// Total generated resources: 147
492492
func ResourceMap() map[string]*schema.Resource {
493493
resourceMap, _ := ResourceMapWithErrors()
494494
return resourceMap
@@ -500,6 +500,7 @@ func ResourceMapWithErrors() (map[string]*schema.Resource, error) {
500500
"google_access_context_manager_access_policy": resourceAccessContextManagerAccessPolicy(),
501501
"google_access_context_manager_access_level": resourceAccessContextManagerAccessLevel(),
502502
"google_access_context_manager_service_perimeter": resourceAccessContextManagerServicePerimeter(),
503+
"google_access_context_manager_service_perimeter_resource": resourceAccessContextManagerServicePerimeterResource(),
503504
"google_app_engine_domain_mapping": resourceAppEngineDomainMapping(),
504505
"google_app_engine_firewall_rule": resourceAppEngineFirewallRule(),
505506
"google_app_engine_standard_app_version": resourceAppEngineStandardAppVersion(),

google/resource_access_context_manager_access_policy_test.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,12 @@ func testSweepAccessContextManagerPolicies(region string) error {
7474
// can exist, they need to be ran serially
7575
func TestAccAccessContextManager(t *testing.T) {
7676
testCases := map[string]func(t *testing.T){
77-
"access_policy": testAccAccessContextManagerAccessPolicy_basicTest,
78-
"service_perimeter": testAccAccessContextManagerServicePerimeter_basicTest,
79-
"service_perimeter_update": testAccAccessContextManagerServicePerimeter_updateTest,
80-
"access_level": testAccAccessContextManagerAccessLevel_basicTest,
81-
"access_level_full": testAccAccessContextManagerAccessLevel_fullTest,
77+
"access_policy": testAccAccessContextManagerAccessPolicy_basicTest,
78+
"service_perimeter": testAccAccessContextManagerServicePerimeter_basicTest,
79+
"service_perimeter_update": testAccAccessContextManagerServicePerimeter_updateTest,
80+
"service_perimeter_resource": testAccAccessContextManagerServicePerimeterResource_basicTest,
81+
"access_level": testAccAccessContextManagerAccessLevel_basicTest,
82+
"access_level_full": testAccAccessContextManagerAccessLevel_fullTest,
8283
}
8384

8485
for name, tc := range testCases {

google/resource_access_context_manager_service_perimeter.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,13 @@ func resourceAccessContextManagerServicePerimeterCreate(d *schema.ResourceData,
206206
return err
207207
}
208208

209+
lockName, err := replaceVars(d, config, "{{name}}")
210+
if err != nil {
211+
return err
212+
}
213+
mutexKV.Lock(lockName)
214+
defer mutexKV.Unlock(lockName)
215+
209216
url, err := replaceVars(d, config, "{{AccessContextManagerBasePath}}{{parent}}/servicePerimeters")
210217
if err != nil {
211218
return err
@@ -305,6 +312,13 @@ func resourceAccessContextManagerServicePerimeterUpdate(d *schema.ResourceData,
305312
return err
306313
}
307314

315+
lockName, err := replaceVars(d, config, "{{name}}")
316+
if err != nil {
317+
return err
318+
}
319+
mutexKV.Lock(lockName)
320+
defer mutexKV.Unlock(lockName)
321+
308322
url, err := replaceVars(d, config, "{{AccessContextManagerBasePath}}{{name}}")
309323
if err != nil {
310324
return err
@@ -350,6 +364,13 @@ func resourceAccessContextManagerServicePerimeterUpdate(d *schema.ResourceData,
350364
func resourceAccessContextManagerServicePerimeterDelete(d *schema.ResourceData, meta interface{}) error {
351365
config := meta.(*Config)
352366

367+
lockName, err := replaceVars(d, config, "{{name}}")
368+
if err != nil {
369+
return err
370+
}
371+
mutexKV.Lock(lockName)
372+
defer mutexKV.Unlock(lockName)
373+
353374
url, err := replaceVars(d, config, "{{AccessContextManagerBasePath}}{{name}}")
354375
if err != nil {
355376
return err

0 commit comments

Comments
 (0)