Skip to content

Commit

Permalink
Revert "Revert "Refactor RepositoryServer controller"" (#2154)
Browse files Browse the repository at this point in the history
* Revert "Revert "Refactor RepositoryServer controller (#2136)" (#2150)"

This reverts commit 64595c9.

* Remove logs from RepositoryServer Controller

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>

* Remove logs

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>

* Add logs and values that add name and namespace to the logger

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>

* Run gofmt

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>

* Run gofmt

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>

* Address review comments

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>

* move kopia server setup part from reconcile function

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>

* Address review comments

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>

---------

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>
  • Loading branch information
akankshakumari393 committed Jul 25, 2023
1 parent c24df8a commit f876a47
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 29 deletions.
57 changes: 45 additions & 12 deletions pkg/controllers/repositoryserver/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"

crkanisteriov1alpha1 "github.com/kanisterio/kanister/pkg/apis/cr/v1alpha1"
crv1alpha1 "github.com/kanisterio/kanister/pkg/apis/cr/v1alpha1"
"github.com/kanisterio/kanister/pkg/kube"
"github.com/kanisterio/kanister/pkg/poll"
Expand Down Expand Up @@ -72,18 +73,6 @@ func (h *RepoServerHandler) CreateOrUpdateOwnedResources(ctx context.Context) er
return err
}
}

if err := h.connectToKopiaRepository(); err != nil {
return errors.Wrap(err, "Failed to connect to Kopia repository")
}

if err := h.startRepoProxyServer(ctx); err != nil {
return errors.Wrap(err, "Failed to start Kopia API server")
}

if err := h.createOrUpdateClientUsers(ctx); err != nil {
return errors.Wrap(err, "Failed to create/update kopia API server access users")
}
return nil
}

Expand Down Expand Up @@ -315,3 +304,47 @@ func (h *RepoServerHandler) waitForPodReady(ctx context.Context, pod *corev1.Pod
}
return nil
}

func (h *RepoServerHandler) updateRepoServerProgress(ctx context.Context, progress crv1alpha1.RepositoryServerProgress) error {
repoServerName := h.RepositoryServer.Name
repoServerNamespace := h.RepositoryServer.Namespace
rs := crv1alpha1.RepositoryServer{}
err := h.Reconciler.Get(ctx, types.NamespacedName{Name: repoServerName, Namespace: repoServerNamespace}, &rs)
if err != nil {
return err
}
rs.Status.Progress = progress
err = h.Reconciler.Status().Update(ctx, &rs)
if err != nil {
return err
}
h.RepositoryServer = &rs
return nil
}

func (h *RepoServerHandler) setupKopiaRepositoryServer(ctx context.Context, logger logr.Logger) (ctrl.Result, error) {
logger.Info("Start Kopia Repository Server")
if err := h.startRepoProxyServer(ctx); err != nil {
if uerr := h.updateRepoServerProgress(ctx, crkanisteriov1alpha1.Failed); uerr != nil {
return ctrl.Result{}, uerr
}
return ctrl.Result{}, err
}

logger.Info("Add/Update users in Kopia Repository Server")
if err := h.createOrUpdateClientUsers(ctx); err != nil {
if uerr := h.updateRepoServerProgress(ctx, crkanisteriov1alpha1.Failed); uerr != nil {
return ctrl.Result{}, uerr
}
return ctrl.Result{}, err
}

logger.Info("Refresh Kopia Repository Server")
if err := h.refreshServer(ctx); err != nil {
if uerr := h.updateRepoServerProgress(ctx, crkanisteriov1alpha1.Failed); uerr != nil {
return ctrl.Result{}, uerr
}
return ctrl.Result{}, err
}
return ctrl.Result{}, nil
}
25 changes: 17 additions & 8 deletions pkg/controllers/repositoryserver/repositoryserver_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,37 +71,46 @@ func (r *RepositoryServerReconciler) Reconcile(ctx context.Context, req ctrl.Req
return ctrl.Result{}, errors.Wrap(err, "Failed to get a k8s client")
}

logger.Info("Fetch RepositoryServer CR. If not found end reconcile loop")
repositoryServer := &crkanisteriov1alpha1.RepositoryServer{}
if err = r.Get(ctx, req.NamespacedName, repositoryServer); err != nil {
return ctrl.Result{}, client.IgnoreNotFound(err)
}

logger.Info("Setting the CR status as 'Pending' since a create or update event is in progress")
repositoryServer.Status.Progress = crkanisteriov1alpha1.Pending

logger.Info("Found RepositoryServer CR. Create or update owned resources")
repoServerHandler := newRepositoryServerHandler(ctx, req, logger, r, kubeCli, repositoryServer)
repoServerHandler.RepositoryServer = repositoryServer

if err = r.Status().Update(ctx, repoServerHandler.RepositoryServer); err != nil {
return ctrl.Result{}, err
}

logger.Info("Create or update owned resources by Repository Server CR")
if err := repoServerHandler.CreateOrUpdateOwnedResources(ctx); err != nil {
logger.Info("Setting the CR status as 'Failed' since an error occurred in create/update event")
repoServerHandler.RepositoryServer.Status.Progress = crkanisteriov1alpha1.Failed
if uerr := r.Status().Update(ctx, repoServerHandler.RepositoryServer); uerr != nil {
if uerr := repoServerHandler.updateRepoServerProgress(ctx, crkanisteriov1alpha1.Failed); uerr != nil {
return ctrl.Result{}, uerr
}
r.Recorder.Event(repoServerHandler.RepositoryServer, corev1.EventTypeWarning, "Failed", err.Error())
return ctrl.Result{}, err
}
logger.Info("Setting the CR status as 'Ready' after completing the create/update event\n\n\n\n")
repoServerHandler.RepositoryServer.Status.Progress = crkanisteriov1alpha1.Ready
if err = r.Status().Update(ctx, repoServerHandler.RepositoryServer); err != nil {

logger.Info("Connect to Kopia Repository")
if err := repoServerHandler.connectToKopiaRepository(); err != nil {
if uerr := repoServerHandler.updateRepoServerProgress(ctx, crkanisteriov1alpha1.Failed); uerr != nil {
return ctrl.Result{}, uerr
}
return ctrl.Result{}, err
}

if result, err := repoServerHandler.setupKopiaRepositoryServer(ctx, logger); err != nil {
return result, err
}

if uerr := repoServerHandler.updateRepoServerProgress(ctx, crkanisteriov1alpha1.Ready); uerr != nil {
return ctrl.Result{}, uerr
}

return ctrl.Result{}, nil
}

Expand Down
13 changes: 4 additions & 9 deletions pkg/controllers/repositoryserver/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -190,19 +190,14 @@ func (h *RepoServerHandler) createOrUpdateClientUsers(ctx context.Context) error
return errors.Wrap(err, "Failed to add new user to the Kopia API server")
}
}
return nil
}

repoServerAddress, serverAdminUserName, serverAdminPassword, err := h.getServerDetails(ctx)
func (h *RepoServerHandler) refreshServer(ctx context.Context) error {
serverAddress, username, password, err := h.getServerDetails(ctx)
if err != nil {
return err
}
err = h.refreshServer(ctx, repoServerAddress, serverAdminUserName, serverAdminPassword)
if err != nil {
return errors.Wrap(err, "Failed to refresh Kopia API server")
}
return nil
}

func (h *RepoServerHandler) refreshServer(ctx context.Context, serverAddress, username, password string) error {
repoPassword := string(h.RepositoryServerSecrets.repositoryPassword.Data[reposerver.RepoPasswordKey])
fingerprint, err := kopia.ExtractFingerprintFromCertSecret(ctx, h.KubeCli, h.RepositoryServerSecrets.serverTLS.Name, h.RepositoryServer.Namespace)
if err != nil {
Expand Down

0 comments on commit f876a47

Please sign in to comment.