@@ -47,19 +47,16 @@ type AppWrapperReconciler struct {
4747}
4848
4949var (
50- reuse = true
50+ deletionMessage string
5151 ocmClusterID string
5252 ocmToken string
53- useMachineSets bool
5453 maxScaleNodesAllowed int
5554)
5655
5756const (
58- namespaceToList = "openshift-machine-api"
59- minResyncPeriod = 10 * time .Minute
60- pullSecretKey = ".dockerconfigjson"
61- pullSecretAuthKey = "cloud.openshift.com"
62- finalizerName = "instascale.codeflare.dev/finalizer"
57+ namespaceToList = "openshift-machine-api"
58+ minResyncPeriod = 10 * time .Minute
59+ finalizerName = "instascale.codeflare.dev/finalizer"
6360)
6461
6562// +kubebuilder:rbac:groups=workload.codeflare.dev,resources=appwrappers,verbs=get;list;watch;create;update;patch;delete
@@ -88,8 +85,10 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
8885 // todo: Move the getOCMClusterID call out of reconcile loop.
8986 // Only reason we are calling it here is that the client is not able to make
9087 // calls until it is started, so SetupWithManager is not working.
91- if ! useMachineSets && ocmClusterID == "" {
92- r .getOCMClusterID (ctx )
88+ if ocmSecretRef := r .Config .OCMSecretRef ; ocmSecretRef != nil && ocmClusterID == "" {
89+ if err := r .getOCMClusterID (ctx ); err != nil {
90+ return ctrl.Result {}, err
91+ }
9392 }
9493 var appwrapper arbv1.AppWrapper
9594
@@ -98,19 +97,20 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
9897 // ignore not-found errors, since we can get them on delete requests.
9998 return ctrl.Result {}, nil
10099 }
101- klog .Error (err , "unable to fetch appwrapper" )
100+ // Error reading the object - requeue the request.
101+ return ctrl.Result {}, err
102102 }
103103
104104 // Adds finalizer to the appwrapper if it doesn't exist
105- if ! controllerutil .ContainsFinalizer (& appwrapper , finalizerName ) && appwrapper . Status . State != "Completed" {
105+ if ! controllerutil .ContainsFinalizer (& appwrapper , finalizerName ) {
106106 controllerutil .AddFinalizer (& appwrapper , finalizerName )
107107 if err := r .Update (ctx , & appwrapper ); err != nil {
108108 return ctrl.Result {}, err
109109 }
110110 return ctrl.Result {}, nil
111111 }
112112
113- if ! appwrapper .ObjectMeta .DeletionTimestamp .IsZero () || appwrapper .Status .State == "Completed" {
113+ if ! appwrapper .ObjectMeta .DeletionTimestamp .IsZero () || appwrapper .Status .State == arbv1 . AppWrapperStateCompleted {
114114 if err := r .finalizeScalingDownMachines (ctx , & appwrapper ); err != nil {
115115 return ctrl.Result {}, err
116116 }
@@ -123,38 +123,48 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
123123
124124 demandPerInstanceType := r .discoverInstanceTypes (& appwrapper )
125125 //for userRequestedInstanceType := range demandPerInstanceType {
126- if useMachineSets {
127- if reuse {
128- res , err := r .reconcileReuseMachineSet (ctx , & appwrapper , demandPerInstanceType )
129- return res , err
126+ if ocmSecretRef := r .Config .OCMSecretRef ; ocmSecretRef != nil {
127+ return r .scaleMachinePool (ctx , & appwrapper , demandPerInstanceType )
128+ } else {
129+ if r .Config .Reuse {
130+ return r .reconcileReuseMachineSet (ctx , & appwrapper , demandPerInstanceType )
130131 } else {
131- res , err := r .reconcileCreateMachineSet (ctx , & appwrapper , demandPerInstanceType )
132- return res , err
132+ return r .reconcileCreateMachineSet (ctx , & appwrapper , demandPerInstanceType )
133133 }
134- } else {
135- res , err := r .scaleMachinePool (ctx , & appwrapper , demandPerInstanceType )
136- return res , err
137134 }
138135}
139136
140137func (r * AppWrapperReconciler ) finalizeScalingDownMachines (ctx context.Context , appwrapper * arbv1.AppWrapper ) error {
141- if useMachineSets {
142- if reuse {
138+ if appwrapper .Status .State == "Completed" {
139+ deletionMessage = "completed"
140+ } else {
141+ deletionMessage = "deleted"
142+ }
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 {
143150 matchedAw := r .findExactMatch (ctx , appwrapper )
144151 if matchedAw != nil {
145- klog .Infof ("Appwrapper %s deleted, swapping machines to %s" , appwrapper .Name , matchedAw .Name )
146- r .swapNodeLabels (ctx , appwrapper , matchedAw )
152+ klog .Infof ("Appwrapper %s %s, swapping machines to %s" , appwrapper .Name , deletionMessage , matchedAw .Name )
153+ if err := r .swapNodeLabels (ctx , appwrapper , matchedAw ); err != nil {
154+ return err
155+ }
147156 } else {
148- klog .Infof ("Appwrapper %s deleted, scaling down machines" , appwrapper .Name )
149-
150- r .annotateToDeleteMachine (ctx , appwrapper )
157+ klog .Infof ("Appwrapper %s %s, scaling down machines" , appwrapper .Name , deletionMessage )
158+ if err := r .annotateToDeleteMachine (ctx , appwrapper ); err != nil {
159+ return err
160+ }
151161 }
152162 } else {
153- klog .Infof ("Appwrapper deleted scale-down machineset: %s " , appwrapper .Name )
154- r .deleteMachineSet (ctx , appwrapper )
163+ klog .Infof ("Appwrapper %s scale-down machineset: %s " , deletionMessage , appwrapper .Name )
164+ if err := r .deleteMachineSet (ctx , appwrapper ); err != nil {
165+ return err
166+ }
155167 }
156- } else {
157- r .deleteMachinePool (ctx , appwrapper )
158168 }
159169 return nil
160170}
@@ -172,9 +182,8 @@ func (r *AppWrapperReconciler) SetupWithManager(mgr ctrl.Manager) error {
172182
173183 maxScaleNodesAllowed = int (r .Config .MaxScaleoutAllowed )
174184
175- useMachineSets = true
176185 if ocmSecretRef := r .Config .OCMSecretRef ; ocmSecretRef != nil {
177- if ocmSecret , err := r .getOCMSecret (ocmSecretRef ); err != nil {
186+ if ocmSecret , err := r .getOCMSecret (context . Background (), ocmSecretRef ); err != nil {
178187 return fmt .Errorf ("error reading OCM Secret from ref %q: %w" , ocmSecretRef , err )
179188 } else if token := ocmSecret .Data ["token" ]; len (token ) > 0 {
180189 ocmToken = string (token )
@@ -184,7 +193,6 @@ func (r *AppWrapperReconciler) SetupWithManager(mgr ctrl.Manager) error {
184193 if ok , err := machinePoolExists (); err != nil {
185194 return err
186195 } else if ok {
187- useMachineSets = false
188196 klog .Info ("Using machine pools for cluster auto-scaling" )
189197 }
190198 }
@@ -194,21 +202,8 @@ func (r *AppWrapperReconciler) SetupWithManager(mgr ctrl.Manager) error {
194202 Complete (r )
195203}
196204
197- func (r * AppWrapperReconciler ) getOCMSecret (secretRef * corev1.SecretReference ) (* corev1.Secret , error ) {
198- return r .kubeClient .CoreV1 ().Secrets (secretRef .Namespace ).Get (context .Background (), secretRef .Name , metav1.GetOptions {})
199- }
200-
201- func (r * AppWrapperReconciler ) ocmSecretExists (namespace string ) bool {
202- instascaleOCMSecret , err := r .kubeClient .CoreV1 ().Secrets (namespace ).Get (context .Background (), "instascale-ocm-secret" , metav1.GetOptions {})
203- if err != nil {
204- klog .Errorf ("Error getting instascale-ocm-secret from namespace %v: %v" , namespace , err )
205- klog .Infof ("If you are looking to use OCM, ensure that the 'instascale-ocm-secret' secret is available on the cluster within namespace %v" , namespace )
206- klog .Infof ("Setting useMachineSets to %v." , useMachineSets )
207- return false
208- }
209-
210- ocmToken = string (instascaleOCMSecret .Data ["token" ])
211- return true
205+ func (r * AppWrapperReconciler ) getOCMSecret (ctx context.Context , secretRef * corev1.SecretReference ) (* corev1.Secret , error ) {
206+ return r .kubeClient .CoreV1 ().Secrets (secretRef .Namespace ).Get (ctx , secretRef .Name , metav1.GetOptions {})
212207}
213208
214209func (r * AppWrapperReconciler ) discoverInstanceTypes (aw * arbv1.AppWrapper ) map [string ]int {
@@ -237,10 +232,6 @@ func (r *AppWrapperReconciler) discoverInstanceTypes(aw *arbv1.AppWrapper) map[s
237232 return demandMapPerInstanceType
238233}
239234
240- func canScaleMachinepool (demandPerInstanceType map [string ]int ) bool {
241- return true
242- }
243-
244235func (r * AppWrapperReconciler ) findExactMatch (ctx context.Context , aw * arbv1.AppWrapper ) * arbv1.AppWrapper {
245236 var match * arbv1.AppWrapper = nil
246237 appwrappers := arbv1.AppWrapperList {}
@@ -261,7 +252,7 @@ func (r *AppWrapperReconciler) findExactMatch(ctx context.Context, aw *arbv1.App
261252 var existingAcquiredMachineTypes = ""
262253
263254 for _ , eachAw := range appwrappers .Items {
264- if eachAw .Status .State != "Pending" {
255+ if eachAw .Status .State != arbv1 . AppWrapperStateEnqueued {
265256 continue
266257 }
267258 match = & eachAw
@@ -270,11 +261,3 @@ func (r *AppWrapperReconciler) findExactMatch(ctx context.Context, aw *arbv1.App
270261 return match
271262
272263}
273-
274- func (r * AppWrapperReconciler ) scaleDown (ctx context.Context , aw * arbv1.AppWrapper ) {
275- if reuse {
276- r .annotateToDeleteMachine (ctx , aw )
277- } else {
278- r .deleteMachineSet (ctx , aw )
279- }
280- }
0 commit comments