Skip to content

Commit 1b1cd11

Browse files
modular-magicianemilymye
authored andcommitted
Fixes for nested query (#3739)
Signed-off-by: Modular Magician <[email protected]>
1 parent 1f5ab66 commit 1b1cd11

4 files changed

+70
-41
lines changed

google/resource_compute_backend_bucket_signed_url_key.go

+22-14
Original file line numberDiff line numberDiff line change
@@ -256,32 +256,40 @@ func flattenNestedComputeBackendBucketSignedUrlKey(d *schema.ResourceData, meta
256256
return nil, nil
257257
}
258258

259-
// Final nested resource is either a list of resources we need to filter
260-
// or just the resource itself, which we return.
261259
switch v.(type) {
262260
case []interface{}:
263261
break
264262
case map[string]interface{}:
265-
return v.(map[string]interface{}), nil
263+
// Construct list out of single nested resource
264+
v = []interface{}{v}
266265
default:
267-
return nil, fmt.Errorf("invalid value for cdnPolicy.signedUrlKeyNames: %v", v)
266+
return nil, fmt.Errorf("expected list or map for value cdnPolicy.signedUrlKeyNames. Actual value: %v", v)
268267
}
269268

269+
expectedName, err := expandComputeBackendBucketSignedUrlKeyName(d.Get("name"), d, meta.(*Config))
270+
if err != nil {
271+
return nil, err
272+
}
273+
274+
// Search list for this resource.
270275
items := v.([]interface{})
271-
for _, vRaw := range items {
272-
// If only an id is given in parent resource,
273-
// construct a resource map for that id KV pair.
274-
item := map[string]interface{}{"keyName": vRaw}
275-
itemIdV, err := expandComputeBackendBucketSignedUrlKeyName(d.Get("name"), d, meta.(*Config))
276-
if err != nil {
277-
return nil, err
276+
for _, itemRaw := range items {
277+
if itemRaw == nil {
278+
continue
278279
}
279-
actualIdV := flattenComputeBackendBucketSignedUrlKeyName(item["keyName"], d)
280-
log.Printf("[DEBUG] Checking if item's keyName (%#v) is equal to resource's (%#v)", itemIdV, actualIdV)
281-
if !reflect.DeepEqual(itemIdV, actualIdV) {
280+
// List response only contains the ID - construct a response object.
281+
item := map[string]interface{}{
282+
"keyName": itemRaw,
283+
}
284+
285+
itemName := flattenComputeBackendBucketSignedUrlKeyName(item["keyName"], d)
286+
if !reflect.DeepEqual(itemName, expectedName) {
287+
log.Printf("[DEBUG] Skipping item with keyName= %#v, looking for %#v)", itemName, expectedName)
282288
continue
283289
}
290+
log.Printf("[DEBUG] Found item for resource %q: %#v)", d.Id(), item)
284291
return item, nil
285292
}
293+
286294
return nil, nil
287295
}

google/resource_compute_backend_service_signed_url_key.go

+22-14
Original file line numberDiff line numberDiff line change
@@ -256,32 +256,40 @@ func flattenNestedComputeBackendServiceSignedUrlKey(d *schema.ResourceData, meta
256256
return nil, nil
257257
}
258258

259-
// Final nested resource is either a list of resources we need to filter
260-
// or just the resource itself, which we return.
261259
switch v.(type) {
262260
case []interface{}:
263261
break
264262
case map[string]interface{}:
265-
return v.(map[string]interface{}), nil
263+
// Construct list out of single nested resource
264+
v = []interface{}{v}
266265
default:
267-
return nil, fmt.Errorf("invalid value for cdnPolicy.signedUrlKeyNames: %v", v)
266+
return nil, fmt.Errorf("expected list or map for value cdnPolicy.signedUrlKeyNames. Actual value: %v", v)
268267
}
269268

269+
expectedName, err := expandComputeBackendServiceSignedUrlKeyName(d.Get("name"), d, meta.(*Config))
270+
if err != nil {
271+
return nil, err
272+
}
273+
274+
// Search list for this resource.
270275
items := v.([]interface{})
271-
for _, vRaw := range items {
272-
// If only an id is given in parent resource,
273-
// construct a resource map for that id KV pair.
274-
item := map[string]interface{}{"keyName": vRaw}
275-
itemIdV, err := expandComputeBackendServiceSignedUrlKeyName(d.Get("name"), d, meta.(*Config))
276-
if err != nil {
277-
return nil, err
276+
for _, itemRaw := range items {
277+
if itemRaw == nil {
278+
continue
278279
}
279-
actualIdV := flattenComputeBackendServiceSignedUrlKeyName(item["keyName"], d)
280-
log.Printf("[DEBUG] Checking if item's keyName (%#v) is equal to resource's (%#v)", itemIdV, actualIdV)
281-
if !reflect.DeepEqual(itemIdV, actualIdV) {
280+
// List response only contains the ID - construct a response object.
281+
item := map[string]interface{}{
282+
"keyName": itemRaw,
283+
}
284+
285+
itemName := flattenComputeBackendServiceSignedUrlKeyName(item["keyName"], d)
286+
if !reflect.DeepEqual(itemName, expectedName) {
287+
log.Printf("[DEBUG] Skipping item with keyName= %#v, looking for %#v)", itemName, expectedName)
282288
continue
283289
}
290+
log.Printf("[DEBUG] Found item for resource %q: %#v)", d.Id(), item)
284291
return item, nil
285292
}
293+
286294
return nil, nil
287295
}

google/resource_resource_manager_lien.go

+23-10
Original file line numberDiff line numberDiff line change
@@ -290,28 +290,41 @@ func flattenNestedResourceManagerLien(d *schema.ResourceData, meta interface{},
290290
return nil, nil
291291
}
292292

293-
// Final nested resource is either a list of resources we need to filter
294-
// or just the resource itself, which we return.
295293
switch v.(type) {
296294
case []interface{}:
297295
break
298296
case map[string]interface{}:
299-
return v.(map[string]interface{}), nil
297+
// Construct list out of single nested resource
298+
v = []interface{}{v}
300299
default:
301-
return nil, fmt.Errorf("invalid value for liens: %v", v)
300+
return nil, fmt.Errorf("expected list or map for value liens. Actual value: %v", v)
302301
}
303302

303+
expectedName := d.Get("name")
304+
305+
// Search list for this resource.
304306
items := v.([]interface{})
305-
for _, vRaw := range items {
306-
item := vRaw.(map[string]interface{})
307-
itemIdV := d.Get("name")
308-
actualIdV := flattenResourceManagerLienName(item["name"], d)
309-
log.Printf("[DEBUG] Checking if item's name (%#v) is equal to resource's (%#v)", itemIdV, actualIdV)
310-
if !reflect.DeepEqual(itemIdV, actualIdV) {
307+
for _, itemRaw := range items {
308+
if itemRaw == nil {
309+
continue
310+
}
311+
item := itemRaw.(map[string]interface{})
312+
313+
// Decode list item before comparing.
314+
item, err := resourceResourceManagerLienDecoder(d, meta, item)
315+
if err != nil {
316+
return nil, err
317+
}
318+
319+
itemName := flattenResourceManagerLienName(item["name"], d)
320+
if !reflect.DeepEqual(itemName, expectedName) {
321+
log.Printf("[DEBUG] Skipping item with name= %#v, looking for %#v)", itemName, expectedName)
311322
continue
312323
}
324+
log.Printf("[DEBUG] Found item for resource %q: %#v)", d.Id(), item)
313325
return item, nil
314326
}
327+
315328
return nil, nil
316329
}
317330

website/docs/getting_started.html.markdown

+3-3
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ resource "google_compute_instance" "vm_instance" {
8181
network_interface {
8282
# A default network is created for all GCP projects
8383
network = "default"
84-
access_config {
84+
access_config = {
8585
}
8686
}
8787
}
@@ -135,7 +135,7 @@ network_interface {
135135
- # A default network is created for all GCP projects
136136
- network = "default"
137137
+ network = "${google_compute_network.vpc_network.self_link}"
138-
access_config {
138+
access_config = {
139139
```
140140

141141
This means that when we create the VM instance, it will use
@@ -190,7 +190,7 @@ resource "google_compute_instance" "vm_instance" {
190190
network_interface {
191191
# A default network is created for all GCP projects
192192
network = "${google_compute_network.vpc_network.self_link}"
193-
access_config {
193+
access_config = {
194194
}
195195
}
196196
}

0 commit comments

Comments
 (0)