in controllers/package_controller.go [133:205]
func (r *PackageReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
r.Log.V(6).Info("Reconcile:", "NamespacedName", req.NamespacedName)
managerContext := packages.NewManagerContext(ctx, r.Log, r.PackageDriver)
managerContext.ManagerClient = r.managerClient
// Get the CRD object from the k8s API.
var err error
if err = r.Get(ctx, req.NamespacedName, &managerContext.Package); err != nil {
if !apierrors.IsNotFound(err) {
return ctrl.Result{}, err
}
managerContext.SetUninstalling(req.Namespace, req.Name)
} else {
pbc, err := r.managerClient.GetPackageBundleController(ctx, managerContext.Package.GetClusterName())
if err != nil {
r.Log.Error(err, "Getting package bundle controller")
managerContext.Package.Status.Detail = err.Error()
if err = r.Status().Update(ctx, &managerContext.Package); err != nil {
return ctrl.Result{RequeueAfter: retryLong}, err
}
return ctrl.Result{RequeueAfter: retryLong}, nil
}
managerContext.PBC = *pbc
bundle, err := r.managerClient.GetActiveBundle(ctx, managerContext.Package.GetClusterName())
if err != nil {
r.Log.Error(err, "Getting active bundle")
managerContext.Package.Status.Detail = err.Error()
if err = r.Status().Update(ctx, &managerContext.Package); err != nil {
return ctrl.Result{RequeueAfter: retryLong}, err
}
return ctrl.Result{RequeueAfter: retryLong}, nil
}
managerContext.Bundle = bundle
targetVersion := managerContext.Package.Spec.PackageVersion
if targetVersion == "" {
targetVersion = api.Latest
}
pkgName := managerContext.Package.Spec.PackageName
pkg, err := bundle.FindPackage(pkgName)
if err != nil {
managerContext.Package.Status.Detail = fmt.Sprintf("Package %s is not in the active bundle (%s).", pkgName, bundle.Name)
r.Log.Info(managerContext.Package.Status.Detail)
if err = r.Status().Update(ctx, &managerContext.Package); err != nil {
return ctrl.Result{RequeueAfter: managerContext.RequeueAfter}, err
}
return ctrl.Result{RequeueAfter: retryLong}, err
}
managerContext.Version, err = bundle.FindVersion(pkg, targetVersion)
if err != nil {
managerContext.Package.Status.Detail = fmt.Sprintf("Package %s@%s is not in the active bundle (%s).", pkgName, targetVersion, bundle.Name)
r.Log.Info(managerContext.Package.Status.Detail)
if err = r.Status().Update(ctx, &managerContext.Package); err != nil {
return ctrl.Result{RequeueAfter: managerContext.RequeueAfter}, err
}
return ctrl.Result{RequeueAfter: retryLong}, err
}
managerContext.Source = bundle.GetOCISource(pkg, managerContext.Version)
managerContext.Package.Status.TargetVersion = printableTargetVersion(managerContext.Source, targetVersion)
}
updateNeeded := r.Manager.Process(managerContext)
if updateNeeded {
r.Log.V(6).Info("Updating status", "namespace", managerContext.Package.Namespace, "name", managerContext.Package.Name, "state", managerContext.Package.Status.State)
if err = r.Status().Update(ctx, &managerContext.Package); err != nil {
return ctrl.Result{RequeueAfter: managerContext.RequeueAfter}, err
}
}
return ctrl.Result{RequeueAfter: managerContext.RequeueAfter}, nil
}