Skip to content

Commit

Permalink
etcdctl can use env vars instead of options
Browse files Browse the repository at this point in the history
  • Loading branch information
sanchezl committed Feb 26, 2020
1 parent a2ef076 commit 1b532d3
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 23 deletions.
8 changes: 3 additions & 5 deletions bindata/etcd/pod.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ spec:
- mountPath: /etc/kubernetes/static-pod-certs
name: cert-dir
containers:
# The etcdctl container should always be first. It is intended to be used
# to open a remote shell via `oc rsh` that is ready to run `etcdctl`.
- name: etcdctl
image: ${IMAGE}
imagePullPolicy: IfNotPresent
Expand Down Expand Up @@ -73,11 +75,7 @@ ${COMPUTED_ENV_VARS}
#!/bin/sh
set -euo pipefail
ETCDCTL="etcdctl --cacert=/etc/kubernetes/static-pod-resources/configmaps/etcd-serving-ca/ca-bundle.crt \
--cert=/etc/kubernetes/static-pod-resources/secrets/etcd-all-peer/etcd-peer-NODE_NAME.crt \
--key=/etc/kubernetes/static-pod-resources/secrets/etcd-all-peer/etcd-peer-NODE_NAME.key \
--endpoints=${ALL_ETCD_ENDPOINTS}"
${ETCDCTL} member list || true
etcdctl member list || true
# this has a non-zero return code if the command is non-zero. If you use an export first, it doesn't and you
# will succeed when you should fail.
Expand Down
8 changes: 3 additions & 5 deletions pkg/operator/etcd_assets/bindata.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 19 additions & 13 deletions pkg/operator/targetconfigcontroller/etcd_env.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ var envVarFns = []envVarFunc{
getDNSName,
getFixedEtcdEnvVars,
getEtcdName,
getAllClusterMembers,
getAllEtcdEndpoints,
getEtcdctlEnvVars,
}

Expand Down Expand Up @@ -78,7 +78,7 @@ func getFixedEtcdEnvVars(envVarContext envVarContext) (map[string]string, error)
}

func getEtcdctlEnvVars(envVarContext envVarContext) (map[string]string, error) {
envVars, err := getAllClusterMembers(envVarContext)
endpoints, err := getEtcdGrpcEndpoints(envVarContext)
if err != nil {
return nil, err
}
Expand All @@ -87,47 +87,53 @@ func getEtcdctlEnvVars(envVarContext envVarContext) (map[string]string, error) {
"ETCDCTL_CACERT": "/etc/kubernetes/static-pod-resources/configmaps/etcd-serving-ca/ca-bundle.crt",
"ETCDCTL_CERT": "/etc/kubernetes/static-pod-resources/secrets/etcd-all-peer/etcd-peer-NODE_NAME.crt",
"ETCDCTL_KEY": "/etc/kubernetes/static-pod-resources/secrets/etcd-all-peer/etcd-peer-NODE_NAME.key",
"ETCDCTL_ENDPOINTS": envVars["ALL_ETCD_ENDPOINTS"],
"ETCDCTL_ENDPOINTS": endpoints,
}, nil
}

func getAllClusterMembers(envVarContext envVarContext) (map[string]string, error) {
func getEtcdGrpcEndpoints(envVarContext envVarContext) (string, error) {
network, err := envVarContext.networkLister.Get("cluster")
if err != nil {
return nil, err
return "", err
}

ret := map[string]string{}

endpoints := []string{}
for _, nodeInfo := range envVarContext.status.NodeStatuses {
node, err := envVarContext.nodeLister.Get(nodeInfo.NodeName)
if err != nil {
return nil, err
return "", err
}

endpointIP, err := dnshelpers.GetEscapedPreferredInternalIPAddressForNodeName(network, node)
if err != nil {
return nil, err
return "", err
}
endpoints = append(endpoints, fmt.Sprintf("https://%s:2379", endpointIP))
}

hostEtcdEndpoints, err := envVarContext.endpointLister.Endpoints(operatorclient.TargetNamespace).Get("host-etcd-2")
if err != nil {
return nil, err
return "", err
}
if bootstrapIP := hostEtcdEndpoints.Annotations["alpha.installer.openshift.io/etcd-bootstrap"]; len(bootstrapIP) > 0 {
urlHost, err := dnshelpers.GetURLHostForIP(bootstrapIP)
if err != nil {
return nil, err
return "", err
}
endpoints = append(endpoints, "https://"+urlHost+":2379")
}

ret["ALL_ETCD_ENDPOINTS"] = strings.Join(endpoints, ",")
return strings.Join(endpoints, ","), nil
}

return ret, nil
func getAllEtcdEndpoints(envVarContext envVarContext) (map[string]string, error) {
endpoints, err := getEtcdGrpcEndpoints(envVarContext)
if err != nil {
return nil, err
}
return map[string]string{
"ALL_ETCD_ENDPOINTS": endpoints,
}, nil
}

func getEtcdName(envVarContext envVarContext) (map[string]string, error) {
Expand Down

0 comments on commit 1b532d3

Please sign in to comment.