Skip to content

Commit

Permalink
Added compression_mode field in google_compute_backend_bucket and goo…
Browse files Browse the repository at this point in the history
…gle_compute_backend_service (#6584) (#12674)

Signed-off-by: Modular Magician <magic-modules@google.com>

Signed-off-by: Modular Magician <magic-modules@google.com>
  • Loading branch information
modular-magician committed Sep 28, 2022
1 parent b216734 commit d1f4fa2
Show file tree
Hide file tree
Showing 7 changed files with 183 additions and 0 deletions.
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

0 comments on commit d1f4fa2

Please sign in to comment.