Skip to content

Commit d391684

Browse files
author
OpenShift Bot
committed
Merge pull request #2223 from derekwaynecarr/improve_project_describe
Merged by openshift-bot
2 parents 52fb11c + 9ebad79 commit d391684

File tree

2 files changed

+98
-5
lines changed

2 files changed

+98
-5
lines changed

pkg/cmd/cli/describe/describer.go

+97-4
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ func describerMap(c *client.Client, kclient kclient.Interface, host string) map[
4040
"ImageStreamTag": &ImageStreamTagDescriber{c},
4141
"ImageStreamImage": &ImageStreamImageDescriber{c},
4242
"Route": &RouteDescriber{c},
43-
"Project": &ProjectDescriber{c},
43+
"Project": &ProjectDescriber{c, kclient},
4444
"Template": &TemplateDescriber{c, meta.NewAccessor(), kapi.Scheme, nil},
4545
"Policy": &PolicyDescriber{c},
4646
"PolicyBinding": &PolicyBindingDescriber{c},
@@ -457,16 +457,28 @@ func (d *RouteDescriber) Describe(namespace, name string) (string, error) {
457457

458458
// ProjectDescriber generates information about a Project
459459
type ProjectDescriber struct {
460-
client.Interface
460+
osClient client.Interface
461+
kubeClient kclient.Interface
461462
}
462463

463464
// Describe returns the description of a project
464465
func (d *ProjectDescriber) Describe(namespace, name string) (string, error) {
465-
c := d.Projects()
466-
project, err := c.Get(name)
466+
projectsClient := d.osClient.Projects()
467+
project, err := projectsClient.Get(name)
468+
if err != nil {
469+
return "", err
470+
}
471+
resourceQuotasClient := d.kubeClient.ResourceQuotas(name)
472+
resourceQuotaList, err := resourceQuotasClient.List(labels.Everything())
467473
if err != nil {
468474
return "", err
469475
}
476+
limitRangesClient := d.kubeClient.LimitRanges(name)
477+
limitRangeList, err := limitRangesClient.List(labels.Everything())
478+
if err != nil {
479+
return "", err
480+
}
481+
470482
nodeSelector := ""
471483
if len(project.ObjectMeta.Annotations) > 0 {
472484
if ns, ok := project.ObjectMeta.Annotations["openshift.io/node-selector"]; ok {
@@ -477,8 +489,89 @@ func (d *ProjectDescriber) Describe(namespace, name string) (string, error) {
477489
return tabbedString(func(out *tabwriter.Writer) error {
478490
formatMeta(out, project.ObjectMeta)
479491
formatString(out, "Display Name", project.Annotations["displayName"])
492+
formatString(out, "Description", project.Annotations["description"])
480493
formatString(out, "Status", project.Status.Phase)
481494
formatString(out, "Node Selector", nodeSelector)
495+
fmt.Fprintf(out, "\n")
496+
if len(resourceQuotaList.Items) == 0 {
497+
formatString(out, "Quota", "")
498+
} else {
499+
fmt.Fprintf(out, "Quota:\n")
500+
for i := range resourceQuotaList.Items {
501+
resourceQuota := &resourceQuotaList.Items[i]
502+
fmt.Fprintf(out, "\tName:\t%s\n", resourceQuota.Name)
503+
fmt.Fprintf(out, "\tResource\tUsed\tHard\n")
504+
fmt.Fprintf(out, "\t--------\t----\t----\n")
505+
506+
resources := []kapi.ResourceName{}
507+
for resource := range resourceQuota.Status.Hard {
508+
resources = append(resources, resource)
509+
}
510+
sort.Sort(kctl.SortableResourceNames(resources))
511+
512+
msg := "\t%v\t%v\t%v\n"
513+
for i := range resources {
514+
resource := resources[i]
515+
hardQuantity := resourceQuota.Status.Hard[resource]
516+
usedQuantity := resourceQuota.Status.Used[resource]
517+
fmt.Fprintf(out, msg, resource, usedQuantity.String(), hardQuantity.String())
518+
}
519+
}
520+
}
521+
fmt.Fprintf(out, "\n")
522+
if len(limitRangeList.Items) == 0 {
523+
formatString(out, "Resource limits", "")
524+
} else {
525+
fmt.Fprintf(out, "Resource limits:\n")
526+
for i := range limitRangeList.Items {
527+
limitRange := &limitRangeList.Items[i]
528+
fmt.Fprintf(out, "\tName:\t%s\n", limitRange.Name)
529+
fmt.Fprintf(out, "\tType\tResource\tMin\tMax\tDefault\n")
530+
fmt.Fprintf(out, "\t----\t--------\t---\t---\t---\n")
531+
for i := range limitRange.Spec.Limits {
532+
item := limitRange.Spec.Limits[i]
533+
maxResources := item.Max
534+
minResources := item.Min
535+
defaultResources := item.Default
536+
537+
set := map[kapi.ResourceName]bool{}
538+
for k := range maxResources {
539+
set[k] = true
540+
}
541+
for k := range minResources {
542+
set[k] = true
543+
}
544+
for k := range defaultResources {
545+
set[k] = true
546+
}
547+
548+
for k := range set {
549+
// if no value is set, we output -
550+
maxValue := "-"
551+
minValue := "-"
552+
defaultValue := "-"
553+
554+
maxQuantity, maxQuantityFound := maxResources[k]
555+
if maxQuantityFound {
556+
maxValue = maxQuantity.String()
557+
}
558+
559+
minQuantity, minQuantityFound := minResources[k]
560+
if minQuantityFound {
561+
minValue = minQuantity.String()
562+
}
563+
564+
defaultQuantity, defaultQuantityFound := defaultResources[k]
565+
if defaultQuantityFound {
566+
defaultValue = defaultQuantity.String()
567+
}
568+
569+
msg := "\t%v\t%v\t%v\t%v\t%v\n"
570+
fmt.Fprintf(out, msg, item.Type, k, minValue, maxValue, defaultValue)
571+
}
572+
}
573+
}
574+
}
482575
return nil
483576
})
484577
}

pkg/cmd/cli/describe/describer_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ func TestDescribers(t *testing.T) {
5454
&ImageStreamTagDescriber{c},
5555
&ImageStreamImageDescriber{c},
5656
&RouteDescriber{c},
57-
&ProjectDescriber{c},
57+
&ProjectDescriber{c, fakeKube},
5858
&PolicyDescriber{c},
5959
&PolicyBindingDescriber{c},
6060
&TemplateDescriber{c, nil, nil, nil},

0 commit comments

Comments
 (0)