mirror of
https://github.com/letic/terraform-provider-google.git
synced 2024-10-03 01:01:06 +00:00
Add support for compute network routing mode (#838)
* Add ability to specify compute network routing mode * Update docs
This commit is contained in:
parent
5766f2b107
commit
606103afb6
@ -37,6 +37,13 @@ func resourceComputeNetwork() *schema.Resource {
|
||||
ForceNew: true,
|
||||
},
|
||||
|
||||
"routing_mode": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Optional: true,
|
||||
Computed: true,
|
||||
ForceNew: true,
|
||||
},
|
||||
|
||||
"gateway_ipv4": &schema.Schema{
|
||||
Type: schema.TypeString,
|
||||
Computed: true,
|
||||
@ -93,6 +100,13 @@ func resourceComputeNetworkCreate(d *schema.ResourceData, meta interface{}) erro
|
||||
Description: d.Get("description").(string),
|
||||
}
|
||||
|
||||
if v, ok := d.GetOk("routing_mode"); ok {
|
||||
routingConfig := &compute.NetworkRoutingConfig{
|
||||
RoutingMode: v.(string),
|
||||
}
|
||||
network.RoutingConfig = routingConfig
|
||||
}
|
||||
|
||||
if v, ok := d.GetOk("ipv4_range"); ok {
|
||||
log.Printf("[DEBUG] Setting IPv4Range (%#v) for legacy network mode", v.(string))
|
||||
network.IPv4Range = v.(string)
|
||||
@ -133,6 +147,9 @@ func resourceComputeNetworkRead(d *schema.ResourceData, meta interface{}) error
|
||||
return handleNotFoundError(err, d, fmt.Sprintf("Network %q", d.Get("name").(string)))
|
||||
}
|
||||
|
||||
routingConfig := network.RoutingConfig
|
||||
|
||||
d.Set("routing_mode", routingConfig.RoutingMode)
|
||||
d.Set("gateway_ipv4", network.GatewayIPv4)
|
||||
d.Set("ipv4_range", network.IPv4Range)
|
||||
d.Set("self_link", network.SelfLink)
|
||||
|
@ -77,6 +77,56 @@ func TestAccComputeNetwork_custom_subnet(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestAccComputeNetwork_routing_mode(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var network compute.Network
|
||||
|
||||
routingMode := "GLOBAL"
|
||||
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
Providers: testAccProviders,
|
||||
CheckDestroy: testAccCheckComputeNetworkDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
resource.TestStep{
|
||||
Config: testAccComputeNetwork_routing_mode(routingMode),
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
testAccCheckComputeNetworkExists(
|
||||
"google_compute_network.acc_network_routing_mode", &network),
|
||||
testAccCheckComputeNetworkHasRoutingMode(
|
||||
"google_compute_network.acc_network_routing_mode", &network, routingMode),
|
||||
),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func TestAccComputeNetwork_default_routing_mode(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var network compute.Network
|
||||
|
||||
expectedRoutingMode := "REGIONAL"
|
||||
|
||||
resource.Test(t, resource.TestCase{
|
||||
PreCheck: func() { testAccPreCheck(t) },
|
||||
Providers: testAccProviders,
|
||||
CheckDestroy: testAccCheckComputeNetworkDestroy,
|
||||
Steps: []resource.TestStep{
|
||||
resource.TestStep{
|
||||
Config: testAccComputeNetwork_basic(),
|
||||
Check: resource.ComposeTestCheckFunc(
|
||||
testAccCheckComputeNetworkExists(
|
||||
"google_compute_network.foobar", &network),
|
||||
testAccCheckComputeNetworkHasRoutingMode(
|
||||
"google_compute_network.foobar", &network, expectedRoutingMode),
|
||||
),
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
|
||||
func testAccCheckComputeNetworkDestroy(s *terraform.State) error {
|
||||
config := testAccProvider.Meta().(*Config)
|
||||
|
||||
@ -168,6 +218,35 @@ func testAccCheckComputeNetworkIsCustomSubnet(n string, network *compute.Network
|
||||
}
|
||||
}
|
||||
|
||||
func testAccCheckComputeNetworkHasRoutingMode(n string, network *compute.Network, routingMode string) resource.TestCheckFunc {
|
||||
return func(s *terraform.State) error {
|
||||
config := testAccProvider.Meta().(*Config)
|
||||
|
||||
rs, ok := s.RootModule().Resources[n]
|
||||
if !ok {
|
||||
return fmt.Errorf("Not found: %s", n)
|
||||
}
|
||||
|
||||
if rs.Primary.Attributes["routing_mode"] == "" {
|
||||
return fmt.Errorf("Routing mode not found on resource")
|
||||
}
|
||||
|
||||
found, err := config.clientCompute.Networks.Get(
|
||||
config.Project, network.Name).Do()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
foundRoutingMode := found.RoutingConfig.RoutingMode
|
||||
|
||||
if routingMode != foundRoutingMode {
|
||||
return fmt.Errorf("Expected routing mode %s to match actual routing mode %s", routingMode, foundRoutingMode)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
func testAccComputeNetwork_basic() string {
|
||||
return fmt.Sprintf(`
|
||||
resource "google_compute_network" "foobar" {
|
||||
@ -190,3 +269,11 @@ resource "google_compute_network" "baz" {
|
||||
auto_create_subnetworks = false
|
||||
}`, acctest.RandString(10))
|
||||
}
|
||||
|
||||
func testAccComputeNetwork_routing_mode(routingMode string) string {
|
||||
return fmt.Sprintf(`
|
||||
resource "google_compute_network" "acc_network_routing_mode" {
|
||||
name = "network-test-%s"
|
||||
routing_mode = "%s"
|
||||
}`, acctest.RandString(10), routingMode)
|
||||
}
|
||||
|
@ -40,6 +40,11 @@ The following arguments are supported:
|
||||
specified range. This API is deprecated. If set, `auto_create_subnetworks` must be
|
||||
explicitly set to false.
|
||||
|
||||
* `routing_mode` - (Optional) Sets the network-wide routing mode for Cloud Routers
|
||||
to use. Accepted values are `"GLOBAL"` or `"REGIONAL"`. Defaults to `"REGIONAL"`.
|
||||
Refer to the [Cloud Router documentation](https://cloud.google.com/router/docs/concepts/overview#dynamic-routing-mode)
|
||||
for more details.
|
||||
|
||||
* `description` - (Optional) A brief description of this resource.
|
||||
|
||||
* `project` - (Optional) The project in which the resource belongs. If it
|
||||
|
Loading…
Reference in New Issue
Block a user