func()

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