Skip to content

Commit 0532e29

Browse files
Make google_compute_instance_guest_attributes return empty results when queried for nonexistent values (#12487)
[upstream:55ec2413bf9eee962665d452b46aa629e3252a49] Signed-off-by: Modular Magician <[email protected]>
1 parent 6fd519c commit 0532e29

File tree

3 files changed

+93
-2
lines changed

3 files changed

+93
-2
lines changed

.changelog/12487.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: `google_compute_instance_guest_attributes` will return empty arrays and lists when queried values don't exist instead of throwing an error
3+
```

google-beta/services/compute/data_source_google_compute_instance_guest_attributes.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,14 @@ func dataSourceGoogleComputeInstanceGuestAttributesRead(d *schema.ResourceData,
9090
return err
9191
}
9292

93+
//Check if instance exists
9394
id := fmt.Sprintf("projects/%s/zones/%s/instances/%s", project, zone, name)
94-
instanceGuestAttributes := &compute.GuestAttributes{}
95+
_, err = config.NewComputeClient(userAgent).Instances.Get(project, zone, name).Do()
96+
if err != nil {
97+
return transport_tpg.HandleDataSourceNotFoundError(err, d, fmt.Sprintf("Instance %s", name), id)
98+
}
9599

100+
instanceGuestAttributes := &compute.GuestAttributes{}
96101
// You can either query based on variable_key, query_path or just get the first value
97102
if d.Get("query_path").(string) != "" {
98103
instanceGuestAttributes, err = config.NewComputeClient(userAgent).Instances.GetGuestAttributes(project, zone, name).QueryPath(d.Get("query_path").(string)).Do()
@@ -102,7 +107,7 @@ func dataSourceGoogleComputeInstanceGuestAttributesRead(d *schema.ResourceData,
102107
instanceGuestAttributes, err = config.NewComputeClient(userAgent).Instances.GetGuestAttributes(project, zone, name).Do()
103108
}
104109
if err != nil {
105-
return transport_tpg.HandleDataSourceNotFoundError(err, d, fmt.Sprintf("Instance's Guest Attributes %s", name), id)
110+
return nil
106111
}
107112

108113
// Set query results

google-beta/services/compute/data_source_google_compute_instance_guest_attributes_test.go

+83
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@ func TestAccDataSourceComputeInstanceGuestAttributes_basic(t *testing.T) {
2222
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
2323
CheckDestroy: testAccCheckComputeInstanceDestroyProducer(t),
2424
Steps: []resource.TestStep{
25+
{
26+
Config: testAccDataSourceComputeInstanceGuestAttributesConfig_queryPath_empty(instanceName),
27+
Check: resource.ComposeTestCheckFunc(
28+
resource.TestCheckNoResourceAttr("data.google_compute_instance_guest_attributes.bar", "query_value"),
29+
),
30+
},
2531
{
2632
//need to create the guest_attributes metadata from startup script first
2733
Config: testAccDataSourceComputeInstanceGuestAttributesInitialConfig(instanceName),
@@ -42,6 +48,12 @@ func TestAccDataSourceComputeInstanceGuestAttributes_basic(t *testing.T) {
4248
resource.TestCheckResourceAttr("data.google_compute_instance_guest_attributes.bar", "query_value.1.value", "test2"),
4349
),
4450
},
51+
{
52+
Config: testAccDataSourceComputeInstanceGuestAttributesConfig_queryPath_nonExistent(instanceName),
53+
Check: resource.ComposeTestCheckFunc(
54+
resource.TestCheckNoResourceAttr("data.google_compute_instance_guest_attributes.bar", "query_value"),
55+
),
56+
},
4557
},
4658
})
4759
}
@@ -116,6 +128,77 @@ data "google_compute_instance_guest_attributes" "bar" {
116128
`, instanceName)
117129
}
118130

131+
func testAccDataSourceComputeInstanceGuestAttributesConfig_queryPath_nonExistent(instanceName string) string {
132+
return fmt.Sprintf(`
133+
resource "google_compute_instance" "foo" {
134+
name = "%s"
135+
machine_type = "n1-standard-1"
136+
zone = "us-central1-a"
137+
138+
boot_disk {
139+
initialize_params {
140+
image = "debian-8-jessie-v20160803"
141+
}
142+
}
143+
144+
network_interface {
145+
network = "default"
146+
access_config {
147+
// Ephemeral IP
148+
}
149+
}
150+
151+
metadata = {
152+
enable-guest-attributes = "TRUE"
153+
}
154+
155+
metadata_startup_script = <<-EOF
156+
curl -X PUT --data "test1" http://metadata.google.internal/computeMetadata/v1/instance/guest-attributes/testing/key1 -H "Metadata-Flavor: Google"
157+
curl -X PUT --data "test2" http://metadata.google.internal/computeMetadata/v1/instance/guest-attributes/testing/key2 -H "Metadata-Flavor: Google"
158+
EOF
159+
}
160+
161+
data "google_compute_instance_guest_attributes" "bar" {
162+
name = google_compute_instance.foo.name
163+
zone = "us-central1-a"
164+
query_path = "test/"
165+
}
166+
`, instanceName)
167+
}
168+
169+
func testAccDataSourceComputeInstanceGuestAttributesConfig_queryPath_empty(instanceName string) string {
170+
return fmt.Sprintf(`
171+
resource "google_compute_instance" "foo" {
172+
name = "%s"
173+
machine_type = "n1-standard-1"
174+
zone = "us-central1-a"
175+
176+
boot_disk {
177+
initialize_params {
178+
image = "debian-8-jessie-v20160803"
179+
}
180+
}
181+
182+
network_interface {
183+
network = "default"
184+
access_config {
185+
// Ephemeral IP
186+
}
187+
}
188+
189+
metadata = {
190+
enable-guest-attributes = "TRUE"
191+
}
192+
}
193+
194+
data "google_compute_instance_guest_attributes" "bar" {
195+
name = google_compute_instance.foo.name
196+
zone = "us-central1-a"
197+
query_path = "test/"
198+
}
199+
`, instanceName)
200+
}
201+
119202
func testAccDataSourceComputeInstanceGuestAttributesConfig_variableKey(instanceName string) string {
120203
return fmt.Sprintf(`
121204
resource "google_compute_instance" "foo" {

0 commit comments

Comments
 (0)