in kinder/pkg/cluster/manager/actions/cluster-info.go [36:113]
func CluterInfo(c *status.Cluster) error {
// commands are executed on the bootstrap control-plane
cp1 := c.BootstrapControlPlane()
if err := cp1.Command(
"kubectl", "--kubeconfig=/etc/kubernetes/admin.conf", "get", "nodes", "-o=wide",
).RunWithEcho(); err != nil {
return err
}
if err := cp1.Command(
"kubectl", "--kubeconfig=/etc/kubernetes/admin.conf", "get", "pods", "--all-namespaces", "-o=wide",
).RunWithEcho(); err != nil {
return err
}
if err := cp1.Command(
"kubectl", "--kubeconfig=/etc/kubernetes/admin.conf", "get", "pods", "--all-namespaces",
"-o=jsonpath={range .items[*]}{\"\\n\"}{.metadata.name}{\" << \"}{range .spec.containers[*]}{.image}{\", \"}{end}{end}",
).RunWithEcho(); err != nil {
return err
}
fmt.Println()
if c.ExternalEtcd() == nil {
// NB. before v1.13 local etcd is listening on localhost only; after v1.13
// local etcd is listening on localhost and on the advertise address; we are
// using localhost to accommodate both the use cases
etcdArgs := []string{
"--kubeconfig=/etc/kubernetes/admin.conf", "exec", "-n=kube-system", fmt.Sprintf("etcd-%s", c.BootstrapControlPlane().Name()),
"--",
}
var lines []string
var err error
// Get the version of etcdctl from the etcd binary
// Retry the version command for a while to avoid "exec" flakes
versionArgs := append(etcdArgs, "etcd", "--version")
versionArgs = append([]string{"--request-timeout=2"}, versionArgs...) // Ensure shorter timeout
for i := 0; i < 10; i++ {
lines, err = cp1.Command("kubectl", versionArgs...).RunAndCapture()
if err == nil {
break
}
cp1.Infof("Could not execute 'etcd --version' inside %q (attempt %d/%d): %v\n", cp1.Name(), i+1, 10,
errors.Wrap(err, strings.Join(lines, "\n")))
}
if err != nil {
return err
}
etcdctlVersion, err := parseEtcdctlVersion(lines)
if err != nil {
return err
}
cp1.Infof("Using etcdctl version: %s\n", etcdctlVersion)
etcdArgs = append(etcdArgs, "etcdctl", "--endpoints=https://127.0.0.1:2379")
// Append version specific etcdctl certificate flags
if err := appendEtcdctlCertArgs(etcdctlVersion, &etcdArgs); err != nil {
return err
}
etcdArgs = append(etcdArgs, "member", "list")
if err := cp1.Command(
"kubectl", etcdArgs...,
).RunWithEcho(); err != nil {
return err
}
} else {
fmt.Println("using external etcd")
}
return nil
}