Skip to content

Commit ff75441

Browse files
Adds grpc field to liveness_probe and startup_probe to google_cloud_run_v2_service resource (#6987) (#5259)
Signed-off-by: Modular Magician <[email protected]>
1 parent 4407599 commit ff75441

File tree

6 files changed

+541
-5
lines changed

6 files changed

+541
-5
lines changed

.changelog/6987.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
```release-note:enhancement
2+
added `template.0.containers0.liveness_probe.grpc`, `template.0.containers0.startup_probe.grpc` fields to `google_cloud_run_v2_service` resource
3+
```

google-beta/config.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
iamcredentials "google.golang.org/api/iamcredentials/v1"
4343
cloudlogging "google.golang.org/api/logging/v2"
4444
"google.golang.org/api/pubsub/v1"
45+
runadminv2 "google.golang.org/api/run/v2"
4546
runtimeconfig "google.golang.org/api/runtimeconfig/v1beta1"
4647
"google.golang.org/api/servicemanagement/v1"
4748
"google.golang.org/api/servicenetworking/v1"
@@ -1200,6 +1201,20 @@ func (c *Config) NewBigTableProjectsInstancesTablesClient(userAgent string) *big
12001201
return clientBigtableProjectsInstancesTables
12011202
}
12021203

1204+
func (c *Config) NewCloudRunV2Client(userAgent string) *runadminv2.Service {
1205+
runAdminV2ClientBasePath := removeBasePathVersion(removeBasePathVersion(c.CloudRunV2BasePath))
1206+
log.Printf("[INFO] Instantiating Google Cloud Run Admin v2 client for path %s", runAdminV2ClientBasePath)
1207+
clientRunAdminV2, err := runadminv2.NewService(c.context, option.WithHTTPClient(c.client))
1208+
if err != nil {
1209+
log.Printf("[WARN] Error creating client run admin: %s", err)
1210+
return nil
1211+
}
1212+
clientRunAdminV2.UserAgent = userAgent
1213+
clientRunAdminV2.BasePath = runAdminV2ClientBasePath
1214+
1215+
return clientRunAdminV2
1216+
}
1217+
12031218
// staticTokenSource is used to be able to identify static token sources without reflection.
12041219
type staticTokenSource struct {
12051220
oauth2.TokenSource

google-beta/resource_cloud_run_v2_service.go

Lines changed: 209 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ func ResourceCloudRunV2Service() *schema.Resource {
139139
},
140140
"liveness_probe": {
141141
Type: schema.TypeList,
142+
Computed: true,
142143
Optional: true,
143144
Description: `Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes`,
144145
MaxItems: 1,
@@ -150,6 +151,29 @@ func ResourceCloudRunV2Service() *schema.Resource {
150151
Description: `Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.`,
151152
Default: 3,
152153
},
154+
"grpc": {
155+
Type: schema.TypeList,
156+
Optional: true,
157+
Description: `GRPC specifies an action involving a GRPC port.`,
158+
MaxItems: 1,
159+
Elem: &schema.Resource{
160+
Schema: map[string]*schema.Schema{
161+
"port": {
162+
Type: schema.TypeInt,
163+
Computed: true,
164+
Optional: true,
165+
Description: `Port number to access on the container. Number must be in the range 1 to 65535. If not specified, defaults to the same value as container.ports[0].containerPort.`,
166+
},
167+
"service": {
168+
Type: schema.TypeString,
169+
Optional: true,
170+
Description: `The name of the service to place in the gRPC HealthCheckRequest
171+
(see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
172+
If this is not specified, the default behavior is defined by gRPC.`,
173+
},
174+
},
175+
},
176+
},
153177
"http_get": {
154178
Type: schema.TypeList,
155179
Optional: true,
@@ -288,6 +312,29 @@ If omitted, a port number will be chosen and passed to the container through the
288312
Description: `Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1.`,
289313
Default: 3,
290314
},
315+
"grpc": {
316+
Type: schema.TypeList,
317+
Optional: true,
318+
Description: `GRPC specifies an action involving a GRPC port.`,
319+
MaxItems: 1,
320+
Elem: &schema.Resource{
321+
Schema: map[string]*schema.Schema{
322+
"port": {
323+
Type: schema.TypeInt,
324+
Computed: true,
325+
Optional: true,
326+
Description: `Port number to access on the container. Number must be in the range 1 to 65535. If not specified, defaults to the same value as container.ports[0].containerPort.`,
327+
},
328+
"service": {
329+
Type: schema.TypeString,
330+
Optional: true,
331+
Description: `The name of the service to place in the gRPC HealthCheckRequest
332+
(see https://github.com/grpc/grpc/blob/master/doc/health-checking.md).
333+
If this is not specified, the default behavior is defined by gRPC.`,
334+
},
335+
},
336+
},
337+
},
291338
"http_get": {
292339
Type: schema.TypeList,
293340
Optional: true,
@@ -1649,6 +1696,8 @@ func flattenCloudRunV2ServiceTemplateContainersLivenessProbe(v interface{}, d *s
16491696
flattenCloudRunV2ServiceTemplateContainersLivenessProbeHttpGet(original["httpGet"], d, config)
16501697
transformed["tcp_socket"] =
16511698
flattenCloudRunV2ServiceTemplateContainersLivenessProbeTcpSocket(original["tcpSocket"], d, config)
1699+
transformed["grpc"] =
1700+
flattenCloudRunV2ServiceTemplateContainersLivenessProbeGrpc(original["grpc"], d, config)
16521701
return []interface{}{transformed}
16531702
}
16541703
func flattenCloudRunV2ServiceTemplateContainersLivenessProbeInitialDelaySeconds(v interface{}, d *schema.ResourceData, config *Config) interface{} {
@@ -1789,6 +1838,39 @@ func flattenCloudRunV2ServiceTemplateContainersLivenessProbeTcpSocketPort(v inte
17891838
return v // let terraform core handle it otherwise
17901839
}
17911840

1841+
func flattenCloudRunV2ServiceTemplateContainersLivenessProbeGrpc(v interface{}, d *schema.ResourceData, config *Config) interface{} {
1842+
if v == nil {
1843+
return nil
1844+
}
1845+
original := v.(map[string]interface{})
1846+
transformed := make(map[string]interface{})
1847+
transformed["port"] =
1848+
flattenCloudRunV2ServiceTemplateContainersLivenessProbeGrpcPort(original["port"], d, config)
1849+
transformed["service"] =
1850+
flattenCloudRunV2ServiceTemplateContainersLivenessProbeGrpcService(original["service"], d, config)
1851+
return []interface{}{transformed}
1852+
}
1853+
func flattenCloudRunV2ServiceTemplateContainersLivenessProbeGrpcPort(v interface{}, d *schema.ResourceData, config *Config) interface{} {
1854+
// Handles the string fixed64 format
1855+
if strVal, ok := v.(string); ok {
1856+
if intVal, err := stringToFixed64(strVal); err == nil {
1857+
return intVal
1858+
}
1859+
}
1860+
1861+
// number values are represented as float64
1862+
if floatVal, ok := v.(float64); ok {
1863+
intVal := int(floatVal)
1864+
return intVal
1865+
}
1866+
1867+
return v // let terraform core handle it otherwise
1868+
}
1869+
1870+
func flattenCloudRunV2ServiceTemplateContainersLivenessProbeGrpcService(v interface{}, d *schema.ResourceData, config *Config) interface{} {
1871+
return v
1872+
}
1873+
17921874
func flattenCloudRunV2ServiceTemplateContainersStartupProbe(v interface{}, d *schema.ResourceData, config *Config) interface{} {
17931875
if v == nil {
17941876
return nil
@@ -1810,6 +1892,8 @@ func flattenCloudRunV2ServiceTemplateContainersStartupProbe(v interface{}, d *sc
18101892
flattenCloudRunV2ServiceTemplateContainersStartupProbeHttpGet(original["httpGet"], d, config)
18111893
transformed["tcp_socket"] =
18121894
flattenCloudRunV2ServiceTemplateContainersStartupProbeTcpSocket(original["tcpSocket"], d, config)
1895+
transformed["grpc"] =
1896+
flattenCloudRunV2ServiceTemplateContainersStartupProbeGrpc(original["grpc"], d, config)
18131897
return []interface{}{transformed}
18141898
}
18151899
func flattenCloudRunV2ServiceTemplateContainersStartupProbeInitialDelaySeconds(v interface{}, d *schema.ResourceData, config *Config) interface{} {
@@ -1950,6 +2034,39 @@ func flattenCloudRunV2ServiceTemplateContainersStartupProbeTcpSocketPort(v inter
19502034
return v // let terraform core handle it otherwise
19512035
}
19522036

2037+
func flattenCloudRunV2ServiceTemplateContainersStartupProbeGrpc(v interface{}, d *schema.ResourceData, config *Config) interface{} {
2038+
if v == nil {
2039+
return nil
2040+
}
2041+
original := v.(map[string]interface{})
2042+
transformed := make(map[string]interface{})
2043+
transformed["port"] =
2044+
flattenCloudRunV2ServiceTemplateContainersStartupProbeGrpcPort(original["port"], d, config)
2045+
transformed["service"] =
2046+
flattenCloudRunV2ServiceTemplateContainersStartupProbeGrpcService(original["service"], d, config)
2047+
return []interface{}{transformed}
2048+
}
2049+
func flattenCloudRunV2ServiceTemplateContainersStartupProbeGrpcPort(v interface{}, d *schema.ResourceData, config *Config) interface{} {
2050+
// Handles the string fixed64 format
2051+
if strVal, ok := v.(string); ok {
2052+
if intVal, err := stringToFixed64(strVal); err == nil {
2053+
return intVal
2054+
}
2055+
}
2056+
2057+
// number values are represented as float64
2058+
if floatVal, ok := v.(float64); ok {
2059+
intVal := int(floatVal)
2060+
return intVal
2061+
}
2062+
2063+
return v // let terraform core handle it otherwise
2064+
}
2065+
2066+
func flattenCloudRunV2ServiceTemplateContainersStartupProbeGrpcService(v interface{}, d *schema.ResourceData, config *Config) interface{} {
2067+
return v
2068+
}
2069+
19532070
func flattenCloudRunV2ServiceTemplateVolumes(v interface{}, d *schema.ResourceData, config *Config) interface{} {
19542071
if v == nil {
19552072
return v
@@ -2993,6 +3110,13 @@ func expandCloudRunV2ServiceTemplateContainersLivenessProbe(v interface{}, d Ter
29933110
transformed["tcpSocket"] = transformedTcpSocket
29943111
}
29953112

3113+
transformedGrpc, err := expandCloudRunV2ServiceTemplateContainersLivenessProbeGrpc(original["grpc"], d, config)
3114+
if err != nil {
3115+
return nil, err
3116+
} else {
3117+
transformed["grpc"] = transformedGrpc
3118+
}
3119+
29963120
return transformed, nil
29973121
}
29983122

@@ -3112,6 +3236,45 @@ func expandCloudRunV2ServiceTemplateContainersLivenessProbeTcpSocketPort(v inter
31123236
return v, nil
31133237
}
31143238

3239+
func expandCloudRunV2ServiceTemplateContainersLivenessProbeGrpc(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
3240+
l := v.([]interface{})
3241+
if len(l) == 0 {
3242+
return nil, nil
3243+
}
3244+
3245+
if l[0] == nil {
3246+
transformed := make(map[string]interface{})
3247+
return transformed, nil
3248+
}
3249+
raw := l[0]
3250+
original := raw.(map[string]interface{})
3251+
transformed := make(map[string]interface{})
3252+
3253+
transformedPort, err := expandCloudRunV2ServiceTemplateContainersLivenessProbeGrpcPort(original["port"], d, config)
3254+
if err != nil {
3255+
return nil, err
3256+
} else if val := reflect.ValueOf(transformedPort); val.IsValid() && !isEmptyValue(val) {
3257+
transformed["port"] = transformedPort
3258+
}
3259+
3260+
transformedService, err := expandCloudRunV2ServiceTemplateContainersLivenessProbeGrpcService(original["service"], d, config)
3261+
if err != nil {
3262+
return nil, err
3263+
} else if val := reflect.ValueOf(transformedService); val.IsValid() && !isEmptyValue(val) {
3264+
transformed["service"] = transformedService
3265+
}
3266+
3267+
return transformed, nil
3268+
}
3269+
3270+
func expandCloudRunV2ServiceTemplateContainersLivenessProbeGrpcPort(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
3271+
return v, nil
3272+
}
3273+
3274+
func expandCloudRunV2ServiceTemplateContainersLivenessProbeGrpcService(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
3275+
return v, nil
3276+
}
3277+
31153278
func expandCloudRunV2ServiceTemplateContainersStartupProbe(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
31163279
l := v.([]interface{})
31173280
if len(l) == 0 || l[0] == nil {
@@ -3163,6 +3326,13 @@ func expandCloudRunV2ServiceTemplateContainersStartupProbe(v interface{}, d Terr
31633326
transformed["tcpSocket"] = transformedTcpSocket
31643327
}
31653328

3329+
transformedGrpc, err := expandCloudRunV2ServiceTemplateContainersStartupProbeGrpc(original["grpc"], d, config)
3330+
if err != nil {
3331+
return nil, err
3332+
} else {
3333+
transformed["grpc"] = transformedGrpc
3334+
}
3335+
31663336
return transformed, nil
31673337
}
31683338

@@ -3282,6 +3452,45 @@ func expandCloudRunV2ServiceTemplateContainersStartupProbeTcpSocketPort(v interf
32823452
return v, nil
32833453
}
32843454

3455+
func expandCloudRunV2ServiceTemplateContainersStartupProbeGrpc(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
3456+
l := v.([]interface{})
3457+
if len(l) == 0 {
3458+
return nil, nil
3459+
}
3460+
3461+
if l[0] == nil {
3462+
transformed := make(map[string]interface{})
3463+
return transformed, nil
3464+
}
3465+
raw := l[0]
3466+
original := raw.(map[string]interface{})
3467+
transformed := make(map[string]interface{})
3468+
3469+
transformedPort, err := expandCloudRunV2ServiceTemplateContainersStartupProbeGrpcPort(original["port"], d, config)
3470+
if err != nil {
3471+
return nil, err
3472+
} else if val := reflect.ValueOf(transformedPort); val.IsValid() && !isEmptyValue(val) {
3473+
transformed["port"] = transformedPort
3474+
}
3475+
3476+
transformedService, err := expandCloudRunV2ServiceTemplateContainersStartupProbeGrpcService(original["service"], d, config)
3477+
if err != nil {
3478+
return nil, err
3479+
} else if val := reflect.ValueOf(transformedService); val.IsValid() && !isEmptyValue(val) {
3480+
transformed["service"] = transformedService
3481+
}
3482+
3483+
return transformed, nil
3484+
}
3485+
3486+
func expandCloudRunV2ServiceTemplateContainersStartupProbeGrpcPort(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
3487+
return v, nil
3488+
}
3489+
3490+
func expandCloudRunV2ServiceTemplateContainersStartupProbeGrpcService(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
3491+
return v, nil
3492+
}
3493+
32853494
func expandCloudRunV2ServiceTemplateVolumes(v interface{}, d TerraformResourceData, config *Config) (interface{}, error) {
32863495
l := v.([]interface{})
32873496
req := make([]interface{}, 0, len(l))

0 commit comments

Comments
 (0)