@@ -76,6 +76,11 @@ func resourceComputeNetwork() *schema.Resource {
76
76
Type : schema .TypeString ,
77
77
Computed : true ,
78
78
},
79
+ "delete_default_routes_on_create" : {
80
+ Type : schema .TypeBool ,
81
+ Optional : true ,
82
+ Default : false ,
83
+ },
79
84
"project" : {
80
85
Type : schema .TypeString ,
81
86
Optional : true ,
@@ -170,6 +175,35 @@ func resourceComputeNetworkCreate(d *schema.ResourceData, meta interface{}) erro
170
175
171
176
log .Printf ("[DEBUG] Finished creating Network %q: %#v" , d .Id (), res )
172
177
178
+ if d .Get ("delete_default_routes_on_create" ).(bool ) {
179
+ token := ""
180
+ for paginate := true ; paginate ; {
181
+ networkLink := fmt .Sprintf ("%s/%s" , url , d .Get ("name" ).(string ))
182
+ filter := fmt .Sprintf ("(network=\" %s\" ) AND (destRange=\" 0.0.0.0/0\" )" , networkLink )
183
+ log .Printf ("[DEBUG] Getting routes for network %q with filter '%q'" , d .Get ("name" ).(string ), filter )
184
+ resp , err := config .clientCompute .Routes .List (project ).Filter (filter ).Do ()
185
+ if err != nil {
186
+ return fmt .Errorf ("Error listing routes in proj: %s" , err )
187
+ }
188
+
189
+ log .Printf ("[DEBUG] Found %d routes rules in %q network" , len (resp .Items ), d .Get ("name" ).(string ))
190
+
191
+ for _ , route := range resp .Items {
192
+ op , err := config .clientCompute .Routes .Delete (project , route .Name ).Do ()
193
+ if err != nil {
194
+ return fmt .Errorf ("Error deleting route: %s" , err )
195
+ }
196
+ err = computeSharedOperationWait (config .clientCompute , op , project , "Deleting Route" )
197
+ if err != nil {
198
+ return err
199
+ }
200
+ }
201
+
202
+ token = resp .NextPageToken
203
+ paginate = token != ""
204
+ }
205
+ }
206
+
173
207
return resourceComputeNetworkRead (d , meta )
174
208
}
175
209
@@ -186,6 +220,11 @@ func resourceComputeNetworkRead(d *schema.ResourceData, meta interface{}) error
186
220
return handleNotFoundError (err , d , fmt .Sprintf ("ComputeNetwork %q" , d .Id ()))
187
221
}
188
222
223
+ res , err = resourceComputeNetworkDecoder (d , meta , res )
224
+ if err != nil {
225
+ return err
226
+ }
227
+
189
228
project , err := getProject (d , config )
190
229
if err != nil {
191
230
return err
@@ -321,6 +360,9 @@ func resourceComputeNetworkImport(d *schema.ResourceData, meta interface{}) ([]*
321
360
return nil , fmt .Errorf ("Error constructing id: %s" , err )
322
361
}
323
362
d .SetId (id )
363
+ // Explicitly set to default as a workaround for `ImportStateVerify` tests, and so that users
364
+ // don't see a diff immediately after import.
365
+ d .Set ("delete_default_routes_on_create" , false )
324
366
325
367
return []* schema.ResourceData {d }, nil
326
368
}
@@ -389,3 +431,11 @@ func resourceComputeNetworkEncoder(d *schema.ResourceData, meta interface{}, obj
389
431
390
432
return obj , nil
391
433
}
434
+
435
+ func resourceComputeNetworkDecoder (d * schema.ResourceData , meta interface {}, res map [string ]interface {}) (map [string ]interface {}, error ) {
436
+ // Explicitly set to default if not set
437
+ if _ , ok := d .GetOk ("delete_default_routes_on_create" ); ! ok {
438
+ d .Set ("delete_default_routes_on_create" , false )
439
+ }
440
+ return res , nil
441
+ }
0 commit comments