Skip to content

Commit

Permalink
Network peering import
Browse files Browse the repository at this point in the history
Signed-off-by: Modular Magician <[email protected]>
  • Loading branch information
slevenick authored and modular-magician committed Nov 26, 2019
1 parent 5e693fa commit d6a2e6a
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 11 deletions.
26 changes: 26 additions & 0 deletions google/resource_compute_network_peering.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"log"
"sort"
"strings"

"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
computeBeta "google.golang.org/api/compute/v0.beta"
Expand All @@ -18,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 @@ -181,3 +185,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", 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
}
30 changes: 20 additions & 10 deletions google/resource_compute_network_peering_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,20 +15,30 @@ 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),
testAccCheckComputeNetworkPeeringExist("google_compute_network_peering.bar", &peering_beta),
testAccCheckComputeNetworkPeeringAutoCreateRoutes(true, &peering_beta),
),
},
{
ResourceName: "google_compute_network_peering.foo",
ImportState: true,
ImportStateVerify: true,
ImportStateId: importId,
},
},
})

Expand Down Expand Up @@ -97,30 +107,30 @@ func testAccCheckComputeNetworkPeeringAutoCreateRoutes(v bool, peering *computeB
}
}

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
name = "peering-test-2-%s"
`

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))
}
1 change: 0 additions & 1 deletion google/resource_sql_database_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import (
"github.com/hashicorp/terraform-plugin-sdk/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/helper/resource"
"github.com/hashicorp/terraform-plugin-sdk/terraform"

sqladmin "google.golang.org/api/sqladmin/v1beta4"
)

Expand Down
8 changes: 8 additions & 0 deletions website/docs/r/compute_network_peering.html.markdown
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 d6a2e6a

Please sign in to comment.