8000 Fix inconsistent secret rendering in autogenerated `remote_servers` by realyota · Pull Request #1992 · Altinity/clickhouse-operator · GitHub
[go: up one dir, main page]

Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 17 additions & 18 deletions pkg/model/chi/config/generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,17 @@ func (c *Generator) getRemoteServersReplica(host *chi.Host, b *bytes.Buffer) {
util.Iline(b, 16, "</replica>")
}

func (c *Generator) addRemoteServersClusterSecret(b *bytes.Buffer, indent int, secret *chi.ClusterSecret) {
switch secret.Source() {
case chi.ClusterSecretSourcePlaintext:
// Secret value is explicitly specified
util.Iline(b, indent, "<secret>%s</secret>", secret.Value)
case chi.ClusterSecretSourceSecretRef, chi.ClusterSecretSourceAuto:
// Use secret via ENV var from secret
util.Iline(b, indent, `<secret from_env="%s" />`, InternodeClusterSecretEnvName)
}
}

// getRemoteServers creates "remote_servers.xml" content and calculates data generation parameters for other sections
func (c *Generator) getRemoteServers(selector *config.HostSelector) string {
if selector == nil {
Expand Down Expand Up @@ -320,14 +331,7 @@ func (c *Generator) getRemoteServerClusters(selector *config.HostSelector, inden
util.Iline(b, indent, "<%s>", cluster.GetName())

// <secret>VALUE</secret>
switch cluster.GetSecret().Source() {
case chi.ClusterSecretSourcePlaintext:
// Secret value is explicitly specified
util.Iline(b, indent+4, "<secret>%s</secret>", cluster.GetSecret().Value)
case chi.ClusterSecretSourceSecretRef, chi.ClusterSecretSourceAuto:
// Use secret via ENV var from secret
util.Iline(b, indent+4, `<secret from_env="%s" />`, InternodeClusterSecretEnvName)
}
c.addRemoteServersClusterSecret(b, indent+4, cluster.GetSecret())

// Build each shard XML
cluster.WalkShards(func(index int, shard chi.IShard) error {
Expand Down Expand Up @@ -380,13 +384,16 @@ func (c *Generator) getRemoteClustersAutogenerated(selector *config.HostSelector
// We have at least one host - render clusters
util.Iline(b, indent, "<!-- Autogenerated clusters -->")

cluster := c.cr.FindCluster(0)

// One Shard All Replicas

// <all-replicated>
// <shard>
// <internal_replication>
clusterName := OneShardAllReplicasClusterName
util.Iline(b, indent, "<%s>", clusterName)
c.addRemoteServersClusterSecret(b, indent+4, cluster.GetSecret())
util.Iline(b, indent, " <shard>")
util.Iline(b, indent, " <internal_replication>true</internal_replication>")
c.cr.WalkHosts(func(host *chi.Host) error {
Expand All @@ -407,17 +414,8 @@ func (c *Generator) getRemoteClustersAutogenerated(selector *config.HostSelector
clusterName = AllShardsOneReplicaClusterName
util.Iline(b, indent, "<%s>", clusterName)

// Add secret to all-sharded from the first cluster if present
cluster := c.cr.FindCluster(0)
// <secret>VALUE</secret>
switch cluster.GetSecret().Source() {
case chi.ClusterSecretSourcePlaintext:
// Secret value is explicitly specified
util.Iline(b, indent+4, "<secret>%s</secret>", cluster.GetSecret().Value)
case chi.ClusterSecretSourceSecretRef, chi.ClusterSecretSourceAuto:
// Use secret via ENV var from secret
util.Iline(b, indent+4, `<secret from_env="%s" />`, InternodeClusterSecretEnvName)
}
c.addRemoteServersClusterSecret(b, indent+4, cluster.GetSecret())

c.cr.WalkHosts(func(host *chi.Host) error {
if selector.Include(host) {
Expand All @@ -441,6 +439,7 @@ func (c *Generator) getRemoteClustersAutogenerated(selector *config.HostSelector
// <all-clusters>
clusterName = AllClustersClusterName
util.Iline(b, indent, "<%s>", clusterName)
c.addRemoteServersClusterSecret(b, indent+4, cluster.GetSecret())
c.cr.WalkClusters(func(cluster chi.ICluster) error {
cluster.WalkShards(func(index int, shard chi.IShard) error {
if c.shardHostsNum(shard, selector) < 1 {
Expand Down
Loading
0