mirror of
https://github.com/hanzoai/o11y-foundry.git
synced 2026-11-02 14:03:05 +00:00
59 lines
2.0 KiB
Go
59 lines
2.0 KiB
Go
package telemetrykeepermolding
|
|
|
|
import (
|
|
"embed"
|
|
|
|
"github.com/hanzoai/o11y-foundry/api/v1alpha1/installation"
|
|
"github.com/hanzoai/o11y-foundry/internal/domain"
|
|
"github.com/hanzoai/o11y-foundry/internal/errors"
|
|
)
|
|
|
|
//go:embed templates/*.gotmpl
|
|
var templates embed.FS
|
|
|
|
var (
|
|
KeeperClickhousev2556YAML *domain.Template = domain.MustNewTemplateFromFS(templates, "templates/keeper.clickhouse.v2556.yaml.gotmpl", domain.FormatYAML)
|
|
)
|
|
|
|
// Data is the template data for rendering ClickHouse Keeper configs.
|
|
type Data struct {
|
|
RaftAddresses []domain.Address // Inter-keeper consensus addresses
|
|
ClientAddresses []domain.Address // Client-facing addresses
|
|
ServerCount int
|
|
ServerID int // Current server ID for per-node config generation
|
|
}
|
|
|
|
func newData(config *installation.Casting) (Data, error) {
|
|
var data Data
|
|
|
|
if config.Spec.TelemetryKeeper.Spec.Cluster.Replicas == nil {
|
|
data.ServerCount = 1
|
|
} else {
|
|
data.ServerCount = max(*config.Spec.TelemetryKeeper.Spec.Cluster.Replicas, 1)
|
|
}
|
|
|
|
raftAddresses := config.Spec.TelemetryKeeper.Status.Addresses.Raft
|
|
if len(raftAddresses) < data.ServerCount {
|
|
return Data{}, errors.Newf(errors.TypeInvalidInput, "insufficient raft addresses: have %d, need %d servers", len(raftAddresses), data.ServerCount)
|
|
}
|
|
|
|
clientAddresses := config.Spec.TelemetryKeeper.Status.Addresses.Client
|
|
if len(clientAddresses) < data.ServerCount {
|
|
return Data{}, errors.Newf(errors.TypeInvalidInput, "insufficient client addresses: have %d, need %d servers", len(clientAddresses), data.ServerCount)
|
|
}
|
|
|
|
newRaftAddrs, err := domain.ParseAddresses(raftAddresses[:data.ServerCount])
|
|
if err != nil {
|
|
return Data{}, errors.Wrapf(err, errors.TypeInternal, "failed to parse raft addresses")
|
|
}
|
|
data.RaftAddresses = newRaftAddrs
|
|
|
|
newClientAddrs, err := domain.ParseAddresses(clientAddresses[:data.ServerCount])
|
|
if err != nil {
|
|
return Data{}, errors.Wrapf(err, errors.TypeInternal, "failed to parse client addresses")
|
|
}
|
|
data.ClientAddresses = newClientAddrs
|
|
|
|
return data, nil
|
|
}
|