mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-05 23:47:50 +00:00
Merge pull request #24016 from XiaoningDing/federation-kubectl
Automatic merge from submit-queue Federation kubectl for clusters add federation/clusters resource to kubectl #23653, requires #23847 <!-- Reviewable:start --> --- This change is [<img src="http://reviewable.k8s.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](http://reviewable.k8s.io/reviews/kubernetes/kubernetes/24016) <!-- Reviewable:end -->
This commit is contained in:
@@ -29,6 +29,8 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/golang/glog"
|
||||
"k8s.io/kubernetes/federation/apis/federation"
|
||||
fed_clientset "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset"
|
||||
"k8s.io/kubernetes/pkg/api"
|
||||
"k8s.io/kubernetes/pkg/api/errors"
|
||||
"k8s.io/kubernetes/pkg/api/resource"
|
||||
@@ -2026,6 +2028,63 @@ func describeConfigMap(configMap *api.ConfigMap) (string, error) {
|
||||
})
|
||||
}
|
||||
|
||||
type ClusterDescriber struct {
|
||||
fed_clientset.Interface
|
||||
}
|
||||
|
||||
func (d *ClusterDescriber) Describe(namespace, name string, describerSettings DescriberSettings) (string, error) {
|
||||
cluster, err := d.Federation().Clusters().Get(name)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
return describeCluster(cluster)
|
||||
}
|
||||
|
||||
func describeCluster(cluster *federation.Cluster) (string, error) {
|
||||
return tabbedString(func(out io.Writer) error {
|
||||
fmt.Fprintf(out, "Name:\t%s\n", cluster.Name)
|
||||
fmt.Fprintf(out, "Labels:\t%s\n", labels.FormatLabels(cluster.Labels))
|
||||
|
||||
fmt.Fprintf(out, "ServerAddressByClientCIDRs:\n ClientCIDR\tServerAddress\n")
|
||||
fmt.Fprintf(out, " ----\t----\n")
|
||||
for _, cidrAddr := range cluster.Spec.ServerAddressByClientCIDRs {
|
||||
fmt.Fprintf(out, " %v \t%v\n\n", cidrAddr.ClientCIDR, cidrAddr.ServerAddress)
|
||||
}
|
||||
|
||||
if len(cluster.Status.Conditions) > 0 {
|
||||
fmt.Fprint(out, "Conditions:\n Type\tStatus\tLastUpdateTime\tLastTransitionTime\tReason\tMessage\n")
|
||||
fmt.Fprint(out, " ----\t------\t-----------------\t------------------\t------\t-------\n")
|
||||
for _, c := range cluster.Status.Conditions {
|
||||
fmt.Fprintf(out, " %v \t%v \t%s \t%s \t%v \t%v\n",
|
||||
c.Type,
|
||||
c.Status,
|
||||
c.LastProbeTime.Time.Format(time.RFC1123Z),
|
||||
c.LastTransitionTime.Time.Format(time.RFC1123Z),
|
||||
c.Reason,
|
||||
c.Message)
|
||||
}
|
||||
}
|
||||
|
||||
fmt.Fprintf(out, "Version:\t%s\n", cluster.Status.Version)
|
||||
|
||||
if len(cluster.Status.Capacity) > 0 {
|
||||
fmt.Fprintf(out, "Capacity:\n")
|
||||
for resource, value := range cluster.Status.Capacity {
|
||||
fmt.Fprintf(out, " %s:\t%s\n", resource, value.String())
|
||||
}
|
||||
}
|
||||
|
||||
if len(cluster.Status.Allocatable) > 0 {
|
||||
fmt.Fprintf(out, "Allocatable:\n")
|
||||
for resource, value := range cluster.Status.Allocatable {
|
||||
fmt.Fprintf(out, " %s:\t%s\n", resource, value.String())
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// newErrNoDescriber creates a new ErrNoDescriber with the names of the provided types.
|
||||
func newErrNoDescriber(types ...reflect.Type) error {
|
||||
names := []string{}
|
||||
|
||||
Reference in New Issue
Block a user