Skip to content
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

Added compression_mode field in google_compute_backend_bucket and google_compute_backend_service #12674

Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changelog/6584.txt
@@ -0,0 +1,3 @@
```release-note:enhancement
compute: added support for `compression_mode` field in `google_compute_backend_bucket` and `google_compute_backend_service` resource
```
29 changes: 29 additions & 0 deletions google/resource_compute_backend_bucket.go
Expand Up @@ -195,6 +195,12 @@ header. The actual headers served in responses will not be altered.`,
},
},
},
"compression_mode": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validateEnum([]string{"AUTOMATIC", "DISABLED", ""}),
Description: `Compress text responses using Brotli or gzip compression, based on the client's Accept-Encoding header. Possible values: ["AUTOMATIC", "DISABLED"]`,
},
"custom_response_headers": {
Type: schema.TypeList,
Optional: true,
Expand Down Expand Up @@ -260,6 +266,12 @@ func resourceComputeBackendBucketCreate(d *schema.ResourceData, meta interface{}
} else if v, ok := d.GetOkExists("cdn_policy"); !isEmptyValue(reflect.ValueOf(cdnPolicyProp)) && (ok || !reflect.DeepEqual(v, cdnPolicyProp)) {
obj["cdnPolicy"] = cdnPolicyProp
}
compressionModeProp, err := expandComputeBackendBucketCompressionMode(d.Get("compression_mode"), d, config)
if err != nil {
return err
} else if v, ok := d.GetOkExists("compression_mode"); !isEmptyValue(reflect.ValueOf(compressionModeProp)) && (ok || !reflect.DeepEqual(v, compressionModeProp)) {
obj["compressionMode"] = compressionModeProp
}
edgeSecurityPolicyProp, err := expandComputeBackendBucketEdgeSecurityPolicy(d.Get("edge_security_policy"), d, config)
if err != nil {
return err
Expand Down Expand Up @@ -397,6 +409,9 @@ func resourceComputeBackendBucketRead(d *schema.ResourceData, meta interface{})
if err := d.Set("cdn_policy", flattenComputeBackendBucketCdnPolicy(res["cdnPolicy"], d, config)); err != nil {
return fmt.Errorf("Error reading BackendBucket: %s", err)
}
if err := d.Set("compression_mode", flattenComputeBackendBucketCompressionMode(res["compressionMode"], d, config)); err != nil {
return fmt.Errorf("Error reading BackendBucket: %s", err)
}
if err := d.Set("edge_security_policy", flattenComputeBackendBucketEdgeSecurityPolicy(res["edgeSecurityPolicy"], d, config)); err != nil {
return fmt.Errorf("Error reading BackendBucket: %s", err)
}
Expand Down Expand Up @@ -450,6 +465,12 @@ func resourceComputeBackendBucketUpdate(d *schema.ResourceData, meta interface{}
} else if v, ok := d.GetOkExists("cdn_policy"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, cdnPolicyProp)) {
obj["cdnPolicy"] = cdnPolicyProp
}
compressionModeProp, err := expandComputeBackendBucketCompressionMode(d.Get("compression_mode"), d, config)
if err != nil {
return err
} else if v, ok := d.GetOkExists("compression_mode"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, compressionModeProp)) {
obj["compressionMode"] = compressionModeProp
}
edgeSecurityPolicyProp, err := expandComputeBackendBucketEdgeSecurityPolicy(d.Get("edge_security_policy"), d, config)
if err != nil {
return err
Expand Down Expand Up @@ -828,6 +849,10 @@ func flattenComputeBackendBucketCdnPolicyBypassCacheOnRequestHeadersHeaderName(v
return v
}

func flattenComputeBackendBucketCompressionMode(v interface{}, d *schema.ResourceData, config *Config) interface{} {
return v
}

func flattenComputeBackendBucketEdgeSecurityPolicy(v interface{}, d *schema.ResourceData, config *Config) interface{} {
return v
}
Expand Down Expand Up @@ -1074,6 +1099,10 @@ func expandComputeBackendBucketCdnPolicyBypassCacheOnRequestHeadersHeaderName(v
return v, nil
}

func expandComputeBackendBucketCompressionMode(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
return v, nil
}

func expandComputeBackendBucketEdgeSecurityPolicy(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
return v, nil
}
Expand Down
55 changes: 55 additions & 0 deletions google/resource_compute_backend_bucket_test.go
Expand Up @@ -126,6 +126,45 @@ func TestAccComputeBackendBucket_withSecurityPolicy(t *testing.T) {
})
}

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

backendName := fmt.Sprintf("tf-test-%s", randString(t, 10))
storageName := fmt.Sprintf("tf-test-%s", randString(t, 10))

vcrTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckComputeBackendServiceDestroyProducer(t),
Steps: []resource.TestStep{
{
Config: testAccComputeBackendBucket_withCompressionMode(backendName, storageName, "DISABLED"),
},
{
ResourceName: "google_compute_backend_bucket.foobar",
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccComputeBackendBucket_withCompressionMode(backendName, storageName, "AUTOMATIC"),
},
{
ResourceName: "google_compute_backend_bucket.foobar",
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccComputeBackendBucket_basic(backendName, storageName),
},
{
ResourceName: "google_compute_backend_bucket.foobar",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func testAccComputeBackendBucket_basic(backendName, storageName string) string {
return fmt.Sprintf(`
resource "google_compute_backend_bucket" "foobar" {
Expand Down Expand Up @@ -256,3 +295,19 @@ resource "google_compute_security_policy" "policy" {
}
`, bucketName, polLink, bucketName, polName)
}

func testAccComputeBackendBucket_withCompressionMode(backendName, storageName, compressionMode string) string {
return fmt.Sprintf(`
resource "google_compute_backend_bucket" "foobar" {
name = "%s"
bucket_name = google_storage_bucket.bucket_one.name
enable_cdn = true
compression_mode = "%s"
}

resource "google_storage_bucket" "bucket_one" {
name = "%s"
location = "EU"
}
`, backendName, compressionMode, storageName)
}
29 changes: 29 additions & 0 deletions google/resource_compute_backend_service.go
Expand Up @@ -437,6 +437,12 @@ Defaults to 3.`,
},
},
},
"compression_mode": {
Type: schema.TypeString,
Optional: true,
ValidateFunc: validateEnum([]string{"AUTOMATIC", "DISABLED", ""}),
Description: `Compress text responses using Brotli or gzip compression, based on the client's Accept-Encoding header. Possible values: ["AUTOMATIC", "DISABLED"]`,
},
"connection_draining_timeout_sec": {
Type: schema.TypeInt,
Optional: true,
Expand Down Expand Up @@ -1094,6 +1100,12 @@ func resourceComputeBackendServiceCreate(d *schema.ResourceData, meta interface{
} else if v, ok := d.GetOkExists("circuit_breakers"); !isEmptyValue(reflect.ValueOf(circuitBreakersProp)) && (ok || !reflect.DeepEqual(v, circuitBreakersProp)) {
obj["circuitBreakers"] = circuitBreakersProp
}
compressionModeProp, err := expandComputeBackendServiceCompressionMode(d.Get("compression_mode"), d, config)
if err != nil {
return err
} else if v, ok := d.GetOkExists("compression_mode"); !isEmptyValue(reflect.ValueOf(compressionModeProp)) && (ok || !reflect.DeepEqual(v, compressionModeProp)) {
obj["compressionMode"] = compressionModeProp
}
consistentHashProp, err := expandComputeBackendServiceConsistentHash(d.Get("consistent_hash"), d, config)
if err != nil {
return err
Expand Down Expand Up @@ -1347,6 +1359,9 @@ func resourceComputeBackendServiceRead(d *schema.ResourceData, meta interface{})
if err := d.Set("circuit_breakers", flattenComputeBackendServiceCircuitBreakers(res["circuitBreakers"], d, config)); err != nil {
return fmt.Errorf("Error reading BackendService: %s", err)
}
if err := d.Set("compression_mode", flattenComputeBackendServiceCompressionMode(res["compressionMode"], d, config)); err != nil {
return fmt.Errorf("Error reading BackendService: %s", err)
}
if err := d.Set("consistent_hash", flattenComputeBackendServiceConsistentHash(res["consistentHash"], d, config)); err != nil {
return fmt.Errorf("Error reading BackendService: %s", err)
}
Expand Down Expand Up @@ -1466,6 +1481,12 @@ func resourceComputeBackendServiceUpdate(d *schema.ResourceData, meta interface{
} else if v, ok := d.GetOkExists("circuit_breakers"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, circuitBreakersProp)) {
obj["circuitBreakers"] = circuitBreakersProp
}
compressionModeProp, err := expandComputeBackendServiceCompressionMode(d.Get("compression_mode"), d, config)
if err != nil {
return err
} else if v, ok := d.GetOkExists("compression_mode"); !isEmptyValue(reflect.ValueOf(v)) && (ok || !reflect.DeepEqual(v, compressionModeProp)) {
obj["compressionMode"] = compressionModeProp
}
consistentHashProp, err := expandComputeBackendServiceConsistentHash(d.Get("consistent_hash"), d, config)
if err != nil {
return err
Expand Down Expand Up @@ -1963,6 +1984,10 @@ func flattenComputeBackendServiceCircuitBreakersMaxRetries(v interface{}, d *sch
return v // let terraform core handle it otherwise
}

func flattenComputeBackendServiceCompressionMode(v interface{}, d *schema.ResourceData, config *Config) interface{} {
return v
}

func flattenComputeBackendServiceConsistentHash(v interface{}, d *schema.ResourceData, config *Config) interface{} {
if v == nil {
return nil
Expand Down Expand Up @@ -2985,6 +3010,10 @@ func expandComputeBackendServiceCircuitBreakersMaxRetries(v interface{}, d Terra
return v, nil
}

func expandComputeBackendServiceCompressionMode(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
return v, nil
}

func expandComputeBackendServiceConsistentHash(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
l := v.([]interface{})
if len(l) == 0 || l[0] == nil {
Expand Down
57 changes: 57 additions & 0 deletions google/resource_compute_backend_service_test.go
Expand Up @@ -657,6 +657,45 @@ func TestAccComputeBackendService_trafficDirectorUpdateBasic(t *testing.T) {
})
}

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

backendName := fmt.Sprintf("foo-%s", randString(t, 10))
checkName := fmt.Sprintf("bar-%s", randString(t, 10))

vcrTest(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
CheckDestroy: testAccCheckComputeBackendServiceDestroyProducer(t),
Steps: []resource.TestStep{
{
Config: testAccComputeBackendService_withCompressionMode(backendName, checkName, "DISABLED"),
},
{
ResourceName: "google_compute_backend_service.foobar",
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccComputeBackendService_withCompressionMode(backendName, checkName, "AUTOMATIC"),
},
{
ResourceName: "google_compute_backend_service.foobar",
ImportState: true,
ImportStateVerify: true,
},
{
Config: testAccComputeBackendService_basic(backendName, checkName),
},
{
ResourceName: "google_compute_backend_service.foobar",
ImportState: true,
ImportStateVerify: true,
},
},
})
}

func testAccComputeBackendService_trafficDirectorBasic(serviceName, checkName string) string {
return fmt.Sprintf(`
resource "google_compute_backend_service" "foobar" {
Expand Down Expand Up @@ -1471,3 +1510,21 @@ resource "google_compute_http_health_check" "zero" {
}
`, serviceName, enabled, checkName)
}

func testAccComputeBackendService_withCompressionMode(serviceName, checkName, compressionMode string) string {
return fmt.Sprintf(`
resource "google_compute_backend_service" "foobar" {
name = "%s"
health_checks = [google_compute_http_health_check.zero.self_link]
enable_cdn = true
compression_mode = "%s"
}

resource "google_compute_http_health_check" "zero" {
name = "%s"
request_path = "/"
check_interval_sec = 1
timeout_sec = 1
}
`, serviceName, compressionMode, checkName)
}
5 changes: 5 additions & 0 deletions website/docs/r/compute_backend_bucket.html.markdown
Expand Up @@ -166,6 +166,11 @@ The following arguments are supported:
Cloud CDN configuration for this Backend Bucket.
Structure is [documented below](#nested_cdn_policy).

* `compression_mode` -
(Optional)
Compress text responses using Brotli or gzip compression, based on the client's Accept-Encoding header.
Possible values are `AUTOMATIC` and `DISABLED`.

* `edge_security_policy` -
(Optional)
The security policy associated with this backend bucket.
Expand Down
5 changes: 5 additions & 0 deletions website/docs/r/compute_backend_service.html.markdown
Expand Up @@ -309,6 +309,11 @@ The following arguments are supported:
is applicable only when the load_balancing_scheme is set to INTERNAL_SELF_MANAGED.
Structure is [documented below](#nested_circuit_breakers).

* `compression_mode` -
(Optional)
Compress text responses using Brotli or gzip compression, based on the client's Accept-Encoding header.
Possible values are `AUTOMATIC` and `DISABLED`.

* `consistent_hash` -
(Optional)
Consistent Hash-based load balancing can be used to provide soft session
Expand Down