@@ -2,11 +2,12 @@ package google
2
2
3
3
import (
4
4
"fmt"
5
+ "log"
6
+ "regexp"
7
+
5
8
"github.com/hashicorp/terraform/helper/schema"
6
9
"google.golang.org/api/compute/v1"
7
10
"google.golang.org/api/googleapi"
8
- "log"
9
- "regexp"
10
11
)
11
12
12
13
const peerNetworkLinkRegex = "projects/(" + ProjectRegex + ")/global/networks/((?:[a-z](?:[-a-z0-9]*[a-z0-9])?))$"
@@ -29,14 +30,14 @@ func resourceComputeNetworkPeering() *schema.Resource {
29
30
Required : true ,
30
31
ForceNew : true ,
31
32
ValidateFunc : validateRegexp (peerNetworkLinkRegex ),
32
- DiffSuppressFunc : peerNetworkLinkDiffSuppress ,
33
+ DiffSuppressFunc : compareSelfLinkRelativePaths ,
33
34
},
34
35
"peer_network" : & schema.Schema {
35
36
Type : schema .TypeString ,
36
37
Required : true ,
37
38
ForceNew : true ,
38
39
ValidateFunc : validateRegexp (peerNetworkLinkRegex ),
39
- DiffSuppressFunc : peerNetworkLinkDiffSuppress ,
40
+ DiffSuppressFunc : compareSelfLinkRelativePaths ,
40
41
},
41
42
"auto_create_routes" : & schema.Schema {
42
43
Type : schema .TypeBool ,
@@ -59,15 +60,34 @@ func resourceComputeNetworkPeering() *schema.Resource {
59
60
func resourceComputeNetworkPeeringCreate (d * schema.ResourceData , meta interface {}) error {
60
61
config := meta .(* Config )
61
62
62
- err := addPeering ( config , d )
63
+ project , err := getProject ( d , config )
63
64
if err != nil {
64
65
return err
65
66
}
66
67
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
+ }
69
84
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 ))
71
91
72
92
return resourceComputeNetworkPeeringRead (d , meta )
73
93
}
@@ -96,8 +116,6 @@ func resourceComputeNetworkPeeringRead(d *schema.ResourceData, meta interface{})
96
116
return nil
97
117
}
98
118
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.
101
119
d .Set ("peer_network" , peering .Network )
102
120
d .Set ("auto_create_routes" , peering .AutoCreateRoutes )
103
121
d .Set ("state" , peering .State )
@@ -110,55 +128,6 @@ func resourceComputeNetworkPeeringDelete(d *schema.ResourceData, meta interface{
110
128
config := meta .(* Config )
111
129
112
130
// 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 {
162
131
project , err := getProject (d , config )
163
132
if err != nil {
164
133
return err
@@ -196,34 +165,22 @@ func removePeering(config *Config, d *schema.ResourceData) error {
196
165
return nil
197
166
}
198
167
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
+
199
177
func getNameFromNetworkLink (network string ) string {
200
178
r := regexp .MustCompile (peerNetworkLinkRegex )
201
179
202
180
m := r .FindStringSubmatch (network )
203
181
return m [2 ]
204
182
}
205
183
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
-
227
184
func getNetworkPeeringLockName (networkName , peerNetworkName string ) string {
228
185
return fmt .Sprintf ("network_peering/%s/%s" , networkName , peerNetworkName )
229
186
}
0 commit comments