Skip to content

Commit

Permalink
Network peering import (#2751)
Browse files Browse the repository at this point in the history
Merged PR #2751.
  • Loading branch information
slevenick authored and modular-magician committed Nov 26, 2019
1 parent 6a251ea commit e075825
Show file tree
Hide file tree
Showing 5 changed files with 54 additions and 12 deletions.
2 changes: 1 addition & 1 deletion build/terraform
2 changes: 1 addition & 1 deletion build/terraform-beta
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ func resourceComputeNetworkPeering() *schema.Resource {
Create: resourceComputeNetworkPeeringCreate,
Read: resourceComputeNetworkPeeringRead,
Delete: resourceComputeNetworkPeeringDelete,
Importer: &schema.ResourceImporter{
State: resourceComputeNetworkPeeringImport,
},

Schema: map[string]*schema.Schema{
"name": {
Expand Down Expand Up @@ -206,3 +209,25 @@ func getNetworkPeeringLockName(networkName, peerNetworkName string) string {

return fmt.Sprintf("network_peering/%s/%s", networks[0], networks[1])
}

func resourceComputeNetworkPeeringImport(d *schema.ResourceData, meta interface{}) ([]*schema.ResourceData, error) {
config := meta.(*Config)
splits := strings.Split(d.Id(), "/")
if len(splits) != 3 {
return nil, fmt.Errorf("Error parsing network peering import format, expected: {project}/{network}/{name}")
}

// Build the template for the network self_link
urlTemplate, err := replaceVars(d, config, "{{ComputeBasePath}}projects/%s/global/networks/%s")
if err != nil {
return nil, err
}
d.Set("network", ConvertSelfLinkToV1(fmt.Sprintf(urlTemplate, splits[0], splits[1])))
d.Set("name", splits[2])

// Replace import id for the resource id
id := fmt.Sprintf("%s/%s", splits[1], splits[2])
d.SetId(id)

return []*schema.ResourceData{d}, nil
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,14 +16,17 @@ func TestAccComputeNetworkPeering_basic(t *testing.T) {
t.Parallel()
var peering_beta computeBeta.NetworkPeering

primaryNetworkName := acctest.RandomWithPrefix("network-test-1")
peeringName := acctest.RandomWithPrefix("peering-test-1")
importId := fmt.Sprintf("%s/%s/%s", getTestProjectFromEnv(), primaryNetworkName, peeringName)

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccComputeNetworkPeeringDestroy,
Steps: []resource.TestStep{
{
Config: testAccComputeNetworkPeering_basic(),
Config: testAccComputeNetworkPeering_basic(primaryNetworkName, peeringName),
Check: resource.ComposeTestCheckFunc(
testAccCheckComputeNetworkPeeringExist("google_compute_network_peering.foo", &peering_beta),
testAccCheckComputeNetworkPeeringAutoCreateRoutes(true, &peering_beta),
Expand All @@ -39,6 +42,12 @@ func TestAccComputeNetworkPeering_basic(t *testing.T) {
<% end -%>
),
},
{
ResourceName: "google_compute_network_peering.foo",
ImportState: true,
ImportStateVerify: true,
ImportStateId: importId,
},
},
})

Expand Down Expand Up @@ -129,24 +138,24 @@ func testAccCheckComputeNetworkPeeringExportCustomRoutes(v bool, peering *comput
}
<% end -%>

func testAccComputeNetworkPeering_basic() string {
func testAccComputeNetworkPeering_basic(primaryNetworkName, peeringName string) string {
s := `
resource "google_compute_network" "network1" {
name = "network-test-1-%s"
auto_create_subnetworks = false
}

resource "google_compute_network" "network2" {
name = "network-test-2-%s"
name = "%s"
auto_create_subnetworks = false
}

resource "google_compute_network_peering" "foo" {
name = "peering-test-1-%s"
name = "%s"
network = google_compute_network.network1.self_link
peer_network = google_compute_network.network2.self_link
}

resource "google_compute_network" "network2" {
name = "network-test-2-%s"
auto_create_subnetworks = false
}

resource "google_compute_network_peering" "bar" {
network = google_compute_network.network2.self_link
peer_network = google_compute_network.network1.self_link
Expand All @@ -160,5 +169,5 @@ resource "google_compute_network_peering" "bar" {
`
<% end -%>
s = s + `}`
return fmt.Sprintf(s, acctest.RandString(10), acctest.RandString(10), acctest.RandString(10), acctest.RandString(10))
return fmt.Sprintf(s, primaryNetworkName, peeringName, acctest.RandString(10), acctest.RandString(10))
}
Original file line number Diff line number Diff line change
Expand Up @@ -71,3 +71,11 @@ exported:
`ACTIVE` when there's a matching configuration in the peer network.

* `state_details` - Details about the current state of the peering.

## Import

VPC network peerings can be imported using the name and project of the primary network the peering exists in and the name of the network peering

```
$ terraform import google_compute_network_peering.peering_network project-name/network-name/peering-name
```

0 comments on commit e075825

Please sign in to comment.