Unremove ipv4_range on networks.

We removed ipv4_range, but the API still exists, it's just deprecated.
This breaks configs for users that haven't migrated off yet. I added it
back, added some tests to use it, included it in the docs, and basically
tried to put things back the way they were. The main difference now is
that the auto_create_subnetworks field defaults to true, and we want to
keep that behaviour to avoid a breaking change. So now if users want to
use the lagacy API, they need to set auto_create_subnetworks to false
explicitly.
This commit is contained in:
Paddy 2017-11-29 15:00:51 -08:00
parent 8f701c6ebb
commit c9fb64ed57
5 changed files with 52 additions and 20 deletions

View File

@ -362,6 +362,8 @@ func testAccComputeFirewall_basic(network, firewall string) string {
return fmt.Sprintf(`
resource "google_compute_network" "foobar" {
name = "%s"
auto_create_subnetworks = false
ipv4_range = "10.0.0.0/16"
}
resource "google_compute_firewall" "foobar" {
@ -380,6 +382,8 @@ func testAccComputeFirewall_update(network, firewall string) string {
return fmt.Sprintf(`
resource "google_compute_network" "foobar" {
name = "%s"
auto_create_subnetworks = false
ipv4_range = "10.0.0.0/16"
}
resource "google_compute_firewall" "foobar" {
@ -399,6 +403,8 @@ func testAccComputeFirewall_priority(network, firewall string, priority int) str
return fmt.Sprintf(`
resource "google_compute_network" "foobar" {
name = "%s"
auto_create_subnetworks = false
ipv4_range = "10.0.0.0/16"
}
resource "google_compute_firewall" "foobar" {
@ -418,6 +424,8 @@ func testAccComputeFirewall_noSource(network, firewall string) string {
return fmt.Sprintf(`
resource "google_compute_network" "foobar" {
name = "%s"
auto_create_subnetworks = false
ipv4_range = "10.0.0.0/16"
}
resource "google_compute_firewall" "foobar" {
@ -436,6 +444,8 @@ func testAccComputeFirewall_denied(network, firewall string) string {
return fmt.Sprintf(`
resource "google_compute_network" "foobar" {
name = "%s"
auto_create_subnetworks = false
ipv4_range = "10.0.0.0/16"
}
resource "google_compute_firewall" "foobar" {
@ -455,6 +465,8 @@ func testAccComputeFirewall_egress(network, firewall string) string {
return fmt.Sprintf(`
resource "google_compute_network" "foobar" {
name = "%s"
auto_create_subnetworks = false
ipv4_range = "10.0.0.0/16"
}
resource "google_compute_firewall" "foobar" {

View File

@ -25,11 +25,10 @@ func resourceComputeNetwork() *schema.Resource {
},
"auto_create_subnetworks": &schema.Schema{
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
Default: true,
ConflictsWith: []string{"ipv4_range"},
Type: schema.TypeBool,
Optional: true,
ForceNew: true,
Default: true,
},
"description": &schema.Schema{
@ -47,7 +46,8 @@ func resourceComputeNetwork() *schema.Resource {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
Removed: "Please use google_compute_subnetwork resources instead.",
// This needs to remain deprecated until the API is retired
Deprecated: "Please use google_compute_subnetwork resources instead.",
},
"project": &schema.Schema{
@ -73,15 +73,34 @@ func resourceComputeNetworkCreate(d *schema.ResourceData, meta interface{}) erro
return err
}
//
// Possible modes:
// - 1 Legacy mode - Create a network in the legacy mode. ipv4_range is set. auto_create_subnetworks must not be
// set (enforced by ConflictsWith schema attribute)
// - 2 Distributed Mode - Create a new generation network that supports subnetworks:
// - 2.a - Auto subnet mode - auto_create_subnetworks = true, Google will generate 1 subnetwork per region
// - 2.b - Custom subnet mode - auto_create_subnetworks = false & ipv4_range not set,
//
autoCreateSubnetworks := d.Get("auto_create_subnetworks").(bool)
if autoCreateSubnetworks && d.Get("ipv4_range").(string) != "" {
return fmt.Errorf("ipv4_range can't be set if auto_create_subnetworks is true.")
}
// Build the network parameter
network := &compute.Network{
Name: d.Get("name").(string),
AutoCreateSubnetworks: d.Get("auto_create_subnetworks").(bool),
AutoCreateSubnetworks: autoCreateSubnetworks,
Description: d.Get("description").(string),
}
// make sure AutoCreateSubnetworks field is included in request
network.ForceSendFields = []string{"AutoCreateSubnetworks"}
if v, ok := d.GetOk("ipv4_range"); ok {
log.Printf("[DEBUG] Setting IPv4Range (%#v) for legacy network mode", v.(string))
network.IPv4Range = v.(string)
} else {
// custom subnet mode, so make sure AutoCreateSubnetworks field is included in request otherwise
// google will create a network in legacy mode.
network.ForceSendFields = []string{"AutoCreateSubnetworks"}
}
log.Printf("[DEBUG] Network insert request: %#v", network)
op, err := config.clientCompute.Networks.Insert(
project, network).Do()
@ -115,6 +134,7 @@ func resourceComputeNetworkRead(d *schema.ResourceData, meta interface{}) error
}
d.Set("gateway_ipv4", network.GatewayIPv4)
d.Set("ipv4_range", network.IPv4Range)
d.Set("self_link", network.SelfLink)
d.Set("name", network.Name)
d.Set("auto_create_subnetworks", network.AutoCreateSubnetworks)

View File

@ -129,22 +129,17 @@ func testAccComputeRoute_basic() string {
return fmt.Sprintf(`
resource "google_compute_network" "foobar" {
name = "route-test-%s"
}
resource "google_compute_subnetwork" "foobar" {
name = "route-test-%s"
ip_cidr_range = "10.0.0.0/16"
network = "${google_compute_network.foobar.self_link}"
region = "us-central1"
auto_create_subnetworks = false
ipv4_range = "10.0.0.0/16"
}
resource "google_compute_route" "foobar" {
name = "route-test-%s"
dest_range = "15.0.0.0/24"
network = "${google_compute_network.foobar.name}"
next_hop_ip = "10.154.0.1"
next_hop_ip = "10.0.1.5"
priority = 100
}`, acctest.RandString(10), acctest.RandString(10), acctest.RandString(10))
}`, acctest.RandString(10), acctest.RandString(10))
}
func testAccComputeRoute_defaultInternetGateway() string {

View File

@ -88,7 +88,8 @@ func testAccComputeVpnGateway_basic() string {
return fmt.Sprintf(`
resource "google_compute_network" "foobar" {
name = "gateway-test-%s"
auto_create_subnetworks = true
auto_create_subnetworks = false
ipv4_range = "10.0.0.0/16"
}
resource "google_compute_vpn_gateway" "foobar" {

View File

@ -34,7 +34,11 @@ The following arguments are supported:
* `auto_create_subnetworks` - (Optional) If set to true, this network will be
created in auto subnet mode, and Google will create a subnet for each region
automatically. If set to false, a custom subnetted network will be created that
can support `google_compute_subnetwork` resources.
can support `google_compute_subnetwork` resources. Defaults to true.
* `ipv4_range` - (Optional) If set to a CIDR block, uses the legacy VPC API with the
specified range. This API is deprecated. If set, `auto_create_subnetworks` must be
explicitly set to false.
* `description` - (Optional) A brief description of this resource.