in pkg/provider/k8s/k8s.go [1361:1390]
func (c *K8s) jobReady(resource runtime.Object) (bool, error) {
req := resource.(*batchV1.Job)
kind := resource.GetObjectKind().GroupVersionKind().Kind
if len(req.Namespace) == 0 {
req.Namespace = "default"
}
switch v := resource.GetObjectKind().GroupVersionKind().Version; v {
case "v1":
client := c.clt.BatchV1().Jobs(req.Namespace)
res, err := client.Get(c.ctx, req.Name, apiMetaV1.GetOptions{})
if err != nil {
return false, errors.Wrapf(err, "Checking Job resource:'%v' status failed err:%v", req.Name, err)
}
// Current `jobReady` only works for non-parallel jobs.
// https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/#parallel-jobs
count := int32(1)
if res.Status.Succeeded == count {
return true, nil
} else if res.Status.Failed == count {
return true, errors.New(fmt.Sprintf("Job %v has failed", req.Name))
}
return false, nil
default:
return false, fmt.Errorf("unknown object version: %v kind:'%v', name:'%v'", v, kind, req.Name)
}
}