mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-01 16:21:06 +00:00
Terraform: allow deletion of default route upon network creation (#3391)
<!-- This change is generated by MagicModules. --> Original Author: @drebes
This commit is contained in:
parent
0fc12ab85d
commit
c662cc75ba
@ -76,6 +76,11 @@ func resourceComputeNetwork() *schema.Resource {
|
|||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Computed: true,
|
Computed: true,
|
||||||
},
|
},
|
||||||
|
"delete_default_routes_on_create": {
|
||||||
|
Type: schema.TypeBool,
|
||||||
|
Optional: true,
|
||||||
|
Default: false,
|
||||||
|
},
|
||||||
"project": {
|
"project": {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Optional: true,
|
Optional: true,
|
||||||
@ -170,6 +175,35 @@ func resourceComputeNetworkCreate(d *schema.ResourceData, meta interface{}) erro
|
|||||||
|
|
||||||
log.Printf("[DEBUG] Finished creating Network %q: %#v", d.Id(), res)
|
log.Printf("[DEBUG] Finished creating Network %q: %#v", d.Id(), res)
|
||||||
|
|
||||||
|
if d.Get("delete_default_routes_on_create").(bool) {
|
||||||
|
token := ""
|
||||||
|
for paginate := true; paginate; {
|
||||||
|
networkLink := fmt.Sprintf("%s/%s", url, d.Get("name").(string))
|
||||||
|
filter := fmt.Sprintf("(network=\"%s\") AND (destRange=\"0.0.0.0/0\")", networkLink)
|
||||||
|
log.Printf("[DEBUG] Getting routes for network %q with filter '%q'", d.Get("name").(string), filter)
|
||||||
|
resp, err := config.clientCompute.Routes.List(project).Filter(filter).Do()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error listing routes in proj: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Printf("[DEBUG] Found %d routes rules in %q network", len(resp.Items), d.Get("name").(string))
|
||||||
|
|
||||||
|
for _, route := range resp.Items {
|
||||||
|
op, err := config.clientCompute.Routes.Delete(project, route.Name).Do()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Error deleting route: %s", err)
|
||||||
|
}
|
||||||
|
err = computeSharedOperationWait(config.clientCompute, op, project, "Deleting Route")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
token = resp.NextPageToken
|
||||||
|
paginate = token != ""
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return resourceComputeNetworkRead(d, meta)
|
return resourceComputeNetworkRead(d, meta)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,6 +220,11 @@ func resourceComputeNetworkRead(d *schema.ResourceData, meta interface{}) error
|
|||||||
return handleNotFoundError(err, d, fmt.Sprintf("ComputeNetwork %q", d.Id()))
|
return handleNotFoundError(err, d, fmt.Sprintf("ComputeNetwork %q", d.Id()))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
res, err = resourceComputeNetworkDecoder(d, meta, res)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
project, err := getProject(d, config)
|
project, err := getProject(d, config)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
@ -321,6 +360,9 @@ func resourceComputeNetworkImport(d *schema.ResourceData, meta interface{}) ([]*
|
|||||||
return nil, fmt.Errorf("Error constructing id: %s", err)
|
return nil, fmt.Errorf("Error constructing id: %s", err)
|
||||||
}
|
}
|
||||||
d.SetId(id)
|
d.SetId(id)
|
||||||
|
// Explicitly set to default as a workaround for `ImportStateVerify` tests, and so that users
|
||||||
|
// don't see a diff immediately after import.
|
||||||
|
d.Set("delete_default_routes_on_create", false)
|
||||||
|
|
||||||
return []*schema.ResourceData{d}, nil
|
return []*schema.ResourceData{d}, nil
|
||||||
}
|
}
|
||||||
@ -389,3 +431,11 @@ func resourceComputeNetworkEncoder(d *schema.ResourceData, meta interface{}, obj
|
|||||||
|
|
||||||
return obj, nil
|
return obj, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func resourceComputeNetworkDecoder(d *schema.ResourceData, meta interface{}, res map[string]interface{}) (map[string]interface{}, error) {
|
||||||
|
// Explicitly set to default if not set
|
||||||
|
if _, ok := d.GetOk("delete_default_routes_on_create"); !ok {
|
||||||
|
d.Set("delete_default_routes_on_create", false)
|
||||||
|
}
|
||||||
|
return res, nil
|
||||||
|
}
|
||||||
|
@ -150,6 +150,21 @@ func TestAccComputeNetwork_default_routing_mode(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestAccComputeNetwork_networkDeleteDefaultRoute(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
|
||||||
|
resource.Test(t, resource.TestCase{
|
||||||
|
PreCheck: func() { testAccPreCheck(t) },
|
||||||
|
Providers: testAccProviders,
|
||||||
|
CheckDestroy: testAccCheckComputeNetworkDestroy,
|
||||||
|
Steps: []resource.TestStep{
|
||||||
|
{
|
||||||
|
Config: testAccComputeNetwork_deleteDefaultRoute(),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
func testAccCheckComputeNetworkExists(n string, network *compute.Network) resource.TestCheckFunc {
|
func testAccCheckComputeNetworkExists(n string, network *compute.Network) resource.TestCheckFunc {
|
||||||
return func(s *terraform.State) error {
|
return func(s *terraform.State) error {
|
||||||
rs, ok := s.RootModule().Resources[n]
|
rs, ok := s.RootModule().Resources[n]
|
||||||
@ -284,3 +299,12 @@ resource "google_compute_network" "acc_network_routing_mode" {
|
|||||||
routing_mode = "%s"
|
routing_mode = "%s"
|
||||||
}`, network, routingMode)
|
}`, network, routingMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func testAccComputeNetwork_deleteDefaultRoute() string {
|
||||||
|
return fmt.Sprintf(`
|
||||||
|
resource "google_compute_network" "bar" {
|
||||||
|
name = "network-test-%s"
|
||||||
|
delete_default_routes_on_create = true
|
||||||
|
auto_create_subnetworks = false
|
||||||
|
}`, acctest.RandString(10))
|
||||||
|
}
|
||||||
|
@ -97,6 +97,9 @@ The following arguments are supported:
|
|||||||
If it is not provided, the provider project is used.
|
If it is not provided, the provider project is used.
|
||||||
|
|
||||||
|
|
||||||
|
* `delete_default_routes_on_create`: If set to `true`, default routes (`0.0.0.0/0`) will be deleted
|
||||||
|
immediately after network creation. Defaults to `false`.
|
||||||
|
|
||||||
## Attributes Reference
|
## Attributes Reference
|
||||||
|
|
||||||
In addition to the arguments listed above, the following computed attributes are exported:
|
In addition to the arguments listed above, the following computed attributes are exported:
|
||||||
|
Loading…
Reference in New Issue
Block a user