Skip to content

Commit

Permalink
Switch to using folder LIST over SEARCH (#5989) (#4290)
Browse files Browse the repository at this point in the history
Signed-off-by: Modular Magician <[email protected]>
  • Loading branch information
modular-magician authored May 6, 2022
1 parent 1a737db commit f5e4bda
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 33 deletions.
3 changes: 3 additions & 0 deletions .changelog/5989.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
```release-note:none

```
41 changes: 26 additions & 15 deletions google-beta/data_source_google_active_folder.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,26 +35,37 @@ func dataSourceGoogleActiveFolderRead(d *schema.ResourceData, meta interface{})
return err
}

var folderMatch *resourceManagerV2.Folder
parent := d.Get("parent").(string)
displayName := d.Get("display_name").(string)
token := ""

queryString := fmt.Sprintf("lifecycleState=ACTIVE AND parent=%s AND displayName=\"%s\"", parent, displayName)
searchRequest := &resourceManagerV2.SearchFoldersRequest{
Query: queryString,
}
searchResponse, err := config.NewResourceManagerV2Client(userAgent).Folders.Search(searchRequest).Do()
if err != nil {
return handleNotFoundError(err, d, fmt.Sprintf("Folder Not Found : %s", displayName))
}
for paginate := true; paginate; {
resp, err := config.NewResourceManagerV2Client(userAgent).Folders.List().Parent(parent).PageSize(300).PageToken(token).Do()
if err != nil {
return fmt.Errorf("error reading folder list: %s", err)
}

for _, folder := range searchResponse.Folders {
if folder.DisplayName == displayName {
d.SetId(folder.Name)
if err := d.Set("name", folder.Name); err != nil {
return fmt.Errorf("Error setting folder name: %s", err)
for _, folder := range resp.Folders {
if folder.DisplayName == displayName && folder.LifecycleState == "ACTIVE" {
if folderMatch != nil {
return fmt.Errorf("more than one matching folder found")
}
folderMatch = folder
}
return nil
}
token = resp.NextPageToken
paginate = token != ""
}
return fmt.Errorf("Folder not found")

if folderMatch == nil {
return fmt.Errorf("folder not found: %s", displayName)
}

d.SetId(folderMatch.Name)
if err := d.Set("name", folderMatch.Name); err != nil {
return fmt.Errorf("Error setting folder name: %s", err)
}

return nil
}
4 changes: 2 additions & 2 deletions google-beta/resource_clouddeploy_target_generated_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,9 +103,9 @@ resource "google_clouddeploy_target" "primary" {
}
labels = {
my_second_label = "example-label-2"
my_first_label = "example-label-1"
my_second_label = "example-label-2"
}
project = "%{project_name}"
Expand Down
35 changes: 21 additions & 14 deletions google-beta/resource_google_folder_iam_binding_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"sort"
"testing"

"github.com/hashicorp/errwrap"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/v2/terraform"
"google.golang.org/api/cloudresourcemanager/v1"
Expand Down Expand Up @@ -255,25 +254,33 @@ func testAccCheckGoogleFolderIamBindingExists(t *testing.T, expected *cloudresou
}

func getFolderIamPolicyByParentAndDisplayName(parent, displayName string, config *Config) (*cloudresourcemanager.Policy, error) {
queryString := fmt.Sprintf("lifecycleState=ACTIVE AND parent=%s AND displayName=%s", parent, displayName)
searchRequest := &resourceManagerV2.SearchFoldersRequest{
Query: queryString,
}
searchResponse, err := config.NewResourceManagerV2Client(config.userAgent).Folders.Search(searchRequest).Do()
if err != nil {
if isGoogleApiErrorWithCode(err, 404) {
return nil, fmt.Errorf("Folder not found: %s,%s", parent, displayName)
var folderMatch *resourceManagerV2.Folder
token := ""

for paginate := true; paginate; {
resp, err := config.NewResourceManagerV2Client(config.userAgent).Folders.List().Parent(parent).PageSize(300).PageToken(token).Do()
if err != nil {
return nil, fmt.Errorf("Error reading folder list: %s", err)
}

for _, folder := range resp.Folders {
if folder.DisplayName == displayName {
if folderMatch != nil {
return nil, fmt.Errorf("More than one matching folder found")
}
folderMatch = folder
}
}

return nil, errwrap.Wrapf("Error reading folders: {{err}}", err)
token = resp.NextPageToken
paginate = token != ""
}

folders := searchResponse.Folders
if len(folders) != 1 {
return nil, fmt.Errorf("expected exactly 1 folder, found %d", len(folders))
if folderMatch == nil {
return nil, fmt.Errorf("Folder not found: %s", displayName)
}

return getFolderIamPolicyByFolderName(folders[0].Name, config.userAgent, config)
return getFolderIamPolicyByFolderName(folderMatch.Name, config.userAgent, config)
}

func testAccFolderIamBasic(org, fname string) string {
Expand Down
4 changes: 2 additions & 2 deletions website/docs/r/clouddeploy_target.html.markdown
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,9 @@ resource "google_clouddeploy_target" "primary" {
}
labels = {
my_second_label = "example-label-2"
my_first_label = "example-label-1"
my_second_label = "example-label-2"
}
project = "my-project-name"
Expand Down

0 comments on commit f5e4bda

Please sign in to comment.