@@ -90,24 +90,15 @@ const (
9090func (r * AppWrapperReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
9191 _ = log .FromContext (ctx )
9292
93- // todo: Move the "machineCheck" locic out of reconcile loop.
93+ // todo: Move the "machineCheck" logic out of reconcile loop.
9494 // Only reason we are calling it here is that the client is not able to make
9595 // calls until it is started, so SetupWithManager is not working.
9696 if r .machineCheck == false {
97- if r .MachineType != MachineTypeMachineSet && r .ocmClusterID == "" {
98- if err := r .getOCMClusterID (); err != nil {
99- return ctrl.Result {}, err
100- }
101- }
102- hypershiftEnabled , err := r .checkHypershiftEnabled (ctx )
103- if err != nil {
104- return ctrl.Result {}, fmt .Errorf ("error checking if hypershift is enabled: %w" , err )
105- }
106- if hypershiftEnabled {
107- r .MachineType = MachineTypeNodePool
97+ if err := r .setMachineType (ctx ); err != nil {
98+ return ctrl.Result {}, err
10899 }
109- r .machineCheck = true
110100 }
101+
111102 var appwrapper arbv1.AppWrapper
112103
113104 if err := r .Get (ctx , req .NamespacedName , & appwrapper ); err != nil {
@@ -129,8 +120,10 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
129120 }
130121
131122 if ! appwrapper .ObjectMeta .DeletionTimestamp .IsZero () || appwrapper .Status .State == arbv1 .AppWrapperStateCompleted {
132- if err := r .finalizeScalingDownMachines (ctx , & appwrapper ); err != nil {
133- return ctrl.Result {}, err
123+ if ! r .annotationExists (& appwrapper , "scaledownComplete" ) && len (getInstanceRequired (appwrapper .Labels )) > 0 {
124+ if err := r .finalizeScalingDownMachines (ctx , & appwrapper ); err != nil {
125+ return ctrl.Result {}, err
126+ }
134127 }
135128 controllerutil .RemoveFinalizer (& appwrapper , finalizerName )
136129 if err := r .Update (ctx , & appwrapper ); err != nil {
@@ -159,12 +152,30 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
159152 return ctrl.Result {}, nil
160153}
161154
155+ func (r * AppWrapperReconciler ) setMachineType (ctx context.Context ) error {
156+ if r .MachineType != MachineTypeMachineSet && r .ocmClusterID == "" {
157+ if err := r .getOCMClusterID (); err != nil {
158+ return err
159+ }
160+ }
161+ hypershiftEnabled , err := r .checkHypershiftEnabled (ctx )
162+ if err != nil {
163+ return fmt .Errorf ("error checking if hypershift is enabled: %w" , err )
164+ }
165+ if hypershiftEnabled {
166+ r .MachineType = MachineTypeNodePool
167+ }
168+ r .machineCheck = true
169+ return nil
170+ }
171+
162172func (r * AppWrapperReconciler ) finalizeScalingDownMachines (ctx context.Context , appwrapper * arbv1.AppWrapper ) error {
163173 if appwrapper .Status .State == arbv1 .AppWrapperStateCompleted {
164174 deletionMessage = "completed"
165175 } else {
166176 deletionMessage = "deleted"
167177 }
178+
168179 switch r .MachineType {
169180 case MachineTypeMachineSet :
170181 switch strings .ToLower (r .Config .MachineSetsStrategy ) {
@@ -173,33 +184,39 @@ func (r *AppWrapperReconciler) finalizeScalingDownMachines(ctx context.Context,
173184 if matchedAw != nil {
174185 klog .Infof ("Appwrapper %s %s, swapping machines to %s" , appwrapper .Name , deletionMessage , matchedAw .Name )
175186 if err := r .swapNodeLabels (ctx , appwrapper , matchedAw ); err != nil {
187+ klog .Errorf ("Error swapping node labels for AppWrapper %s: %v" , appwrapper .Name , err )
176188 return err
177189 }
178190 } else {
179191 klog .Infof ("Appwrapper %s %s, scaling down machines" , appwrapper .Name , deletionMessage )
180192 if err := r .annotateToDeleteMachine (ctx , appwrapper ); err != nil {
193+ klog .Errorf ("Error annotating to delete machine for AppWrapper %s: %v" , appwrapper .Name , err )
181194 return err
182195 }
183196 }
184197 case "duplicate" :
185198 klog .Infof ("Appwrapper %s scale-down machineset: %s " , deletionMessage , appwrapper .Name )
186199 if err := r .deleteMachineSet (ctx , appwrapper ); err != nil {
200+ klog .Errorf ("Error deleting MachineSet for AppWrapper %s: %v" , appwrapper .Name , err )
187201 return err
188202 }
189203 }
190204
191205 case MachineTypeNodePool :
192206 klog .Infof ("Appwrapper %s scale-down node pool: %s " , deletionMessage , appwrapper .Name )
193207 if _ , err := r .deleteNodePool (ctx , appwrapper ); err != nil {
208+ klog .Errorf ("Error deleting NodePool for AppWrapper %s: %v" , appwrapper .Name , err )
194209 return err
195210 }
196211
197212 case MachineTypeMachinePool :
198213 klog .Infof ("Appwrapper %s scale-down machine pool: %s " , deletionMessage , appwrapper .Name )
199214 if _ , err := r .deleteMachinePool (ctx , appwrapper ); err != nil {
215+ klog .Errorf ("Error deleting MachinePool for AppWrapper %s: %v" , appwrapper .Name , err )
200216 return err
201217 }
202218 }
219+ r .setAnnotation (appwrapper , "scaledownComplete" , "true" )
203220 return nil
204221}
205222
@@ -237,15 +254,12 @@ func (r *AppWrapperReconciler) getOCMSecret(ctx context.Context, secretRef *core
237254
238255func (r * AppWrapperReconciler ) discoverInstanceTypes (aw * arbv1.AppWrapper ) map [string ]int {
239256 demandMapPerInstanceType := make (map [string ]int )
240- var instanceRequired []string
241- for k , v := range aw .Labels {
242- if k == "orderedinstance" {
243- instanceRequired = strings .Split (v , "_" )
244- }
245- }
246-
257+ instanceRequired := getInstanceRequired (aw .Labels )
247258 if len (instanceRequired ) < 1 {
248- klog .Infof ("Found AW %s that cannot be scaled due to missing orderedinstance label" , aw .ObjectMeta .Name )
259+ if _ , exists := aw .Annotations ["loggedNoInstances" ]; ! exists {
260+ klog .Infof ("Found AW %s that cannot be scaled due to missing orderedinstance label" , aw .ObjectMeta .Name )
261+ r .setAnnotation (aw , "loggedNoInstances" , "true" )
262+ }
249263 return demandMapPerInstanceType
250264 }
251265
0 commit comments