Skip to content

add support for network tiers #1530

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jun 5, 2018
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions google/compute_instance_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ func flattenAccessConfigs(accessConfigs []*computeBeta.AccessConfig) ([]map[stri
for i, ac := range accessConfigs {
flattened[i] = map[string]interface{}{
"nat_ip": ac.NatIP,
"network_tier": ac.NetworkTier,
"assigned_nat_ip": ac.NatIP,
}
if ac.SetPublicPtr {
Expand Down Expand Up @@ -103,8 +104,9 @@ func expandAccessConfigs(configs []interface{}) []*computeBeta.AccessConfig {
for i, raw := range configs {
data := raw.(map[string]interface{})
acs[i] = &computeBeta.AccessConfig{
Type: "ONE_TO_ONE_NAT",
NatIP: data["nat_ip"].(string),
Type: "ONE_TO_ONE_NAT",
NatIP: data["nat_ip"].(string),
NetworkTier: data["network_tier"].(string),
}
if ptr, ok := data["public_ptr_domain_name"]; ok && ptr != "" {
acs[i].SetPublicPtr = true
Expand Down
19 changes: 14 additions & 5 deletions google/resource_compute_address.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (

"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/helper/validation"
"google.golang.org/api/compute/v1"
computeBeta "google.golang.org/api/compute/v0.beta"
)

const (
Expand Down Expand Up @@ -65,6 +65,13 @@ func resourceComputeAddress() *schema.Resource {
Computed: true,
},

"network_tier": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{"PREMIUM", "STANDARD"}, false),
},

"project": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -101,14 +108,15 @@ func resourceComputeAddressCreate(d *schema.ResourceData, meta interface{}) erro
}

// Build the address parameter
address := &compute.Address{
address := &computeBeta.Address{
Name: d.Get("name").(string),
AddressType: d.Get("address_type").(string),
Subnetwork: d.Get("subnetwork").(string),
Address: d.Get("address").(string),
NetworkTier: d.Get("network_tier").(string),
}

op, err := config.clientCompute.Addresses.Insert(project, region, address).Do()
op, err := config.clientComputeBeta.Addresses.Insert(project, region, address).Do()
if err != nil {
return fmt.Errorf("Error creating address: %s", err)
}
Expand Down Expand Up @@ -136,7 +144,7 @@ func resourceComputeAddressRead(d *schema.ResourceData, meta interface{}) error
return err
}

addr, err := config.clientCompute.Addresses.Get(
addr, err := config.clientComputeBeta.Addresses.Get(
addressId.Project, addressId.Region, addressId.Name).Do()
if err != nil {
return handleNotFoundError(err, d, fmt.Sprintf("Address %q", d.Get("name").(string)))
Expand All @@ -151,6 +159,7 @@ func resourceComputeAddressRead(d *schema.ResourceData, meta interface{}) error
d.Set("address", addr.Address)
d.Set("self_link", addr.SelfLink)
d.Set("name", addr.Name)
d.Set("network_tier", addr.NetworkTier)
d.Set("project", addressId.Project)
d.Set("region", GetResourceNameFromSelfLink(addr.Region))

Expand All @@ -166,7 +175,7 @@ func resourceComputeAddressDelete(d *schema.ResourceData, meta interface{}) erro
}

// Delete the address
op, err := config.clientCompute.Addresses.Delete(
op, err := config.clientComputeBeta.Addresses.Delete(
addressId.Project, addressId.Region, addressId.Name).Do()
if err != nil {
return fmt.Errorf("Error deleting address: %s", err)
Expand Down
28 changes: 28 additions & 0 deletions google/resource_compute_address_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,26 @@ func TestAccComputeAddress_basic(t *testing.T) {
})
}

func TestAccComputeAddress_networkTier(t *testing.T) {
t.Parallel()

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckComputeAddressDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccComputeAddress_networkTier(acctest.RandString(10)),
},
resource.TestStep{
ResourceName: "google_compute_address.foobar",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func TestAccComputeAddress_internal(t *testing.T) {
var addr computeBeta.Address

Expand Down Expand Up @@ -273,3 +293,11 @@ resource "google_compute_address" "internal_with_subnet_and_address" {
i, // google_compute_address.internal_with_subnet_and_address name
)
}

func testAccComputeAddress_networkTier(i string) string {
return fmt.Sprintf(`
resource "google_compute_address" "foobar" {
name = "address-test-%s"
network_tier = "STANDARD"
}`, i)
}
26 changes: 19 additions & 7 deletions google/resource_compute_forwarding_rule.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ import (
"log"

"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/helper/validation"
computeBeta "google.golang.org/api/compute/v0.beta"
"google.golang.org/api/compute/v1"
)

Expand All @@ -26,8 +28,9 @@ func resourceComputeForwardingRule() *schema.Resource {
},

"target": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Type: schema.TypeString,
Optional: true,
DiffSuppressFunc: compareSelfLinkRelativePaths,
},

"backend_service": &schema.Schema{
Expand Down Expand Up @@ -72,6 +75,13 @@ func resourceComputeForwardingRule() *schema.Resource {
DiffSuppressFunc: compareSelfLinkOrResourceName,
},

"network_tier": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{"PREMIUM", "STANDARD"}, false),
},

"port_range": &schema.Schema{
Type: schema.TypeString,
Optional: true,
Expand Down Expand Up @@ -141,22 +151,23 @@ func resourceComputeForwardingRuleCreate(d *schema.ResourceData, meta interface{
ports = append(ports, v.(string))
}

frule := &compute.ForwardingRule{
frule := &computeBeta.ForwardingRule{
BackendService: d.Get("backend_service").(string),
IPAddress: d.Get("ip_address").(string),
IPProtocol: d.Get("ip_protocol").(string),
Description: d.Get("description").(string),
LoadBalancingScheme: d.Get("load_balancing_scheme").(string),
Name: d.Get("name").(string),
Network: network.RelativeLink(),
NetworkTier: d.Get("network_tier").(string),
PortRange: d.Get("port_range").(string),
Ports: ports,
Subnetwork: d.Get("subnetwork").(string),
Target: d.Get("target").(string),
Target: ConvertSelfLinkToV1(d.Get("target").(string)),
}

log.Printf("[DEBUG] ForwardingRule insert request: %#v", frule)
op, err := config.clientCompute.ForwardingRules.Insert(
op, err := config.clientComputeBeta.ForwardingRules.Insert(
project, region, frule).Do()
if err != nil {
return fmt.Errorf("Error creating ForwardingRule: %s", err)
Expand All @@ -165,7 +176,7 @@ func resourceComputeForwardingRuleCreate(d *schema.ResourceData, meta interface{
// It probably maybe worked, so store the ID now
d.SetId(frule.Name)

err = computeOperationWait(config.clientCompute, op, project, "Creating Fowarding Rule")
err = computeSharedOperationWait(config.clientCompute, op, project, "Creating Fowarding Rule")
if err != nil {
return err
}
Expand Down Expand Up @@ -223,7 +234,7 @@ func resourceComputeForwardingRuleRead(d *schema.ResourceData, meta interface{})
return err
}

frule, err := config.clientCompute.ForwardingRules.Get(
frule, err := config.clientComputeBeta.ForwardingRules.Get(
project, region, d.Id()).Do()
if err != nil {
return handleNotFoundError(err, d, fmt.Sprintf("Forwarding Rule %q", d.Get("name").(string)))
Expand All @@ -235,6 +246,7 @@ func resourceComputeForwardingRuleRead(d *schema.ResourceData, meta interface{})
d.Set("description", frule.Description)
d.Set("load_balancing_scheme", frule.LoadBalancingScheme)
d.Set("network", frule.Network)
d.Set("network_tier", frule.NetworkTier)
d.Set("port_range", frule.PortRange)
d.Set("ports", frule.Ports)
d.Set("project", project)
Expand Down
43 changes: 43 additions & 0 deletions google/resource_compute_forwarding_rule_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,30 @@ func TestAccComputeForwardingRule_internalLoadBalancing(t *testing.T) {
})
}

func TestAccComputeForwardingRule_networkTier(t *testing.T) {
t.Parallel()

poolName := fmt.Sprintf("tf-%s", acctest.RandString(10))
ruleName := fmt.Sprintf("tf-%s", acctest.RandString(10))

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckComputeForwardingRuleDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccComputeForwardingRule_networkTier(poolName, ruleName),
},

resource.TestStep{
ResourceName: "google_compute_forwarding_rule.foobar",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func testAccCheckComputeForwardingRuleDestroy(s *terraform.State) error {
config := testAccProvider.Meta().(*Config)

Expand Down Expand Up @@ -253,3 +277,22 @@ resource "google_compute_forwarding_rule" "foobar2" {
}
`, serviceName, checkName, networkName, ruleName1, ruleName2)
}

func testAccComputeForwardingRule_networkTier(poolName, ruleName string) string {
return fmt.Sprintf(`
resource "google_compute_target_pool" "foobar-tp" {
description = "Resource created for Terraform acceptance testing"
instances = ["us-central1-a/foo", "us-central1-b/bar"]
name = "%s"
}
resource "google_compute_forwarding_rule" "foobar" {
description = "Resource created for Terraform acceptance testing"
ip_protocol = "UDP"
name = "%s"
port_range = "80-81"
target = "${google_compute_target_pool.foobar-tp.self_link}"

network_tier = "STANDARD"
}
`, poolName, ruleName)
}
18 changes: 13 additions & 5 deletions google/resource_compute_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -355,6 +355,12 @@ func resourceComputeInstance() *schema.Resource {
Computed: true,
},

"network_tier": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringInSlice([]string{"PREMIUM", "STANDARD"}, false),
},

// It's unclear why this field exists, as
// nat_ip can be both optional and computed.
// Consider deprecating it.
Expand Down Expand Up @@ -1096,20 +1102,22 @@ func resourceComputeInstanceUpdate(d *schema.ResourceData, meta interface{}) err
accessConfigsCount := d.Get(prefix + ".access_config.#").(int)
for j := 0; j < accessConfigsCount; j++ {
acPrefix := fmt.Sprintf("%s.access_config.%d", prefix, j)
ac := &compute.AccessConfig{
Type: "ONE_TO_ONE_NAT",
NatIP: d.Get(acPrefix + ".nat_ip").(string),
ac := &computeBeta.AccessConfig{
Type: "ONE_TO_ONE_NAT",
NatIP: d.Get(acPrefix + ".nat_ip").(string),
NetworkTier: d.Get(acPrefix + ".network_tier").(string),
}
if ptr, ok := d.GetOk(acPrefix + ".public_ptr_domain_name"); ok && ptr != "" {
ac.SetPublicPtr = true
ac.PublicPtrDomainName = ptr.(string)
}
op, err := config.clientCompute.Instances.AddAccessConfig(

op, err := config.clientComputeBeta.Instances.AddAccessConfig(
project, zone, d.Id(), networkName, ac).Do()
if err != nil {
return fmt.Errorf("Error adding new access_config: %s", err)
}
opErr := computeOperationWaitTime(config.clientCompute, op, project, "new access_config to add", int(d.Timeout(schema.TimeoutUpdate).Minutes()))
opErr := computeSharedOperationWaitTime(config.clientCompute, op, project, int(d.Timeout(schema.TimeoutUpdate).Minutes()), "new access_config to add")
if opErr != nil {
return opErr
}
Expand Down
6 changes: 6 additions & 0 deletions google/resource_compute_instance_template.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (

"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/helper/validation"
computeBeta "google.golang.org/api/compute/v0.beta"
"google.golang.org/api/googleapi"
)
Expand Down Expand Up @@ -237,6 +238,11 @@ func resourceComputeInstanceTemplate() *schema.Resource {
ForceNew: true,
Computed: true,
},
"network_tier": &schema.Schema{
Type: schema.TypeString,
Optional: true,
ValidateFunc: validation.StringInSlice([]string{"PREMIUM", "STANDARD"}, false),
},
// Instance templates will never have an
// 'assigned NAT IP', but we need this in
// the schema to allow us to share flatten
Expand Down
39 changes: 39 additions & 0 deletions google/resource_compute_instance_template_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,26 @@ func TestAccComputeInstanceTemplate_IP(t *testing.T) {
})
}

func TestAccComputeInstanceTemplate_networkTier(t *testing.T) {
t.Parallel()

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckComputeInstanceTemplateDestroy,
Steps: []resource.TestStep{
resource.TestStep{
Config: testAccComputeInstanceTemplate_networkTier(),
},
resource.TestStep{
ResourceName: "google_compute_instance_template.foobar",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func TestAccComputeInstanceTemplate_networkIP(t *testing.T) {
t.Parallel()

Expand Down Expand Up @@ -804,6 +824,25 @@ resource "google_compute_instance_template" "foobar" {
}`, acctest.RandString(10), acctest.RandString(10))
}

func testAccComputeInstanceTemplate_networkTier() string {
return fmt.Sprintf(`
resource "google_compute_instance_template" "foobar" {
name = "instancet-test-%s"
machine_type = "n1-standard-1"

disk {
source_image = "debian-8-jessie-v20160803"
}

network_interface {
network = "default"
access_config {
network_tier = "STANDARD"
}
}
}`, acctest.RandString(10))
}

func testAccComputeInstanceTemplate_networkIP(networkIP string) string {
return fmt.Sprintf(`
resource "google_compute_instance_template" "foobar" {
Expand Down
Loading