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 } } }