Resources and access
terraform / check (push) Waiting to run

This commit is contained in:
stolzor committed 2026-10-11 21:04:27 +03:00
1 parent 64be99308b
commit 5cba142003
38 files changed
+565 -353

No files matched your search

+67 -15
View File
@@ -7,6 +7,7 @@ variable "infra" {
port = number
internal_host = string
internal_port = number
sslmode = string
})
pgadmin = object({
image = string
@@ -34,27 +35,78 @@ variable "infra" {
})
}
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({
postgres = optional(object({
username = string
name = string
sslmode = optional(string, "disable")
pgvector = optional(bool, false)
}))
buckets = optional(map(object({
versioning = optional(bool, true)
noncurrent_days = optional(number, 30)
})), {})
buckets = optional(map(string), {})
databases = optional(list(string), [])
}))
default = {}
validation {
condition = alltrue(flatten([
for svc in values(var.services) : [
for name in keys(svc.buckets) :
can(regex("^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$", name))
]
for svc in values(var.services) : [for bucket in keys(svc.buckets) : contains(keys(var.buckets), bucket)]
]))
error_message = "Имя бакета: 3–63 символа, строчные латинские буквы, цифры, точки и дефисы."
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 символов."
}
}