in pkg/controller/license/trial/trial_controller.go [60:112]
func (r *ReconcileTrials) Reconcile(ctx context.Context, request reconcile.Request) (reconcile.Result, error) {
ctx = common.NewReconciliationContext(ctx, &r.iteration, r.Tracer, name, "secret_name", request)
defer common.LogReconciliationRun(ulog.FromContext(ctx))()
defer tracing.EndContextTransaction(ctx)
log := ulog.FromContext(ctx)
secret, license, err := licensing.TrialLicense(r, request.NamespacedName)
if err != nil && errors.IsNotFound(err) {
log.Info("Trial license secret has been deleted by user, but trial had been started previously.")
return reconcile.Result{}, nil
}
if err != nil {
return reconcile.Result{}, pkgerrors.Wrap(err, "while fetching trial license")
}
if !license.IsECKManagedTrial() {
// ignore externally generated licenses
return reconcile.Result{}, nil
}
validationMsg := validateEULA(secret)
if validationMsg != "" {
return reconcile.Result{}, r.invalidOperation(ctx, secret, validationMsg)
}
// 1. reconcile trial status secret
if err := r.reconcileTrialStatus(ctx, request.NamespacedName, license); err != nil {
return reconcile.Result{}, pkgerrors.Wrap(err, "while reconciling trial status")
}
// 2. reconcile the trial license itself
trialLicensePopulated := license.IsMissingFields() == nil
licenseStatus := r.validateLicense(ctx, license)
switch {
case !trialLicensePopulated && r.trialState.IsTrialStarted():
// user wants to start a trial for the second time
return reconcile.Result{}, r.invalidOperation(ctx, secret, trialOnlyOnceMsg)
case !trialLicensePopulated && !r.trialState.IsTrialStarted():
// user wants to init a trial for the first time
return reconcile.Result{}, r.initTrialLicense(ctx, secret, license)
case trialLicensePopulated && !validLicense(licenseStatus):
// existing license is invalid (expired or tampered with)
return reconcile.Result{}, r.invalidOperation(ctx, secret, userFriendlyMsgs[licenseStatus])
case trialLicensePopulated && validLicense(licenseStatus) && !r.trialState.IsTrialStarted():
// valid license, let's consider the trial started and complete the activation
return reconcile.Result{}, r.completeTrialActivation(ctx, request.NamespacedName)
case trialLicensePopulated && validLicense(licenseStatus) && r.trialState.IsTrialStarted():
// all good nothing to do
}
return reconcile.Result{}, err
}