Skip to content

Commit 78f20a6

Browse files
committed
Addressed Riley's comments
1 parent 4441908 commit 78f20a6

File tree

3 files changed

+66
-119
lines changed

3 files changed

+66
-119
lines changed

google/resource_compute_network_peering.go

+37-80
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@ package google
22

33
import (
44
"fmt"
5+
"log"
6+
"regexp"
7+
58
"github.com/hashicorp/terraform/helper/schema"
69
"google.golang.org/api/compute/v1"
710
"google.golang.org/api/googleapi"
8-
"log"
9-
"regexp"
1011
)
1112

1213
const peerNetworkLinkRegex = "projects/(" + ProjectRegex + ")/global/networks/((?:[a-z](?:[-a-z0-9]*[a-z0-9])?))$"
@@ -29,14 +30,14 @@ func resourceComputeNetworkPeering() *schema.Resource {
2930
Required: true,
3031
ForceNew: true,
3132
ValidateFunc: validateRegexp(peerNetworkLinkRegex),
32-
DiffSuppressFunc: peerNetworkLinkDiffSuppress,
33+
DiffSuppressFunc: compareSelfLinkRelativePaths,
3334
},
3435
"peer_network": &schema.Schema{
3536
Type: schema.TypeString,
3637
Required: true,
3738
ForceNew: true,
3839
ValidateFunc: validateRegexp(peerNetworkLinkRegex),
39-
DiffSuppressFunc: peerNetworkLinkDiffSuppress,
40+
DiffSuppressFunc: compareSelfLinkRelativePaths,
4041
},
4142
"auto_create_routes": &schema.Schema{
4243
Type: schema.TypeBool,
@@ -59,15 +60,34 @@ func resourceComputeNetworkPeering() *schema.Resource {
5960
func resourceComputeNetworkPeeringCreate(d *schema.ResourceData, meta interface{}) error {
6061
config := meta.(*Config)
6162

62-
err := addPeering(config, d)
63+
project, err := getProject(d, config)
6364
if err != nil {
6465
return err
6566
}
6667

67-
peeringName := d.Get("name").(string)
68-
networkName := getNameFromNetworkLink(d.Get("network").(string))
68+
name := d.Get("name").(string)
69+
networkLink := d.Get("network").(string)
70+
peerNetworkLink := d.Get("peer_network").(string)
71+
autoCreateRoutes := d.Get("auto_create_routes").(bool)
72+
networkName := getNameFromNetworkLink(networkLink)
73+
74+
request := &compute.NetworksAddPeeringRequest{
75+
Name: name,
76+
PeerNetwork: peerNetworkLink,
77+
AutoCreateRoutes: autoCreateRoutes,
78+
}
79+
80+
addOp, err := config.clientCompute.Networks.AddPeering(project, networkName, request).Do()
81+
if err != nil {
82+
return fmt.Errorf("Error adding network peering: %s", err)
83+
}
6984

70-
d.SetId(fmt.Sprintf("%s/%s", networkName, peeringName))
85+
err = computeOperationWait(config, addOp, project, "Adding Network Peering")
86+
if err != nil {
87+
return err
88+
}
89+
90+
d.SetId(fmt.Sprintf("%s/%s", networkName, name))
7191

7292
return resourceComputeNetworkPeeringRead(d, meta)
7393
}
@@ -96,8 +116,6 @@ func resourceComputeNetworkPeeringRead(d *schema.ResourceData, meta interface{})
96116
return nil
97117
}
98118

99-
// No need to set the `name` and `network` fields. We use both of them to find the peering.
100-
// If they change on GCP, we wouldn't have been able to find the peering in the first place.
101119
d.Set("peer_network", peering.Network)
102120
d.Set("auto_create_routes", peering.AutoCreateRoutes)
103121
d.Set("state", peering.State)
@@ -110,55 +128,6 @@ func resourceComputeNetworkPeeringDelete(d *schema.ResourceData, meta interface{
110128
config := meta.(*Config)
111129

112130
// Remove the `network` to `peer_network` peering
113-
err := removePeering(config, d)
114-
if err != nil {
115-
return err
116-
}
117-
118-
return nil
119-
}
120-
121-
func findPeeringFromNetwork(network *compute.Network, peeringName string) *compute.NetworkPeering {
122-
for _, p := range network.Peerings {
123-
if p.Name == peeringName {
124-
return p
125-
}
126-
}
127-
return nil
128-
}
129-
130-
func addPeering(config *Config, d *schema.ResourceData) error {
131-
project, err := getProject(d, config)
132-
if err != nil {
133-
return err
134-
}
135-
136-
name := d.Get("name").(string)
137-
networkLink := d.Get("network").(string)
138-
peerNetworkLink := d.Get("peer_network").(string)
139-
autoCreateRoutes := d.Get("auto_create_routes").(bool)
140-
networkName := getNameFromNetworkLink(networkLink)
141-
142-
request := &compute.NetworksAddPeeringRequest{
143-
Name: name,
144-
PeerNetwork: peerNetworkLink,
145-
AutoCreateRoutes: autoCreateRoutes,
146-
}
147-
148-
addOp, err := config.clientCompute.Networks.AddPeering(project, networkName, request).Do()
149-
if err != nil {
150-
return fmt.Errorf("Error adding network peering: %s", err)
151-
}
152-
153-
err = computeOperationWait(config, addOp, project, "Adding Network Peering")
154-
if err != nil {
155-
return err
156-
}
157-
158-
return nil
159-
}
160-
161-
func removePeering(config *Config, d *schema.ResourceData) error {
162131
project, err := getProject(d, config)
163132
if err != nil {
164133
return err
@@ -196,34 +165,22 @@ func removePeering(config *Config, d *schema.ResourceData) error {
196165
return nil
197166
}
198167

168+
func findPeeringFromNetwork(network *compute.Network, peeringName string) *compute.NetworkPeering {
169+
for _, p := range network.Peerings {
170+
if p.Name == peeringName {
171+
return p
172+
}
173+
}
174+
return nil
175+
}
176+
199177
func getNameFromNetworkLink(network string) string {
200178
r := regexp.MustCompile(peerNetworkLinkRegex)
201179

202180
m := r.FindStringSubmatch(network)
203181
return m[2]
204182
}
205183

206-
func peerNetworkLinkDiffSuppress(k, old, new string, d *schema.ResourceData) bool {
207-
r := regexp.MustCompile(peerNetworkLinkRegex)
208-
209-
m := r.FindStringSubmatch(old)
210-
if len(m) != 3 {
211-
return false
212-
}
213-
oldProject, oldPeeringNetworkName := m[1], m[2]
214-
215-
m = r.FindStringSubmatch(new)
216-
if len(m) != 3 {
217-
return false
218-
}
219-
newProject, newPeeringNetworkName := m[1], m[2]
220-
221-
if oldProject == newProject && oldPeeringNetworkName == newPeeringNetworkName {
222-
return true
223-
}
224-
return false
225-
}
226-
227184
func getNetworkPeeringLockName(networkName, peerNetworkName string) string {
228185
return fmt.Sprintf("network_peering/%s/%s", networkName, peerNetworkName)
229186
}

google/resource_compute_network_peering_test.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -97,25 +97,25 @@ func testAccCheckComputeNetworkPeeringAutoCreateRoutes(v bool, peering *compute.
9797

9898
var testAccComputeNetworkPeering_basic = fmt.Sprintf(`
9999
resource "google_compute_network" "network1" {
100-
name = "network-test-1-%s"
101-
auto_create_subnetworks = false
100+
name = "network-test-1-%s"
101+
auto_create_subnetworks = false
102102
}
103103
104104
resource "google_compute_network" "network2" {
105-
name = "network-test-2-%s"
106-
auto_create_subnetworks = false
105+
name = "network-test-2-%s"
106+
auto_create_subnetworks = false
107107
}
108108
109109
resource "google_compute_network_peering" "foo" {
110-
name = "peering-test-1-%s"
111-
network = "${google_compute_network.network1.self_link}"
112-
peer_network = "${google_compute_network.network2.self_link}"
110+
name = "peering-test-1-%s"
111+
network = "${google_compute_network.network1.self_link}"
112+
peer_network = "${google_compute_network.network2.self_link}"
113113
}
114114
115115
resource "google_compute_network_peering" "bar" {
116-
name = "peering-test-2-%s"
117-
auto_create_routes = true
118-
network = "${google_compute_network.network2.self_link}"
119-
peer_network = "${google_compute_network.network1.self_link}"
116+
name = "peering-test-2-%s"
117+
auto_create_routes = true
118+
network = "${google_compute_network.network2.self_link}"
119+
peer_network = "${google_compute_network.network1.self_link}"
120120
}
121121
`, acctest.RandString(10), acctest.RandString(10), acctest.RandString(10), acctest.RandString(10))

website/docs/r/compute_network_peering.html.markdown

+18-28
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,18 @@ description: |-
88

99
# google\_compute\_network\_peering
1010

11-
Manages a network peering within GCE.
11+
Manages a network peering within GCE. For more information see
12+
[the official documentation](https://cloud.google.com/compute/docs/vpc/vpc-peering)
13+
and
14+
[API](https://cloud.google.com/compute/docs/reference/latest/networks).
1215

13-
## Example Usage
16+
~> **Note:** Both network must create a peering with each other for the peering to be functional.
1417

15-
```hcl
16-
resource "google_compute_network" "default" {
17-
name = "foobar"
18-
auto_create_subnetworks = "false"
19-
}
18+
~> **Note:** Subnets IP ranges across peered VPC networks cannot overlap.
2019

21-
resource "google_compute_network" "other" {
22-
name = "other"
23-
auto_create_subnetworks = "false"
24-
}
20+
## Example Usage
2521

26-
// Both network must create a peering with each other for the peering
27-
// to be functional.
22+
```hcl
2823
resource "google_compute_network_peering" "peering1" {
2924
name = "peering1"
3025
network = "${google_compute_network.default.self_link}"
@@ -37,19 +32,14 @@ resource "google_compute_network_peering" "peering2" {
3732
peer_network = "${google_compute_network.default.self_link}"
3833
}
3934
40-
// Subnets IP ranges across peered VPC networks cannot overlap.
41-
resource "google_compute_subnetwork" "network1-subnet1" {
42-
name = "network1-sub1"
43-
ip_cidr_range = "10.128.0.0/20"
44-
network = "${google_compute_network.network1.self_link}"
45-
region = "us-east1"
35+
resource "google_compute_network" "default" {
36+
name = "foobar"
37+
auto_create_subnetworks = "false"
4638
}
4739
48-
resource "google_compute_subnetwork" "network2-subnet1" {
49-
name = "network1-sub2"
50-
ip_cidr_range = "10.132.0.0/20"
51-
network = "${google_compute_network.network2.self_link}"
52-
region = "us-central1"
40+
resource "google_compute_network" "other" {
41+
name = "other"
42+
auto_create_subnetworks = "false"
5343
}
5444
```
5545

@@ -63,14 +53,14 @@ The following arguments are supported:
6353

6454
* `peer_network` - (Required) Resource link of the peer network.
6555

66-
* `auto_create_routes` - (Optional) If set to true, the routes between the two networks will
67-
be created and managed automatically. Defaults to true.
56+
* `auto_create_routes` - (Optional) If set to `true`, the routes between the two networks will
57+
be created and managed automatically. Defaults to `true`.
6858

6959
## Attributes Reference
7060

7161
In addition to the arguments listed above, the following computed attributes are
7262
exported:
7363

74-
* `state` - (Computed) State for the peering.
64+
* `state` - State for the peering.
7565

76-
* `state_details` - (Computed) Details about the current state of the peering.
66+
* `state_details` - Details about the current state of the peering.

0 commit comments

Comments
 (0)