@@ -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 {
7274return 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 ) {
7690var err error
7791err = 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 ())
170184inEtcd , err := dclient .Resource (rsrc ).Namespace (aw .Namespace ).List (context .Background (), metav1.ListOptions {LabelSelector : labelSelector })
171185if err != nil {
172186return name , gvk , err
@@ -175,8 +189,9 @@ 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.
176190if inEtcd != nil || len (inEtcd .Items ) > 0 {
177191newName := name
178- if len (newName ) > 63 {
179- newName = newName [:63 ]
192+ if len (newName ) > 60 {
193+ newName = newName [:60 ]
194+ newName += GetRandomString (3 )
180195}
181196
182197err = deleteObject (namespaced , namespace , newName , rsrc , dclient )
@@ -187,7 +202,7 @@ func (gr *GenericResources) Cleanup(aw *arbv1.AppWrapper, awr *arbv1.AppWrapperG
187202return 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
193208return name , gvk , err
@@ -297,18 +312,19 @@ func (gr *GenericResources) SyncQueueJob(aw *arbv1.AppWrapper, awr *arbv1.AppWra
297312} else {
298313labels = unstruct .GetLabels ()
299314}
300- labels [appwrapperJobName ] = aw .Name
315+ labels [appwrapperJobLabelName ] = aw .Name
316+ labels [appwrapperJobLabelNamespace ] = aw .Namespace
301317labels [resourceName ] = unstruct .GetName ()
302318unstruct .SetLabels (labels )
303319
304320// Add labels to pod template if one exists.
305321podTemplateFound := addLabelsToPodTemplateField (& unstruct , labels )
306322if ! 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 ())
312328inEtcd , err := dclient .Resource (rsrc ).List (context .Background (), metav1.ListOptions {LabelSelector : labelSelector })
313329if err != nil {
314330return []* v1.Pod {}, err
@@ -317,8 +333,9 @@ 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.
318334if inEtcd == nil || len (inEtcd .Items ) < 1 {
319335newName := name
320- if len (newName ) > 63 {
321- newName = newName [:63 ]
336+ if len (newName ) > 60 {
337+ newName = newName [:60 ]
338+ newName += GetRandomString (3 )
322339}
323340unstruct .SetName (newName )
324341//Asumption object is always namespaced
@@ -329,7 +346,7 @@ func (gr *GenericResources) SyncQueueJob(aw *arbv1.AppWrapper, awr *arbv1.AppWra
329346if errors .IsAlreadyExists (err ) {
330347klog .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 ))
333350return []* v1.Pod {}, err
334351}
335352}
@@ -499,7 +516,7 @@ func deleteObject(namespaced bool, namespace string, name string, rsrc schema.Gr
499516}
500517
501518if 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 ))
503520return err
504521} else {
505522klog .V (4 ).Infof ("[deleteObject] Resource `%v` deleted.\n " , name )
@@ -531,7 +548,7 @@ func GetListOfPodResourcesFromOneGenericItem(awr *arbv1.AppWrapperGenericResourc
531548klog .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
535552var replicaCount int = int (replicas )
536553for i := 0 ; i < replicaCount ; i ++ {
537554podResourcesList = 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 ) {
627644dd := gr .clients .Discovery ()
628645apigroups , err := restmapper .GetAPIGroupResources (dd )
629646if err != nil {
@@ -654,8 +671,8 @@ func (gr *GenericResources) IsItemCompleted(awgr *arbv1.AppWrapperGenericResourc
654671return 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 })
659676if err != nil {
660677klog .Errorf ("[IsItemCompleted] Error listing object: %v" , err )
661678return false
@@ -675,7 +692,7 @@ func (gr *GenericResources) IsItemCompleted(awgr *arbv1.AppWrapperGenericResourc
675692}
676693}
677694if ! 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 )
679696continue
680697}
681698
0 commit comments