/** * Copyright 2022 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ variable "container_concurrency" { description = "Maximum allowed in-flight (concurrent) requests per container of the revision." type = string default = null } variable "containers" { description = "Containers in arbitrary key => attributes format." type = map(object({ image = string args = optional(list(string)) command = optional(list(string)) env = optional(map(string), {}) env_from_key = optional(map(object({ key = string name = string })), {}) liveness_probe = optional(object({ action = object({ grpc = optional(object({ port = optional(number) service = optional(string) })) http_get = optional(object({ http_headers = optional(map(string), {}) path = optional(string) })) }) failure_threshold = optional(number) initial_delay_seconds = optional(number) period_seconds = optional(number) timeout_seconds = optional(number) })) ports = optional(map(object({ container_port = optional(number) name = optional(string) protocol = optional(string) })), {}) resources = optional(object({ limits = optional(object({ cpu = string memory = string })) requests = optional(object({ cpu = string memory = string })) })) startup_probe = optional(object({ action = object({ grpc = optional(object({ port = optional(number) service = optional(string) })) http_get = optional(object({ http_headers = optional(map(string), {}) path = optional(string) })) tcp_socket = optional(object({ port = optional(number) })) }) failure_threshold = optional(number) initial_delay_seconds = optional(number) period_seconds = optional(number) timeout_seconds = optional(number) })) volume_mounts = optional(map(string), {}) })) default = {} nullable = false } variable "eventarc_triggers" { description = "Event arc triggers for different sources." type = object({ audit_log = optional(map(object({ method = string service = string })), {}) pubsub = optional(map(string), {}) service_account_email = optional(string) service_account_create = optional(bool, false) }) default = {} validation { condition = ( var.eventarc_triggers.service_account_email == null && length(var.eventarc_triggers.audit_log) == 0 ) || ( var.eventarc_triggers.service_account_email != null ) error_message = "service_account_email is required if providing audit_log" } } variable "gen2_execution_environment" { description = "Use second generation execution environment." type = bool default = false } variable "iam" { description = "IAM bindings for Cloud Run service in {ROLE => [MEMBERS]} format." type = map(list(string)) default = {} } variable "ingress_settings" { description = "Ingress settings." type = string default = null validation { condition = contains( ["all", "internal", "internal-and-cloud-load-balancing"], coalesce(var.ingress_settings, "all") ) error_message = "Ingress settings can be one of 'all', 'internal', 'internal-and-cloud-load-balancing'." } } variable "labels" { description = "Resource labels." type = map(string) default = {} } variable "name" { description = "Name used for cloud run service." type = string } variable "prefix" { description = "Optional prefix used for resource names." type = string default = null validation { condition = var.prefix != "" error_message = "Prefix cannot be empty, please use null instead." } } variable "project_id" { description = "Project id used for all resources." type = string } variable "region" { description = "Region used for all resources." type = string default = "europe-west1" } variable "revision_annotations" { description = "Configure revision template annotations." type = object({ autoscaling = optional(object({ max_scale = number min_scale = number })) cloudsql_instances = optional(list(string), []) vpcaccess_connector = optional(string) vpcaccess_egress = optional(string) }) default = {} nullable = false } variable "revision_name" { description = "Revision name." type = string default = null } variable "service_account" { description = "Service account email. Unused if service account is auto-created." type = string default = null } variable "service_account_create" { description = "Auto-create service account." type = bool default = false } variable "startup_cpu_boost" { description = "Enable startup cpu boost." type = bool default = false } variable "timeout_seconds" { description = "Maximum duration the instance is allowed for responding to a request." type = number default = null } variable "traffic" { description = "Traffic steering configuration. If revision name is null the latest revision will be used." type = map(object({ percent = number latest = optional(bool) tag = optional(string) })) default = {} nullable = false } variable "volumes" { description = "Named volumes in containers in name => attributes format." type = map(object({ secret_name = string default_mode = optional(string) items = optional(map(object({ path = string mode = optional(string) }))) })) default = {} nullable = false } variable "vpc_connector_create" { description = "Populate this to create a VPC connector. You can then refer to it in the template annotations." type = object({ ip_cidr_range = optional(string) vpc_self_link = optional(string) machine_type = optional(string) name = optional(string) instances = optional(object({ max = optional(number) min = optional(number) }), {}) throughput = optional(object({ max = optional(number) min = optional(number) }), {}) subnet = optional(object({ name = optional(string) project_id = optional(string) }), {}) }) default = null }