
/**
 * 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 "audit_log_triggers" {
  description = "Event arc triggers (Audit log)."
  type = list(object({
    service_name = string
    method_name  = string
  }))
  default = null
}

variable "containers" {
  description = "Containers."
  type = list(object({
    image = string
    options = object({
      command = list(string)
      args    = list(string)
      env     = map(string)
      env_from = map(object({
        key  = string
        name = string
      }))
    })
    resources = object({
      limits = object({
        cpu    = string
        memory = string
      })
      requests = object({
        cpu    = string
        memory = string
      })
    })
    ports = list(object({
      name           = string
      protocol       = string
      container_port = string
    }))
    volume_mounts = map(string)
  }))
}

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
}

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 "pubsub_triggers" {
  description = "Eventarc triggers (Pub/Sub)."
  type        = list(string)
  default     = null
}

variable "region" {
  description = "Region used for all resources."
  type        = string
  default     = "europe-west1"
}

variable "revision_annotations" {
  description = "Configure revision template annotations."
  type = object({
    autoscaling = object({
      max_scale = number
      min_scale = number
    })
    cloudsql_instances  = list(string)
    vpcaccess_connector = string
    vpcaccess_egress    = string
  })
  default = null
}

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 "traffic" {
  description = "Traffic."
  type        = map(number)
  default     = null
}

variable "volumes" {
  description = "Volumes."
  type = list(object({
    name        = string
    secret_name = string
    items = list(object({
      key  = string
      path = string
    }))
  }))
  default = null
}

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 = string
    name          = string
    vpc_self_link = string
  })
  default = null
}
