В моем приложении есть концепция, чтобы удалить JOB, а затем просто воссоздать его. Я попытался удалить задание, затем просто поспать некоторое время и попытаться воссоздать его.
, но я не убежден, что это решение не является оптимистичным c.
Итак, после того, как что-то произошло, из моего кода я буду запускать функцию в Goroutine.
вот код внутри функции.
func CreateGenerateJob() {
err = clientset.BatchV1().Jobs("default").Delete(jobName, nil)
if err != nil {
logrus.Errorf("could not delete job: %v", err)
}
time.Sleep(60*time.Second)
createdJob, err := clientset.BatchV1().Jobs("default").Create(job)
if err != nil {
logrus.Fatalf("could not create job: %v", err)
}
}
Это совсем не хорошо. Но у меня была идея следить за удаленными ресурсами.
Поэтому перед удалением задания я добавил функцию наблюдения:
func CreateGenerateJob() {
watchForTheJob(clientset)
err = clientset.BatchV1().Jobs("default").Delete(jobName, nil)
if err != nil {
logrus.Errorf("could not delete job: %v", err)
}
}
Содержание функции следующее:
func watchForTheJob(clientset kubernetes.Interface) {
kubeInformerFactory := kubeinformers.NewSharedInformerFactory(clientset, time.Second*30)
svcInformer := kubeInformerFactory.Batch().V1().Jobs().Informer()
svcInformer.AddEventHandler(cache.ResourceEventHandlerFuncs{
DeleteFunc: func(obj interface{}) {
logrus.Infof("service deleted: %s \n", obj)
// Now I can create the Job.
createdJob, err := clientset.BatchV1().Jobs("default").Create(job)
if err != nil {
logrus.Fatalf("could not create job: %v", err)
}
logrus.Infof("job created: %s", createdJob.Name)
},
},)
stop := make(chan struct{})
defer close(stop)
kubeInformerFactory.Start(stop)
for {
time.Sleep(time.Second)
}
}
Проблема в том, что я Я не уверен, что работа действительно доступна или нет. (может ли удаление произойти или нет)
Так как я запускаю весь код этого пакета в программе.
go adapter.CreateGenerateJob()
Я хотел бы выйти из Goroutine после успешного создания задания, независимо от того, было ли задание удалено -> затем воссоздано или только создано.
это может быть решением, если при наблюдении за работой, а затем после ее создания просто выйти из события наблюдения.
Любое, решение для этого.