...
1
16
17 package polymorphichelpers
18
19 import (
20 "errors"
21 "fmt"
22 "time"
23
24 appsv1 "k8s.io/api/apps/v1"
25 appsv1beta1 "k8s.io/api/apps/v1beta1"
26 appsv1beta2 "k8s.io/api/apps/v1beta2"
27 extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
28 "k8s.io/apimachinery/pkg/runtime"
29 "k8s.io/kubectl/pkg/scheme"
30 )
31
32 func defaultObjectRestarter(obj runtime.Object) ([]byte, error) {
33 switch obj := obj.(type) {
34 case *extensionsv1beta1.Deployment:
35 if obj.Spec.Paused {
36 return nil, errors.New("can't restart paused deployment (run rollout resume first)")
37 }
38 if obj.Spec.Template.ObjectMeta.Annotations == nil {
39 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
40 }
41 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
42 return runtime.Encode(scheme.Codecs.LegacyCodec(extensionsv1beta1.SchemeGroupVersion), obj)
43
44 case *appsv1.Deployment:
45 if obj.Spec.Paused {
46 return nil, errors.New("can't restart paused deployment (run rollout resume first)")
47 }
48 if obj.Spec.Template.ObjectMeta.Annotations == nil {
49 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
50 }
51 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
52 return runtime.Encode(scheme.Codecs.LegacyCodec(appsv1.SchemeGroupVersion), obj)
53
54 case *appsv1beta2.Deployment:
55 if obj.Spec.Paused {
56 return nil, errors.New("can't restart paused deployment (run rollout resume first)")
57 }
58 if obj.Spec.Template.ObjectMeta.Annotations == nil {
59 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
60 }
61 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
62 return runtime.Encode(scheme.Codecs.LegacyCodec(appsv1beta2.SchemeGroupVersion), obj)
63
64 case *appsv1beta1.Deployment:
65 if obj.Spec.Paused {
66 return nil, errors.New("can't restart paused deployment (run rollout resume first)")
67 }
68 if obj.Spec.Template.ObjectMeta.Annotations == nil {
69 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
70 }
71 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
72 return runtime.Encode(scheme.Codecs.LegacyCodec(appsv1beta1.SchemeGroupVersion), obj)
73
74 case *extensionsv1beta1.DaemonSet:
75 if obj.Spec.Template.ObjectMeta.Annotations == nil {
76 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
77 }
78 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
79 return runtime.Encode(scheme.Codecs.LegacyCodec(extensionsv1beta1.SchemeGroupVersion), obj)
80
81 case *appsv1.DaemonSet:
82 if obj.Spec.Template.ObjectMeta.Annotations == nil {
83 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
84 }
85 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
86 return runtime.Encode(scheme.Codecs.LegacyCodec(appsv1.SchemeGroupVersion), obj)
87
88 case *appsv1beta2.DaemonSet:
89 if obj.Spec.Template.ObjectMeta.Annotations == nil {
90 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
91 }
92 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
93 return runtime.Encode(scheme.Codecs.LegacyCodec(appsv1beta2.SchemeGroupVersion), obj)
94
95 case *appsv1.StatefulSet:
96 if obj.Spec.Template.ObjectMeta.Annotations == nil {
97 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
98 }
99 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
100 return runtime.Encode(scheme.Codecs.LegacyCodec(appsv1.SchemeGroupVersion), obj)
101
102 case *appsv1beta1.StatefulSet:
103 if obj.Spec.Template.ObjectMeta.Annotations == nil {
104 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
105 }
106 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
107 return runtime.Encode(scheme.Codecs.LegacyCodec(appsv1beta1.SchemeGroupVersion), obj)
108
109 case *appsv1beta2.StatefulSet:
110 if obj.Spec.Template.ObjectMeta.Annotations == nil {
111 obj.Spec.Template.ObjectMeta.Annotations = make(map[string]string)
112 }
113 obj.Spec.Template.ObjectMeta.Annotations["kubectl.kubernetes.io/restartedAt"] = time.Now().Format(time.RFC3339)
114 return runtime.Encode(scheme.Codecs.LegacyCodec(appsv1beta2.SchemeGroupVersion), obj)
115
116 default:
117 return nil, fmt.Errorf("restarting is not supported")
118 }
119 }
120
View as plain text