github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/controllers/core/imagemap/reconciler.go (about) 1 package imagemap 2 3 import ( 4 "context" 5 6 apierrors "k8s.io/apimachinery/pkg/api/errors" 7 ctrl "sigs.k8s.io/controller-runtime" 8 "sigs.k8s.io/controller-runtime/pkg/builder" 9 ctrlclient "sigs.k8s.io/controller-runtime/pkg/client" 10 "sigs.k8s.io/controller-runtime/pkg/reconcile" 11 12 "github.com/tilt-dev/tilt/internal/store" 13 "github.com/tilt-dev/tilt/internal/store/imagemaps" 14 "github.com/tilt-dev/tilt/pkg/apis/core/v1alpha1" 15 ) 16 17 // Reconciler manages the ImageMap API object. 18 type Reconciler struct { 19 client ctrlclient.Client 20 dispatcher store.Dispatcher 21 } 22 23 var _ reconcile.Reconciler = &Reconciler{} 24 25 func NewReconciler(client ctrlclient.Client, dispatcher store.Dispatcher) *Reconciler { 26 return &Reconciler{ 27 client: client, 28 dispatcher: dispatcher, 29 } 30 } 31 32 func (r *Reconciler) CreateBuilder(mgr ctrl.Manager) (*builder.Builder, error) { 33 b := ctrl.NewControllerManagedBy(mgr). 34 For(&v1alpha1.ImageMap{}) 35 36 return b, nil 37 } 38 39 func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { 40 var obj v1alpha1.ImageMap 41 err := r.client.Get(ctx, req.NamespacedName, &obj) 42 if err != nil && !apierrors.IsNotFound(err) { 43 return ctrl.Result{}, err 44 } 45 46 if apierrors.IsNotFound(err) || obj.ObjectMeta.DeletionTimestamp != nil { 47 r.dispatcher.Dispatch(imagemaps.NewImageMapDeleteAction(req.Name)) 48 return ctrl.Result{}, nil 49 } 50 51 r.dispatcher.Dispatch(imagemaps.NewImageMapUpsertAction(&obj)) 52 return ctrl.Result{}, nil 53 }