From 24eb54a2166bca3c2d168ab9fb766c9d5e84b12a Mon Sep 17 00:00:00 2001 From: Yanwei Guo Date: Thu, 3 Nov 2022 15:26:44 -0700 Subject: [PATCH 1/2] add grpc probe --- mmv1/products/cloudrun/api.yaml | 43 +++++++++ mmv1/products/cloudrun/terraform.yaml | 6 ++ .../resource_cloud_run_service_test.go.erb | 89 +++++++++++++++++++ 3 files changed, 138 insertions(+) diff --git a/mmv1/products/cloudrun/api.yaml b/mmv1/products/cloudrun/api.yaml index 7578b568f6af..bc17cdf05319 100644 --- a/mmv1/products/cloudrun/api.yaml +++ b/mmv1/products/cloudrun/api.yaml @@ -659,6 +659,7 @@ objects: exactly_one_of: - template.0.spec.0.containers.0.startup_probe.0.tcp_socket - template.0.spec.0.containers.0.startup_probe.0.http_get + - template.0.spec.0.containers.0.startup_probe.0.grpc send_empty_value: true allow_empty_object: true properties: @@ -673,6 +674,7 @@ objects: exactly_one_of: - template.0.spec.0.containers.0.startup_probe.0.tcp_socket - template.0.spec.0.containers.0.startup_probe.0.http_get + - template.0.spec.0.containers.0.startup_probe.0.grpc send_empty_value: true allow_empty_object: true properties: @@ -698,6 +700,27 @@ objects: The header field value. default_value: "" send_empty_value: true + - !ruby/object:Api::Type::NestedObject + name: grpc + description: |- + GRPC specifies an action involving a GRPC port. + exactly_one_of: + - template.0.spec.0.containers.0.startup_probe.0.tcp_socket + - template.0.spec.0.containers.0.startup_probe.0.http_get + - template.0.spec.0.containers.0.startup_probe.0.grpc + send_empty_value: true + allow_empty_object: true + properties: + - !ruby/object:Api::Type::Integer + name: port + description: |- + Port number to access on the container. Number must be in the range 1 to 65535. + - !ruby/object:Api::Type::String + name: service + description: |- + The name of the service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + If this is not specified, the default behavior is defined by gRPC. - !ruby/object:Api::Type::NestedObject name: livenessProbe min_version: beta @@ -760,6 +783,26 @@ objects: The header field value. default_value: "" send_empty_value: true + - !ruby/object:Api::Type::NestedObject + name: grpc + description: |- + GRPC specifies an action involving a GRPC port. + exactly_one_of: + - template.0.spec.0.containers.0.liveness_probe.0.http_get + - template.0.spec.0.containers.0.liveness_probe.0.grpc + send_empty_value: true + allow_empty_object: true + properties: + - !ruby/object:Api::Type::Integer + name: port + description: |- + Port number to access on the container. Number must be in the range 1 to 65535. + - !ruby/object:Api::Type::String + name: service + description: |- + The name of the service to place in the gRPC HealthCheckRequest + (see https://github.com/grpc/grpc/blob/master/doc/health-checking.md). + If this is not specified, the default behavior is defined by gRPC. - !ruby/object:Api::Type::Integer name: containerConcurrency diff --git a/mmv1/products/cloudrun/terraform.yaml b/mmv1/products/cloudrun/terraform.yaml index e0096c7d5c2a..f932652e6f77 100644 --- a/mmv1/products/cloudrun/terraform.yaml +++ b/mmv1/products/cloudrun/terraform.yaml @@ -205,6 +205,12 @@ overrides: !ruby/object:Overrides::ResourceOverrides spec.template.spec.containers.startupProbe.tcpSocket.port: !ruby/object:Overrides::Terraform::PropertyOverride # when port is not specified, container.ports[0].port is a possible default value default_from_api: true + spec.template.spec.containers.startupProbe.grpc.port: !ruby/object:Overrides::Terraform::PropertyOverride + # when port is not specified, container.ports[0].port is a possible default value + default_from_api: true + spec.template.spec.containers.livenessProbe.grpc.port: !ruby/object:Overrides::Terraform::PropertyOverride + # when port is not specified, container.ports[0].port is a possible default value + default_from_api: true # Terraform autofills the only required field in metadata metadata: !ruby/object:Overrides::Terraform::PropertyOverride default_from_api: true diff --git a/mmv1/third_party/terraform/tests/resource_cloud_run_service_test.go.erb b/mmv1/third_party/terraform/tests/resource_cloud_run_service_test.go.erb index 97d55cf6240e..a222ea084156 100644 --- a/mmv1/third_party/terraform/tests/resource_cloud_run_service_test.go.erb +++ b/mmv1/third_party/terraform/tests/resource_cloud_run_service_test.go.erb @@ -408,6 +408,24 @@ func TestAccCloudRunService_probes(t *testing.T) { ImportStateVerify: true, ImportStateVerifyIgnore: []string{"metadata.0.resource_version", "status.0.conditions"}, }, + { + Config: testAccCloudRunService_cloudRunServiceUpdateWithEmptyGRPCLivenessProbe(name, project), + }, + { + ResourceName: "google_cloud_run_service.default", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version", "status.0.conditions"}, + }, + { + Config: testAccCloudRunService_cloudRunServiceUpdateWithGRPCLivenessProbe(name, project), + }, + { + ResourceName: "google_cloud_run_service.default", + ImportState: true, + ImportStateVerify: true, + ImportStateVerifyIgnore: []string{"metadata.0.resource_version", "status.0.conditions"}, + }, }, }) } @@ -588,4 +606,75 @@ resource "google_cloud_run_service" "default" { `, name, project) } +func testAccCloudRunService_cloudRunServiceUpdateWithEmptyGRPCLivenessProbe(name, project string) string { + return fmt.Sprintf(` +resource "google_cloud_run_service" "default" { + name = "%s" + location = "us-central1" + + metadata { + namespace = "%s" + annotations = { + generated-by = "magic-modules" + "run.googleapis.com/launch-stage" = "BETA" + } + } + + template { + spec { + containers { + image = "gcr.io/cloudrun/hello" + liveness_probe { + grpc {} + } + } + } + } + + lifecycle { + ignore_changes = [ + metadata.0.annotations, + ] + } +} +`, name, project) +} + +func testAccCloudRunService_cloudRunServiceUpdateWithGRPCLivenessProbe(name, project string) string { + return fmt.Sprintf(` +resource "google_cloud_run_service" "default" { + name = "%s" + location = "us-central1" + + metadata { + namespace = "%s" + annotations = { + generated-by = "magic-modules" + "run.googleapis.com/launch-stage" = "BETA" + } + } + + template { + spec { + containers { + image = "gcr.io/cloudrun/hello" + liveness_probe { + grpc { + port = 8080 + service = "health" + } + } + } + } + } + + lifecycle { + ignore_changes = [ + metadata.0.annotations, + ] + } +} +`, name, project) +} + <% end -%> From 5b819620411f905a0ef04750d6c4d43257902a3b Mon Sep 17 00:00:00 2001 From: Yanwei Guo Date: Thu, 3 Nov 2022 16:10:05 -0700 Subject: [PATCH 2/2] exactly one-of for http-get --- mmv1/products/cloudrun/api.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mmv1/products/cloudrun/api.yaml b/mmv1/products/cloudrun/api.yaml index bc17cdf05319..b4960efe4de7 100644 --- a/mmv1/products/cloudrun/api.yaml +++ b/mmv1/products/cloudrun/api.yaml @@ -758,6 +758,9 @@ objects: name: httpGet description: |- HttpGet specifies the http request to perform. + exactly_one_of: + - template.0.spec.0.containers.0.liveness_probe.0.http_get + - template.0.spec.0.containers.0.liveness_probe.0.grpc send_empty_value: true allow_empty_object: true properties: