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/)
This commit is contained in:
@@ -0,0 +1,56 @@
|
||||
// Изменён: 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)
|
||||
}
|
||||
Reference in New Issue
Block a user