Skip to content

Commit 00c3517

Browse files
drebesmodular-magician
authored andcommitted
Terraform: allow deletion of default route upon network creation (#1539)
Merged PR #1539.
1 parent 1d92fdf commit 00c3517

File tree

8 files changed

+89
-2
lines changed

8 files changed

+89
-2
lines changed

build/terraform

build/terraform-beta

products/compute/terraform.yaml

+8
Original file line numberDiff line numberDiff line change
@@ -660,7 +660,15 @@ overrides: !ruby/object:Overrides::ResourceOverrides
660660
required: false
661661
default_from_api: true
662662
custom_code: !ruby/object:Provider::Terraform::CustomCode
663+
extra_schema_entry: templates/terraform/extra_schema_entry/compute_network_delete_default_route.erb
664+
post_create: templates/terraform/post_create/compute_network_delete_default_route.erb
665+
post_import: templates/terraform/custom_import/compute_network_delete_default_route.erb
663666
encoder: templates/terraform/encoders/network.erb
667+
decoder: templates/terraform/decoders/network.erb
668+
docs: !ruby/object:Provider::Terraform::Docs
669+
optional_properties: |
670+
* `delete_default_routes_on_create`: If set to `true`, default routes (`0.0.0.0/0`) will be deleted
671+
immediately after network creation. Defaults to `false`.
664672
Region: !ruby/object:Overrides::Terraform::ResourceOverride
665673
exclude: true
666674
RegionAutoscaler: !ruby/object:Overrides::Terraform::ResourceOverride
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// Explicitly set to default as a workaround for `ImportStateVerify` tests, and so that users
2+
// don't see a diff immediately after import.
3+
d.Set("delete_default_routes_on_create", false)
+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<%# The license inside this block applies to this file.
2+
# Copyright 2018 Google Inc.
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
-%>
15+
// Explicitly set to default if not set
16+
if _, ok := d.GetOk("delete_default_routes_on_create"); !ok {
17+
d.Set("delete_default_routes_on_create", false)
18+
}
19+
return res, nil
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
"delete_default_routes_on_create": {
2+
Type: schema.TypeBool,
3+
Optional: true,
4+
Default: false,
5+
},
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
if d.Get("delete_default_routes_on_create").(bool) {
2+
token := ""
3+
for paginate := true; paginate; {
4+
networkLink := fmt.Sprintf("%s/%s", url, d.Get("name").(string))
5+
filter := fmt.Sprintf("(network=\"%s\") AND (destRange=\"0.0.0.0/0\")", networkLink)
6+
log.Printf("[DEBUG] Getting routes for network %q with filter '%q'", d.Get("name").(string), filter)
7+
resp, err := config.clientCompute.Routes.List(project).Filter(filter).Do()
8+
if err != nil {
9+
return fmt.Errorf("Error listing routes in proj: %s", err)
10+
}
11+
12+
log.Printf("[DEBUG] Found %d routes rules in %q network", len(resp.Items), d.Get("name").(string))
13+
14+
for _, route := range resp.Items {
15+
op, err := config.clientCompute.Routes.Delete(project, route.Name).Do()
16+
if err != nil {
17+
return fmt.Errorf("Error deleting route: %s", err)
18+
}
19+
err = computeSharedOperationWait(config.clientCompute, op, project, "Deleting Route")
20+
if err != nil {
21+
return err
22+
}
23+
}
24+
25+
token = resp.NextPageToken
26+
paginate = token != ""
27+
}
28+
}

third_party/terraform/tests/resource_compute_network_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,21 @@ func TestAccComputeNetwork_default_routing_mode(t *testing.T) {
150150
})
151151
}
152152

153+
func TestAccComputeNetwork_networkDeleteDefaultRoute(t *testing.T) {
154+
t.Parallel()
155+
156+
resource.Test(t, resource.TestCase{
157+
PreCheck: func() { testAccPreCheck(t) },
158+
Providers: testAccProviders,
159+
CheckDestroy: testAccCheckComputeNetworkDestroy,
160+
Steps: []resource.TestStep{
161+
{
162+
Config: testAccComputeNetwork_deleteDefaultRoute(),
163+
},
164+
},
165+
})
166+
}
167+
153168
func testAccCheckComputeNetworkExists(n string, network *compute.Network) resource.TestCheckFunc {
154169
return func(s *terraform.State) error {
155170
rs, ok := s.RootModule().Resources[n]
@@ -284,3 +299,12 @@ resource "google_compute_network" "acc_network_routing_mode" {
284299
routing_mode = "%s"
285300
}`, network, routingMode)
286301
}
302+
303+
func testAccComputeNetwork_deleteDefaultRoute() string {
304+
return fmt.Sprintf(`
305+
resource "google_compute_network" "bar" {
306+
name = "network-test-%s"
307+
delete_default_routes_on_create = true
308+
auto_create_subnetworks = false
309+
}`, acctest.RandString(10))
310+
}

0 commit comments

Comments
 (0)