Skip to content

Commit 65db056

Browse files
compute: add request_headers and response_headers to log_config on backend service (#18293) (#12746)
[upstream:54fe8076326bbe4efd31438f995fb55f36e541e6] Signed-off-by: Modular Magician <magic-modules@google.com>
1 parent e97ab1c commit 65db056

9 files changed

Lines changed: 482 additions & 0 deletions

.changelog/18293.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
compute: added `request_headers` and `response_headers` fields to `log_config` on `google_compute_backend_service` and `google_compute_region_backend_service` resources
3+
```

google-beta/services/compute/resource_compute_backend_service.go

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1076,6 +1076,34 @@ For example: orca_load_report, tls.protocol`,
10761076
Supported values: INCLUDE_ALL_OPTIONAL, EXCLUDE_ALL_OPTIONAL, CUSTOM. Possible values: ["INCLUDE_ALL_OPTIONAL", "EXCLUDE_ALL_OPTIONAL", "CUSTOM"]`,
10771077
AtLeastOneOf: []string{"log_config.0.enable", "log_config.0.optional_mode", "log_config.0.sample_rate"},
10781078
},
1079+
"request_headers": {
1080+
Type: schema.TypeList,
1081+
Optional: true,
1082+
Description: `This field can only be specified if logging is enabled for this backend service and if the BackendService protocol is one of HTTP, HTTPS, HTTP2 and GRPC. Contains a list of request headers to be logged.`,
1083+
Elem: &schema.Resource{
1084+
Schema: map[string]*schema.Schema{
1085+
"header_name": {
1086+
Type: schema.TypeString,
1087+
Required: true,
1088+
Description: `The header name to match on for logging.`,
1089+
},
1090+
},
1091+
},
1092+
},
1093+
"response_headers": {
1094+
Type: schema.TypeList,
1095+
Optional: true,
1096+
Description: `This field can only be specified if logging is enabled for this backend service and if the BackendService protocol is one of HTTP, HTTPS, HTTP2 and GRPC. Contains a list of response headers to be logged.`,
1097+
Elem: &schema.Resource{
1098+
Schema: map[string]*schema.Schema{
1099+
"header_name": {
1100+
Type: schema.TypeString,
1101+
Required: true,
1102+
Description: `The header name to match on for logging.`,
1103+
},
1104+
},
1105+
},
1106+
},
10791107
"sample_rate": {
10801108
Type: schema.TypeFloat,
10811109
Optional: true,
@@ -4214,6 +4242,10 @@ func flattenComputeBackendServiceLogConfig(v interface{}, d *schema.ResourceData
42144242
flattenComputeBackendServiceLogConfigOptionalMode(original["optionalMode"], d, config)
42154243
transformed["optional_fields"] =
42164244
flattenComputeBackendServiceLogConfigOptionalFields(original["optionalFields"], d, config)
4245+
transformed["request_headers"] =
4246+
flattenComputeBackendServiceLogConfigRequestHeaders(original["loggingHttpRequestHeaders"], d, config)
4247+
transformed["response_headers"] =
4248+
flattenComputeBackendServiceLogConfigResponseHeaders(original["loggingHttpResponseHeaders"], d, config)
42174249
return []interface{}{transformed}
42184250
}
42194251
func flattenComputeBackendServiceLogConfigEnable(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
@@ -4232,6 +4264,50 @@ func flattenComputeBackendServiceLogConfigOptionalFields(v interface{}, d *schem
42324264
return v
42334265
}
42344266

4267+
func flattenComputeBackendServiceLogConfigRequestHeaders(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
4268+
if v == nil {
4269+
return v
4270+
}
4271+
l := v.([]interface{})
4272+
transformed := make([]interface{}, 0, len(l))
4273+
for _, raw := range l {
4274+
original := raw.(map[string]interface{})
4275+
if len(original) < 1 {
4276+
// Do not include empty json objects coming back from the api
4277+
continue
4278+
}
4279+
transformed = append(transformed, map[string]interface{}{
4280+
"header_name": flattenComputeBackendServiceLogConfigRequestHeadersHeaderName(original["headerName"], d, config),
4281+
})
4282+
}
4283+
return transformed
4284+
}
4285+
func flattenComputeBackendServiceLogConfigRequestHeadersHeaderName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
4286+
return v
4287+
}
4288+
4289+
func flattenComputeBackendServiceLogConfigResponseHeaders(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
4290+
if v == nil {
4291+
return v
4292+
}
4293+
l := v.([]interface{})
4294+
transformed := make([]interface{}, 0, len(l))
4295+
for _, raw := range l {
4296+
original := raw.(map[string]interface{})
4297+
if len(original) < 1 {
4298+
// Do not include empty json objects coming back from the api
4299+
continue
4300+
}
4301+
transformed = append(transformed, map[string]interface{}{
4302+
"header_name": flattenComputeBackendServiceLogConfigResponseHeadersHeaderName(original["headerName"], d, config),
4303+
})
4304+
}
4305+
return transformed
4306+
}
4307+
func flattenComputeBackendServiceLogConfigResponseHeadersHeaderName(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
4308+
return v
4309+
}
4310+
42354311
func flattenComputeBackendServiceServiceLbPolicy(v interface{}, d *schema.ResourceData, config *transport_tpg.Config) interface{} {
42364312
return v
42374313
}
@@ -5888,6 +5964,20 @@ func expandComputeBackendServiceLogConfig(v interface{}, d tpgresource.Terraform
58885964
transformed["optionalFields"] = transformedOptionalFields
58895965
}
58905966

5967+
transformedRequestHeaders, err := expandComputeBackendServiceLogConfigRequestHeaders(original["request_headers"], d, config)
5968+
if err != nil {
5969+
return nil, err
5970+
} else if val := reflect.ValueOf(transformedRequestHeaders); val.IsValid() && !tpgresource.IsEmptyValue(val) {
5971+
transformed["loggingHttpRequestHeaders"] = transformedRequestHeaders
5972+
}
5973+
5974+
transformedResponseHeaders, err := expandComputeBackendServiceLogConfigResponseHeaders(original["response_headers"], d, config)
5975+
if err != nil {
5976+
return nil, err
5977+
} else if val := reflect.ValueOf(transformedResponseHeaders); val.IsValid() && !tpgresource.IsEmptyValue(val) {
5978+
transformed["loggingHttpResponseHeaders"] = transformedResponseHeaders
5979+
}
5980+
58915981
return transformed, nil
58925982
}
58935983

@@ -5907,6 +5997,64 @@ func expandComputeBackendServiceLogConfigOptionalFields(v interface{}, d tpgreso
59075997
return v, nil
59085998
}
59095999

6000+
func expandComputeBackendServiceLogConfigRequestHeaders(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
6001+
if v == nil {
6002+
return nil, nil
6003+
}
6004+
l := v.([]interface{})
6005+
req := make([]interface{}, 0, len(l))
6006+
for _, raw := range l {
6007+
if raw == nil {
6008+
continue
6009+
}
6010+
original := raw.(map[string]interface{})
6011+
transformed := make(map[string]interface{})
6012+
6013+
transformedHeaderName, err := expandComputeBackendServiceLogConfigRequestHeadersHeaderName(original["header_name"], d, config)
6014+
if err != nil {
6015+
return nil, err
6016+
} else if val := reflect.ValueOf(transformedHeaderName); val.IsValid() && !tpgresource.IsEmptyValue(val) {
6017+
transformed["headerName"] = transformedHeaderName
6018+
}
6019+
6020+
req = append(req, transformed)
6021+
}
6022+
return req, nil
6023+
}
6024+
6025+
func expandComputeBackendServiceLogConfigRequestHeadersHeaderName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
6026+
return v, nil
6027+
}
6028+
6029+
func expandComputeBackendServiceLogConfigResponseHeaders(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
6030+
if v == nil {
6031+
return nil, nil
6032+
}
6033+
l := v.([]interface{})
6034+
req := make([]interface{}, 0, len(l))
6035+
for _, raw := range l {
6036+
if raw == nil {
6037+
continue
6038+
}
6039+
original := raw.(map[string]interface{})
6040+
transformed := make(map[string]interface{})
6041+
6042+
transformedHeaderName, err := expandComputeBackendServiceLogConfigResponseHeadersHeaderName(original["header_name"], d, config)
6043+
if err != nil {
6044+
return nil, err
6045+
} else if val := reflect.ValueOf(transformedHeaderName); val.IsValid() && !tpgresource.IsEmptyValue(val) {
6046+
transformed["headerName"] = transformedHeaderName
6047+
}
6048+
6049+
req = append(req, transformed)
6050+
}
6051+
return req, nil
6052+
}
6053+
6054+
func expandComputeBackendServiceLogConfigResponseHeadersHeaderName(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
6055+
return v, nil
6056+
}
6057+
59106058
func expandComputeBackendServiceServiceLbPolicy(v interface{}, d tpgresource.TerraformResourceData, config *transport_tpg.Config) (interface{}, error) {
59116059
return v, nil
59126060
}

google-beta/services/compute/resource_compute_backend_service_generated_meta.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ fields:
108108
- api_field: logConfig.enable
109109
- api_field: logConfig.optionalFields
110110
- api_field: logConfig.optionalMode
111+
- api_field: logConfig.loggingHttpRequestHeaders.headerName
112+
field: log_config.request_headers.header_name
113+
- api_field: logConfig.loggingHttpResponseHeaders.headerName
114+
field: log_config.response_headers.header_name
111115
- api_field: logConfig.sampleRate
112116
- api_field: maxStreamDuration.nanos
113117
- api_field: maxStreamDuration.seconds

google-beta/services/compute/resource_compute_backend_service_test.go

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -875,6 +875,37 @@ func TestAccComputeBackendService_withLogConfigMode(t *testing.T) {
875875
})
876876
}
877877

878+
func TestAccComputeBackendService_withLogConfigRequestResponseHeaders(t *testing.T) {
879+
t.Parallel()
880+
881+
serviceName := fmt.Sprintf("tf-test-lc-%s", acctest.RandString(t, 10))
882+
checkName := fmt.Sprintf("tf-test-lc-%s", acctest.RandString(t, 10))
883+
884+
acctest.VcrTest(t, resource.TestCase{
885+
PreCheck: func() { acctest.AccTestPreCheck(t) },
886+
ProtoV5ProviderFactories: acctest.ProtoV5ProviderFactories(t),
887+
CheckDestroy: testAccCheckComputeBackendServiceDestroyProducer(t),
888+
Steps: []resource.TestStep{
889+
{
890+
Config: testAccComputeBackendService_withLogConfigRequestResponseHeaders(serviceName, checkName, "X-Request-Id", "X-Response-Id"),
891+
},
892+
{
893+
ResourceName: "google_compute_backend_service.foobar",
894+
ImportState: true,
895+
ImportStateVerify: true,
896+
},
897+
{
898+
Config: testAccComputeBackendService_withLogConfigRequestResponseHeaders(serviceName, checkName, "X-Request-Id-Updated", "X-Response-Id-Updated"),
899+
},
900+
{
901+
ResourceName: "google_compute_backend_service.foobar",
902+
ImportState: true,
903+
ImportStateVerify: true,
904+
},
905+
},
906+
})
907+
}
908+
878909
func TestAccComputeBackendService_trafficDirectorUpdateBasic(t *testing.T) {
879910
t.Parallel()
880911

@@ -2526,6 +2557,38 @@ resource "google_compute_health_check" "zero" {
25262557
`, serviceName, enabled, mode, checkName)
25272558
}
25282559

2560+
func testAccComputeBackendService_withLogConfigRequestResponseHeaders(serviceName, checkName, reqHeader, respHeader string) string {
2561+
return fmt.Sprintf(`
2562+
resource "google_compute_backend_service" "foobar" {
2563+
name = "%s"
2564+
protocol = "HTTP"
2565+
load_balancing_scheme = "INTERNAL_MANAGED"
2566+
health_checks = [google_compute_health_check.zero.self_link]
2567+
2568+
log_config {
2569+
enable = true
2570+
sample_rate = 0.5
2571+
request_headers {
2572+
header_name = "%s"
2573+
}
2574+
response_headers {
2575+
header_name = "%s"
2576+
}
2577+
}
2578+
}
2579+
2580+
resource "google_compute_health_check" "zero" {
2581+
name = "%s"
2582+
check_interval_sec = 1
2583+
timeout_sec = 1
2584+
2585+
http_health_check {
2586+
port = 80
2587+
}
2588+
}
2589+
`, serviceName, reqHeader, respHeader, checkName)
2590+
}
2591+
25292592
func testAccComputeBackendService_withCompressionMode(serviceName, checkName, compressionMode string) string {
25302593
return fmt.Sprintf(`
25312594
resource "google_compute_backend_service" "foobar" {

0 commit comments

Comments
 (0)