describe for clusters
This commit is contained in:
		| @@ -356,6 +356,15 @@ func NewFactory(optionalClientConfig clientcmd.ClientConfig) *Factory { | ||||
| 		}, | ||||
| 		Describer: func(mapping *meta.RESTMapping) (kubectl.Describer, error) { | ||||
| 			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) | ||||
| 			if err != nil { | ||||
| 				return nil, err | ||||
|   | ||||
| @@ -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" | ||||
| @@ -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. | ||||
| func newErrNoDescriber(types ...reflect.Type) error { | ||||
| 	names := []string{} | ||||
|   | ||||
| @@ -24,6 +24,8 @@ import ( | ||||
| 	"testing" | ||||
| 	"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/resource" | ||||
| 	"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) { | ||||
|  | ||||
| 	events := &api.EventList{ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 jianhuiz
					jianhuiz