mirror of https://github.com/k3s-io/k3s
describe for clusters
parent
586eea0691
commit
6f8fc60d06
|
@ -356,6 +356,15 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory {
|
||||||
},
|
},
|
||||||
Describer: func(mapping *meta.RESTMapping) (kubectl.Describer, error) {
|
Describer: func(mapping *meta.RESTMapping) (kubectl.Describer, error) {
|
||||||
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
mappingVersion := mapping.GroupVersionKind.GroupVersion()
|
||||||
|
if mapping.GroupVersionKind.Group == federation.GroupName {
|
||||||
|
fedClientSet, err := clients.FederationClientSetForVersion(&mappingVersion)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if mapping.GroupVersionKind.Kind == "Cluster" {
|
||||||
|
return &kubectl.ClusterDescriber{Interface: fedClientSet}, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
client, err := clients.ClientForVersion(&mappingVersion)
|
client, err := clients.ClientForVersion(&mappingVersion)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|
|
@ -29,6 +29,8 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/golang/glog"
|
"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"
|
||||||
"k8s.io/kubernetes/pkg/api/errors"
|
"k8s.io/kubernetes/pkg/api/errors"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
|
@ -2016,6 +2018,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.
|
// newErrNoDescriber creates a new ErrNoDescriber with the names of the provided types.
|
||||||
func newErrNoDescriber(types ...reflect.Type) error {
|
func newErrNoDescriber(types ...reflect.Type) error {
|
||||||
names := []string{}
|
names := []string{}
|
||||||
|
|
|
@ -24,6 +24,8 @@ import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"k8s.io/kubernetes/federation/apis/federation"
|
||||||
|
fed_fake "k8s.io/kubernetes/federation/client/clientset_generated/federation_internalclientset/fake"
|
||||||
"k8s.io/kubernetes/pkg/api"
|
"k8s.io/kubernetes/pkg/api"
|
||||||
"k8s.io/kubernetes/pkg/api/resource"
|
"k8s.io/kubernetes/pkg/api/resource"
|
||||||
"k8s.io/kubernetes/pkg/api/unversioned"
|
"k8s.io/kubernetes/pkg/api/unversioned"
|
||||||
|
@ -522,6 +524,40 @@ func TestDescribeDeployment(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDescribeCluster(t *testing.T) {
|
||||||
|
cluster := federation.Cluster{
|
||||||
|
ObjectMeta: api.ObjectMeta{
|
||||||
|
Name: "foo",
|
||||||
|
ResourceVersion: "4",
|
||||||
|
Labels: map[string]string{
|
||||||
|
"name": "foo",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Spec: federation.ClusterSpec{
|
||||||
|
ServerAddressByClientCIDRs: []federation.ServerAddressByClientCIDR{
|
||||||
|
{
|
||||||
|
ClientCIDR: "0.0.0.0/0",
|
||||||
|
ServerAddress: "localhost:8888",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Status: federation.ClusterStatus{
|
||||||
|
Conditions: []federation.ClusterCondition{
|
||||||
|
{Type: federation.ClusterReady, Status: api.ConditionTrue},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
fake := fed_fake.NewSimpleClientset(&cluster)
|
||||||
|
d := ClusterDescriber{Interface: fake}
|
||||||
|
out, err := d.Describe("any", "foo", DescriberSettings{ShowEvents: true})
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected error: %v", err)
|
||||||
|
}
|
||||||
|
if !strings.Contains(out, "foo") || !strings.Contains(out, "Version:") {
|
||||||
|
t.Errorf("unexpected out: %s", out)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestDescribeEvents(t *testing.T) {
|
func TestDescribeEvents(t *testing.T) {
|
||||||
|
|
||||||
events := &api.EventList{
|
events := &api.EventList{
|
||||||
|
|
Loading…
Reference in New Issue