mirror of
https://github.com/k3s-io/kubernetes.git
synced 2026-01-06 07:57:35 +00:00
Implements kubectl rollout status and history for StatefulSet
This commit is contained in:
@@ -52,6 +52,8 @@ func HistoryViewerFor(kind schema.GroupKind, c clientset.Interface) (HistoryView
|
||||
switch kind {
|
||||
case extensions.Kind("Deployment"), apps.Kind("Deployment"):
|
||||
return &DeploymentHistoryViewer{c}, nil
|
||||
case apps.Kind("StatefulSet"):
|
||||
return &StatefulSetHistoryViewer{c}, nil
|
||||
case extensions.Kind("DaemonSet"):
|
||||
return &DaemonSetHistoryViewer{c}, nil
|
||||
}
|
||||
@@ -200,6 +202,58 @@ func (h *DaemonSetHistoryViewer) ViewHistory(namespace, name string, revision in
|
||||
})
|
||||
}
|
||||
|
||||
type StatefulSetHistoryViewer struct {
|
||||
c clientset.Interface
|
||||
}
|
||||
|
||||
func getOwner(revision apps.ControllerRevision) *metav1.OwnerReference {
|
||||
ownerRefs := revision.GetOwnerReferences()
|
||||
for i := range ownerRefs {
|
||||
owner := &ownerRefs[i]
|
||||
if owner.Controller != nil && *owner.Controller == true {
|
||||
return owner
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ViewHistory returns a list of the revision history of a statefulset
|
||||
// TODO: this should be a describer
|
||||
// TODO: needs to implement detailed revision view
|
||||
func (h *StatefulSetHistoryViewer) ViewHistory(namespace, name string, revision int64) (string, error) {
|
||||
|
||||
sts, err := h.c.Apps().StatefulSets(namespace).Get(name, metav1.GetOptions{})
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to retrieve statefulset %s", err)
|
||||
}
|
||||
selector, err := metav1.LabelSelectorAsSelector(sts.Spec.Selector)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to retrieve statefulset history %s", err)
|
||||
}
|
||||
revisions, err := h.c.Apps().ControllerRevisions(namespace).List(metav1.ListOptions{LabelSelector: selector.String()})
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to retrieve statefulset history %s", err)
|
||||
}
|
||||
if len(revisions.Items) <= 0 {
|
||||
return "No rollout history found.", nil
|
||||
}
|
||||
revisionNumbers := make([]int64, len(revisions.Items))
|
||||
for i := range revisions.Items {
|
||||
if owner := getOwner(revisions.Items[i]); owner != nil && owner.UID == sts.UID {
|
||||
revisionNumbers[i] = revisions.Items[i].Revision
|
||||
}
|
||||
}
|
||||
sliceutil.SortInts64(revisionNumbers)
|
||||
|
||||
return tabbedString(func(out io.Writer) error {
|
||||
fmt.Fprintf(out, "REVISION\n")
|
||||
for _, r := range revisionNumbers {
|
||||
fmt.Fprintf(out, "%d\n", r)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
// controlledHistories returns all ControllerRevisions controlled by the given DaemonSet
|
||||
// TODO: Use external version DaemonSet instead when #3955 is fixed
|
||||
func controlledHistories(c clientset.Interface, ds *extensions.DaemonSet) ([]*appsv1beta1.ControllerRevision, error) {
|
||||
|
||||
Reference in New Issue
Block a user