Remove images field in describer and use pod template consistently

Images field didn't include init containers. Use pod template output
consistently and ensure labels and annotations are in the right spot
This commit is contained in:
Clayton Coleman 2017-02-28 18:38:16 -05:00
parent d8ee5e003c
commit b3485e7c6a
No known key found for this signature in database
GPG Key ID: 3D16906B4F1C5CB3

View File

@ -1188,7 +1188,7 @@ func describeVolumeClaimTemplates(templates []api.PersistentVolumeClaim, w *Pref
w.Write(LEVEL_0, "Volume Claims:\n") w.Write(LEVEL_0, "Volume Claims:\n")
for _, pvc := range templates { for _, pvc := range templates {
w.Write(LEVEL_1, "Name:\t%s\n", pvc.Name) w.Write(LEVEL_1, "Name:\t%s\n", pvc.Name)
w.Write(LEVEL_1, "StorageClass:\t%s\n", storageutil.GetStorageClassAnnotation(pvc.ObjectMeta)) w.Write(LEVEL_1, "StorageClass:\t%s\n", api.GetPersistentVolumeClaimClass(&pvc))
printLabelsMultilineWithIndent(w, " ", "Labels", "\t", pvc.Labels, sets.NewString()) printLabelsMultilineWithIndent(w, " ", "Labels", "\t", pvc.Labels, sets.NewString())
printLabelsMultilineWithIndent(w, " ", "Annotations", "\t", pvc.Annotations, sets.NewString()) printLabelsMultilineWithIndent(w, " ", "Annotations", "\t", pvc.Annotations, sets.NewString())
if capacity, ok := pvc.Spec.Resources.Requests[api.ResourceStorage]; ok { if capacity, ok := pvc.Spec.Resources.Requests[api.ResourceStorage]; ok {
@ -1249,20 +1249,13 @@ func describeReplicationController(controller *api.ReplicationController, events
w := &PrefixWriter{out} w := &PrefixWriter{out}
w.Write(LEVEL_0, "Name:\t%s\n", controller.Name) w.Write(LEVEL_0, "Name:\t%s\n", controller.Name)
w.Write(LEVEL_0, "Namespace:\t%s\n", controller.Namespace) w.Write(LEVEL_0, "Namespace:\t%s\n", controller.Namespace)
if controller.Spec.Template != nil {
w.Write(LEVEL_0, "Image(s):\t%s\n", makeImageList(&controller.Spec.Template.Spec))
} else {
w.Write(LEVEL_0, "Image(s):\t%s\n", "<unset>")
}
w.Write(LEVEL_0, "Selector:\t%s\n", labels.FormatLabels(controller.Spec.Selector)) w.Write(LEVEL_0, "Selector:\t%s\n", labels.FormatLabels(controller.Spec.Selector))
printLabelsMultiline(w, "Labels", controller.Labels) printLabelsMultiline(w, "Labels", controller.Labels)
printAnnotationsMultiline(w, "Annotations", controller.Annotations) printAnnotationsMultiline(w, "Annotations", controller.Annotations)
w.Write(LEVEL_0, "Replicas:\t%d current / %d desired\n", controller.Status.Replicas, controller.Spec.Replicas) w.Write(LEVEL_0, "Replicas:\t%d current / %d desired\n", controller.Status.Replicas, controller.Spec.Replicas)
w.Write(LEVEL_0, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed) w.Write(LEVEL_0, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed)
if controller.Spec.Template != nil { DescribePodTemplate(controller.Spec.Template, out)
describeVolumes(controller.Spec.Template.Spec.Volumes, w, "")
}
if events != nil { if events != nil {
DescribeEvents(events, w) DescribeEvents(events, w)
} }
@ -1272,6 +1265,7 @@ func describeReplicationController(controller *api.ReplicationController, events
func DescribePodTemplate(template *api.PodTemplateSpec, out io.Writer) { func DescribePodTemplate(template *api.PodTemplateSpec, out io.Writer) {
w := &PrefixWriter{out} w := &PrefixWriter{out}
w.Write(LEVEL_0, "Pod Template:\n")
if template == nil { if template == nil {
w.Write(LEVEL_1, "<unset>") w.Write(LEVEL_1, "<unset>")
return return
@ -1324,7 +1318,6 @@ func describeReplicaSet(rs *extensions.ReplicaSet, events *api.EventList, runnin
w := &PrefixWriter{out} w := &PrefixWriter{out}
w.Write(LEVEL_0, "Name:\t%s\n", rs.Name) w.Write(LEVEL_0, "Name:\t%s\n", rs.Name)
w.Write(LEVEL_0, "Namespace:\t%s\n", rs.Namespace) w.Write(LEVEL_0, "Namespace:\t%s\n", rs.Namespace)
w.Write(LEVEL_0, "Image(s):\t%s\n", makeImageList(&rs.Spec.Template.Spec))
w.Write(LEVEL_0, "Selector:\t%s\n", metav1.FormatLabelSelector(rs.Spec.Selector)) w.Write(LEVEL_0, "Selector:\t%s\n", metav1.FormatLabelSelector(rs.Spec.Selector))
printLabelsMultiline(w, "Labels", rs.Labels) printLabelsMultiline(w, "Labels", rs.Labels)
printAnnotationsMultiline(w, "Annotations", rs.Annotations) printAnnotationsMultiline(w, "Annotations", rs.Annotations)
@ -1335,7 +1328,7 @@ func describeReplicaSet(rs *extensions.ReplicaSet, events *api.EventList, runnin
} else { } else {
w.Write(LEVEL_0, "%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed) w.Write(LEVEL_0, "%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed)
} }
describeVolumes(rs.Spec.Template.Spec.Volumes, w, "") DescribePodTemplate(&rs.Spec.Template, out)
if events != nil { if events != nil {
DescribeEvents(events, w) DescribeEvents(events, w)
} }
@ -1367,9 +1360,10 @@ func describeJob(job *batch.Job, events *api.EventList) (string, error) {
w := &PrefixWriter{out} w := &PrefixWriter{out}
w.Write(LEVEL_0, "Name:\t%s\n", job.Name) w.Write(LEVEL_0, "Name:\t%s\n", job.Name)
w.Write(LEVEL_0, "Namespace:\t%s\n", job.Namespace) w.Write(LEVEL_0, "Namespace:\t%s\n", job.Namespace)
w.Write(LEVEL_0, "Image(s):\t%s\n", makeImageList(&job.Spec.Template.Spec))
selector, _ := metav1.LabelSelectorAsSelector(job.Spec.Selector) selector, _ := metav1.LabelSelectorAsSelector(job.Spec.Selector)
w.Write(LEVEL_0, "Selector:\t%s\n", selector) w.Write(LEVEL_0, "Selector:\t%s\n", selector)
printLabelsMultiline(w, "Labels", job.Labels)
printAnnotationsMultiline(w, "Annotations", job.Annotations)
w.Write(LEVEL_0, "Parallelism:\t%d\n", *job.Spec.Parallelism) w.Write(LEVEL_0, "Parallelism:\t%d\n", *job.Spec.Parallelism)
if job.Spec.Completions != nil { if job.Spec.Completions != nil {
w.Write(LEVEL_0, "Completions:\t%d\n", *job.Spec.Completions) w.Write(LEVEL_0, "Completions:\t%d\n", *job.Spec.Completions)
@ -1382,10 +1376,8 @@ func describeJob(job *batch.Job, events *api.EventList) (string, error) {
if job.Spec.ActiveDeadlineSeconds != nil { if job.Spec.ActiveDeadlineSeconds != nil {
w.Write(LEVEL_0, "Active Deadline Seconds:\t%ds\n", *job.Spec.ActiveDeadlineSeconds) w.Write(LEVEL_0, "Active Deadline Seconds:\t%ds\n", *job.Spec.ActiveDeadlineSeconds)
} }
printLabelsMultiline(w, "Labels", job.Labels)
printAnnotationsMultiline(w, "Annotations", job.Annotations)
w.Write(LEVEL_0, "Pods Statuses:\t%d Running / %d Succeeded / %d Failed\n", job.Status.Active, job.Status.Succeeded, job.Status.Failed) w.Write(LEVEL_0, "Pods Statuses:\t%d Running / %d Succeeded / %d Failed\n", job.Status.Active, job.Status.Succeeded, job.Status.Failed)
describeVolumes(job.Spec.Template.Spec.Volumes, w, "") DescribePodTemplate(&job.Spec.Template, out)
if events != nil { if events != nil {
DescribeEvents(events, w) DescribeEvents(events, w)
} }
@ -1417,6 +1409,8 @@ func describeCronJob(scheduledJob *batch.CronJob, events *api.EventList) (string
w := &PrefixWriter{out} w := &PrefixWriter{out}
w.Write(LEVEL_0, "Name:\t%s\n", scheduledJob.Name) w.Write(LEVEL_0, "Name:\t%s\n", scheduledJob.Name)
w.Write(LEVEL_0, "Namespace:\t%s\n", scheduledJob.Namespace) w.Write(LEVEL_0, "Namespace:\t%s\n", scheduledJob.Namespace)
printLabelsMultiline(w, "Labels", scheduledJob.Labels)
printAnnotationsMultiline(w, "Annotations", scheduledJob.Annotations)
w.Write(LEVEL_0, "Schedule:\t%s\n", scheduledJob.Spec.Schedule) w.Write(LEVEL_0, "Schedule:\t%s\n", scheduledJob.Spec.Schedule)
w.Write(LEVEL_0, "Concurrency Policy:\t%s\n", scheduledJob.Spec.ConcurrencyPolicy) w.Write(LEVEL_0, "Concurrency Policy:\t%s\n", scheduledJob.Spec.ConcurrencyPolicy)
w.Write(LEVEL_0, "Suspend:\t%s\n", printBoolPtr(scheduledJob.Spec.Suspend)) w.Write(LEVEL_0, "Suspend:\t%s\n", printBoolPtr(scheduledJob.Spec.Suspend))
@ -1426,8 +1420,6 @@ func describeCronJob(scheduledJob *batch.CronJob, events *api.EventList) (string
w.Write(LEVEL_0, "Starting Deadline Seconds:\t<unset>\n") w.Write(LEVEL_0, "Starting Deadline Seconds:\t<unset>\n")
} }
describeJobTemplate(scheduledJob.Spec.JobTemplate, w) describeJobTemplate(scheduledJob.Spec.JobTemplate, w)
printLabelsMultiline(w, "Labels", scheduledJob.Labels)
printAnnotationsMultiline(w, "Annotations", scheduledJob.Annotations)
if scheduledJob.Status.LastScheduleTime != nil { if scheduledJob.Status.LastScheduleTime != nil {
w.Write(LEVEL_0, "Last Schedule Time:\t%s\n", scheduledJob.Status.LastScheduleTime.Time.Format(time.RFC1123Z)) w.Write(LEVEL_0, "Last Schedule Time:\t%s\n", scheduledJob.Status.LastScheduleTime.Time.Format(time.RFC1123Z))
} else { } else {
@ -1442,7 +1434,6 @@ func describeCronJob(scheduledJob *batch.CronJob, events *api.EventList) (string
} }
func describeJobTemplate(jobTemplate batch.JobTemplateSpec, w *PrefixWriter) { func describeJobTemplate(jobTemplate batch.JobTemplateSpec, w *PrefixWriter) {
w.Write(LEVEL_0, "Image(s):\t%s\n", makeImageList(&jobTemplate.Spec.Template.Spec))
if jobTemplate.Spec.Selector != nil { if jobTemplate.Spec.Selector != nil {
selector, _ := metav1.LabelSelectorAsSelector(jobTemplate.Spec.Selector) selector, _ := metav1.LabelSelectorAsSelector(jobTemplate.Spec.Selector)
w.Write(LEVEL_0, "Selector:\t%s\n", selector) w.Write(LEVEL_0, "Selector:\t%s\n", selector)
@ -1462,7 +1453,7 @@ func describeJobTemplate(jobTemplate batch.JobTemplateSpec, w *PrefixWriter) {
if jobTemplate.Spec.ActiveDeadlineSeconds != nil { if jobTemplate.Spec.ActiveDeadlineSeconds != nil {
w.Write(LEVEL_0, "Active Deadline Seconds:\t%ds\n", *jobTemplate.Spec.ActiveDeadlineSeconds) w.Write(LEVEL_0, "Active Deadline Seconds:\t%ds\n", *jobTemplate.Spec.ActiveDeadlineSeconds)
} }
describeVolumes(jobTemplate.Spec.Template.Spec.Volumes, w, "") DescribePodTemplate(&jobTemplate.Spec.Template, w.out)
} }
func printActiveJobs(w *PrefixWriter, title string, jobs []api.ObjectReference) { func printActiveJobs(w *PrefixWriter, title string, jobs []api.ObjectReference) {
@ -1516,7 +1507,6 @@ func describeDaemonSet(daemon *extensions.DaemonSet, events *api.EventList, runn
return tabbedString(func(out io.Writer) error { return tabbedString(func(out io.Writer) error {
w := &PrefixWriter{out} w := &PrefixWriter{out}
w.Write(LEVEL_0, "Name:\t%s\n", daemon.Name) w.Write(LEVEL_0, "Name:\t%s\n", daemon.Name)
w.Write(LEVEL_0, "Image(s):\t%s\n", makeImageList(&daemon.Spec.Template.Spec))
selector, err := metav1.LabelSelectorAsSelector(daemon.Spec.Selector) selector, err := metav1.LabelSelectorAsSelector(daemon.Spec.Selector)
if err != nil { if err != nil {
// this shouldn't happen if LabelSelector passed validation // this shouldn't happen if LabelSelector passed validation
@ -1530,6 +1520,7 @@ func describeDaemonSet(daemon *extensions.DaemonSet, events *api.EventList, runn
w.Write(LEVEL_0, "Current Number of Nodes Scheduled: %d\n", daemon.Status.CurrentNumberScheduled) w.Write(LEVEL_0, "Current Number of Nodes Scheduled: %d\n", daemon.Status.CurrentNumberScheduled)
w.Write(LEVEL_0, "Number of Nodes Misscheduled: %d\n", daemon.Status.NumberMisscheduled) w.Write(LEVEL_0, "Number of Nodes Misscheduled: %d\n", daemon.Status.NumberMisscheduled)
w.Write(LEVEL_0, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed) w.Write(LEVEL_0, "Pods Status:\t%d Running / %d Waiting / %d Succeeded / %d Failed\n", running, waiting, succeeded, failed)
DescribePodTemplate(&daemon.Spec.Template, out)
if events != nil { if events != nil {
DescribeEvents(events, w) DescribeEvents(events, w)
} }
@ -2414,10 +2405,7 @@ func (dd *DeploymentDescriber) Describe(namespace, name string, describerSetting
ru := d.Spec.Strategy.RollingUpdate ru := d.Spec.Strategy.RollingUpdate
w.Write(LEVEL_0, "RollingUpdateStrategy:\t%s max unavailable, %s max surge\n", ru.MaxUnavailable.String(), ru.MaxSurge.String()) w.Write(LEVEL_0, "RollingUpdateStrategy:\t%s max unavailable, %s max surge\n", ru.MaxUnavailable.String(), ru.MaxSurge.String())
} }
if len(internalDeployment.Spec.Template.Spec.InitContainers) > 0 { DescribePodTemplate(&internalDeployment.Spec.Template, out)
describeContainers("Init Containers", internalDeployment.Spec.Template.Spec.InitContainers, nil, nil, w, "")
}
describeContainers("Containers", internalDeployment.Spec.Template.Spec.Containers, nil, nil, w, "")
if len(d.Status.Conditions) > 0 { if len(d.Status.Conditions) > 0 {
w.Write(LEVEL_0, "Conditions:\n Type\tStatus\tReason\n") w.Write(LEVEL_0, "Conditions:\n Type\tStatus\tReason\n")
w.Write(LEVEL_1, "----\t------\t------\n") w.Write(LEVEL_1, "----\t------\t------\n")
@ -3035,18 +3023,6 @@ func SortedQoSResourceNames(list qos.QOSList) []api.ResourceName {
return resources return resources
} }
func listOfImages(spec *api.PodSpec) []string {
images := make([]string, 0, len(spec.Containers))
for _, container := range spec.Containers {
images = append(images, container.Image)
}
return images
}
func makeImageList(spec *api.PodSpec) string {
return strings.Join(listOfImages(spec), ",")
}
func versionedClientsetForDeployment(internalClient clientset.Interface) versionedclientset.Interface { func versionedClientsetForDeployment(internalClient clientset.Interface) versionedclientset.Interface {
if internalClient == nil { if internalClient == nil {
return &versionedclientset.Clientset{} return &versionedclientset.Clientset{}