Files
sless/sqs-operator/internal/elasticmq/elasticmq_config.go
T
Naeel 66dcd99465 refactor(sqs-operator): переделка через Operator SDK v1.37.0
- operator-sdk init + create api (QueueService kind, group sqs, v1alpha1)
- Стандартная kubebuilder структура: cmd/, internal/controller/, config/
- CRD types с kubebuilder маркерами (validation, defaults, printcolumns)
- Reconciler перенесён из ручного кода в internal/controller/
- controller-gen v0.17.0 (совместимость с Go 1.26.1)
- Автогенерация: deepcopy, CRD YAML, RBAC ClusterRole
- Удалены все ручные файлы (controllers/, main.go, deployments/)
2026-04-07 14:25:14 +03:00

57 lines
2.0 KiB
Go

// Изменён: 2026-04-07
// elasticmq_config.go — генератор HOCON конфигурации для ElasticMQ.
// Каждый тенант получает уникальный конфиг: свой context-path, accountId, persistence.
// Конфиг монтируется в pod как ConfigMap → /opt/elasticmq/custom.conf.
package elasticmq
import "fmt"
// GenerateConfig генерирует HOCON конфигурацию для ElasticMQ инстанса тенанта.
// tenantID — ID тенанта (используется в context-path и accountId).
// externalHost — публичный хост (SQS_EXTERNAL_HOST env var, например sqs.kube5s.ru).
// persistence — если true, сообщения сохраняются в H2 на PVC /data.
func GenerateConfig(tenantID, externalHost string, persistence bool) string {
persistenceBlock := ""
if persistence {
// H2 база данных хранит очереди и сообщения между рестартами pod.
// Файл /data/elasticmq.db — на PVC тенанта.
persistenceBlock = `
messages-storage {
enabled = true
uri = "jdbc:h2:/data/elasticmq"
}`
} else {
persistenceBlock = `
messages-storage {
enabled = false
}`
}
return fmt.Sprintf(`include classpath("application.conf")
# Внешний адрес ноды — как будут формироваться queue URL в ответах SQS API.
# context-path должен совпадать с путём в Ingress: /sqs/%s
node-address {
protocol = https
host = %s
port = 443
context-path = "/sqs/%s"
}
rest-sqs {
enabled = true
bind-port = 9324
bind-hostname = "0.0.0.0"
# strict — соответствие AWS SQS валидации параметров
sqs-limits = strict
}
%s
# accountId = tenantID — используется в ARN очередей
aws {
region = ru-msk-1
accountId = "%s"
}
`, tenantID, externalHost, tenantID, persistenceBlock, tenantID)
}