diff --git a/pkg/apis/yunikorn.apache.org/v1alpha1/type.go b/pkg/apis/yunikorn.apache.org/v1alpha1/type.go index bd20f8b32..a21497823 100644 --- a/pkg/apis/yunikorn.apache.org/v1alpha1/type.go +++ b/pkg/apis/yunikorn.apache.org/v1alpha1/type.go @@ -19,6 +19,7 @@ package v1alpha1 import ( + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/resource" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -37,29 +38,31 @@ type Application struct { // Spec part type ApplicationSpec struct { - Policy SchedulePolicy `json:"schedulingPolicy"` - Queue string `json:"queue"` - TaskGroup []Task `json:"taskGroups"` + SchedulingPolicy SchedulingPolicy `json:"schedulingPolicy"` + Queue string `json:"queue"` + TaskGroups []TaskGroup `json:"taskGroups"` } -type SchedulePolicy struct { - Policy SchedulingPolicy `json:"name"` - Parameters map[string]string `json:"parameters,omitempty"` +type SchedulingPolicy struct { + Type SchedulingPolicyType `json:"type"` + Parameters map[string]string `json:"parameters,omitempty"` } -type SchedulingPolicy string +type SchedulingPolicyType string const ( - TryOnce SchedulingPolicy = "TryOnce" - MaxRetry SchedulingPolicy = "MaxRetry" - TryReserve SchedulingPolicy = "TryReserve" - TryPreempt SchedulingPolicy = "TryPreempt" + TryOnce SchedulingPolicyType = "TryOnce" + MaxRetry SchedulingPolicyType = "MaxRetry" + TryReserve SchedulingPolicyType = "TryReserve" + TryPreempt SchedulingPolicyType = "TryPreempt" ) -type Task struct { - GroupName string `json:"groupName"` - MinMember int32 `json:"minMember"` - MinResource map[string]resource.Quantity `json:"minResource"` +type TaskGroup struct { + Name string `json:"name"` + MinMember int32 `json:"minMember"` + MinResource map[string]resource.Quantity `json:"minResource"` + NodeSelector metav1.LabelSelector `json:"nodeSelector,omitempty"` + Tolerations []v1.Toleration `json:"tolerations,omitempty"` } // Status part diff --git a/pkg/apis/yunikorn.apache.org/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/yunikorn.apache.org/v1alpha1/zz_generated.deepcopy.go index 25f88eb17..bebfec861 100644 --- a/pkg/apis/yunikorn.apache.org/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/yunikorn.apache.org/v1alpha1/zz_generated.deepcopy.go @@ -22,6 +22,7 @@ package v1alpha1 import ( + v1 "k8s.io/api/core/v1" resource "k8s.io/apimachinery/pkg/api/resource" runtime "k8s.io/apimachinery/pkg/runtime" ) @@ -90,10 +91,10 @@ func (in *ApplicationList) DeepCopyObject() runtime.Object { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ApplicationSpec) DeepCopyInto(out *ApplicationSpec) { *out = *in - in.Policy.DeepCopyInto(&out.Policy) - if in.TaskGroup != nil { - in, out := &in.TaskGroup, &out.TaskGroup - *out = make([]Task, len(*in)) + in.SchedulingPolicy.DeepCopyInto(&out.SchedulingPolicy) + if in.TaskGroups != nil { + in, out := &in.TaskGroups, &out.TaskGroups + *out = make([]TaskGroup, len(*in)) for i := range *in { (*in)[i].DeepCopyInto(&(*out)[i]) } @@ -129,7 +130,7 @@ func (in *ApplicationStatus) DeepCopy() *ApplicationStatus { } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *SchedulePolicy) DeepCopyInto(out *SchedulePolicy) { +func (in *SchedulingPolicy) DeepCopyInto(out *SchedulingPolicy) { *out = *in if in.Parameters != nil { in, out := &in.Parameters, &out.Parameters @@ -141,18 +142,18 @@ func (in *SchedulePolicy) DeepCopyInto(out *SchedulePolicy) { return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchedulePolicy. -func (in *SchedulePolicy) DeepCopy() *SchedulePolicy { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new SchedulingPolicy. +func (in *SchedulingPolicy) DeepCopy() *SchedulingPolicy { if in == nil { return nil } - out := new(SchedulePolicy) + out := new(SchedulingPolicy) in.DeepCopyInto(out) return out } // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *Task) DeepCopyInto(out *Task) { +func (in *TaskGroup) DeepCopyInto(out *TaskGroup) { *out = *in if in.MinResource != nil { in, out := &in.MinResource, &out.MinResource @@ -161,15 +162,23 @@ func (in *Task) DeepCopyInto(out *Task) { (*out)[key] = val.DeepCopy() } } + in.NodeSelector.DeepCopyInto(&out.NodeSelector) + if in.Tolerations != nil { + in, out := &in.Tolerations, &out.Tolerations + *out = make([]v1.Toleration, len(*in)) + for i := range *in { + (*in)[i].DeepCopyInto(&(*out)[i]) + } + } return } -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Task. -func (in *Task) DeepCopy() *Task { +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new TaskGroup. +func (in *TaskGroup) DeepCopy() *TaskGroup { if in == nil { return nil } - out := new(Task) + out := new(TaskGroup) in.DeepCopyInto(out) return out } diff --git a/pkg/controller/application/app_controller_test.go b/pkg/controller/application/app_controller_test.go index 5b84da579..49aa1a791 100644 --- a/pkg/controller/application/app_controller_test.go +++ b/pkg/controller/application/app_controller_test.go @@ -165,13 +165,13 @@ func createApp(name string, namespace string, queue string) appv1.Application { UID: "UID-APP-00001", }, Spec: appv1.ApplicationSpec{ - Policy: appv1.SchedulePolicy{ - Policy: "TryOnce", - }, Queue: queue, - TaskGroup: []appv1.Task{ + SchedulingPolicy: appv1.SchedulingPolicy{ + Type: appv1.TryReserve, + }, + TaskGroups: []appv1.TaskGroup{ { - GroupName: "test-task-001", + Name: "test-task-001", MinMember: 0, }, }, diff --git a/test/e2e/app/app_test.go b/test/e2e/app/app_test.go index 6d4ff994d..f3b7b8075 100644 --- a/test/e2e/app/app_test.go +++ b/test/e2e/app/app_test.go @@ -74,14 +74,14 @@ var _ = ginkgo.Describe("App", func() { gomega.Ω(appCRD.Spec.Queue).To(gomega.Equal("root.default")) gomega.Ω(appCRD.ObjectMeta.Name).To(gomega.Equal("example")) gomega.Ω(appCRD.ObjectMeta.Namespace).To(gomega.Equal(dev)) - policy := appCRD.Spec.Policy.Policy - gomega.Ω(string(policy)).To(gomega.Equal("TryOnce")) - gomega.Ω(appCRD.Spec.TaskGroup[0].GroupName).To(gomega.Equal("test-task-0001")) - gomega.Ω(appCRD.Spec.TaskGroup[0].MinMember).To(gomega.Equal(int32(1))) + policy := appCRD.Spec.SchedulingPolicy + gomega.Ω(policy.Type).To(gomega.Equal(v1alpha1.TryOnce)) + gomega.Ω(appCRD.Spec.TaskGroups[0].Name).To(gomega.Equal("test-task-0001")) + gomega.Ω(appCRD.Spec.TaskGroups[0].MinMember).To(gomega.Equal(int32(1))) anscpu := resource.MustParse("300m") ansmem := resource.MustParse("128Mi") - gomega.Ω(appCRD.Spec.TaskGroup[0].MinResource["cpu"]).To(gomega.Equal(anscpu)) - gomega.Ω(appCRD.Spec.TaskGroup[0].MinResource["memory"]).To(gomega.Equal(ansmem)) + gomega.Ω(appCRD.Spec.TaskGroups[0].MinResource["cpu"]).To(gomega.Equal(anscpu)) + gomega.Ω(appCRD.Spec.TaskGroups[0].MinResource["memory"]).To(gomega.Equal(ansmem)) }) ginkgo.AfterSuite(func() { diff --git a/test/e2e/testdata/application.yaml b/test/e2e/testdata/application.yaml index dcdc26ca1..ef6345517 100644 --- a/test/e2e/testdata/application.yaml +++ b/test/e2e/testdata/application.yaml @@ -21,10 +21,10 @@ metadata: name: example spec: schedulingPolicy: - name: TryOnce + type: TryOnce queue: root.default taskGroups: - - groupName: "test-task-0001" + - name: "test-task-0001" minMember: 1 minResource: cpu: "300m" diff --git a/test/e2e/testdata/application_error.yaml b/test/e2e/testdata/application_error.yaml index 32da826a4..5be8d6e83 100644 --- a/test/e2e/testdata/application_error.yaml +++ b/test/e2e/testdata/application_error.yaml @@ -23,11 +23,11 @@ metadata: spec: queue: ////// schedulingPolicy: - name: errorName + type: TryReserve taskGroups: - - groupName: 123 + - name: "test-task-0001" minMember: "string" minResource: - cpu: "ABC" - memory: "ABC" + cpu: "300m" + memory: "128Mi" \ No newline at end of file