@@ -19,9 +19,7 @@ package controllers
1919import (
2020 "context"
2121 "fmt"
22- "strings"
23- "time"
24-
22+ ocmsdk "github.com/openshift-online/ocm-sdk-go"
2523 "github.com/project-codeflare/instascale/pkg/config"
2624 arbv1 "github.com/project-codeflare/multi-cluster-app-dispatcher/pkg/apis/controller/v1beta1"
2725 corev1 "k8s.io/api/core/v1"
@@ -30,6 +28,8 @@ import (
3028 "k8s.io/apimachinery/pkg/runtime"
3129 "k8s.io/client-go/kubernetes"
3230 "k8s.io/klog"
31+ "strings"
32+ "time"
3333
3434 "k8s.io/apimachinery/pkg/labels"
3535 ctrl "sigs.k8s.io/controller-runtime"
@@ -38,15 +38,19 @@ import (
3838 "sigs.k8s.io/controller-runtime/pkg/log"
3939)
4040
41+ type MachineType string
42+
4143// AppWrapperReconciler reconciles a AppWrapper object
4244type AppWrapperReconciler struct {
4345 client.Client
44- Scheme * runtime.Scheme
45- Config config.InstaScaleConfiguration
46- kubeClient * kubernetes.Clientset
47- ocmClusterID string
48- ocmToken string
49- useMachineSets bool
46+ Scheme * runtime.Scheme
47+ Config config.InstaScaleConfiguration
48+ kubeClient * kubernetes.Clientset
49+ ocmClusterID string
50+ ocmToken string
51+ ocmConnection * ocmsdk.Connection
52+ MachineType MachineType
53+ machineCheck bool
5054}
5155
5256var (
5559)
5660
5761const (
58- namespaceToList = "openshift-machine-api"
59- minResyncPeriod = 10 * time .Minute
60- finalizerName = "instascale.codeflare.dev/finalizer"
62+ namespaceToList = "openshift-machine-api"
63+ minResyncPeriod = 10 * time .Minute
64+ finalizerName = "instascale.codeflare.dev/finalizer"
65+ MachineTypeMachineSet MachineType = "MachineSet"
66+ MachineTypeMachinePool MachineType = "MachinePool"
67+ MachineTypeNodePool MachineType = "NodePool"
6168)
6269
6370// +kubebuilder:rbac:groups=workload.codeflare.dev,resources=appwrappers,verbs=get;list;watch;create;update;patch;delete
@@ -81,15 +88,25 @@ const (
8188// For more details, check Reconcile and its Result here:
8289// - https://pkg.go.dev/sigs.k8s.io/[email protected] /pkg/reconcile 8390func (r * AppWrapperReconciler ) Reconcile (ctx context.Context , req ctrl.Request ) (ctrl.Result , error ) {
84-
8591 _ = log .FromContext (ctx )
86- // todo: Move the getOCMClusterID call out of reconcile loop.
92+
93+ // todo: Move the "machineCheck" locic out of reconcile loop.
8794 // Only reason we are calling it here is that the client is not able to make
8895 // calls until it is started, so SetupWithManager is not working.
89- if ! r .useMachineSets && r .ocmClusterID == "" {
90- if err := r .getOCMClusterID (ctx ); err != nil {
91- return ctrl.Result {Requeue : true , RequeueAfter : timeFiveSeconds }, err
96+ 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 )
92105 }
106+ if hypershiftEnabled {
107+ r .MachineType = MachineTypeNodePool
108+ }
109+ r .machineCheck = true
93110 }
94111 var appwrapper arbv1.AppWrapper
95112
@@ -124,8 +141,14 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
124141
125142 demandPerInstanceType := r .discoverInstanceTypes (& appwrapper )
126143 if ocmSecretRef := r .Config .OCMSecretRef ; ocmSecretRef != nil {
127- return r .scaleMachinePool (ctx , & appwrapper , demandPerInstanceType )
144+ switch r .MachineType {
145+ case MachineTypeNodePool :
146+ return r .scaleNodePool (ctx , & appwrapper , demandPerInstanceType )
147+ case MachineTypeMachinePool :
148+ return r .scaleMachinePool (ctx , & appwrapper , demandPerInstanceType )
149+ }
128150 } else {
151+ // use MachineSets
129152 switch strings .ToLower (r .Config .MachineSetsStrategy ) {
130153 case "reuse" :
131154 return r .reconcileReuseMachineSet (ctx , & appwrapper , demandPerInstanceType )
@@ -142,7 +165,8 @@ func (r *AppWrapperReconciler) finalizeScalingDownMachines(ctx context.Context,
142165 } else {
143166 deletionMessage = "deleted"
144167 }
145- if r .useMachineSets {
168+ switch r .MachineType {
169+ case MachineTypeMachineSet :
146170 switch strings .ToLower (r .Config .MachineSetsStrategy ) {
147171 case "reuse" :
148172 matchedAw := r .findExactMatch (ctx , appwrapper )
@@ -163,7 +187,14 @@ func (r *AppWrapperReconciler) finalizeScalingDownMachines(ctx context.Context,
163187 return err
164188 }
165189 }
166- } else {
190+
191+ case MachineTypeNodePool :
192+ klog .Infof ("Appwrapper %s scale-down node pool: %s " , deletionMessage , appwrapper .Name )
193+ if _ , err := r .deleteNodePool (ctx , appwrapper ); err != nil {
194+ return err
195+ }
196+
197+ case MachineTypeMachinePool :
167198 klog .Infof ("Appwrapper %s scale-down machine pool: %s " , deletionMessage , appwrapper .Name )
168199 if _ , err := r .deleteMachinePool (ctx , appwrapper ); err != nil {
169200 return err
@@ -174,7 +205,6 @@ func (r *AppWrapperReconciler) finalizeScalingDownMachines(ctx context.Context,
174205
175206// SetupWithManager sets up the controller with the Manager.
176207func (r * AppWrapperReconciler ) SetupWithManager (ctx context.Context , mgr ctrl.Manager ) error {
177-
178208 restConfig := mgr .GetConfig ()
179209
180210 var err error
@@ -184,21 +214,16 @@ func (r *AppWrapperReconciler) SetupWithManager(ctx context.Context, mgr ctrl.Ma
184214 }
185215
186216 maxScaleNodesAllowed = int (r .Config .MaxScaleoutAllowed )
187- r .useMachineSets = true
217+ r .MachineType = MachineTypeMachineSet // default to MachineSet
188218 if ocmSecretRef := r .Config .OCMSecretRef ; ocmSecretRef != nil {
189- r .useMachineSets = false
190219 if ocmSecret , err := r .getOCMSecret (ctx , ocmSecretRef ); err != nil {
191220 return fmt .Errorf ("error reading OCM Secret from ref %q: %w" , ocmSecretRef , err )
192221 } else if token := ocmSecret .Data ["token" ]; len (token ) > 0 {
193222 r .ocmToken = string (token )
223+ r .MachineType = MachineTypeMachinePool
194224 } else {
195225 return fmt .Errorf ("token is missing from OCM Secret %q" , ocmSecretRef )
196226 }
197- if ok , err := r .machinePoolExists (); err != nil {
198- return err
199- } else if ok {
200- klog .Info ("Using machine pools for cluster auto-scaling" )
201- }
202227 }
203228
204229 return ctrl .NewControllerManagedBy (mgr ).
0 commit comments