func CluterInfo()

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
}