@@ -21,6 +21,7 @@ import (
2121 "encoding/json"
2222 "fmt"
2323 "math"
24+ "math/rand"
2425 "runtime/debug"
2526 "strings"
2627 "time"
@@ -43,8 +44,9 @@ import (
4344 "k8s.io/client-go/restmapper"
4445)
4546
46- var appwrapperJobName = "appwrapper.mcad.ibm.com"
47- var resourceName = "resourceName"
47+ var appwrapperJobLabelName = "workload.codeflare.dev/appwrapper"
48+ var appwrapperJobLabelNamespace = "workload.codeflare.dev/appwrapper-namespace"
49+ var resourceName = "workload.codeflare.dev/resourceName"
4850var appWrapperKind = arbv1 .SchemeGroupVersion .WithKind ("AppWrapper" )
4951
5052type GenericResources struct {
@@ -72,6 +74,18 @@ func join(strs ...string) string {
7274 return result
7375}
7476
77+
78+ func GetRandomString (n int ) string {
79+ var letters = []rune ("abcdefghijklmnopqrstuvwxyz0123456789" )
80+
81+ rand .Seed (time .Now ().UnixNano ())
82+ b := make ([]rune , n )
83+ for i := range b {
84+ b [i ] = letters [rand .Intn (len (letters ))]
85+ }
86+ return string (b )
87+ }
88+
7589func (gr * GenericResources ) Cleanup (aw * arbv1.AppWrapper , awr * arbv1.AppWrapperGenericResource ) (genericResourceName string , groupversionkind * schema.GroupVersionKind , erro error ) {
7690 var err error
7791 err = nil
@@ -166,7 +180,7 @@ func (gr *GenericResources) Cleanup(aw *arbv1.AppWrapper, awr *arbv1.AppWrapperG
166180 }
167181
168182 // Get the resource to see if it exists in the AppWrapper namespace
169- labelSelector := fmt .Sprintf ("%s=%s, %s=%s" , appwrapperJobName , aw .Name , resourceName , unstruct .GetName ())
183+ labelSelector := fmt .Sprintf ("%s=%s, %s=%s, %s=%s " , appwrapperJobLabelName , aw .Name , appwrapperJobLabelNamespace , aw . Namespace , resourceName , unstruct .GetName ())
170184 inEtcd , err := dclient .Resource (rsrc ).Namespace (aw .Namespace ).List (context .Background (), metav1.ListOptions {LabelSelector : labelSelector })
171185 if err != nil {
172186 return name , gvk , err
@@ -175,9 +189,10 @@ func (gr *GenericResources) Cleanup(aw *arbv1.AppWrapper, awr *arbv1.AppWrapperG
175189 // Check to see if object already exists in etcd, if not, create the object.
176190 if inEtcd != nil || len (inEtcd .Items ) > 0 {
177191 newName := name
178- if len (newName ) > 63 {
179- newName = newName [:63 ]
192+ if len (newName ) > 60 {
193+ newName = newName [:60 ]
180194 }
195+ newName += GetRandomString (3 )
181196
182197 err = deleteObject (namespaced , namespace , newName , rsrc , dclient )
183198 if err != nil {
@@ -187,7 +202,7 @@ func (gr *GenericResources) Cleanup(aw *arbv1.AppWrapper, awr *arbv1.AppWrapperG
187202 return name , gvk , err
188203 }
189204 } else {
190- klog .Warningf ("[Cleanup] %s/%s not found using label selector: %s.\n " , name , namespace , labelSelector )
205+ klog .Warningf ("[Cleanup] %s/%s not found using label selector: %s.\n " , namespace , name , labelSelector )
191206 }
192207
193208 return name , gvk , err
@@ -297,18 +312,19 @@ func (gr *GenericResources) SyncQueueJob(aw *arbv1.AppWrapper, awr *arbv1.AppWra
297312 } else {
298313 labels = unstruct .GetLabels ()
299314 }
300- labels [appwrapperJobName ] = aw .Name
315+ labels [appwrapperJobLabelName ] = aw .Name
316+ labels [appwrapperJobLabelNamespace ] = aw .Namespace
301317 labels [resourceName ] = unstruct .GetName ()
302318 unstruct .SetLabels (labels )
303319
304320 // Add labels to pod template if one exists.
305321 podTemplateFound := addLabelsToPodTemplateField (& unstruct , labels )
306322 if ! podTemplateFound {
307- klog .V (4 ).Infof ("[SyncQueueJob] No pod template spec exists for resource: %s to add labels." , name )
323+ klog .V (4 ).Infof ("[SyncQueueJob] No pod template spec exists for resource: %s/%s to add labels." , namespace , name )
308324 }
309325
310- // Get the resource to see if it exists
311- labelSelector := fmt .Sprintf ("%s=%s, %s=%s" , appwrapperJobName , aw .Name , resourceName , unstruct .GetName ())
326+ // Get the resource to see if it exists
327+ labelSelector := fmt .Sprintf ("%s=%s, %s=%s, %s=%s " , appwrapperJobLabelName , aw .Name , appwrapperJobLabelNamespace , aw . Namespace , resourceName , unstruct .GetName ())
312328 inEtcd , err := dclient .Resource (rsrc ).List (context .Background (), metav1.ListOptions {LabelSelector : labelSelector })
313329 if err != nil {
314330 return []* v1.Pod {}, err
@@ -317,9 +333,10 @@ func (gr *GenericResources) SyncQueueJob(aw *arbv1.AppWrapper, awr *arbv1.AppWra
317333 // Check to see if object already exists in etcd, if not, create the object.
318334 if inEtcd == nil || len (inEtcd .Items ) < 1 {
319335 newName := name
320- if len (newName ) > 63 {
321- newName = newName [:63 ]
336+ if len (newName ) > 60 {
337+ newName = newName [:60 ]
322338 }
339+ newName += GetRandomString (3 )
323340 unstruct .SetName (newName )
324341 //Asumption object is always namespaced
325342 //Refer to comment on line 238
@@ -329,7 +346,7 @@ func (gr *GenericResources) SyncQueueJob(aw *arbv1.AppWrapper, awr *arbv1.AppWra
329346 if errors .IsAlreadyExists (err ) {
330347 klog .V (4 ).Infof ("%v\n " , err .Error ())
331348 } else {
332- klog .Errorf ("Error creating the object `%v `, the error is `%v`" , newName , errors .ReasonForError (err ))
349+ klog .Errorf ("Error creating the object `%s/%s `, the error is `%v`" , namespace , newName , errors .ReasonForError (err ))
333350 return []* v1.Pod {}, err
334351 }
335352 }
@@ -499,7 +516,7 @@ func deleteObject(namespaced bool, namespace string, name string, rsrc schema.Gr
499516 }
500517
501518 if err != nil && ! errors .IsNotFound (err ) {
502- klog .Errorf ("[deleteObject] Error deleting the object `%v`, the error is `%v`." , name , errors .ReasonForError (err ))
519+ klog .Errorf ("[deleteObject] Error deleting the object `%v`, in namespace %v, the error is `%v`." , name , namespace , errors .ReasonForError (err ))
503520 return err
504521 } else {
505522 klog .V (4 ).Infof ("[deleteObject] Resource `%v` deleted.\n " , name )
@@ -531,7 +548,7 @@ func GetListOfPodResourcesFromOneGenericItem(awr *arbv1.AppWrapperGenericResourc
531548 klog .V (8 ).Infof ("[GetListOfPodResourcesFromOneGenericItem] Requested total allocation resource from 1 pod `%v`.\n " , podTotalresource )
532549 }
533550
534- // Addd individual pods to results
551+ // Add individual pods to results
535552 var replicaCount int = int (replicas )
536553 for i := 0 ; i < replicaCount ; i ++ {
537554 podResourcesList = append (podResourcesList , podTotalresource )
@@ -623,7 +640,7 @@ func getContainerResources(container v1.Container, replicas float64) *clustersta
623640}
624641
625642// returns status of an item present in etcd
626- func (gr * GenericResources ) IsItemCompleted (awgr * arbv1.AppWrapperGenericResource , namespace string , appwrapperName string , genericItemName string ) (completed bool ) {
643+ func (gr * GenericResources ) IsItemCompleted (awgr * arbv1.AppWrapperGenericResource , appwrapperNamespace string , appwrapperName string , genericItemName string ) (completed bool ) {
627644 dd := gr .clients .Discovery ()
628645 apigroups , err := restmapper .GetAPIGroupResources (dd )
629646 if err != nil {
@@ -654,8 +671,8 @@ func (gr *GenericResources) IsItemCompleted(awgr *arbv1.AppWrapperGenericResourc
654671 return false
655672 }
656673
657- labelSelector := fmt .Sprintf ("%s=%s" , appwrapperJobName , appwrapperName )
658- inEtcd , err := dclient .Resource (rsrc ).Namespace (namespace ).List (context .Background (), metav1.ListOptions {LabelSelector : labelSelector })
674+ labelSelector := fmt .Sprintf ("%s=%s, %s=%s " , appwrapperJobLabelName , appwrapperName , appwrapperJobLabelNamespace , appwrapperNamespace )
675+ inEtcd , err := dclient .Resource (rsrc ).Namespace (appwrapperNamespace ).List (context .Background (), metav1.ListOptions {LabelSelector : labelSelector })
659676 if err != nil {
660677 klog .Errorf ("[IsItemCompleted] Error listing object: %v" , err )
661678 return false
@@ -675,7 +692,7 @@ func (gr *GenericResources) IsItemCompleted(awgr *arbv1.AppWrapperGenericResourc
675692 }
676693 }
677694 if ! validAwOwnerRef {
678- klog .Warningf ("[IsItemCompleted] Item owner name %v does match appwrappper name %v in namespace %v" , unstructuredObjectName , appwrapperName , namespace )
695+ klog .Warningf ("[IsItemCompleted] Item owner name %v does match appwrappper name %v in namespace %v" , unstructuredObjectName , appwrapperName , appwrapperNamespace )
679696 continue
680697 }
681698
0 commit comments