@@ -37,8 +37,8 @@ import (
37
37
clientextv1beta1 "k8s.io/client-go/kubernetes/typed/extensions/v1beta1"
38
38
"k8s.io/kubernetes/pkg/api"
39
39
apiv1 "k8s.io/kubernetes/pkg/api/v1"
40
- "k8s.io/kubernetes/pkg/apis/apps"
41
40
deploymentutil "k8s.io/kubernetes/pkg/controller/deployment/util"
41
+ kapps "k8s.io/kubernetes/pkg/kubectl/apps"
42
42
sliceutil "k8s.io/kubernetes/pkg/kubectl/util/slice"
43
43
printersinternal "k8s.io/kubernetes/pkg/printers/internalversion"
44
44
)
@@ -52,16 +52,47 @@ type HistoryViewer interface {
52
52
ViewHistory (namespace , name string , revision int64 ) (string , error )
53
53
}
54
54
55
+ type HistoryVisitor struct {
56
+ clientset kubernetes.Interface
57
+ result HistoryViewer
58
+ }
59
+
60
+ func (v * HistoryVisitor ) VisitDeployment (elem kapps.GroupKindElement ) {
61
+ v .result = & DeploymentHistoryViewer {v .clientset }
62
+ }
63
+
64
+ func (v * HistoryVisitor ) VisitStatefulSet (kind kapps.GroupKindElement ) {
65
+ v .result = & StatefulSetHistoryViewer {v .clientset }
66
+ }
67
+
68
+ func (v * HistoryVisitor ) VisitDaemonSet (kind kapps.GroupKindElement ) {
69
+ v .result = & DaemonSetHistoryViewer {v .clientset }
70
+ }
71
+
72
+ func (v * HistoryVisitor ) VisitJob (kind kapps.GroupKindElement ) {}
73
+ func (v * HistoryVisitor ) VisitPod (kind kapps.GroupKindElement ) {}
74
+ func (v * HistoryVisitor ) VisitReplicaSet (kind kapps.GroupKindElement ) {}
75
+ func (v * HistoryVisitor ) VisitReplicationController (kind kapps.GroupKindElement ) {}
76
+
77
+ // HistoryViewerFor returns an implementation of HistoryViewer interface for the given schema kind
55
78
func HistoryViewerFor (kind schema.GroupKind , c kubernetes.Interface ) (HistoryViewer , error ) {
56
- switch kind {
57
- case extensionsv1beta1 .SchemeGroupVersion .WithKind ("Deployment" ).GroupKind (), apps .Kind ("Deployment" ):
58
- return & DeploymentHistoryViewer {c }, nil
59
- case apps .Kind ("StatefulSet" ):
60
- return & StatefulSetHistoryViewer {c }, nil
61
- case extensionsv1beta1 .SchemeGroupVersion .WithKind ("DaemonSet" ).GroupKind (), apps .Kind ("DaemonSet" ):
62
- return & DaemonSetHistoryViewer {c }, nil
63
- }
64
- return nil , fmt .Errorf ("no history viewer has been implemented for %q" , kind )
79
+ elem := kapps .GroupKindElement (kind )
80
+ visitor := & HistoryVisitor {
81
+ clientset : c ,
82
+ }
83
+
84
+ // Determine which HistoryViewer we need here
85
+ err := elem .Accept (visitor )
86
+
87
+ if err != nil {
88
+ return nil , fmt .Errorf ("error retrieving history for %q, %v" , kind .String (), err )
89
+ }
90
+
91
+ if visitor .result == nil {
92
+ return nil , fmt .Errorf ("no history viewer has been implemented for %q" , kind .String ())
93
+ }
94
+
95
+ return visitor .result , nil
65
96
}
66
97
67
98
type DeploymentHistoryViewer struct {
0 commit comments