// waitForJobsAtLeast waits for at least a number of jobs to appear. func waitForJobsAtLeast(c clientset.Interface, ns string, atLeast int) error { return wait.Poll(framework.Poll, cronJobTimeout, func() (bool, error) { jobs, err := c.Batch().Jobs(ns).List(v1.ListOptions{}) if err != nil { return false, err } return len(jobs.Items) >= atLeast, nil }) }
// Wait for job to reach completions. func waitForJobFinish(c clientset.Interface, ns, jobName string, completions int32) error { return wait.Poll(framework.Poll, jobTimeout, func() (bool, error) { curr, err := c.Batch().Jobs(ns).Get(jobName, metav1.GetOptions{}) if err != nil { return false, err } return curr.Status.Succeeded == completions, nil }) }
// waitForAnyFinishedJob waits for any completed job to appear. func waitForAnyFinishedJob(c clientset.Interface, ns string) error { return wait.Poll(framework.Poll, cronJobTimeout, func() (bool, error) { jobs, err := c.Batch().Jobs(ns).List(v1.ListOptions{}) if err != nil { return false, err } for i := range jobs.Items { if job.IsJobFinished(&jobs.Items[i]) { return true, nil } } return false, nil }) }
// Wait for job fail. func waitForJobFail(c clientset.Interface, ns, jobName string, timeout time.Duration) error { return wait.Poll(framework.Poll, timeout, func() (bool, error) { curr, err := c.Batch().Jobs(ns).Get(jobName, metav1.GetOptions{}) if err != nil { return false, err } for _, c := range curr.Status.Conditions { if c.Type == batch.JobFailed && c.Status == v1.ConditionTrue { return true, nil } } return false, nil }) }
// Wait for a job to be replaced with a new one. func waitForJobReplaced(c clientset.Interface, ns, previousJobName string) error { return wait.Poll(framework.Poll, cronJobTimeout, func() (bool, error) { jobs, err := c.Batch().Jobs(ns).List(v1.ListOptions{}) if err != nil { return false, err } if len(jobs.Items) > 1 { return false, fmt.Errorf("More than one job is running %+v", jobs.Items) } else if len(jobs.Items) == 0 { framework.Logf("Warning: Found 0 jobs in namespace %v", ns) return false, nil } return jobs.Items[0].Name != previousJobName, nil }) }
// NewJobInformer returns a SharedIndexInformer that lists and watches all jobs func NewJobInformer(client clientset.Interface, resyncPeriod time.Duration) cache.SharedIndexInformer { sharedIndexInformer := cache.NewSharedIndexInformer( &cache.ListWatch{ ListFunc: func(options v1.ListOptions) (runtime.Object, error) { return client.Batch().Jobs(v1.NamespaceAll).List(options) }, WatchFunc: func(options v1.ListOptions) (watch.Interface, error) { return client.Batch().Jobs(v1.NamespaceAll).Watch(options) }, }, &batch.Job{}, resyncPeriod, cache.Indexers{cache.NamespaceIndex: cache.MetaNamespaceIndexFunc}, ) return sharedIndexInformer }
func deleteJob(c clientset.Interface, ns, name string) error { return c.Batch().Jobs(ns).Delete(name, nil) }
func updateJob(c clientset.Interface, ns string, job *batch.Job) (*batch.Job, error) { return c.Batch().Jobs(ns).Update(job) }
func getJob(c clientset.Interface, ns, name string) (*batch.Job, error) { return c.Batch().Jobs(ns).Get(name, metav1.GetOptions{}) }
func deleteV1Job(c clientset.Interface, ns, name string) error { return c.Batch().Jobs(ns).Delete(name, v1.NewDeleteOptions(0)) }
func createV1Job(c clientset.Interface, ns string, job *batch.Job) (*batch.Job, error) { return c.Batch().Jobs(ns).Create(job) }