Skip to content

Commit 8d2854c

Browse files
Update google_compute_router_interface import, acctest, docs (#7758) (#14356)
Signed-off-by: Modular Magician <[email protected]>
1 parent ac0ee30 commit 8d2854c

File tree

4 files changed

+62
-30
lines changed

4 files changed

+62
-30
lines changed

.changelog/7758.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: fixed an import bug for `google_compute_router_interface` that happened when project was not set in the provider configuration or via environment variable
3+
```

google/resource_compute_router_interface.go

+29-13
Original file line numberDiff line numberDiff line change
@@ -366,19 +366,35 @@ func resourceComputeRouterInterfaceDelete(d *schema.ResourceData, meta interface
366366

367367
func resourceComputeRouterInterfaceImportState(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
368368
parts := strings.Split(d.Id(), "/")
369-
if len(parts) != 3 {
370-
return nil, fmt.Errorf("Invalid router interface specifier. Expecting {region}/{router}/{interface}")
371-
}
372-
373-
if err := d.Set("region", parts[0]); err != nil {
374-
return nil, fmt.Errorf("Error setting region: %s", err)
375-
}
376-
if err := d.Set("router", parts[1]); err != nil {
377-
return nil, fmt.Errorf("Error setting router: %s", err)
378-
}
379-
if err := d.Set("name", parts[2]); err != nil {
380-
return nil, fmt.Errorf("Error setting name: %s", err)
369+
switch len(parts) {
370+
case 3:
371+
// {{region}}/{{router}}/{{name}} import id
372+
if err := d.Set("region", parts[0]); err != nil {
373+
return nil, fmt.Errorf("error setting region: %s", err)
374+
}
375+
if err := d.Set("router", parts[1]); err != nil {
376+
return nil, fmt.Errorf("error setting router: %s", err)
377+
}
378+
if err := d.Set("name", parts[2]); err != nil {
379+
return nil, fmt.Errorf("error setting name: %s", err)
380+
}
381+
return []*schema.ResourceData{d}, nil
382+
case 4:
383+
// {{project}}/{{region}}/{{router}}/{{name}} import id
384+
if err := d.Set("project", parts[0]); err != nil {
385+
return nil, fmt.Errorf("error setting project: %s", err)
386+
}
387+
if err := d.Set("region", parts[1]); err != nil {
388+
return nil, fmt.Errorf("error setting region: %s", err)
389+
}
390+
if err := d.Set("router", parts[2]); err != nil {
391+
return nil, fmt.Errorf("error setting router: %s", err)
392+
}
393+
if err := d.Set("name", parts[3]); err != nil {
394+
return nil, fmt.Errorf("error setting name: %s", err)
395+
}
396+
return []*schema.ResourceData{d}, nil
381397
}
382398

383-
return []*schema.ResourceData{d}, nil
399+
return nil, fmt.Errorf("invalid router interface specifier. Expecting either {region}/{router}/{interface} or {project}/{region}/{router}/{interface} import id format")
384400
}

google/resource_compute_router_interface_test.go

+28-16
Original file line numberDiff line numberDiff line change
@@ -11,24 +11,36 @@ import (
1111
func TestAccComputeRouterInterface_basic(t *testing.T) {
1212
t.Parallel()
1313

14-
routerName := fmt.Sprintf("tf-test-router-%s", RandString(t, 10))
14+
name := fmt.Sprintf("tf-test-router-%s", RandString(t, 10))
15+
context := map[string]interface{}{
16+
"name": name,
17+
"region": "us-central1",
18+
}
19+
importIdFourPart := fmt.Sprintf("%s/%s/%s/%s", GetTestProjectFromEnv(), context["region"], context["name"], context["name"]) // name reused in config
20+
1521
VcrTest(t, resource.TestCase{
1622
PreCheck: func() { AccTestPreCheck(t) },
1723
ProtoV5ProviderFactories: ProtoV5ProviderFactories(t),
1824
CheckDestroy: testAccCheckComputeRouterInterfaceDestroyProducer(t),
1925
Steps: []resource.TestStep{
2026
{
21-
Config: testAccComputeRouterInterfaceBasic(routerName),
27+
Config: testAccComputeRouterInterfaceBasic(context),
2228
Check: testAccCheckComputeRouterInterfaceExists(
2329
t, "google_compute_router_interface.foobar"),
2430
},
31+
{
32+
ResourceName: "google_compute_router_interface.foobar",
33+
ImportState: true, // Will use the 3 part {{region}}/{{router}}/{{name}} import id by default as it's the id in state
34+
ImportStateVerify: true,
35+
},
2536
{
2637
ResourceName: "google_compute_router_interface.foobar",
2738
ImportState: true,
39+
ImportStateId: importIdFourPart, // Make test step use 4 part {{project}}/{{region}}/{{router}}/{{name}} import id
2840
ImportStateVerify: true,
2941
},
3042
{
31-
Config: testAccComputeRouterInterfaceKeepRouter(routerName),
43+
Config: testAccComputeRouterInterfaceKeepRouter(name),
3244
Check: testAccCheckComputeRouterInterfaceDelete(
3345
t, "google_compute_router_interface.foobar"),
3446
},
@@ -227,40 +239,40 @@ func testAccCheckComputeRouterInterfaceExists(t *testing.T, n string) resource.T
227239
}
228240
}
229241

230-
func testAccComputeRouterInterfaceBasic(routerName string) string {
231-
return fmt.Sprintf(`
242+
func testAccComputeRouterInterfaceBasic(context map[string]interface{}) string {
243+
return Nprintf(`
232244
resource "google_compute_network" "foobar" {
233-
name = "%s-net"
245+
name = "%{name}-net"
234246
}
235247
236248
resource "google_compute_subnetwork" "foobar" {
237-
name = "%s-subnet"
249+
name = "%{name}-subnet"
238250
network = google_compute_network.foobar.self_link
239251
ip_cidr_range = "10.0.0.0/16"
240-
region = "us-central1"
252+
region = "%{region}"
241253
}
242254
243255
resource "google_compute_address" "foobar" {
244-
name = "%s-addr"
256+
name = "%{name}-addr"
245257
region = google_compute_subnetwork.foobar.region
246258
}
247259
248260
resource "google_compute_vpn_gateway" "foobar" {
249-
name = "%s-gateway"
261+
name = "%{name}-gateway"
250262
network = google_compute_network.foobar.self_link
251263
region = google_compute_subnetwork.foobar.region
252264
}
253265
254266
resource "google_compute_forwarding_rule" "foobar_esp" {
255-
name = "%s-fr1"
267+
name = "%{name}-fr1"
256268
region = google_compute_vpn_gateway.foobar.region
257269
ip_protocol = "ESP"
258270
ip_address = google_compute_address.foobar.address
259271
target = google_compute_vpn_gateway.foobar.self_link
260272
}
261273
262274
resource "google_compute_forwarding_rule" "foobar_udp500" {
263-
name = "%s-fr2"
275+
name = "%{name}-fr2"
264276
region = google_compute_forwarding_rule.foobar_esp.region
265277
ip_protocol = "UDP"
266278
port_range = "500-500"
@@ -269,7 +281,7 @@ resource "google_compute_forwarding_rule" "foobar_udp500" {
269281
}
270282
271283
resource "google_compute_forwarding_rule" "foobar_udp4500" {
272-
name = "%s-fr3"
284+
name = "%{name}-fr3"
273285
region = google_compute_forwarding_rule.foobar_udp500.region
274286
ip_protocol = "UDP"
275287
port_range = "4500-4500"
@@ -278,7 +290,7 @@ resource "google_compute_forwarding_rule" "foobar_udp4500" {
278290
}
279291
280292
resource "google_compute_router" "foobar" {
281-
name = "%s"
293+
name = "%{name}"
282294
region = google_compute_forwarding_rule.foobar_udp500.region
283295
network = google_compute_network.foobar.self_link
284296
bgp {
@@ -287,12 +299,12 @@ resource "google_compute_router" "foobar" {
287299
}
288300
289301
resource "google_compute_router_interface" "foobar" {
290-
name = "%s"
302+
name = "%{name}"
291303
router = google_compute_router.foobar.name
292304
region = google_compute_router.foobar.region
293305
ip_range = "169.254.3.1/30"
294306
}
295-
`, routerName, routerName, routerName, routerName, routerName, routerName, routerName, routerName, routerName)
307+
`, context)
296308
}
297309

298310
func testAccComputeRouterInterfaceRedundant(routerName string) string {

website/docs/r/compute_router_interface.html.markdown

+2-1
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,9 @@ This resource provides the following
8282

8383
## Import
8484

85-
Router interfaces can be imported using the `region`, `router`, and `name`, e.g.
85+
Router interfaces can be imported using the `project` (optional), `region`, `router`, and `name`, e.g.
8686

8787
```
88+
$ terraform import google_compute_router_interface.foobar my-project/us-central1/router-1/interface-1
8889
$ terraform import google_compute_router_interface.foobar us-central1/router-1/interface-1
8990
```

0 commit comments

Comments
 (0)