@@ -8,12 +8,12 @@ import (
88 "os"
99 "os/exec"
1010 "path/filepath"
11+ "strconv"
1112 "strings"
1213
1314 "github.com/mattn/go-tty"
1415 "github.com/mattn/go-tty/ttyutil"
1516 batchv1 "k8s.io/api/batch/v1"
16- batchv1beta1 "k8s.io/api/batch/v1beta1"
1717 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1818 "k8s.io/client-go/kubernetes"
1919 _ "k8s.io/client-go/plugin/pkg/client/auth"
@@ -76,13 +76,7 @@ Options:
7676 namespace = kc .CurrentNamespace ()
7777 }
7878
79- cj , err := clientset .BatchV1beta1 ().CronJobs (namespace ).Get (context .Background (), name , metav1.GetOptions {})
80- if err != nil {
81- fmt .Fprintf (os .Stderr , "%s: %v\n " , cmdName , err )
82- return exitStatusErr
83- }
84-
85- job , err := newJob (cj )
79+ job , err := newJob (context .Background (), clientset , namespace , name )
8680 if err != nil {
8781 fmt .Fprintf (os .Stderr , "%s: %v\n " , cmdName , err )
8882 return exitStatusErr
@@ -130,7 +124,12 @@ func getNamespaceAndName(s []string) (namespace, name string, ok bool) {
130124 return s [0 ], s [1 ], true
131125}
132126
133- func newJob (cj * batchv1beta1.CronJob ) (* batchv1.Job , error ) {
127+ func newJob (ctx context.Context , clientset * kubernetes.Clientset , namespace , name string ) (* batchv1.Job , error ) {
128+ jobSpec , err := newJobTemplate (ctx , clientset , namespace , name )
129+ if err != nil {
130+ return nil , err
131+ }
132+
134133 suffix , err := randStr (6 )
135134 if err != nil {
136135 return nil , err
@@ -141,14 +140,45 @@ func newJob(cj *batchv1beta1.CronJob) (*batchv1.Job, error) {
141140 Kind : "Job" ,
142141 },
143142 ObjectMeta : metav1.ObjectMeta {
144- Namespace : cj . Namespace ,
145- Name : fmt .Sprintf ("%s-%s" , cj . Name , suffix ),
143+ Namespace : namespace ,
144+ Name : fmt .Sprintf ("%s-%s" , name , suffix ),
146145 },
147- Spec : cj . Spec . JobTemplate . Spec ,
146+ Spec : jobSpec ,
148147 }
149148 return job , nil
150149}
151150
151+ func newJobTemplate (ctx context.Context , clientset * kubernetes.Clientset , namespace , name string ) (batchv1.JobSpec , error ) {
152+ v , err := clientset .ServerVersion ()
153+ if err != nil {
154+ return batchv1.JobSpec {}, err
155+ }
156+
157+ major , err := strconv .Atoi (v .Major )
158+ if err != nil {
159+ return batchv1.JobSpec {}, err
160+ }
161+
162+ minor , err := strconv .Atoi (v .Minor )
163+ if err != nil {
164+ return batchv1.JobSpec {}, err
165+ }
166+
167+ if major >= 1 && minor >= 21 {
168+ cj , err := clientset .BatchV1 ().CronJobs (namespace ).Get (ctx , name , metav1.GetOptions {})
169+ if err != nil {
170+ return batchv1.JobSpec {}, err
171+ }
172+ return cj .Spec .JobTemplate .Spec , nil
173+ }
174+
175+ cj , err := clientset .BatchV1beta1 ().CronJobs (namespace ).Get (ctx , name , metav1.GetOptions {})
176+ if err != nil {
177+ return batchv1.JobSpec {}, err
178+ }
179+ return cj .Spec .JobTemplate .Spec , nil
180+ }
181+
152182func randStr (n int ) (string , error ) {
153183 const letters = "abcdefghijklmnopqrstuvwxyz0123456789"
154184
0 commit comments