Skip to content

Commit 98bc761

Browse files
authored
Merge pull request #5 from kitagry/use-batchv1-cronjob
Use batchv1.CronJob when kubernetes version is upper than 1.21
2 parents 05633df + 714db76 commit 98bc761

File tree

1 file changed

+42
-12
lines changed

1 file changed

+42
-12
lines changed

main.go

Lines changed: 42 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
152182
func randStr(n int) (string, error) {
153183
const letters = "abcdefghijklmnopqrstuvwxyz0123456789"
154184

0 commit comments

Comments
 (0)