kaniko-job-test/getJob.go
2023-08-26 17:24:47 +08:00

66 lines
1.4 KiB
Go

package main
import (
"context"
"flag"
"fmt"
"github.com/dablelv/go-huge-util/encoding"
apibatchv1 "k8s.io/api/batch/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/utils/pointer"
)
func main() {
kubeconfig := flag.String("kubeconfig", "/Users/yangzun/.kube/config", "absolute path to the kubeconfig file")
config, err := clientcmd.BuildConfigFromFlags("", *kubeconfig)
if err != nil {
panic(err)
}
clientset, err := kubernetes.NewForConfig(config)
if err != nil {
panic(err.Error())
}
namespace := "default"
jobName := "pi"
// watch, err := clientset.BatchV1().Jobs(namespace).Watch(context.TODO(), metav1.ListOptions{})
listOptions := metav1.ListOptions{
FieldSelector: "metadata.name=" + jobName,
TimeoutSeconds: pointer.Int64Ptr(600), // Set the timeout to 1 hour
}
watch, err := clientset.BatchV1().Jobs(namespace).Watch(context.TODO(), listOptions)
if err != nil {
panic(err)
}
for event := range watch.ResultChan() {
job, ok := event.Object.(*apibatchv1.Job)
s, _ := encoding.ToIndentJSON(&job)
fmt.Printf("student=%v\n", s)
if !ok {
fmt.Println("unexpected type")
continue
}
if job.Name != jobName {
continue
}
if job.Status.CompletionTime != nil {
fmt.Println("Job completed")
break
}
if job.Status.Failed > 0 {
fmt.Println("Job failed")
break
}
}
}