Skip to content

Commit

Permalink
WIP - Code change
Browse files Browse the repository at this point in the history
Signed-off-by: Andrej Krejcir <akrejcir@redhat.com>
  • Loading branch information
akrejcir committed Sep 27, 2022
1 parent 337cb60 commit 4445c6d
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 35 deletions.
68 changes: 41 additions & 27 deletions controllers/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,11 @@ import (
"sigs.k8s.io/controller-runtime/pkg/manager"
)

func CreateAndSetupReconciler(ctx context.Context, mgr controllerruntime.Manager) error {
func CreateAndStartReconciler(ctx context.Context, mgr controllerruntime.Manager) error {
templatesFile := filepath.Join(templateBundleDir, "common-templates-"+common_templates.Version+".yaml")
templatesBundle, err := template_bundle.ReadBundle(templatesFile)
if err != nil {
return err
return fmt.Errorf("failed to read template bundle: %w", err)
}

sspOperands := []operands.Operand{
Expand All @@ -43,64 +43,78 @@ func CreateAndSetupReconciler(ctx context.Context, mgr controllerruntime.Manager
crdList := &extv1.CustomResourceDefinitionList{}
err = mgr.GetAPIReader().List(ctx, crdList)
if err != nil {
return err
return fmt.Errorf("failed to list CRDs: %w", err)
}

infrastructureTopology, err := common.GetInfrastructureTopology(ctx, mgr.GetAPIReader())
if err != nil {
return err
return fmt.Errorf("failed to get infrastructure topology: %w", err)
}

serviceController, err := CreateServiceController(ctx, mgr)
if err != nil {
return err
return fmt.Errorf("failed to create service controller: %w", err)
}

err = mgr.Add(manager.RunnableFunc(func(ctx context.Context) error {
err := serviceController.Start(ctx, mgr)
if err != nil {
return fmt.Errorf("error adding serviceController: %w", err)
return fmt.Errorf("error starting serviceController: %w", err)
}

mgr.GetLogger().Info("Services Controller started")

return nil
}))
if err != nil {
return err
return fmt.Errorf("error adding service controller: %w", err)
}

reconciler := NewSspReconciler(mgr.GetClient(), mgr.GetAPIReader(), infrastructureTopology, sspOperands)

if requiredCrdsExist(requiredCrds, crdList.Items) {
// No need to start CRD controller
return reconciler.setupController(mgr)
}

mgr.GetLogger().Info("Required CRDs do not exist. Waiting until they are installed.",
"required_crds", requiredCrds,
)
err := reconciler.setupController(mgr)
if err != nil {
return fmt.Errorf("error setting up SSP controller: %w", err)
}

crdController, err := CreateCrdController(mgr, requiredCrds)
if err != nil {
return err
}
} else {
mgr.GetLogger().Info("Required CRDs do not exist. Waiting until they are installed.",
"required_crds", requiredCrds,
)

return mgr.Add(manager.RunnableFunc(func(ctx context.Context) error {
// First start the CRD controller
err := crdController.Start(ctx)
crdController, err := CreateCrdController(mgr, requiredCrds)
if err != nil {
return err
return fmt.Errorf("failed to create crd controller: %w", err)
}

mgr.GetLogger().Info("Required CRDs were installed, starting SSP operator.")
err = mgr.Add(manager.RunnableFunc(func(ctx context.Context) error {
// First start the CRD controller
err := crdController.Start(ctx)
if err != nil {
return fmt.Errorf("error from crd controller: %w", err)
}

// Clear variable, so it can be garbage collected
crdController = nil
mgr.GetLogger().Info("Required CRDs were installed, starting SSP operator.")

// After it is finished, add the SSP controller to the manager
return reconciler.setupController(mgr)
}))
// Clear variable, so it can be garbage collected
crdController = nil

// After it is finished, add the SSP controller to the manager
return reconciler.setupController(mgr)
}))
if err != nil {
return err
}
}

mgr.GetLogger().Info("starting manager")
if err := mgr.Start(ctx); err != nil {
mgr.GetLogger().Error(err, "problem running manager")
return err
}
return nil
}

func requiredCrdsExist(required []string, foundCrds []extv1.CustomResourceDefinition) bool {
Expand Down
10 changes: 2 additions & 8 deletions main.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,6 @@ func main() {
os.Exit(1)
}

if err = controllers.CreateAndSetupReconciler(ctx, mgr); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "SSP")
os.Exit(1)
}
if os.Getenv("ENABLE_WEBHOOKS") != "false" {
if err = webhooks.Setup(mgr); err != nil {
setupLog.Error(err, "unable to create webhook", "webhook", "SSP")
Expand All @@ -185,10 +181,8 @@ func main() {
}

// +kubebuilder:scaffold:builder

setupLog.Info("starting manager")
if err := mgr.Start(ctx); err != nil {
setupLog.Error(err, "problem running manager")
if err = controllers.CreateAndStartReconciler(ctx, mgr); err != nil {
setupLog.Error(err, "unable to create or start controller", "controller", "SSP")
os.Exit(1)
}
}
Expand Down

0 comments on commit 4445c6d

Please sign in to comment.