@@ -41,15 +41,16 @@ import (
4141// AppWrapperReconciler reconciles a AppWrapper object
4242type AppWrapperReconciler struct {
4343 client.Client
44- Scheme * runtime.Scheme
45- Config config.InstaScaleConfiguration
46- kubeClient * kubernetes.Clientset
44+ Scheme * runtime.Scheme
45+ Config config.InstaScaleConfiguration
46+ kubeClient * kubernetes.Clientset
47+ ocmClusterID string
48+ ocmToken string
49+ useMachineSets bool
4750}
4851
4952var (
5053 deletionMessage string
51- ocmClusterID string
52- ocmToken string
5354 maxScaleNodesAllowed int
5455)
5556
@@ -85,9 +86,9 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
8586 // todo: Move the getOCMClusterID call out of reconcile loop.
8687 // Only reason we are calling it here is that the client is not able to make
8788 // calls until it is started, so SetupWithManager is not working.
88- if ocmSecretRef := r . Config . OCMSecretRef ; ocmSecretRef != nil && ocmClusterID == "" {
89+ if ! r . useMachineSets && r . ocmClusterID == "" {
8990 if err := r .getOCMClusterID (ctx ); err != nil {
90- return ctrl.Result {}, err
91+ return ctrl.Result {Requeue : true , RequeueAfter : timeFiveSeconds }, err
9192 }
9293 }
9394 var appwrapper arbv1.AppWrapper
@@ -105,7 +106,7 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
105106 if ! controllerutil .ContainsFinalizer (& appwrapper , finalizerName ) {
106107 controllerutil .AddFinalizer (& appwrapper , finalizerName )
107108 if err := r .Update (ctx , & appwrapper ); err != nil {
108- return ctrl.Result {}, err
109+ return ctrl.Result {RequeueAfter : timeFiveSeconds }, nil
109110 }
110111 return ctrl.Result {}, nil
111112 }
@@ -122,31 +123,28 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
122123 }
123124
124125 demandPerInstanceType := r .discoverInstanceTypes (& appwrapper )
125- //for userRequestedInstanceType := range demandPerInstanceType {
126126 if ocmSecretRef := r .Config .OCMSecretRef ; ocmSecretRef != nil {
127127 return r .scaleMachinePool (ctx , & appwrapper , demandPerInstanceType )
128128 } else {
129- if r .Config .Reuse {
129+ switch strings .ToLower (r .Config .MachineSetsStrategy ) {
130+ case "reuse" :
130131 return r .reconcileReuseMachineSet (ctx , & appwrapper , demandPerInstanceType )
131- } else {
132+ case "duplicate" :
132133 return r .reconcileCreateMachineSet (ctx , & appwrapper , demandPerInstanceType )
133134 }
134135 }
136+ return ctrl.Result {}, nil
135137}
136138
137139func (r * AppWrapperReconciler ) finalizeScalingDownMachines (ctx context.Context , appwrapper * arbv1.AppWrapper ) error {
138- if appwrapper .Status .State == "Completed" {
140+ if appwrapper .Status .State == arbv1 . AppWrapperStateCompleted {
139141 deletionMessage = "completed"
140142 } else {
141143 deletionMessage = "deleted"
142144 }
143- if ocmSecretRef := r .Config .OCMSecretRef ; ocmSecretRef != nil {
144- klog .Infof ("Appwrapper %s scale-down machine pool: %s " , deletionMessage , appwrapper .Name )
145- if _ , err := r .deleteMachinePool (ctx , appwrapper ); err != nil {
146- return err
147- }
148- } else {
149- if r .Config .Reuse {
145+ if r .useMachineSets {
146+ switch strings .ToLower (r .Config .MachineSetsStrategy ) {
147+ case "reuse" :
150148 matchedAw := r .findExactMatch (ctx , appwrapper )
151149 if matchedAw != nil {
152150 klog .Infof ("Appwrapper %s %s, swapping machines to %s" , appwrapper .Name , deletionMessage , matchedAw .Name )
@@ -159,18 +157,23 @@ func (r *AppWrapperReconciler) finalizeScalingDownMachines(ctx context.Context,
159157 return err
160158 }
161159 }
162- } else {
160+ case "duplicate" :
163161 klog .Infof ("Appwrapper %s scale-down machineset: %s " , deletionMessage , appwrapper .Name )
164162 if err := r .deleteMachineSet (ctx , appwrapper ); err != nil {
165163 return err
166164 }
167165 }
166+ } else {
167+ klog .Infof ("Appwrapper %s scale-down machine pool: %s " , deletionMessage , appwrapper .Name )
168+ if _ , err := r .deleteMachinePool (ctx , appwrapper ); err != nil {
169+ return err
170+ }
168171 }
169172 return nil
170173}
171174
172175// SetupWithManager sets up the controller with the Manager.
173- func (r * AppWrapperReconciler ) SetupWithManager (mgr ctrl.Manager ) error {
176+ func (r * AppWrapperReconciler ) SetupWithManager (ctx context. Context , mgr ctrl.Manager ) error {
174177
175178 restConfig := mgr .GetConfig ()
176179
@@ -181,16 +184,17 @@ func (r *AppWrapperReconciler) SetupWithManager(mgr ctrl.Manager) error {
181184 }
182185
183186 maxScaleNodesAllowed = int (r .Config .MaxScaleoutAllowed )
184-
187+ r . useMachineSets = true
185188 if ocmSecretRef := r .Config .OCMSecretRef ; ocmSecretRef != nil {
186- if ocmSecret , err := r .getOCMSecret (context .Background (), ocmSecretRef ); err != nil {
189+ r .useMachineSets = false
190+ if ocmSecret , err := r .getOCMSecret (ctx , ocmSecretRef ); err != nil {
187191 return fmt .Errorf ("error reading OCM Secret from ref %q: %w" , ocmSecretRef , err )
188192 } else if token := ocmSecret .Data ["token" ]; len (token ) > 0 {
189- ocmToken = string (token )
193+ r . ocmToken = string (token )
190194 } else {
191195 return fmt .Errorf ("token is missing from OCM Secret %q" , ocmSecretRef )
192196 }
193- if ok , err := machinePoolExists (); err != nil {
197+ if ok , err := r . machinePoolExists (); err != nil {
194198 return err
195199 } else if ok {
196200 klog .Info ("Using machine pools for cluster auto-scaling" )
0 commit comments