Skip to content

Commit

Permalink
fix: the order of arguments is matter
Browse files Browse the repository at this point in the history
  • Loading branch information
Andrey Kontyakov committed Mar 30, 2024
1 parent f682da1 commit f3c204a
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 28 deletions.
46 changes: 28 additions & 18 deletions internal/controller/factory/statefulset.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,38 +208,48 @@ func generateEtcdCommand(cluster *etcdaenixiov1alpha1.EtcdCluster) []string {
}
}

func generateBaseEtcdArgs(cluster *etcdaenixiov1alpha1.EtcdCluster) map[string]string {
return map[string]string{
"--name": "$(POD_NAME)",
"--listen-peer-urls": "https://0.0.0.0:2380",
func generateBaseEtcdArgs(cluster *etcdaenixiov1alpha1.EtcdCluster) []string {
// the order of arguments is matter
return []string{
"--name=$(POD_NAME)",
"--listen-peer-urls=https://0.0.0.0:2380",
// for first version disable TLS for client access
"--listen-client-urls": "http://0.0.0.0:2379",
"--initial-advertise-peer-urls": fmt.Sprintf("https://$(POD_NAME).%s.$(POD_NAMESPACE).svc:2380", cluster.Name),
"--data-dir": "/var/run/etcd/default.etcd",
"--auto-tls": "",
"--peer-auto-tls": "",
"--advertise-client-urls": fmt.Sprintf("http://$(POD_NAME).%s.$(POD_NAMESPACE).svc:2379", cluster.Name),
"--listen-client-urls=http://0.0.0.0:2379",
fmt.Sprintf("--initial-advertise-peer-urls=https://$(POD_NAME).%s.$(POD_NAMESPACE).svc:2380", cluster.Name),
"--data-dir=/var/run/etcd/default.etcd",
"--auto-tls",
"--peer-auto-tls",
fmt.Sprintf("--advertise-client-urls=http://$(POD_NAME).%s.$(POD_NAMESPACE).svc:2379", cluster.Name),
}
}

func generateEtcdArgs(cluster *etcdaenixiov1alpha1.EtcdCluster) []string {
args := generateBaseEtcdArgs(cluster)

for name, value := range cluster.Spec.PodSpec.ExtraArgs {
key := "--" + name
args[key] = value
flag := "--" + name
if len(value) == 0 {
args = append(args, flag)

continue
}

args = append(args, fmt.Sprintf("%s=%s", flag, value))
}

return argsFromMapToSlice(args)
return args
}

func ValidatePodExtraArgs(cluster *etcdaenixiov1alpha1.EtcdCluster) error {
baseArgs := generateBaseEtcdArgs(cluster)
if len(cluster.Spec.PodSpec.ExtraArgs) == 0 {
return nil
}

baseArgs := argsFromSliceToMap(generateBaseEtcdArgs(cluster))

for name := range cluster.Spec.PodSpec.ExtraArgs {
key := "--" + name
if _, exists := baseArgs[key]; exists {
return fmt.Errorf("can't use base exta argument '%s' in .Spec.PodSpec.ExtraArgs", key)
for flag := range baseArgs {
if _, exists := baseArgs[flag]; exists {
return fmt.Errorf("can't use base exta argument '%s' in .Spec.PodSpec.ExtraArgs", flag)
}
}

Expand Down
23 changes: 13 additions & 10 deletions internal/controller/factory/utils.go
Original file line number Diff line number Diff line change
@@ -1,21 +1,24 @@
package factory

import (
"fmt"
"strings"
)

// ArgsFromMapToSlice create the slice of args
// Along with that, if a flag doesn't have a value, it's presented barely without a value assignment.
func argsFromMapToSlice(args map[string]string) (slice []string) {
for flag, value := range args {
if len(value) == 0 {
slice = append(slice, flag)
// argsFromSliceToMap transforms a slice of string into a map
func argsFromSliceToMap(args []string) (m map[string]string) {
m = make(map[string]string)

continue
for _, arg := range args {
parts := strings.SplitN(arg, "=", 2)

flag, value := parts[0], ""

if len(parts) > 1 {
value = parts[1]
}

slice = append(slice, fmt.Sprintf("%s=%s", flag, value))
m[flag] = value
}

return slice
return m
}

0 comments on commit f3c204a

Please sign in to comment.