diff --git a/pkg/controller/queuejob/queuejob_controller_ex.go b/pkg/controller/queuejob/queuejob_controller_ex.go index 407fdfd91..66462d604 100644 --- a/pkg/controller/queuejob/queuejob_controller_ex.go +++ b/pkg/controller/queuejob/queuejob_controller_ex.go @@ -73,17 +73,8 @@ import ( runtimeJson "k8s.io/apimachinery/pkg/runtime/serializer/json" "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources" - resconfigmap "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/configmap" // ConfigMap - resdeployment "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/deployment" "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/genericresource" - resnamespace "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/namespace" // NP - resnetworkpolicy "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/networkpolicy" // NetworkPolicy - respersistentvolume "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/persistentvolume" // PV - respersistentvolumeclaim "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/persistentvolumeclaim" // PVC respod "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/pod" - ressecret "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/secret" // Secret - resservice "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/service" - resstatefulset "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/controller/queuejobresources/statefulset" "k8s.io/apimachinery/pkg/labels" arbv1 "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/apis/controller/v1beta1" @@ -188,15 +179,6 @@ func NewJobAndClusterAgent(qjKey string, qaKey string) *JobAndClusterAgent { // RegisterAllQueueJobResourceTypes - registers all resources func RegisterAllQueueJobResourceTypes(regs *queuejobresources.RegisteredResources) { respod.Register(regs) - resservice.Register(regs) - resdeployment.Register(regs) - resstatefulset.Register(regs) - respersistentvolume.Register(regs) - respersistentvolumeclaim.Register(regs) - resnamespace.Register(regs) - resconfigmap.Register(regs) - ressecret.Register(regs) - resnetworkpolicy.Register(regs) } func GetQueueJobAgentKey(obj interface{}) (string, error) { @@ -250,109 +232,6 @@ func NewJobController(config *rest.Config, serverOption *options.ServerOption) * } cc.qjobResControls[arbv1.ResourceTypePod] = resControlPod - // initialize service sub-resource control - resControlService, found, err := cc.qjobRegisteredResources.InitQueueJobResource(arbv1.ResourceTypeService, config) - if err != nil { - klog.Errorf("fail to create queuejob resource control") - return nil - } - if !found { - klog.Errorf("queuejob resource type Service not found") - return nil - } - cc.qjobResControls[arbv1.ResourceTypeService] = resControlService - - // initialize PV sub-resource control - resControlPersistentVolume, found, err := cc.qjobRegisteredResources.InitQueueJobResource(arbv1.ResourceTypePersistentVolume, config) - if err != nil { - klog.Errorf("fail to create queuejob resource control") - return nil - } - if !found { - klog.Errorf("queuejob resource type PersistentVolume not found") - return nil - } - cc.qjobResControls[arbv1.ResourceTypePersistentVolume] = resControlPersistentVolume - - resControlPersistentVolumeClaim, found, err := cc.qjobRegisteredResources.InitQueueJobResource(arbv1.ResourceTypePersistentVolumeClaim, config) - if err != nil { - klog.Errorf("fail to create queuejob resource control") - return nil - } - if !found { - klog.Errorf("queuejob resource type PersistentVolumeClaim not found") - return nil - } - cc.qjobResControls[arbv1.ResourceTypePersistentVolumeClaim] = resControlPersistentVolumeClaim - - resControlNamespace, found, err := cc.qjobRegisteredResources.InitQueueJobResource(arbv1.ResourceTypeNamespace, config) - if err != nil { - klog.Errorf("fail to create queuejob resource control") - return nil - } - if !found { - klog.Errorf("queuejob resource type Namespace not found") - return nil - } - cc.qjobResControls[arbv1.ResourceTypeNamespace] = resControlNamespace - - resControlConfigMap, found, err := cc.qjobRegisteredResources.InitQueueJobResource(arbv1.ResourceTypeConfigMap, config) - if err != nil { - klog.Errorf("fail to create queuejob resource control") - return nil - } - if !found { - klog.Errorf("queuejob resource type ConfigMap not found") - return nil - } - cc.qjobResControls[arbv1.ResourceTypeConfigMap] = resControlConfigMap - - resControlSecret, found, err := cc.qjobRegisteredResources.InitQueueJobResource(arbv1.ResourceTypeSecret, config) - if err != nil { - klog.Errorf("fail to create queuejob resource control") - return nil - } - if !found { - klog.Errorf("queuejob resource type Secret not found") - return nil - } - cc.qjobResControls[arbv1.ResourceTypeSecret] = resControlSecret - - resControlNetworkPolicy, found, err := cc.qjobRegisteredResources.InitQueueJobResource(arbv1.ResourceTypeNetworkPolicy, config) - if err != nil { - klog.Errorf("fail to create queuejob resource control") - return nil - } - if !found { - klog.Errorf("queuejob resource type NetworkPolicy not found") - return nil - } - cc.qjobResControls[arbv1.ResourceTypeNetworkPolicy] = resControlNetworkPolicy - - // initialize deployment sub-resource control - resControlDeployment, found, err := cc.qjobRegisteredResources.InitQueueJobResource(arbv1.ResourceTypeDeployment, config) - if err != nil { - klog.Errorf("fail to create queuejob resource control") - return nil - } - if !found { - klog.Errorf("queuejob resource type Service not found") - return nil - } - cc.qjobResControls[arbv1.ResourceTypeDeployment] = resControlDeployment - - // initialize SS sub-resource - resControlSS, found, err := cc.qjobRegisteredResources.InitQueueJobResource(arbv1.ResourceTypeStatefulSet, config) - if err != nil { - klog.Errorf("fail to create queuejob resource control") - return nil - } - if !found { - klog.Errorf("queuejob resource type StatefulSet not found") - return nil - } - cc.qjobResControls[arbv1.ResourceTypeStatefulSet] = resControlSS - queueJobClient, _, err := clients.NewClient(cc.config) if err != nil { panic(err) @@ -1617,15 +1496,6 @@ func (cc *XController) Run(stopCh chan struct{}) { go cc.queueJobInformer.Informer().Run(stopCh) go cc.qjobResControls[arbv1.ResourceTypePod].Run(stopCh) - go cc.qjobResControls[arbv1.ResourceTypeService].Run(stopCh) - go cc.qjobResControls[arbv1.ResourceTypeDeployment].Run(stopCh) - go cc.qjobResControls[arbv1.ResourceTypeStatefulSet].Run(stopCh) - go cc.qjobResControls[arbv1.ResourceTypePersistentVolume].Run(stopCh) - go cc.qjobResControls[arbv1.ResourceTypePersistentVolumeClaim].Run(stopCh) - go cc.qjobResControls[arbv1.ResourceTypeNamespace].Run(stopCh) - go cc.qjobResControls[arbv1.ResourceTypeConfigMap].Run(stopCh) - go cc.qjobResControls[arbv1.ResourceTypeSecret].Run(stopCh) - go cc.qjobResControls[arbv1.ResourceTypeNetworkPolicy].Run(stopCh) cache.WaitForCacheSync(stopCh, cc.queueJobSynced) diff --git a/test/e2e/util.go b/test/e2e/util.go index 9c85d6d8c..f22e8c68e 100644 --- a/test/e2e/util.go +++ b/test/e2e/util.go @@ -347,15 +347,14 @@ func createJobEx(context *context, job *jobSpec) ([]*batchv1.Job, *arbv1.AppWrap MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", job.name, "resource1"), Namespace: ns, }, - Replicas: 1, - Type: arbv1.ResourceTypePod, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -977,15 +976,14 @@ func createDeploymentAW(context *context, name string) *arbv1.AppWrapper { MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeDeployment, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -1058,15 +1056,14 @@ func createDeploymentAWwith900CPU(context *context, name string) *arbv1.AppWrapp MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeDeployment, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -1139,15 +1136,14 @@ func createDeploymentAWwith550CPU(context *context, name string) *arbv1.AppWrapp MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeDeployment, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -1220,15 +1216,14 @@ func createDeploymentAWwith125CPU(context *context, name string) *arbv1.AppWrapp MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeDeployment, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -1301,15 +1296,14 @@ func createDeploymentAWwith126CPU(context *context, name string) *arbv1.AppWrapp MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeDeployment, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -1382,15 +1376,14 @@ func createDeploymentAWwith350CPU(context *context, name string) *arbv1.AppWrapp MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeDeployment, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -1463,15 +1456,14 @@ func createDeploymentAWwith351CPU(context *context, name string) *arbv1.AppWrapp MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeDeployment, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -1544,15 +1536,14 @@ func createDeploymentAWwith426CPU(context *context, name string) *arbv1.AppWrapp MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeDeployment, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -1625,15 +1616,14 @@ func createDeploymentAWwith425CPU(context *context, name string) *arbv1.AppWrapp MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeDeployment, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -2690,11 +2680,10 @@ func createNamespaceAW(context *context, name string) *arbv1.AppWrapper { MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { - Replicas: 1, - Type: arbv1.ResourceTypeNamespace, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -2801,15 +2790,14 @@ func createStatefulSetAW(context *context, name string) *arbv1.AppWrapper { MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item1"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypeStatefulSet, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -2941,15 +2929,14 @@ func createBadPodTemplateAW(context *context, name string) *arbv1.AppWrapper { MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item"), Namespace: context.namespace, }, - Replicas: 2, - Type: arbv1.ResourceTypePod, - Template: runtime.RawExtension{ + DesiredAvailable: 2, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, @@ -2965,24 +2952,40 @@ func createBadPodTemplateAW(context *context, name string) *arbv1.AppWrapper { } func createPodTemplateAW(context *context, name string) *arbv1.AppWrapper { - rb := []byte(`{"metadata": - { + rb := []byte(`{"apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "aw-podtemplate-1", + "namespace": "test", + "labels": { + "appwrapper.mcad.ibm.com": "aw-podtemplate-2" + } + }, + "spec": { + "containers": [ + { + "name": "aw-podtemplate-1", + "image": "kicbase/echo-server:1.0", + "ports": [ + { + "containerPort": 80 + } + ] + } + ] + } + } `) + + rb1 := []byte(`{"apiVersion": "v1", + "kind": "Pod", + "metadata": { "name": "aw-podtemplate-2", "namespace": "test", "labels": { - "app": "aw-podtemplate-2" + "appwrapper.mcad.ibm.com": "aw-podtemplate-2" } }, - "template": { - "metadata": { - "labels": { - "app": "aw-podtemplate-2" - }, - "annotations": { - "appwrapper.mcad.ibm.com/appwrapper-name": "aw-podtemplate-2" - } - }, - "spec": { + "spec": { "containers": [ { "name": "aw-podtemplate-2", @@ -2995,7 +2998,7 @@ func createPodTemplateAW(context *context, name string) *arbv1.AppWrapper { } ] } - }} `) + } `) var schedSpecMin int = 2 aw := &arbv1.AppWrapper{ @@ -3008,18 +3011,27 @@ func createPodTemplateAW(context *context, name string) *arbv1.AppWrapper { MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item"), Namespace: context.namespace, }, - Replicas: 2, - Type: arbv1.ResourceTypePod, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, }, + { + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("%s-%s", name, "item1"), + Namespace: context.namespace, + }, + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ + Raw: rb1, + }, + }, }, }, }, @@ -3032,24 +3044,16 @@ func createPodTemplateAW(context *context, name string) *arbv1.AppWrapper { } func createPodCheckFailedStatusAW(context *context, name string) *arbv1.AppWrapper { - rb := []byte(`{"metadata": - { + rb := []byte(`{"apiVersion": "v1", + "kind": "Pod", + "metadata": { "name": "aw-checkfailedstatus-1", "namespace": "test", "labels": { - "app": "aw-checkfailedstatus-1" + "appwrapper.mcad.ibm.com": "aw-checkfailedstatus-1" } }, - "template": { - "metadata": { - "labels": { - "app": "aw-checkfailedstatus-1" - }, - "annotations": { - "appwrapper.mcad.ibm.com/appwrapper-name": "aw-checkfailedstatus-1" - } - }, - "spec": { + "spec": { "containers": [ { "name": "aw-checkfailedstatus-1", @@ -3065,11 +3069,12 @@ func createPodCheckFailedStatusAW(context *context, name string) *arbv1.AppWrapp { "effect": "NoSchedule", "key": "key1", - "operator": "Exists" + "value": "value1", + "operator": "Equal" } ] } - }} `) + } `) var schedSpecMin int = 1 aw := &arbv1.AppWrapper{ @@ -3082,15 +3087,14 @@ func createPodCheckFailedStatusAW(context *context, name string) *arbv1.AppWrapp MinAvailable: schedSpecMin, }, AggrResources: arbv1.AppWrapperResourceList{ - Items: []arbv1.AppWrapperResource{ + GenericItems: []arbv1.AppWrapperGenericResource{ { ObjectMeta: metav1.ObjectMeta{ Name: fmt.Sprintf("%s-%s", name, "item"), Namespace: context.namespace, }, - Replicas: 1, - Type: arbv1.ResourceTypePod, - Template: runtime.RawExtension{ + DesiredAvailable: 1, + GenericTemplate: runtime.RawExtension{ Raw: rb, }, },