mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-04 04:08:16 +00:00 
			
		
		
		
	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