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  }