Skip to content

Commit 95a2a5f

Browse files
Adding support for concurrency (#7015) (#13315)
Signed-off-by: Modular Magician <[email protected]> Signed-off-by: Modular Magician <[email protected]>
1 parent 96c85ab commit 95a2a5f

4 files changed

+74
-2
lines changed

.changelog/7015.txt

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
Adding support to 2nd Gen Cloud Functions Terraform Provider for: max_instance_request_concurrency and available_cpu to allow for setting concurrency.
3+
```

google/resource_cloudfunctions2_function.go

+57
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,11 @@ region. If not provided, defaults to the same region as the function.`,
273273
Description: `Whether 100% of traffic is routed to the latest revision. Defaults to true.`,
274274
Default: true,
275275
},
276+
"available_cpu": {
277+
Type: schema.TypeString,
278+
Optional: true,
279+
Description: `The number of CPUs used in a single container instance. Default value is calculated from available memory.`,
280+
},
276281
"available_memory": {
277282
Type: schema.TypeString,
278283
Optional: true,
@@ -299,6 +304,11 @@ supplied the value is interpreted as bytes.`,
299304
Description: `The limit on the maximum number of function instances that may coexist at a
300305
given time.`,
301306
},
307+
"max_instance_request_concurrency": {
308+
Type: schema.TypeInt,
309+
Optional: true,
310+
Description: `Sets the maximum number of concurrent requests that each instance can receive. Defaults to 1.`,
311+
},
302312
"min_instance_count": {
303313
Type: schema.TypeInt,
304314
Optional: true,
@@ -1036,6 +1046,10 @@ func flattenCloudfunctions2functionServiceConfig(v interface{}, d *schema.Resour
10361046
flattenCloudfunctions2functionServiceConfigTimeoutSeconds(original["timeoutSeconds"], d, config)
10371047
transformed["available_memory"] =
10381048
flattenCloudfunctions2functionServiceConfigAvailableMemory(original["availableMemory"], d, config)
1049+
transformed["max_instance_request_concurrency"] =
1050+
flattenCloudfunctions2functionServiceConfigMaxInstanceRequestConcurrency(original["maxInstanceRequestConcurrency"], d, config)
1051+
transformed["available_cpu"] =
1052+
flattenCloudfunctions2functionServiceConfigAvailableCpu(original["availableCpu"], d, config)
10391053
transformed["environment_variables"] =
10401054
flattenCloudfunctions2functionServiceConfigEnvironmentVariables(original["environmentVariables"], d, config)
10411055
transformed["max_instance_count"] =
@@ -1087,6 +1101,27 @@ func flattenCloudfunctions2functionServiceConfigAvailableMemory(v interface{}, d
10871101
return v
10881102
}
10891103

1104+
func flattenCloudfunctions2functionServiceConfigMaxInstanceRequestConcurrency(v interface{}, d *schema.ResourceData, config *Config) interface{} {
1105+
// Handles the string fixed64 format
1106+
if strVal, ok := v.(string); ok {
1107+
if intVal, err := stringToFixed64(strVal); err == nil {
1108+
return intVal
1109+
}
1110+
}
1111+
1112+
// number values are represented as float64
1113+
if floatVal, ok := v.(float64); ok {
1114+
intVal := int(floatVal)
1115+
return intVal
1116+
}
1117+
1118+
return v // let terraform core handle it otherwise
1119+
}
1120+
1121+
func flattenCloudfunctions2functionServiceConfigAvailableCpu(v interface{}, d *schema.ResourceData, config *Config) interface{} {
1122+
return v
1123+
}
1124+
10901125
func flattenCloudfunctions2functionServiceConfigEnvironmentVariables(v interface{}, d *schema.ResourceData, config *Config) interface{} {
10911126
return v
10921127
}
@@ -1629,6 +1664,20 @@ func expandCloudfunctions2functionServiceConfig(v interface{}, d TerraformResour
16291664
transformed["availableMemory"] = transformedAvailableMemory
16301665
}
16311666

1667+
transformedMaxInstanceRequestConcurrency, err := expandCloudfunctions2functionServiceConfigMaxInstanceRequestConcurrency(original["max_instance_request_concurrency"], d, config)
1668+
if err != nil {
1669+
return nil, err
1670+
} else if val := reflect.ValueOf(transformedMaxInstanceRequestConcurrency); val.IsValid() && !isEmptyValue(val) {
1671+
transformed["maxInstanceRequestConcurrency"] = transformedMaxInstanceRequestConcurrency
1672+
}
1673+
1674+
transformedAvailableCpu, err := expandCloudfunctions2functionServiceConfigAvailableCpu(original["available_cpu"], d, config)
1675+
if err != nil {
1676+
return nil, err
1677+
} else if val := reflect.ValueOf(transformedAvailableCpu); val.IsValid() && !isEmptyValue(val) {
1678+
transformed["availableCpu"] = transformedAvailableCpu
1679+
}
1680+
16321681
transformedEnvironmentVariables, err := expandCloudfunctions2functionServiceConfigEnvironmentVariables(original["environment_variables"], d, config)
16331682
if err != nil {
16341683
return nil, err
@@ -1728,6 +1777,14 @@ func expandCloudfunctions2functionServiceConfigAvailableMemory(v interface{}, d
17281777
return v, nil
17291778
}
17301779

1780+
func expandCloudfunctions2functionServiceConfigMaxInstanceRequestConcurrency(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
1781+
return v, nil
1782+
}
1783+
1784+
func expandCloudfunctions2functionServiceConfigAvailableCpu(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
1785+
return v, nil
1786+
}
1787+
17311788
func expandCloudfunctions2functionServiceConfigEnvironmentVariables(v interface{}, d TerraformResourceData, config *Config) (map[string]string, error) {
17321789
if v == nil {
17331790
return map[string]string{}, nil

google/resource_cloudfunctions2_function_generated_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,10 @@ resource "google_cloudfunctions2_function" "function" {
179179
service_config {
180180
max_instance_count = 3
181181
min_instance_count = 1
182-
available_memory = "256M"
182+
available_memory = "4Gi"
183183
timeout_seconds = 60
184+
max_instance_request_concurrency = 80
185+
available_cpu = "4"
184186
environment_variables = {
185187
SERVICE_CONFIG_TEST = "config_test"
186188
}

website/docs/r/cloudfunctions2_function.html.markdown

+11-1
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,10 @@ resource "google_cloudfunctions2_function" "function" {
128128
service_config {
129129
max_instance_count = 3
130130
min_instance_count = 1
131-
available_memory = "256M"
131+
available_memory = "4Gi"
132132
timeout_seconds = 60
133+
max_instance_request_concurrency = 80
134+
available_cpu = "4"
133135
environment_variables = {
134136
SERVICE_CONFIG_TEST = "config_test"
135137
}
@@ -675,6 +677,14 @@ The following arguments are supported:
675677
Defaults to 256M. Supported units are k, M, G, Mi, Gi. If no unit is
676678
supplied the value is interpreted as bytes.
677679

680+
* `max_instance_request_concurrency` -
681+
(Optional)
682+
Sets the maximum number of concurrent requests that each instance can receive. Defaults to 1.
683+
684+
* `available_cpu` -
685+
(Optional)
686+
The number of CPUs used in a single container instance. Default value is calculated from available memory.
687+
678688
* `environment_variables` -
679689
(Optional)
680690
Environment variables that shall be available during function execution.

0 commit comments

Comments
 (0)