Skip to content

Commit 973a46c

Browse files
author
Paddy
authored
Merge pull request hashicorp#10387 from bpineau/google_session_affinity
provider/google: allow session affinity for compute_backend_service
2 parents ac257b8 + f2a3c5d commit 973a46c

3 files changed

Lines changed: 70 additions & 0 deletions

File tree

builtin/providers/google/resource_compute_backend_service.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,12 @@ func resourceComputeBackendService() *schema.Resource {
128128
Computed: true,
129129
},
130130

131+
"session_affinity": &schema.Schema{
132+
Type: schema.TypeString,
133+
Optional: true,
134+
Computed: true,
135+
},
136+
131137
"timeout_sec": &schema.Schema{
132138
Type: schema.TypeInt,
133139
Optional: true,
@@ -167,6 +173,10 @@ func resourceComputeBackendServiceCreate(d *schema.ResourceData, meta interface{
167173
service.Protocol = v.(string)
168174
}
169175

176+
if v, ok := d.GetOk("session_affinity"); ok {
177+
service.SessionAffinity = v.(string)
178+
}
179+
170180
if v, ok := d.GetOk("timeout_sec"); ok {
171181
service.TimeoutSec = int64(v.(int))
172182
}
@@ -225,6 +235,7 @@ func resourceComputeBackendServiceRead(d *schema.ResourceData, meta interface{})
225235
d.Set("enable_cdn", service.EnableCDN)
226236
d.Set("port_name", service.PortName)
227237
d.Set("protocol", service.Protocol)
238+
d.Set("session_affinity", service.SessionAffinity)
228239
d.Set("timeout_sec", service.TimeoutSec)
229240
d.Set("fingerprint", service.Fingerprint)
230241
d.Set("self_link", service.SelfLink)
@@ -272,6 +283,10 @@ func resourceComputeBackendServiceUpdate(d *schema.ResourceData, meta interface{
272283
service.TimeoutSec = int64(v.(int))
273284
}
274285

286+
if d.HasChange("session_affinity") {
287+
service.SessionAffinity = d.Get("session_affinity").(string)
288+
}
289+
275290
if d.HasChange("enable_cdn") {
276291
service.EnableCDN = d.Get("enable_cdn").(bool)
277292
}

builtin/providers/google/resource_compute_backend_service_test.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,6 +187,40 @@ func TestAccComputeBackendService_withCDNEnabled(t *testing.T) {
187187
}
188188
}
189189

190+
func TestAccComputeBackendService_withSessionAffinity(t *testing.T) {
191+
serviceName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
192+
checkName := fmt.Sprintf("tf-test-%s", acctest.RandString(10))
193+
var svc compute.BackendService
194+
195+
resource.Test(t, resource.TestCase{
196+
PreCheck: func() { testAccPreCheck(t) },
197+
Providers: testAccProviders,
198+
CheckDestroy: testAccCheckComputeBackendServiceDestroy,
199+
Steps: []resource.TestStep{
200+
resource.TestStep{
201+
Config: testAccComputeBackendService_withSessionAffinity(
202+
serviceName, checkName, "CLIENT_IP"),
203+
Check: resource.ComposeTestCheckFunc(
204+
testAccCheckComputeBackendServiceExists(
205+
"google_compute_backend_service.foobar", &svc),
206+
),
207+
},
208+
resource.TestStep{
209+
Config: testAccComputeBackendService_withSessionAffinity(
210+
serviceName, checkName, "GENERATED_COOKIE"),
211+
Check: resource.ComposeTestCheckFunc(
212+
testAccCheckComputeBackendServiceExists(
213+
"google_compute_backend_service.foobar", &svc),
214+
),
215+
},
216+
},
217+
})
218+
219+
if svc.SessionAffinity != "GENERATED_COOKIE" {
220+
t.Errorf("Expected SessionAffinity == \"GENERATED_COOKIE\", got %t", svc.SessionAffinity)
221+
}
222+
}
223+
190224
func testAccComputeBackendService_basic(serviceName, checkName string) string {
191225
return fmt.Sprintf(`
192226
resource "google_compute_backend_service" "foobar" {
@@ -291,3 +325,20 @@ resource "google_compute_http_health_check" "default" {
291325
}
292326
`, serviceName, timeout, igName, itName, checkName)
293327
}
328+
329+
func testAccComputeBackendService_withSessionAffinity(serviceName, checkName, affinityName string) string {
330+
return fmt.Sprintf(`
331+
resource "google_compute_backend_service" "foobar" {
332+
name = "%s"
333+
health_checks = ["${google_compute_http_health_check.zero.self_link}"]
334+
session_affinity = "%s"
335+
}
336+
337+
resource "google_compute_http_health_check" "zero" {
338+
name = "%s"
339+
request_path = "/"
340+
check_interval_sec = 1
341+
timeout_sec = 1
342+
}
343+
`, serviceName, affinityName, checkName)
344+
}

website/source/docs/providers/google/r/compute_backend_service.html.markdown

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,10 @@ The following arguments are supported:
8989
* `region` - (Optional) The Region in which the created address should reside.
9090
If it is not provided, the provider region is used.
9191

92+
* `session_affinity` - (Optional) How to distribute load. Options are "NONE" (no
93+
affinity), "CLIENT\_IP" (hash of the source/dest addresses / ports), and
94+
"GENERATED\_COOKIE" (distribute load using a generated session cookie).
95+
9296
* `timeout_sec` - (Optional) The number of secs to wait for a backend to respond
9397
to a request before considering the request failed. Defaults to `30`.
9498

0 commit comments

Comments
 (0)