Files
stolzor 5cba142003
terraform / check (push) Waiting to run
Resources and access
2026-10-11 21:04:27 +03:00

113 lines
3.3 KiB
Terraform

variable "infra" {
type = object({
postgres = object({
image = string
admin_user = string
host = string
port = number
internal_host = string
internal_port = number
sslmode = string
})
pgadmin = object({
image = string
port = number
email = string
})
silo = object({
image = string
admin_user = string
host = string
port = number
console_port = number
internal_host = string
internal_port = number
state_bucket = string
backup_bucket = string
})
vault = object({
image = string
host = string
port = number
mount = string
database_mount = string
})
})
}
variable "buckets" {
type = map(object({
versioning = optional(bool, true)
noncurrent_days = optional(number, 30)
expire_days = optional(number)
}))
default = {}
validation {
condition = alltrue([
for name in keys(var.buckets) : can(regex("^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$", name))
])
error_message = "Имя бакета: 3–63 символа, строчные латинские буквы, цифры, точки и дефисы."
}
validation {
condition = contains(keys(var.buckets), var.infra.silo.backup_bucket)
error_message = "Бакет из infra.silo.backup_bucket должен быть описан в buckets."
}
validation {
condition = !contains(keys(var.buckets), var.infra.silo.state_bucket)
error_message = "Бакет из infra.silo.state_bucket создаётся отдельно, в buckets его описывать нельзя."
}
}
variable "databases" {
type = map(object({
pgvector = optional(bool, false)
}))
default = {}
validation {
condition = alltrue([
for name in keys(var.databases) : can(regex("^[a-z_][a-z0-9_]{0,55}$", name))
])
error_message = "Имя базы: до 56 символов, строчные латинские буквы, цифры и подчёркивания, не с цифры."
}
}
variable "services" {
type = map(object({
buckets = optional(map(string), {})
databases = optional(list(string), [])
}))
default = {}
validation {
condition = alltrue(flatten([
for svc in values(var.services) : [for bucket in keys(svc.buckets) : contains(keys(var.buckets), bucket)]
]))
error_message = "Сервис ссылается на бакет, которого нет в buckets."
}
validation {
condition = alltrue(flatten([
for svc in values(var.services) : [for access in values(svc.buckets) : contains(["rw", "ro"], access)]
]))
error_message = "Доступ к бакету: rw или ro."
}
validation {
condition = alltrue(flatten([
for svc in values(var.services) : [for db in svc.databases : contains(keys(var.databases), db)]
]))
error_message = "Сервис ссылается на базу, которой нет в databases."
}
validation {
condition = alltrue(flatten([
for name, svc in var.services : [for db in svc.databases : length("${name}-${db}") <= 63]
]))
error_message = "Имя роли <сервис>-<база> длиннее 63 символов."
}
}