test terragrunt ci

This commit is contained in:
Work 2026-01-28 15:25:49 +03:00
parent 6fbcc864d8
commit 54e27e3840
4 changed files with 29 additions and 25 deletions

View File

@ -28,14 +28,18 @@ environments:
- name: pulse-s3-secret - name: pulse-s3-secret
namespace: pulse namespace: pulse
type: s3 type: s3
dependencies:
bucket: pulse-stage
lifecycle: lifecycle:
ignore_changes: false ignore_changes: false
- name: testci-s3-secret - name: testci-s3-secret
namespace: testci namespace: testci
type: s3 type: s3
dependencies:
bucket: testci-stage
lifecycle: lifecycle:
ignore_changes: true ignore_changes: false
- name: pulse-postgresql-secret - name: pulse-postgresql-secret
namespace: pulse namespace: pulse

View File

@ -11,11 +11,8 @@ include "env" {
dependency "namespace" { dependency "namespace" {
config_path = "../namespace" config_path = "../namespace"
mock_outputs = { mock_outputs = {
namespaces = { namespaces = {}
"pulse" = { name = "pulse", id = "mock-id-1" } names = []
"block-analyzer" = { name = "block-analyzer", id = "mock-id-2" }
}
names = ["pulse", "block-analyzer"]
} }
mock_outputs_allowed_terraform_commands = ["init", "validate", "plan"] mock_outputs_allowed_terraform_commands = ["init", "validate", "plan"]
skip_outputs = get_env("TG_SKIP_DEPENDENCY_OUTPUTS", "false") == "true" skip_outputs = get_env("TG_SKIP_DEPENDENCY_OUTPUTS", "false") == "true"
@ -24,9 +21,10 @@ dependency "namespace" {
dependency "s3" { dependency "s3" {
config_path = "../s3" config_path = "../s3"
mock_outputs = { mock_outputs = {
bucket_name = "pulse-stage" bucket_name = "mock-bucket"
access_key = "mock-access-key" access_key = "mock-access-key"
secret_key = "mock-secret-key" secret_key = "mock-secret-key"
buckets = {}
} }
mock_outputs_allowed_terraform_commands = ["init", "validate", "plan"] mock_outputs_allowed_terraform_commands = ["init", "validate", "plan"]
skip_outputs = get_env("TG_SKIP_DEPENDENCY_OUTPUTS", "false") == "true" skip_outputs = get_env("TG_SKIP_DEPENDENCY_OUTPUTS", "false") == "true"
@ -35,20 +33,7 @@ dependency "s3" {
dependency "database" { dependency "database" {
config_path = "../database" config_path = "../database"
mock_outputs = { mock_outputs = {
database_outputs_map = { database_outputs_map = {}
"c9qa2coo5ukgcg93fldm:pulse_db:pulse" = {
host = "mock-host.example.com"
database_name = "pulse_db"
user_name = "pulse"
password = "mock-password"
}
"c9qa2coo5ukgcg93fldm:analyzer_db:analyzer" = {
host = "mock-host.example.com"
database_name = "analyzer_db"
user_name = "analyzer"
password = "mock-password"
}
}
} }
mock_outputs_allowed_terraform_commands = ["init", "validate", "plan"] mock_outputs_allowed_terraform_commands = ["init", "validate", "plan"]
skip_outputs = get_env("TG_SKIP_DEPENDENCY_OUTPUTS", "false") == "true" skip_outputs = get_env("TG_SKIP_DEPENDENCY_OUTPUTS", "false") == "true"
@ -149,6 +134,8 @@ inputs = {
secret_key = dependency.s3.outputs.secret_key secret_key = dependency.s3.outputs.secret_key
} }
s3_buckets_map = dependency.s3.outputs.buckets
database_outputs_map = dependency.database.outputs.database_outputs_map database_outputs_map = dependency.database.outputs.database_outputs_map
constants = { constants = {

View File

@ -44,9 +44,10 @@ locals {
} }
}) })
} : secret.secret_type == "s3" ? { } : secret.secret_type == "s3" ? {
access_key = var.s3_outputs.access_key # Если указан конкретный bucket в dependencies - используем его, иначе fallback на s3_outputs
secret_key = var.s3_outputs.secret_key access_key = try(var.s3_buckets_map[secret.dependencies.bucket].access_key, var.s3_outputs.access_key)
bucket = var.s3_outputs.bucket_name secret_key = try(var.s3_buckets_map[secret.dependencies.bucket].secret_key, var.s3_outputs.secret_key)
bucket = try(var.s3_buckets_map[secret.dependencies.bucket].bucket_name, var.s3_outputs.bucket_name)
endpoint = try(var.constants.s3_endpoint, "https://storage.yandexcloud.net") endpoint = try(var.constants.s3_endpoint, "https://storage.yandexcloud.net")
} : secret.secret_type == "database" && local.database_outputs_by_secret[name] != null ? merge( } : secret.secret_type == "database" && local.database_outputs_by_secret[name] != null ? merge(
# Базовые поля из database outputs # Базовые поля из database outputs

View File

@ -9,6 +9,7 @@ variable "secrets" {
cluster = optional(string, "") cluster = optional(string, "")
db = optional(string, "") db = optional(string, "")
user = optional(string, "") user = optional(string, "")
bucket = optional(string, "") # Имя бакета для s3 секретов
}), {}) }), {})
custom_keys = optional(map(string), {}) custom_keys = optional(map(string), {})
random_keys = optional(map(object({ random_keys = optional(map(object({
@ -22,7 +23,7 @@ variable "secrets" {
} }
variable "s3_outputs" { variable "s3_outputs" {
description = "Outputs от модуля S3" description = "Outputs от модуля S3 (default/первый бакет)"
type = object({ type = object({
bucket_name = optional(string, "") bucket_name = optional(string, "")
access_key = optional(string, "") access_key = optional(string, "")
@ -35,6 +36,17 @@ variable "s3_outputs" {
} }
} }
variable "s3_buckets_map" {
description = "Map всех бакетов (name => data)"
type = map(object({
bucket_name = string
access_key = string
secret_key = string
service_account_id = optional(string, "")
}))
default = {}
}
variable "database_outputs_map" { variable "database_outputs_map" {
description = "Outputs от модулей Database, ключ = cluster_id:database_name:user_name" description = "Outputs от модулей Database, ключ = cluster_id:database_name:user_name"
type = map(object({ type = map(object({