Skip to content

Commit 9f99b23

Browse files
Add field httpKeepAliveTimeoutSec to resources google_compute_region_target_http_proxy and google_compute_region_target_https_proxy (#11634) (#8151)
[upstream:9b8f317ddadc86b5fc6d56060cb8b5fbf7324b8f] Signed-off-by: Modular Magician <[email protected]>
1 parent 785df98 commit 9f99b23

11 files changed

+418
-16
lines changed

.changelog/11634.txt

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
```release-note:enhancement
2+
compute: added field `http_keep_alive_timeout_sec` to resource `google_region_compute_target_http_proxy`
3+
```
4+
```release-note:enhancement
5+
compute: added field `http_keep_alive_timeout_sec` to resource `google_region_compute_target_https_proxy`
6+
```

google-beta/services/compute/resource_compute_region_target_http_proxy.go

+40
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,16 @@ to the BackendService.`,
7878
ForceNew: true,
7979
Description: `An optional description of this resource.`,
8080
},
81+
"http_keep_alive_timeout_sec": {
82+
Type: schema.TypeInt,
83+
Optional: true,
84+
ForceNew: true,
85+
Description: `Specifies how long to keep a connection open, after completing a response,
86+
while there is no matching traffic (in seconds). If an HTTP keepalive is
87+
not specified, a default value (600 seconds) will be used. For Regional
88+
HTTP(S) load balancer, the minimum allowed value is 5 seconds and the
89+
maximum allowed value is 600 seconds.`,
90+
},
8191
"region": {
8292
Type: schema.TypeString,
8393
Computed: true,
@@ -138,6 +148,12 @@ func resourceComputeRegionTargetHttpProxyCreate(d *schema.ResourceData, meta int
138148
} else if v, ok := d.GetOkExists("url_map"); !tpgresource.IsEmptyValue(reflect.ValueOf(urlMapProp)) && (ok || !reflect.DeepEqual(v, urlMapProp)) {
139149
obj["urlMap"] = urlMapProp
140150
}
151+
httpKeepAliveTimeoutSecProp, err := expandComputeRegionTargetHttpProxyHttpKeepAliveTimeoutSec(d.Get("http_keep_alive_timeout_sec"), d, config)
152+
if err != nil {
153+
return err
154+
} else if v, ok := d.GetOkExists("http_keep_alive_timeout_sec"); !tpgresource.IsEmptyValue(reflect.ValueOf(httpKeepAliveTimeoutSecProp)) && (ok || !reflect.DeepEqual(v, httpKeepAliveTimeoutSecProp)) {
155+
obj["httpKeepAliveTimeoutSec"] = httpKeepAliveTimeoutSecProp
156+
}
141157
regionProp, err := expandComputeRegionTargetHttpProxyRegion(d.Get("region"), d, config)
142158
if err != nil {
143159
return err
@@ -258,6 +274,9 @@ func resourceComputeRegionTargetHttpProxyRead(d *schema.ResourceData, meta inter
258274
if err := d.Set("url_map", flattenComputeRegionTargetHttpProxyUrlMap(res["urlMap"], d, config)); err != nil {
259275
return fmt.Errorf("Error reading RegionTargetHttpProxy: %s", err)
260276
}
277+
if err := d.Set("http_keep_alive_timeout_sec", flattenComputeRegionTargetHttpProxyHttpKeepAliveTimeoutSec(res["httpKeepAliveTimeoutSec"], d, config)); err != nil {
278+
return fmt.Errorf("Error reading RegionTargetHttpProxy: %s", err)
279+
}
261280
if err := d.Set("region", flattenComputeRegionTargetHttpProxyRegion(res["region"], d, config)); err != nil {
262281
return fmt.Errorf("Error reading RegionTargetHttpProxy: %s", err)
263282
}
@@ -449,6 +468,23 @@ func flattenComputeRegionTargetHttpProxyUrlMap(v interface{}, d *schema.Resource
449468
return tpgresource.ConvertSelfLinkToV1(v.(string))
450469
}
451470

471+
func flattenComputeRegionTargetHttpProxyHttpKeepAliveTimeoutSec(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
472+
// Handles the string fixed64 format
473+
if strVal, ok := v.(string); ok {
474+
if intVal, err := tpgresource.StringToFixed64(strVal); err == nil {
475+
return intVal
476+
}
477+
}
478+
479+
// number values are represented as float64
480+
if floatVal, ok := v.(float64); ok {
481+
intVal := int(floatVal)
482+
return intVal
483+
}
484+
485+
return v // let terraform core handle it otherwise
486+
}
487+
452488
func flattenComputeRegionTargetHttpProxyRegion(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
453489
if v == nil {
454490
return v
@@ -472,6 +508,10 @@ func expandComputeRegionTargetHttpProxyUrlMap(v interface{}, d tpgresource.Terra
472508
return f.RelativeLink(), nil
473509
}
474510

511+
func expandComputeRegionTargetHttpProxyHttpKeepAliveTimeoutSec(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
512+
return v, nil
513+
}
514+
475515
func expandComputeRegionTargetHttpProxyRegion(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
476516
f, err := tpgresource.ParseGlobalFieldValue("regions", v.(string), "project", d, config, true)
477517
if err != nil {

google-beta/services/compute/resource_compute_region_target_http_proxy_generated_test.go

+77
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,83 @@ resource "google_compute_region_health_check" "default" {
104104
`, context)
105105
}
106106

107+
func TestAccComputeRegionTargetHttpProxy_regionTargetHttpProxyHttpKeepAliveTimeoutExample(t *testing.T) {
108+
t.Parallel()
109+
110+
context := map[string]interface{}{
111+
"random_suffix": acctest.RandString(t, 10),
112+
}
113+
114+
acctest.VcrTest(t, resource.TestCase{
115+
PreCheck: func() { acctest.AccTestPreCheck(t) },
116+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
117+
CheckDestroy: testAccCheckComputeRegionTargetHttpProxyDestroyProducer(t),
118+
Steps: []resource.TestStep{
119+
{
120+
Config: testAccComputeRegionTargetHttpProxy_regionTargetHttpProxyHttpKeepAliveTimeoutExample(context),
121+
},
122+
{
123+
ResourceName: "google_compute_region_target_http_proxy.default",
124+
ImportState: true,
125+
ImportStateVerify: true,
126+
ImportStateVerifyIgnore: []string{"region", "url_map"},
127+
},
128+
},
129+
})
130+
}
131+
132+
func testAccComputeRegionTargetHttpProxy_regionTargetHttpProxyHttpKeepAliveTimeoutExample(context map[string]interface{}) string {
133+
return acctest.Nprintf(`
134+
resource "google_compute_region_target_http_proxy" "default" {
135+
region = "us-central1"
136+
name = "tf-test-test-http-keep-alive-timeout-proxy%{random_suffix}"
137+
http_keep_alive_timeout_sec = 600
138+
url_map = google_compute_region_url_map.default.id
139+
}
140+
141+
resource "google_compute_region_url_map" "default" {
142+
region = "us-central1"
143+
name = "tf-test-url-map%{random_suffix}"
144+
default_service = google_compute_region_backend_service.default.id
145+
146+
host_rule {
147+
hosts = ["mysite.com"]
148+
path_matcher = "allpaths"
149+
}
150+
151+
path_matcher {
152+
name = "allpaths"
153+
default_service = google_compute_region_backend_service.default.id
154+
155+
path_rule {
156+
paths = ["/*"]
157+
service = google_compute_region_backend_service.default.id
158+
}
159+
}
160+
}
161+
162+
resource "google_compute_region_backend_service" "default" {
163+
region = "us-central1"
164+
name = "tf-test-backend-service%{random_suffix}"
165+
port_name = "http"
166+
protocol = "HTTP"
167+
timeout_sec = 10
168+
load_balancing_scheme = "INTERNAL_MANAGED"
169+
170+
health_checks = [google_compute_region_health_check.default.id]
171+
}
172+
173+
resource "google_compute_region_health_check" "default" {
174+
region = "us-central1"
175+
name = "tf-test-http-health-check%{random_suffix}"
176+
177+
http_health_check {
178+
port = 80
179+
}
180+
}
181+
`, context)
182+
}
183+
107184
func TestAccComputeRegionTargetHttpProxy_regionTargetHttpProxyHttpsRedirectExample(t *testing.T) {
108185
t.Parallel()
109186

google-beta/services/compute/resource_compute_region_target_https_proxy.go

+40
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,16 @@ Accepted format is '//certificatemanager.googleapis.com/projects/{project}/locat
9292
ForceNew: true,
9393
Description: `An optional description of this resource.`,
9494
},
95+
"http_keep_alive_timeout_sec": {
96+
Type: schema.TypeInt,
97+
Optional: true,
98+
ForceNew: true,
99+
Description: `Specifies how long to keep a connection open, after completing a response,
100+
while there is no matching traffic (in seconds). If an HTTP keepalive is
101+
not specified, a default value (600 seconds) will be used. For Regioanl
102+
HTTP(S) load balancer, the minimum allowed value is 5 seconds and the
103+
maximum allowed value is 600 seconds.`,
104+
},
95105
"region": {
96106
Type: schema.TypeString,
97107
Computed: true,
@@ -209,6 +219,12 @@ func resourceComputeRegionTargetHttpsProxyCreate(d *schema.ResourceData, meta in
209219
} else if v, ok := d.GetOkExists("url_map"); !tpgresource.IsEmptyValue(reflect.ValueOf(urlMapProp)) && (ok || !reflect.DeepEqual(v, urlMapProp)) {
210220
obj["urlMap"] = urlMapProp
211221
}
222+
httpKeepAliveTimeoutSecProp, err := expandComputeRegionTargetHttpsProxyHttpKeepAliveTimeoutSec(d.Get("http_keep_alive_timeout_sec"), d, config)
223+
if err != nil {
224+
return err
225+
} else if v, ok := d.GetOkExists("http_keep_alive_timeout_sec"); !tpgresource.IsEmptyValue(reflect.ValueOf(httpKeepAliveTimeoutSecProp)) && (ok || !reflect.DeepEqual(v, httpKeepAliveTimeoutSecProp)) {
226+
obj["httpKeepAliveTimeoutSec"] = httpKeepAliveTimeoutSecProp
227+
}
212228
serverTlsPolicyProp, err := expandComputeRegionTargetHttpsProxyServerTlsPolicy(d.Get("server_tls_policy"), d, config)
213229
if err != nil {
214230
return err
@@ -361,6 +377,9 @@ func resourceComputeRegionTargetHttpsProxyRead(d *schema.ResourceData, meta inte
361377
if err := d.Set("url_map", flattenComputeRegionTargetHttpsProxyUrlMap(res["urlMap"], d, config)); err != nil {
362378
return fmt.Errorf("Error reading RegionTargetHttpsProxy: %s", err)
363379
}
380+
if err := d.Set("http_keep_alive_timeout_sec", flattenComputeRegionTargetHttpsProxyHttpKeepAliveTimeoutSec(res["httpKeepAliveTimeoutSec"], d, config)); err != nil {
381+
return fmt.Errorf("Error reading RegionTargetHttpsProxy: %s", err)
382+
}
364383
if err := d.Set("server_tls_policy", flattenComputeRegionTargetHttpsProxyServerTlsPolicy(res["serverTlsPolicy"], d, config)); err != nil {
365384
return fmt.Errorf("Error reading RegionTargetHttpsProxy: %s", err)
366385
}
@@ -780,6 +799,23 @@ func flattenComputeRegionTargetHttpsProxyUrlMap(v interface{}, d *schema.Resourc
780799
return tpgresource.ConvertSelfLinkToV1(v.(string))
781800
}
782801

802+
func flattenComputeRegionTargetHttpsProxyHttpKeepAliveTimeoutSec(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
803+
// Handles the string fixed64 format
804+
if strVal, ok := v.(string); ok {
805+
if intVal, err := tpgresource.StringToFixed64(strVal); err == nil {
806+
return intVal
807+
}
808+
}
809+
810+
// number values are represented as float64
811+
if floatVal, ok := v.(float64); ok {
812+
intVal := int(floatVal)
813+
return intVal
814+
}
815+
816+
return v // let terraform core handle it otherwise
817+
}
818+
783819
func flattenComputeRegionTargetHttpsProxyServerTlsPolicy(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
784820
if v == nil {
785821
return v
@@ -859,6 +895,10 @@ func expandComputeRegionTargetHttpsProxyUrlMap(v interface{}, d tpgresource.Terr
859895
return f.RelativeLink(), nil
860896
}
861897

898+
func expandComputeRegionTargetHttpsProxyHttpKeepAliveTimeoutSec(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
899+
return v, nil
900+
}
901+
862902
func expandComputeRegionTargetHttpsProxyServerTlsPolicy(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
863903
return v, nil
864904
}

google-beta/services/compute/resource_compute_region_target_https_proxy_generated_test.go

+87
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,93 @@ resource "google_compute_region_health_check" "default" {
114114
`, context)
115115
}
116116

117+
func TestAccComputeRegionTargetHttpsProxy_regionTargetHttpsProxyHttpKeepAliveTimeoutExample(t *testing.T) {
118+
t.Parallel()
119+
120+
context := map[string]interface{}{
121+
"random_suffix": acctest.RandString(t, 10),
122+
}
123+
124+
acctest.VcrTest(t, resource.TestCase{
125+
PreCheck: func() { acctest.AccTestPreCheck(t) },
126+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
127+
CheckDestroy: testAccCheckComputeRegionTargetHttpsProxyDestroyProducer(t),
128+
Steps: []resource.TestStep{
129+
{
130+
Config: testAccComputeRegionTargetHttpsProxy_regionTargetHttpsProxyHttpKeepAliveTimeoutExample(context),
131+
},
132+
{
133+
ResourceName: "google_compute_region_target_https_proxy.default",
134+
ImportState: true,
135+
ImportStateVerify: true,
136+
ImportStateVerifyIgnore: []string{"region", "server_tls_policy", "ssl_policy", "url_map"},
137+
},
138+
},
139+
})
140+
}
141+
142+
func testAccComputeRegionTargetHttpsProxy_regionTargetHttpsProxyHttpKeepAliveTimeoutExample(context map[string]interface{}) string {
143+
return acctest.Nprintf(`
144+
resource "google_compute_region_target_https_proxy" "default" {
145+
region = "us-central1"
146+
name = "tf-test-test-http-keep-alive-timeout-proxy%{random_suffix}"
147+
http_keep_alive_timeout_sec = 600
148+
url_map = google_compute_region_url_map.default.id
149+
ssl_certificates = [google_compute_region_ssl_certificate.default.id]
150+
}
151+
152+
resource "google_compute_region_ssl_certificate" "default" {
153+
region = "us-central1"
154+
name = "tf-test-my-certificate%{random_suffix}"
155+
private_key = file("test-fixtures/test.key")
156+
certificate = file("test-fixtures/test.crt")
157+
}
158+
159+
resource "google_compute_region_url_map" "default" {
160+
region = "us-central1"
161+
name = "tf-test-url-map%{random_suffix}"
162+
description = "a description"
163+
164+
default_service = google_compute_region_backend_service.default.id
165+
166+
host_rule {
167+
hosts = ["mysite.com"]
168+
path_matcher = "allpaths"
169+
}
170+
171+
path_matcher {
172+
name = "allpaths"
173+
default_service = google_compute_region_backend_service.default.id
174+
175+
path_rule {
176+
paths = ["/*"]
177+
service = google_compute_region_backend_service.default.id
178+
}
179+
}
180+
}
181+
182+
resource "google_compute_region_backend_service" "default" {
183+
region = "us-central1"
184+
name = "tf-test-backend-service%{random_suffix}"
185+
port_name = "http"
186+
protocol = "HTTP"
187+
timeout_sec = 10
188+
load_balancing_scheme = "INTERNAL_MANAGED"
189+
190+
health_checks = [google_compute_region_health_check.default.id]
191+
}
192+
193+
resource "google_compute_region_health_check" "default" {
194+
region = "us-central1"
195+
name = "tf-test-http-health-check%{random_suffix}"
196+
197+
http_health_check {
198+
port = 80
199+
}
200+
}
201+
`, context)
202+
}
203+
117204
func TestAccComputeRegionTargetHttpsProxy_regionTargetHttpsProxyMtlsExample(t *testing.T) {
118205
t.Parallel()
119206

google-beta/services/compute/resource_compute_target_http_proxy.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,13 @@ to the BackendService.`,
8484
ForceNew: true,
8585
Description: `Specifies how long to keep a connection open, after completing a response,
8686
while there is no matching traffic (in seconds). If an HTTP keepalive is
87-
not specified, a default value (610 seconds) will be used. For Global
88-
external HTTP(S) load balancer, the minimum allowed value is 5 seconds and
89-
the maximum allowed value is 1200 seconds. For Global external HTTP(S)
90-
load balancer (classic), this option is not available publicly.`,
87+
not specified, a default value will be used. For Global
88+
external HTTP(S) load balancer, the default value is 610 seconds, the
89+
minimum allowed value is 5 seconds and the maximum allowed value is 1200
90+
seconds. For cross-region internal HTTP(S) load balancer, the default
91+
value is 600 seconds, the minimum allowed value is 5 seconds, and the
92+
maximum allowed value is 600 seconds. For Global external HTTP(S) load
93+
balancer (classic), this option is not available publicly.`,
9194
},
9295
"proxy_bind": {
9396
Type: schema.TypeBool,

google-beta/services/compute/resource_compute_target_https_proxy.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,13 @@ Accepted format is '//certificatemanager.googleapis.com/projects/{project}/locat
109109
ForceNew: true,
110110
Description: `Specifies how long to keep a connection open, after completing a response,
111111
while there is no matching traffic (in seconds). If an HTTP keepalive is
112-
not specified, a default value (610 seconds) will be used. For Global
113-
external HTTP(S) load balancer, the minimum allowed value is 5 seconds and
114-
the maximum allowed value is 1200 seconds. For Global external HTTP(S)
115-
load balancer (classic), this option is not available publicly.`,
112+
not specified, a default value will be used. For Global
113+
external HTTP(S) load balancer, the default value is 610 seconds, the
114+
minimum allowed value is 5 seconds and the maximum allowed value is 1200
115+
seconds. For cross-region internal HTTP(S) load balancer, the default
116+
value is 600 seconds, the minimum allowed value is 5 seconds, and the
117+
maximum allowed value is 600 seconds. For Global external HTTP(S) load
118+
balancer (classic), this option is not available publicly.`,
116119
},
117120
"proxy_bind": {
118121
Type: schema.TypeBool,

0 commit comments

Comments
 (0)