func()

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
}