Skip to content

Commit

Permalink
Fixes for nested query
Browse files Browse the repository at this point in the history
Signed-off-by: Modular Magician <magic-modules@google.com>
  • Loading branch information
emilymye authored and modular-magician committed May 30, 2019
1 parent dca6275 commit 7a41bc3
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 38 deletions.
36 changes: 22 additions & 14 deletions google/resource_compute_backend_bucket_signed_url_key.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,32 +256,40 @@ func flattenNestedComputeBackendBucketSignedUrlKey(d *schema.ResourceData, meta
return nil, nil
}

// Final nested resource is either a list of resources we need to filter
// or just the resource itself, which we return.
switch v.(type) {
case []interface{}:
break
case map[string]interface{}:
return v.(map[string]interface{}), nil
// Construct list out of single nested resource
v = []interface{}{v}
default:
return nil, fmt.Errorf("invalid value for cdnPolicy.signedUrlKeyNames: %v", v)
return nil, fmt.Errorf("expected list or map for value cdnPolicy.signedUrlKeyNames. Actual value: %v", v)
}

expectedName, err := expandComputeBackendBucketSignedUrlKeyName(d.Get("name"), d, meta.(*Config))
if err != nil {
return nil, err
}

// Search list for this resource.
items := v.([]interface{})
for _, vRaw := range items {
// If only an id is given in parent resource,
// construct a resource map for that id KV pair.
item := map[string]interface{}{"keyName": vRaw}
itemIdV, err := expandComputeBackendBucketSignedUrlKeyName(d.Get("name"), d, meta.(*Config))
if err != nil {
return nil, err
for _, itemRaw := range items {
if itemRaw == nil {
continue
}
actualIdV := flattenComputeBackendBucketSignedUrlKeyName(item["keyName"], d)
log.Printf("[DEBUG] Checking if item's keyName (%#v) is equal to resource's (%#v)", itemIdV, actualIdV)
if !reflect.DeepEqual(itemIdV, actualIdV) {
// List response only contains the ID - construct a response object.
item := map[string]interface{}{
"keyName": itemRaw,
}

itemName := flattenComputeBackendBucketSignedUrlKeyName(item["keyName"], d)
if !reflect.DeepEqual(itemName, expectedName) {
log.Printf("[DEBUG] Skipping item with keyName= %#v, looking for %#v)", itemName, expectedName)
continue
}
log.Printf("[DEBUG] Found item for resource %q: %#v)", d.Id(), item)
return item, nil
}

return nil, nil
}
36 changes: 22 additions & 14 deletions google/resource_compute_backend_service_signed_url_key.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,32 +256,40 @@ func flattenNestedComputeBackendServiceSignedUrlKey(d *schema.ResourceData, meta
return nil, nil
}

// Final nested resource is either a list of resources we need to filter
// or just the resource itself, which we return.
switch v.(type) {
case []interface{}:
break
case map[string]interface{}:
return v.(map[string]interface{}), nil
// Construct list out of single nested resource
v = []interface{}{v}
default:
return nil, fmt.Errorf("invalid value for cdnPolicy.signedUrlKeyNames: %v", v)
return nil, fmt.Errorf("expected list or map for value cdnPolicy.signedUrlKeyNames. Actual value: %v", v)
}

expectedName, err := expandComputeBackendServiceSignedUrlKeyName(d.Get("name"), d, meta.(*Config))
if err != nil {
return nil, err
}

// Search list for this resource.
items := v.([]interface{})
for _, vRaw := range items {
// If only an id is given in parent resource,
// construct a resource map for that id KV pair.
item := map[string]interface{}{"keyName": vRaw}
itemIdV, err := expandComputeBackendServiceSignedUrlKeyName(d.Get("name"), d, meta.(*Config))
if err != nil {
return nil, err
for _, itemRaw := range items {
if itemRaw == nil {
continue
}
actualIdV := flattenComputeBackendServiceSignedUrlKeyName(item["keyName"], d)
log.Printf("[DEBUG] Checking if item's keyName (%#v) is equal to resource's (%#v)", itemIdV, actualIdV)
if !reflect.DeepEqual(itemIdV, actualIdV) {
// List response only contains the ID - construct a response object.
item := map[string]interface{}{
"keyName": itemRaw,
}

itemName := flattenComputeBackendServiceSignedUrlKeyName(item["keyName"], d)
if !reflect.DeepEqual(itemName, expectedName) {
log.Printf("[DEBUG] Skipping item with keyName= %#v, looking for %#v)", itemName, expectedName)
continue
}
log.Printf("[DEBUG] Found item for resource %q: %#v)", d.Id(), item)
return item, nil
}

return nil, nil
}
33 changes: 23 additions & 10 deletions google/resource_resource_manager_lien.go
Original file line number Diff line number Diff line change
Expand Up @@ -290,28 +290,41 @@ func flattenNestedResourceManagerLien(d *schema.ResourceData, meta interface{},
return nil, nil
}

// Final nested resource is either a list of resources we need to filter
// or just the resource itself, which we return.
switch v.(type) {
case []interface{}:
break
case map[string]interface{}:
return v.(map[string]interface{}), nil
// Construct list out of single nested resource
v = []interface{}{v}
default:
return nil, fmt.Errorf("invalid value for liens: %v", v)
return nil, fmt.Errorf("expected list or map for value liens. Actual value: %v", v)
}

expectedName := d.Get("name")

// Search list for this resource.
items := v.([]interface{})
for _, vRaw := range items {
item := vRaw.(map[string]interface{})
itemIdV := d.Get("name")
actualIdV := flattenResourceManagerLienName(item["name"], d)
log.Printf("[DEBUG] Checking if item's name (%#v) is equal to resource's (%#v)", itemIdV, actualIdV)
if !reflect.DeepEqual(itemIdV, actualIdV) {
for _, itemRaw := range items {
if itemRaw == nil {
continue
}
item := itemRaw.(map[string]interface{})

// Decode list item before comparing.
item, err := resourceResourceManagerLienDecoder(d, meta, item)
if err != nil {
return nil, err
}

itemName := flattenResourceManagerLienName(item["name"], d)
if !reflect.DeepEqual(itemName, expectedName) {
log.Printf("[DEBUG] Skipping item with name= %#v, looking for %#v)", itemName, expectedName)
continue
}
log.Printf("[DEBUG] Found item for resource %q: %#v)", d.Id(), item)
return item, nil
}

return nil, nil
}

Expand Down

0 comments on commit 7a41bc3

Please sign in to comment.