// ViewHistory returns a description of all the history it can find for a deployment config. func (h *DeploymentConfigHistoryViewer) ViewHistory(namespace, name string, revision int64) (string, error) { opts := kapi.ListOptions{LabelSelector: deployutil.ConfigSelector(name)} deploymentList, err := h.rn.ReplicationControllers(namespace).List(opts) if err != nil { return "", err } if len(deploymentList.Items) == 0 { return "No rollout history found.", nil } items := deploymentList.Items history := make([]*kapi.ReplicationController, 0, len(items)) for i := range items { history = append(history, &items[i]) } // Print details of a specific revision if revision > 0 { var desired *kapi.PodTemplateSpec // We could use a binary search here but brute-force is always faster to write for i := range history { rc := history[i] if deployutil.DeploymentVersionFor(rc) == revision { desired = rc.Spec.Template break } } if desired == nil { return "", fmt.Errorf("unable to find the specified revision") } buf := bytes.NewBuffer([]byte{}) kubectl.DescribePodTemplate(desired, buf) return buf.String(), nil } sort.Sort(deployutil.ByLatestVersionAsc(history)) return tabbedString(func(out *tabwriter.Writer) error { fmt.Fprintf(out, "REVISION\tSTATUS\tCAUSE\n") for i := range history { rc := history[i] rev := deployutil.DeploymentVersionFor(rc) status := deployutil.DeploymentStatusFor(rc) cause := rc.Annotations[deployapi.DeploymentStatusReasonAnnotation] if len(cause) == 0 { cause = "<unknown>" } fmt.Fprintf(out, "%d\t%s\t%s\n", rev, status, cause) } return nil }) }
func deploymentInfo(oc *exutil.CLI, name string) (*deployapi.DeploymentConfig, []kapi.ReplicationController, []kapi.Pod, error) { dc, err := oc.REST().DeploymentConfigs(oc.Namespace()).Get(name) if err != nil { return nil, nil, nil, err } // get pods before RCs, so we see more RCs than pods. pods, err := oc.KubeREST().Pods(oc.Namespace()).List(kapi.ListOptions{}) if err != nil { return nil, nil, nil, err } rcs, err := oc.KubeREST().ReplicationControllers(oc.Namespace()).List(kapi.ListOptions{ LabelSelector: deployutil.ConfigSelector(name), }) if err != nil { return nil, nil, nil, err } sort.Sort(deployutil.ByLatestVersionAsc(rcs.Items)) return dc, rcs.Items, pods.Items, nil }