diff --git a/manifests/crd-v1.yaml b/manifests/crd-v1.yaml new file mode 100644 index 00000000..9613c3a9 --- /dev/null +++ b/manifests/crd-v1.yaml @@ -0,0 +1,58 @@ +apiVersion: apiextensions.k8s.io/v1beta1 +kind: CustomResourceDefinition +metadata: + name: mxjobs.kubeflow.org +spec: + group: kubeflow.org + version: v1 + scope: Namespaced + names: + kind: MXJob + singular: mxjob + plural: mxjobs + subresources: + status: {} + validation: + openAPIV3Schema: + properties: + spec: + properties: + mxReplicaSpecs: + properties: + # The validation works when the configuration contains + # `Worker`, `Server`, `Scheduler`, + # `TunerTracker`, `TunerServer`, `Tuner`, + # Otherwise it will not be validated. + Scheduler: + properties: + replicas: + type: integer + minimum: 1 + maximum: 1 + Worker: + properties: + replicas: + type: integer + minimum: 1 + Server: + properties: + replicas: + type: integer + minimum: 1 + TunerTracker: + properties: + replicas: + type: integer + minimum: 1 + maximum: 1 + TunerServer: + properties: + replicas: + type: integer + minimum: 1 + Tuner: + properties: + replicas: + type: integer + minimum: 1 + maximum: 1 diff --git a/pkg/controller.v1/mxnet/job.go b/pkg/controller.v1/mxnet/job.go index b822de15..d8830be4 100644 --- a/pkg/controller.v1/mxnet/job.go +++ b/pkg/controller.v1/mxnet/job.go @@ -62,7 +62,7 @@ func (tc *MXController) addMXJob(obj interface{}) { logger.Errorf("Could not set nested field: %v", err1) } logger.Infof("Updating the job to; %+v", un.Object) - err = client.Update(un, mxv1.Plural) + err = client.UpdateStatus(un, mxv1.Plural) if err != nil { logger.Errorf("Could not update the MXJob; %v", err) } diff --git a/pkg/controller.v1/mxnet/status.go b/pkg/controller.v1/mxnet/status.go index f91ea629..61aa3aec 100644 --- a/pkg/controller.v1/mxnet/status.go +++ b/pkg/controller.v1/mxnet/status.go @@ -128,7 +128,7 @@ func updateStatusSingle(mxjob *mxv1.MXJob, rtype mxv1.MXReplicaType, replicas in // updateMXJobStatus updates the status of the given MXJob. func (tc *MXController) updateMXJobStatus(mxjob *mxv1.MXJob) error { - _, err := tc.mxJobClientSet.KubeflowV1().MXJobs(mxjob.Namespace).Update(mxjob) + _, err := tc.mxJobClientSet.KubeflowV1().MXJobs(mxjob.Namespace).UpdateStatus(mxjob) return err } diff --git a/pkg/util/k8sutil/client.go b/pkg/util/k8sutil/client.go index 05e46db2..124f80a0 100644 --- a/pkg/util/k8sutil/client.go +++ b/pkg/util/k8sutil/client.go @@ -80,3 +80,17 @@ func (c *CRDRestClient) Update(obj *metav1unstructured.Unstructured, plural stri } return err } + +func (c *CRDRestClient) UpdateStatus(obj *metav1unstructured.Unstructured, plural string) error { + logger := mxlogger.LoggerForUnstructured(obj, obj.GetKind()) + if plural == "" { + logger.Errorf("Could not issue update because plural not set.") + return fmt.Errorf("plural must be set") + } + r := c.restcli.Put().Resource(plural).Namespace(obj.GetNamespace()).Name(obj.GetName()).SubResource("status").Body(obj) + _, err := r.DoRaw() + if err != nil { + logger.Errorf("Could not issue update using URL: %v; error; %v", r.URL().String(), err) + } + return err +} \ No newline at end of file