@@ -41,15 +41,16 @@ import (
41
41
// AppWrapperReconciler reconciles a AppWrapper object
42
42
type AppWrapperReconciler struct {
43
43
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
47
50
}
48
51
49
52
var (
50
53
deletionMessage string
51
- ocmClusterID string
52
- ocmToken string
53
54
maxScaleNodesAllowed int
54
55
)
55
56
@@ -85,9 +86,9 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
85
86
// todo: Move the getOCMClusterID call out of reconcile loop.
86
87
// Only reason we are calling it here is that the client is not able to make
87
88
// 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 == "" {
89
90
if err := r .getOCMClusterID (ctx ); err != nil {
90
- return ctrl.Result {}, err
91
+ return ctrl.Result {Requeue : true , RequeueAfter : timeFiveSeconds }, err
91
92
}
92
93
}
93
94
var appwrapper arbv1.AppWrapper
@@ -105,7 +106,7 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
105
106
if ! controllerutil .ContainsFinalizer (& appwrapper , finalizerName ) {
106
107
controllerutil .AddFinalizer (& appwrapper , finalizerName )
107
108
if err := r .Update (ctx , & appwrapper ); err != nil {
108
- return ctrl.Result {}, err
109
+ return ctrl.Result {RequeueAfter : timeFiveSeconds }, nil
109
110
}
110
111
return ctrl.Result {}, nil
111
112
}
@@ -122,31 +123,28 @@ func (r *AppWrapperReconciler) Reconcile(ctx context.Context, req ctrl.Request)
122
123
}
123
124
124
125
demandPerInstanceType := r .discoverInstanceTypes (& appwrapper )
125
- //for userRequestedInstanceType := range demandPerInstanceType {
126
126
if ocmSecretRef := r .Config .OCMSecretRef ; ocmSecretRef != nil {
127
127
return r .scaleMachinePool (ctx , & appwrapper , demandPerInstanceType )
128
128
} else {
129
- if r .Config .Reuse {
129
+ switch strings .ToLower (r .Config .MachineSetsStrategy ) {
130
+ case "reuse" :
130
131
return r .reconcileReuseMachineSet (ctx , & appwrapper , demandPerInstanceType )
131
- } else {
132
+ case "duplicate" :
132
133
return r .reconcileCreateMachineSet (ctx , & appwrapper , demandPerInstanceType )
133
134
}
134
135
}
136
+ return ctrl.Result {}, nil
135
137
}
136
138
137
139
func (r * AppWrapperReconciler ) finalizeScalingDownMachines (ctx context.Context , appwrapper * arbv1.AppWrapper ) error {
138
- if appwrapper .Status .State == "Completed" {
140
+ if appwrapper .Status .State == arbv1 . AppWrapperStateCompleted {
139
141
deletionMessage = "completed"
140
142
} else {
141
143
deletionMessage = "deleted"
142
144
}
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" :
150
148
matchedAw := r .findExactMatch (ctx , appwrapper )
151
149
if matchedAw != nil {
152
150
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,
159
157
return err
160
158
}
161
159
}
162
- } else {
160
+ case "duplicate" :
163
161
klog .Infof ("Appwrapper %s scale-down machineset: %s " , deletionMessage , appwrapper .Name )
164
162
if err := r .deleteMachineSet (ctx , appwrapper ); err != nil {
165
163
return err
166
164
}
167
165
}
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
+ }
168
171
}
169
172
return nil
170
173
}
171
174
172
175
// 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 {
174
177
175
178
restConfig := mgr .GetConfig ()
176
179
@@ -181,16 +184,17 @@ func (r *AppWrapperReconciler) SetupWithManager(mgr ctrl.Manager) error {
181
184
}
182
185
183
186
maxScaleNodesAllowed = int (r .Config .MaxScaleoutAllowed )
184
-
187
+ r . useMachineSets = true
185
188
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 {
187
191
return fmt .Errorf ("error reading OCM Secret from ref %q: %w" , ocmSecretRef , err )
188
192
} else if token := ocmSecret .Data ["token" ]; len (token ) > 0 {
189
- ocmToken = string (token )
193
+ r . ocmToken = string (token )
190
194
} else {
191
195
return fmt .Errorf ("token is missing from OCM Secret %q" , ocmSecretRef )
192
196
}
193
- if ok , err := machinePoolExists (); err != nil {
197
+ if ok , err := r . machinePoolExists (); err != nil {
194
198
return err
195
199
} else if ok {
196
200
klog .Info ("Using machine pools for cluster auto-scaling" )
0 commit comments