Merge pull request #12 from fluxcd/gc-predicate
Move artifact gc to delete event predicate
This commit is contained in:
commit
580574dffc
|
@ -38,9 +38,6 @@ import (
|
|||
"k8s.io/apimachinery/pkg/types"
|
||||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
|
||||
"sigs.k8s.io/controller-runtime/pkg/event"
|
||||
"sigs.k8s.io/controller-runtime/pkg/predicate"
|
||||
|
||||
sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1"
|
||||
)
|
||||
|
@ -101,26 +98,8 @@ func (r *GitRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, erro
|
|||
func (r *GitRepositoryReconciler) SetupWithManager(mgr ctrl.Manager) error {
|
||||
return ctrl.NewControllerManagedBy(mgr).
|
||||
For(&sourcev1.GitRepository{}).
|
||||
WithEventFilter(RepositoryChangePredicate{}).
|
||||
WithEventFilter(predicate.Funcs{
|
||||
DeleteFunc: func(e event.DeleteEvent) bool {
|
||||
gvk, err := apiutil.GVKForObject(e.Object, r.Scheme)
|
||||
if err != nil {
|
||||
r.Log.Error(err, "unable to get GroupVersionKind for deleted object")
|
||||
return false
|
||||
}
|
||||
// delete artifacts
|
||||
artifact := r.Storage.ArtifactFor(gvk.Kind, e.Meta, "*", "")
|
||||
if err := r.Storage.RemoveAll(artifact); err != nil {
|
||||
r.Log.Error(err, "unable to delete artifacts",
|
||||
gvk.Kind, fmt.Sprintf("%s/%s", e.Meta.GetNamespace(), e.Meta.GetName()))
|
||||
} else {
|
||||
r.Log.Info("Git repository artifacts deleted",
|
||||
gvk.Kind, fmt.Sprintf("%s/%s", e.Meta.GetNamespace(), e.Meta.GetName()))
|
||||
}
|
||||
return true
|
||||
},
|
||||
}).
|
||||
WithEventFilter(SourceChangePredicate{}).
|
||||
WithEventFilter(GarbageCollectPredicate{Scheme: r.Scheme, Log: r.Log, Storage: r.Storage}).
|
||||
Complete(r)
|
||||
}
|
||||
|
||||
|
|
|
@ -33,9 +33,6 @@ import (
|
|||
"k8s.io/apimachinery/pkg/types"
|
||||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
|
||||
"sigs.k8s.io/controller-runtime/pkg/event"
|
||||
"sigs.k8s.io/controller-runtime/pkg/predicate"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1"
|
||||
|
@ -77,6 +74,7 @@ func (r *HelmChartReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
|
|||
// try to remove old artifacts
|
||||
r.gc(chart)
|
||||
|
||||
// get referenced chart repository
|
||||
repository, err := r.chartRepository(ctx, chart)
|
||||
if err != nil {
|
||||
chart = sourcev1.HelmChartNotReady(*chart.DeepCopy(), sourcev1.ChartPullFailedReason, err.Error())
|
||||
|
@ -108,26 +106,8 @@ func (r *HelmChartReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
|
|||
func (r *HelmChartReconciler) SetupWithManager(mgr ctrl.Manager) error {
|
||||
return ctrl.NewControllerManagedBy(mgr).
|
||||
For(&sourcev1.HelmChart{}).
|
||||
WithEventFilter(RepositoryChangePredicate{}).
|
||||
WithEventFilter(predicate.Funcs{
|
||||
DeleteFunc: func(e event.DeleteEvent) bool {
|
||||
gvk, err := apiutil.GVKForObject(e.Object, r.Scheme)
|
||||
if err != nil {
|
||||
r.Log.Error(err, "unable to get GroupVersionKind for deleted object")
|
||||
return false
|
||||
}
|
||||
// delete artifacts
|
||||
artifact := r.Storage.ArtifactFor(gvk.Kind, e.Meta, "*", "")
|
||||
if err := r.Storage.RemoveAll(artifact); err != nil {
|
||||
r.Log.Error(err, "unable to delete artifacts",
|
||||
gvk.Kind, fmt.Sprintf("%s/%s", e.Meta.GetNamespace(), e.Meta.GetName()))
|
||||
} else {
|
||||
r.Log.Info("Helm chart artifacts deleted",
|
||||
gvk.Kind, fmt.Sprintf("%s/%s", e.Meta.GetNamespace(), e.Meta.GetName()))
|
||||
}
|
||||
return true
|
||||
},
|
||||
}).
|
||||
WithEventFilter(SourceChangePredicate{}).
|
||||
WithEventFilter(GarbageCollectPredicate{Scheme: r.Scheme, Log: r.Log, Storage: r.Storage}).
|
||||
Complete(r)
|
||||
}
|
||||
|
||||
|
@ -236,6 +216,7 @@ func (r *HelmChartReconciler) chartRepository(ctx context.Context, chart sourcev
|
|||
err := r.Client.Get(ctx, name, &repository)
|
||||
if err != nil {
|
||||
err = fmt.Errorf("failed to get HelmRepository '%s': %w", name, err)
|
||||
return repository, err
|
||||
}
|
||||
|
||||
if repository.Status.Artifact == nil {
|
||||
|
|
|
@ -32,9 +32,6 @@ import (
|
|||
"k8s.io/apimachinery/pkg/runtime"
|
||||
ctrl "sigs.k8s.io/controller-runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
|
||||
"sigs.k8s.io/controller-runtime/pkg/event"
|
||||
"sigs.k8s.io/controller-runtime/pkg/predicate"
|
||||
"sigs.k8s.io/yaml"
|
||||
|
||||
sourcev1 "github.com/fluxcd/source-controller/api/v1alpha1"
|
||||
|
@ -97,26 +94,8 @@ func (r *HelmRepositoryReconciler) Reconcile(req ctrl.Request) (ctrl.Result, err
|
|||
func (r *HelmRepositoryReconciler) SetupWithManager(mgr ctrl.Manager) error {
|
||||
return ctrl.NewControllerManagedBy(mgr).
|
||||
For(&sourcev1.HelmRepository{}).
|
||||
WithEventFilter(RepositoryChangePredicate{}).
|
||||
WithEventFilter(predicate.Funcs{
|
||||
DeleteFunc: func(e event.DeleteEvent) bool {
|
||||
gvk, err := apiutil.GVKForObject(e.Object, r.Scheme)
|
||||
if err != nil {
|
||||
r.Log.Error(err, "unable to get GroupVersionKind for deleted object")
|
||||
return false
|
||||
}
|
||||
// delete artifacts
|
||||
artifact := r.Storage.ArtifactFor(gvk.Kind, e.Meta, "*", "")
|
||||
if err := r.Storage.RemoveAll(artifact); err != nil {
|
||||
r.Log.Error(err, "unable to delete artifacts",
|
||||
gvk.Kind, fmt.Sprintf("%s/%s", e.Meta.GetNamespace(), e.Meta.GetName()))
|
||||
} else {
|
||||
r.Log.Info("Helm repository artifacts deleted",
|
||||
gvk.Kind, fmt.Sprintf("%s/%s", e.Meta.GetNamespace(), e.Meta.GetName()))
|
||||
}
|
||||
return true
|
||||
},
|
||||
}).
|
||||
WithEventFilter(SourceChangePredicate{}).
|
||||
WithEventFilter(GarbageCollectPredicate{Scheme: r.Scheme, Log: r.Log, Storage: r.Storage}).
|
||||
Complete(r)
|
||||
}
|
||||
|
||||
|
|
|
@ -17,16 +17,22 @@ limitations under the License.
|
|||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/go-logr/logr"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
|
||||
"sigs.k8s.io/controller-runtime/pkg/event"
|
||||
"sigs.k8s.io/controller-runtime/pkg/predicate"
|
||||
)
|
||||
|
||||
type RepositoryChangePredicate struct {
|
||||
type SourceChangePredicate struct {
|
||||
predicate.Funcs
|
||||
}
|
||||
|
||||
// Update implements default UpdateEvent filter for validating repository change
|
||||
func (RepositoryChangePredicate) Update(e event.UpdateEvent) bool {
|
||||
// Update implements the default UpdateEvent filter for validating
|
||||
// source changes.
|
||||
func (SourceChangePredicate) Update(e event.UpdateEvent) bool {
|
||||
if e.MetaOld == nil || e.MetaNew == nil {
|
||||
// ignore objects without metadata
|
||||
return false
|
||||
|
@ -53,3 +59,30 @@ func (RepositoryChangePredicate) Update(e event.UpdateEvent) bool {
|
|||
const (
|
||||
ForceSyncAnnotation string = "source.fluxcd.io/syncAt"
|
||||
)
|
||||
|
||||
type GarbageCollectPredicate struct {
|
||||
predicate.Funcs
|
||||
Scheme *runtime.Scheme
|
||||
Log logr.Logger
|
||||
Storage *Storage
|
||||
}
|
||||
|
||||
// Delete removes all artifacts from storage that belong to the
|
||||
// referenced object.
|
||||
func (gc GarbageCollectPredicate) Delete(e event.DeleteEvent) bool {
|
||||
gvk, err := apiutil.GVKForObject(e.Object, gc.Scheme)
|
||||
if err != nil {
|
||||
gc.Log.Error(err, "unable to get GroupVersionKind for deleted object")
|
||||
return false
|
||||
}
|
||||
// delete artifacts
|
||||
artifact := gc.Storage.ArtifactFor(gvk.Kind, e.Meta, "*", "")
|
||||
if err := gc.Storage.RemoveAll(artifact); err != nil {
|
||||
gc.Log.Error(err, "unable to delete artifacts",
|
||||
gvk.Kind, fmt.Sprintf("%s/%s", e.Meta.GetNamespace(), e.Meta.GetName()))
|
||||
} else {
|
||||
gc.Log.Info(gvk.Kind+" artifacts deleted",
|
||||
gvk.Kind, fmt.Sprintf("%s/%s", e.Meta.GetNamespace(), e.Meta.GetName()))
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue