in controllers/hostingautoscalingpolicy/hostingautoscalingpolicy_controller.go [141:217]
func (r *Reconciler) reconcileHostingAutoscalingPolicy(ctx reconcileRequestContext) error {
var err error
// Set first-touch status
if ctx.HostingAutoscalingPolicy.Status.HostingAutoscalingPolicyStatus == "" {
if err = r.updateStatus(ctx, ReconcilingAutoscalingJobStatus); err != nil {
return err
}
}
if err = r.initializeContext(&ctx); err != nil {
return r.updateStatusAndReturnError(ctx, errors.Wrap(err, "Unable to initialize operator"))
}
// Add finalizer if it's not marked for deletion.
if !controllers.HasDeletionTimestamp(ctx.HostingAutoscalingPolicy.ObjectMeta) {
if !controllers.ContainsString(ctx.HostingAutoscalingPolicy.ObjectMeta.GetFinalizers(), controllers.SageMakerResourceFinalizerName) {
ctx.HostingAutoscalingPolicy.ObjectMeta.Finalizers = append(ctx.HostingAutoscalingPolicy.ObjectMeta.Finalizers, controllers.SageMakerResourceFinalizerName)
if err := r.Update(ctx, ctx.HostingAutoscalingPolicy); err != nil {
return errors.Wrap(err, "Failed to add finalizer")
}
ctx.Log.Info("Finalizer added")
}
}
// Update Descriptions in ctx
if ctx.ScalableTargetDescriptionList, ctx.ScalingPolicyDescriptionList, err = r.describeAutoscalingPolicy(ctx); err != nil && !clientwrapper.IsDescribeHAP404Error(err) {
return r.updateStatusAndReturnError(ctx, errors.Wrap(err, "Unable to describe HostingAutoscalingPolicy."))
}
var action controllers.ReconcileAction
if action, err = r.determineActionForAutoscaling(ctx); err != nil {
return r.updateStatusAndReturnError(ctx, errors.Wrap(err, "Unable to determine action for HostingAutoscalingPolicy."))
}
ctx.Log.Info("Determined action for AutoscalingJob", "action", action)
// If update or delete, delete the existing Policy.
if action == controllers.NeedsDelete || action == controllers.NeedsUpdate {
if err = r.deleteAutoscalingPolicy(ctx); err != nil {
return r.updateStatusAndReturnError(ctx, errors.Wrap(err, "Unable to delete HostingAutoscalingPolicy"))
}
// Delete succeeded, set Description, ResourceIDList to nil.
ctx.ScalingPolicyDescriptionList = nil
ctx.ScalableTargetDescriptionList = nil
ctx.HostingAutoscalingPolicy.Status.ResourceIDList = []string{}
}
// If update or create, create the desired HAP.
if action == controllers.NeedsCreate || action == controllers.NeedsUpdate {
if ctx.ScalableTargetDescriptionList, ctx.ScalingPolicyDescriptionList, err = r.applyAutoscalingPolicy(ctx); err != nil {
return r.updateStatusAndReturnError(ctx, errors.Wrap(err, "Unable to apply HostingAutoscalingPolicy"))
}
// If create succeeded, save the resourceIDs before next spec update.
r.saveCurrentResourceIDsToStatus(&ctx)
}
// Update the status accordingly.
// Review: Deleted Status may be unnecessary
status := CreatedAutoscalingJobStatus
if ctx.ScalingPolicyDescriptionList == nil {
status = DeletedAutoscalingJobStatus
}
if err = r.updateStatus(ctx, status); err != nil {
return err
}
// Remove the Finalizer on delete
if controllers.HasDeletionTimestamp(ctx.HostingAutoscalingPolicy.ObjectMeta) {
if err = r.removeFinalizer(ctx); err != nil {
return err
}
}
return nil
}