Skip to content

Commit

Permalink
cleanup merge
Browse files Browse the repository at this point in the history
  • Loading branch information
BBBmau committed Jun 28, 2024
1 parent f2de65d commit ee23c50
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 59 deletions.
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package kms

import (
"fmt"
"log"
"net/http"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"github.com/hashicorp/terraform-provider-google/google/tpgresource"
Expand Down Expand Up @@ -66,97 +67,93 @@ func dataSourceGoogleKmsKeyRingsRead(d *schema.ResourceData, meta interface{}) e
if err != nil {
return err
}

if filter, ok := d.GetOk("filter"); ok {
id += "/filter=" + filter.(string)
}
d.SetId(id)

log.Printf("[DEBUG] Searching for keyrings")
res, err := dataSourceGoogleKmsKeyRingsList(d, meta)
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
if err != nil {
return err
}

// Check for keyRings field, as empty response lacks keyRings
// If found, set data in the data source's `keyRing` field
if keyRings, ok := res["keyRings"].([]interface{}); ok {
log.Printf("[DEBUG] Found %d key rings", len(keyRings))
value, err := flattenKMSKeyRingsList(d, config, keyRings)
if err != nil {
return fmt.Errorf("error flattening key rings list: %s", err)
}
if err := d.Set("key_rings", value); err != nil {
return fmt.Errorf("error setting key rings: %s", err)
}
} else {
log.Printf("[DEBUG] Found 0 key rings")
}

return nil
}
billingProject := ""

func dataSourceGoogleKmsKeyRingsList(d *schema.ResourceData, meta interface{}) (map[string]interface{}, error) {
config := meta.(*transport_tpg.Config)
userAgent, err := tpgresource.GenerateUserAgentString(d, config.UserAgent)
project, err := tpgresource.GetProject(d, config)
if err != nil {
return nil, err
return fmt.Errorf("Error fetching project for keyRings: %s", err)
}
billingProject = project

url, err := tpgresource.ReplaceVars(d, config, "{{KMSBasePath}}projects/{{project}}/locations/{{location}}/keyRings")
if err != nil {
return nil, err
// err == nil indicates that the billing_project value was found
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
billingProject = bp
}

var keyRings []interface{}

params := make(map[string]string)
if filter, ok := d.GetOk("filter"); ok {
log.Printf("[DEBUG] Search for key rings using filter ?filter=%s", filter.(string))
url, err = transport_tpg.AddQueryParams(url, map[string]string{"filter": filter.(string)})
params["filter"] = filter.(string)
if err != nil {
return nil, err
return err
}
}

billingProject := ""

project, err := tpgresource.GetProject(d, config)
url, err := tpgresource.ReplaceVars(d, config, "{{KMSBasePath}}projects/{{project}}/locations/{{location}}/keyRings")
if err != nil {
return nil, fmt.Errorf("Error fetching project for keyRings: %s", err)
return err
}
billingProject = project

// err == nil indicates that the billing_project value was found
if bp, err := tpgresource.GetBillingProject(d, config); err == nil {
billingProject = bp
}
for {
url, err = transport_tpg.AddQueryParams(url, params)
if err != nil {
return err
}

d.Set("project", billingProject)

headers := make(http.Header)
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
Config: config,
Method: "GET",
Project: billingProject,
RawURL: url,
UserAgent: userAgent,
Headers: headers,
})
if err != nil {
return nil, transport_tpg.HandleNotFoundError(err, d, fmt.Sprintf("KMSKeyRing %q", d.Id()))
res, err := transport_tpg.SendRequest(transport_tpg.SendRequestOptions{
Config: config,
Method: "GET",
Project: billingProject,
RawURL: url,
UserAgent: userAgent,
ErrorRetryPredicates: []transport_tpg.RetryErrorPredicateFunc{transport_tpg.Is429RetryableQuotaError},
})
if err != nil {
return fmt.Errorf("Error retrieving buckets: %s", err)
}

if res["keyRings"] == nil {
break
}
pageKeyRings, err := flattenKMSKeyRingsList(config, res["keyRings"])
if err != nil {
return fmt.Errorf("error flattening key rings list: %s", err)
}
keyRings = append(keyRings, pageKeyRings...)

pToken, ok := res["nextPageToken"]
if ok && pToken != nil && pToken.(string) != "" {
params["pageToken"] = pToken.(string)
} else {
break
}
}

if res == nil {
// Decoding the object has resulted in it being gone. It may be marked deleted
log.Printf("[DEBUG] Removing KMSKeyRing because it no longer exists.")
d.SetId("")
return nil, nil
log.Printf("[DEBUG] Found %d key rings", len(keyRings))
if err := d.Set("key_rings", keyRings); err != nil {
return fmt.Errorf("error setting key rings: %s", err)
}
return res, nil

return nil
}

// flattenKMSKeyRingsList flattens a list of key rings
func flattenKMSKeyRingsList(d *schema.ResourceData, config *transport_tpg.Config, keyRingsList []interface{}) ([]interface{}, error) {
func flattenKMSKeyRingsList(config *transport_tpg.Config, keyRingsList interface{}) ([]interface{}, error) {
var keyRings []interface{}
for _, k := range keyRingsList {
for _, k := range keyRingsList.([]interface{}) {
keyRing := k.(map[string]interface{})

parsedId, err := parseKmsKeyRingId(keyRing["name"].(string), config)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,5 +66,10 @@ data "google_kms_key_rings" "all_key_rings" {
location = "%{location}"
%{filter}
}
data "google_project" "project" {
}
output "project_number" {
value = data.google_project.project.number
}
`, context)
}

0 comments on commit ee23c50

Please sign in to comment.