@@ -2,18 +2,20 @@ package controller
2
2
3
3
import (
4
4
"encoding/json"
5
+ "log"
6
+ "reflect"
7
+ "regexp"
8
+ "strconv"
9
+ "sync"
10
+ "time"
11
+
5
12
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
6
13
"k8s.io/apimachinery/pkg/runtime"
14
+ "k8s.io/apimachinery/pkg/version"
7
15
"k8s.io/apimachinery/pkg/watch"
8
16
"k8s.io/client-go/kubernetes"
9
17
"k8s.io/client-go/pkg/api/v1"
10
18
"k8s.io/client-go/tools/cache"
11
- "k8s.io/apimachinery/pkg/version"
12
- "log"
13
- "reflect"
14
- "strconv"
15
- "sync"
16
- "time"
17
19
)
18
20
19
21
// PodController watches the kubernetes api for changes to Pods and
@@ -46,7 +48,7 @@ func NewPodController(kclient *kubernetes.Clientset, opts map[string]string) *Po
46
48
dryRun , _ := strconv .ParseBool (opts ["dryRun" ])
47
49
version , err := kclient .ServerVersion ()
48
50
49
- if err != nil {
51
+ if err != nil {
50
52
log .Fatalf ("Failed to retrieve server version %v" , err )
51
53
}
52
54
@@ -103,7 +105,7 @@ func (c *PodController) doTheMagic(cur interface{}, keepSuccessHours int, keepFa
103
105
podObj := cur .(* v1.Pod )
104
106
parentJobName := c .getParentJobName (podObj , version )
105
107
// if we couldn't find a prent job name, ignore this pod
106
- if parentJobName == "" {
108
+ if parentJobName == "" {
107
109
log .Printf ("Pod %s was not created by a job, ignoring." , podObj .Name )
108
110
return
109
111
}
@@ -165,14 +167,23 @@ func (c *PodController) deleteObjects(podObj *v1.Pod, parentJobName string, dryR
165
167
return
166
168
}
167
169
168
-
169
170
func (c * PodController ) getParentJobName (podObj * v1.Pod , version version.Info ) (parentJobName string ) {
170
171
171
172
oldVersion := false
172
173
173
- major ,_ := strconv .Atoi (version .Major )
174
- minor ,_ := strconv .Atoi (version .Minor )
175
- if major < 2 && minor < 8 {
174
+ major , _ := strconv .Atoi (version .Major )
175
+
176
+ var minor int
177
+ re := regexp .MustCompile ("[0-9]+" )
178
+ m := re .FindAllString (version .Minor , 1 )
179
+ if len (m ) != 0 {
180
+ minor , _ = strconv .Atoi (m [0 ])
181
+ } else {
182
+ log .Printf ("failed to parse minor version %s" , version .Minor )
183
+ minor = 0
184
+ }
185
+
186
+ if major < 2 && minor < 8 {
176
187
oldVersion = true
177
188
}
178
189
@@ -182,7 +193,7 @@ func (c *PodController) getParentJobName(podObj *v1.Pod, version version.Info) (
182
193
if createdMeta .Reference .Kind == "Job" {
183
194
parentJobName = createdMeta .Reference .Name
184
195
}
185
- }else {
196
+ } else {
186
197
// Going all over the owners, looking for a job, usually there is only one owner
187
198
for _ , ow := range podObj .OwnerReferences {
188
199
if ow .Kind == "Job" {
@@ -191,4 +202,4 @@ func (c *PodController) getParentJobName(podObj *v1.Pod, version version.Info) (
191
202
}
192
203
}
193
204
return
194
- }
205
+ }
0 commit comments