controllers/codebase/service/chain/cleaner.go (62 lines of code) (raw):
package chain
import (
"context"
"fmt"
v1 "k8s.io/api/core/v1"
k8sErrors "k8s.io/apimachinery/pkg/api/errors"
metaV1 "k8s.io/apimachinery/pkg/apis/meta/v1"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
codebaseApi "github.com/epam/edp-codebase-operator/v2/api/v1"
"github.com/epam/edp-codebase-operator/v2/pkg/util"
)
type Cleaner struct {
client client.Client
}
func NewCleaner(c client.Client) *Cleaner {
return &Cleaner{client: c}
}
func (h *Cleaner) ServeRequest(ctx context.Context, codebase *codebaseApi.Codebase) error {
log := ctrl.LoggerFrom(ctx)
log.Info("Start cleaning data")
if err := h.clean(ctx, codebase); err != nil {
setFailedFields(codebase, codebaseApi.CleanData, err.Error())
return err
}
log.Info("End cleaning data")
return nil
}
func (h *Cleaner) clean(ctx context.Context, codebase *codebaseApi.Codebase) error {
log := ctrl.LoggerFrom(ctx)
s := fmt.Sprintf("repository-codebase-%v-temp", codebase.Name)
if err := h.deleteSecret(ctx, s, codebase.Namespace); err != nil {
return fmt.Errorf("failed to delete secret %v: %w", s, err)
}
wd := util.GetWorkDir(codebase.Name, codebase.Namespace)
log.Info("Deleting work directory", "directory", wd)
return deleteWorkDirectory(wd)
}
func (h *Cleaner) deleteSecret(ctx context.Context, secretName, namespace string) error {
log := ctrl.LoggerFrom(ctx).WithValues("secret", secretName)
log.Info("Deleting secret")
if err := h.client.Delete(ctx, &v1.Secret{
ObjectMeta: metaV1.ObjectMeta{
Name: secretName,
Namespace: namespace,
},
}); err != nil {
if k8sErrors.IsNotFound(err) {
log.Info("Secret is not found. Skip deleting")
return nil
}
return fmt.Errorf("failed to Delete 'Secret' resource %q: %w", secretName, err)
}
log.Info("Secret was deleted")
return nil
}
func deleteWorkDirectory(dir string) error {
if err := util.RemoveDirectory(dir); err != nil {
return fmt.Errorf("failed to delete directory %v: %w", dir, err)
}
return nil
}