// Wait for job to reach completions. func waitForV1JobFinish(c *client.Client, ns, jobName string, completions int32) error { return wait.Poll(framework.Poll, v1JobTimeout, func() (bool, error) { curr, err := c.Batch().Jobs(ns).Get(jobName) if err != nil { return false, err } return curr.Status.Succeeded == completions, nil }) }
// Wait for at least given amount of active jobs. func waitForActiveJobs(c *client.Client, ns, scheduledJobName string, active int) error { return wait.Poll(framework.Poll, scheduledJobTimeout, func() (bool, error) { curr, err := c.Batch().ScheduledJobs(ns).Get(scheduledJobName) if err != nil { return false, err } return len(curr.Status.Active) >= active, nil }) }
// waitForJobsAtLeast waits for at least a number of jobs to appear. func waitForJobsAtLeast(c *client.Client, ns string, atLeast int) error { return wait.Poll(framework.Poll, scheduledJobTimeout, func() (bool, error) { jobs, err := c.Batch().Jobs(ns).List(api.ListOptions{}) if err != nil { return false, err } return len(jobs.Items) >= atLeast, nil }) }
// Wait for a job to be replaced with a new one. func waitForJobReplaced(c *client.Client, ns, previousJobName string) error { return wait.Poll(framework.Poll, scheduledJobTimeout, func() (bool, error) { jobs, err := c.Batch().Jobs(ns).List(api.ListOptions{}) if err != nil { return false, err } if len(jobs.Items) != 1 { return false, fmt.Errorf("More than one job is running") } return jobs.Items[0].Name != previousJobName, nil }) }
// Wait for job fail. func waitForV1JobFail(c *client.Client, ns, jobName string) error { return wait.Poll(framework.Poll, v1JobTimeout, func() (bool, error) { curr, err := c.Batch().Jobs(ns).Get(jobName) if err != nil { return false, err } for _, c := range curr.Status.Conditions { if c.Type == batch.JobFailed && c.Status == api.ConditionTrue { return true, nil } } return false, nil }) }
// waitForAnyFinishedJob waits for any completed job to appear. func waitForAnyFinishedJob(c *client.Client, ns string) error { return wait.Poll(framework.Poll, scheduledJobTimeout, func() (bool, error) { jobs, err := c.Batch().Jobs(ns).List(api.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 a job to be replaced with a new one. func waitForJobReplaced(c *client.Client, ns, previousJobName string) error { return wait.Poll(framework.Poll, scheduledJobTimeout, func() (bool, error) { jobs, err := c.Batch().Jobs(ns).List(api.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 }) }
// checkNoUnexpectedEvents checks unexpected events didn't happen. // Currently only "UnexpectedJob" is checked. func checkNoUnexpectedEvents(c *client.Client, ns, scheduledJobName string) error { sj, err := c.Batch().ScheduledJobs(ns).Get(scheduledJobName) if err != nil { return fmt.Errorf("error in getting scheduledjob %s/%s: %v", ns, scheduledJobName, err) } events, err := c.Events(ns).Search(sj) if err != nil { return fmt.Errorf("error in listing events: %s", err) } for _, e := range events.Items { if e.Reason == "UnexpectedJob" { return fmt.Errorf("found unexpected event: %#v", e) } } return nil }
// GetWorkloads returns a list of all workloads in the cluster. func GetWorkloads(client *k8sClient.Client, heapsterClient client.HeapsterClient, nsQuery *common.NamespaceQuery, metricQuery *dataselect.MetricQuery) (*Workloads, error) { log.Printf("Getting lists of all workloads") channels := &common.ResourceChannels{ ReplicationControllerList: common.GetReplicationControllerListChannel(client, nsQuery, 1), ReplicaSetList: common.GetReplicaSetListChannel(client.Extensions(), nsQuery, 1), JobList: common.GetJobListChannel(client.Batch(), nsQuery, 1), DaemonSetList: common.GetDaemonSetListChannel(client.Extensions(), nsQuery, 1), DeploymentList: common.GetDeploymentListChannel(client.Extensions(), nsQuery, 1), PetSetList: common.GetPetSetListChannel(client.Apps(), nsQuery, 1), ServiceList: common.GetServiceListChannel(client, nsQuery, 1), PodList: common.GetPodListChannel(client, nsQuery, 7), EventList: common.GetEventListChannel(client, nsQuery, 6), } return GetWorkloadsFromChannels(channels, heapsterClient, metricQuery) }
func deleteV1Job(c *client.Client, ns, name string) error { return c.Batch().Jobs(ns).Delete(name, api.NewDeleteOptions(0)) }
func createV1Job(c *client.Client, ns string, job *batch.Job) (*batch.Job, error) { return c.Batch().Jobs(ns).Create(job) }
func deleteScheduledJob(c *client.Client, ns, name string) error { return c.Batch().ScheduledJobs(ns).Delete(name, nil) }
func getScheduledJob(c *client.Client, ns, name string) (*batch.ScheduledJob, error) { return c.Batch().ScheduledJobs(ns).Get(name) }
func createScheduledJob(c *client.Client, ns string, scheduledJob *batch.ScheduledJob) (*batch.ScheduledJob, error) { return c.Batch().ScheduledJobs(ns).Create(scheduledJob) }
func getV1Job(c *client.Client, ns, name string) (*batch.Job, error) { return c.Batch().Jobs(ns).Get(name) }