Skip to content

Commit

Permalink
Refactor RepositoryServer controller (#2136)
Browse files Browse the repository at this point in the history
* Update RepositoryServer CR Status fields, add metav1.conditions

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

* Update RepositoryServer CRD

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

* Run 'make codegen'

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

* Fix Lint

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

* Refactor name, set ClientInitialized to ClientUserInitialized

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

* Refactor RepositoryServer Controller

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

* Run gofmt

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

* add error handling in refreshServer function

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

* Add function to update Progress in RepositoryServerStatus

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

---------

Signed-off-by: Akanksha Kumari <akankshakumari393@gmail.com>
Co-authored-by: kale-amruta <41624751+kale-amruta@users.noreply.github.com>
  • Loading branch information
akankshakumari393 and kale-amruta committed Jun 30, 2023
1 parent da279af commit fb4bd07
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 26 deletions.
32 changes: 20 additions & 12 deletions pkg/controllers/repositoryserver/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,18 +70,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 @@ -312,3 +300,23 @@ func (h *RepoServerHandler) waitForPodReady(ctx context.Context, pod *corev1.Pod
}
return nil
}

func (h *RepoServerHandler) updateProgressInCRStatus(ctx context.Context, progress crv1alpha1.RepositoryServerProgress) error {
h.Logger.Info("Fetch latest version of RepositoryServer to update the ServerInfo in its status")
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
}
h.Logger.Info("Update the Progress")
rs.Status.Progress = progress
err = h.Reconciler.Status().Update(ctx, &rs)
if err != nil {
return err
}
h.Logger.Info("Use this updated RepositoryServer CR")
h.RepositoryServer = &rs
return nil
}
42 changes: 37 additions & 5 deletions pkg/controllers/repositoryserver/repositoryserver_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -87,21 +87,53 @@ func (r *RepositoryServerReconciler) Reconcile(ctx context.Context, req ctrl.Req
if err = r.Status().Update(ctx, repoServerHandler.RepositoryServer); err != nil {
return ctrl.Result{}, err
}
logger.Info("Setup RepositoryServer, Create or update owned resources")
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.updateProgressInCRStatus(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.updateProgressInCRStatus(ctx, crkanisteriov1alpha1.Failed); uerr != nil {
return ctrl.Result{}, uerr
}
return ctrl.Result{}, err
}

logger.Info("Start Repository Server")
if err := repoServerHandler.startRepoProxyServer(ctx); err != nil {
if uerr := repoServerHandler.updateProgressInCRStatus(ctx, crkanisteriov1alpha1.Failed); uerr != nil {
return ctrl.Result{}, uerr
}
return ctrl.Result{}, err
}

logger.Info("Add/Update users")
if err := repoServerHandler.createOrUpdateClientUsers(ctx); err != nil {
if uerr := repoServerHandler.updateProgressInCRStatus(ctx, crkanisteriov1alpha1.Failed); uerr != nil {
return ctrl.Result{}, uerr
}
return ctrl.Result{}, err
}

logger.Info("Refresh Server")
if err := repoServerHandler.refreshServer(ctx); err != nil {
if uerr := repoServerHandler.updateProgressInCRStatus(ctx, crkanisteriov1alpha1.Failed); uerr != nil {
return ctrl.Result{}, uerr
}
return ctrl.Result{}, err
}

logger.Info("Setting the CR status as 'Ready' after completing the create/update event\n\n\n\n")
if uerr := repoServerHandler.updateProgressInCRStatus(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 fb4bd07

Please sign in to comment.