From 3385397392755d91de3cbc44d35d70bc8e5d5ec6 Mon Sep 17 00:00:00 2001 From: Christoph Blecker Date: Tue, 17 Jan 2017 16:32:58 -0800 Subject: [PATCH] Add support for session_affinity to google_compute_region_backend_service --- resource_compute_region_backend_service.go | 14 ++++++ ...rce_compute_region_backend_service_test.go | 50 ++++++++++++++++++- 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/resource_compute_region_backend_service.go b/resource_compute_region_backend_service.go index a12bc39e..8fd3950f 100644 --- a/resource_compute_region_backend_service.go +++ b/resource_compute_region_backend_service.go @@ -82,6 +82,12 @@ func resourceComputeRegionBackendService() *schema.Resource { Computed: true, }, + "session_affinity": &schema.Schema{ + Type: schema.TypeString, + Optional: true, + Computed: true, + }, + "region": &schema.Schema{ Type: schema.TypeString, Optional: true, @@ -129,6 +135,10 @@ func resourceComputeRegionBackendServiceCreate(d *schema.ResourceData, meta inte service.Protocol = v.(string) } + if v, ok := d.GetOk("session_affinity"); ok { + service.SessionAffinity = v.(string) + } + if v, ok := d.GetOk("timeout_sec"); ok { service.TimeoutSec = int64(v.(int)) } @@ -192,6 +202,7 @@ func resourceComputeRegionBackendServiceRead(d *schema.ResourceData, meta interf d.Set("description", service.Description) d.Set("protocol", service.Protocol) + d.Set("session_affinity", service.SessionAffinity) d.Set("timeout_sec", service.TimeoutSec) d.Set("fingerprint", service.Fingerprint) d.Set("self_link", service.SelfLink) @@ -238,6 +249,9 @@ func resourceComputeRegionBackendServiceUpdate(d *schema.ResourceData, meta inte if v, ok := d.GetOk("protocol"); ok { service.Protocol = v.(string) } + if v, ok := d.GetOk("session_affinity"); ok { + service.SessionAffinity = v.(string) + } if v, ok := d.GetOk("timeout_sec"); ok { service.TimeoutSec = int64(v.(int)) } diff --git a/resource_compute_region_backend_service_test.go b/resource_compute_region_backend_service_test.go index 98a7d448..2abd7647 100644 --- a/resource_compute_region_backend_service_test.go +++ b/resource_compute_region_backend_service_test.go @@ -114,6 +114,32 @@ func TestAccComputeRegionBackendService_withBackendAndUpdate(t *testing.T) { } } +func TestAccComputeRegionBackendService_withSessionAffinity(t *testing.T) { + serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10)) + var svc compute.BackendService + + resource.Test(t, resource.TestCase{ + PreCheck: func() { testAccPreCheck(t) }, + Providers: testAccProviders, + CheckDestroy: testAccCheckComputeRegionBackendServiceDestroy, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testAccComputeRegionBackendService_withSessionAffinity( + serviceName, checkName), + Check: resource.ComposeTestCheckFunc( + testAccCheckComputeRegionBackendServiceExists( + "google_compute_region_backend_service.foobar", &svc), + ), + }, + }, + }) + + if svc.SessionAffinity != "CLIENT_IP" { + t.Errorf("Expected Protocol to be CLIENT_IP, got %q", svc.SessionAffinity) + } +} + func testAccCheckComputeRegionBackendServiceDestroy(s *terraform.State) error { config := testAccProvider.Meta().(*Config) @@ -253,10 +279,32 @@ resource "google_compute_health_check" "default" { name = "%s" check_interval_sec = 1 timeout_sec = 1 - + tcp_health_check { } } `, serviceName, timeout, igName, itName, checkName) } + +func testAccComputeRegionBackendService_withSessionAffinity(serviceName, checkName string) string { + return fmt.Sprintf(` +resource "google_compute_region_backend_service" "foobar" { + name = "%s" + health_checks = ["${google_compute_health_check.zero.self_link}"] + region = "us-central1" + session_affinity = "CLIENT_IP" + +} + +resource "google_compute_health_check" "zero" { + name = "%s" + check_interval_sec = 1 + timeout_sec = 1 + + tcp_health_check { + port = "80" + } +} +`, serviceName, checkName) +}