Skip to content
component.go 1.4 KiB
Newer Older
package reconciler

import (
	"context"

	"github.com/presslabs/controller-util/syncer"
	"k8s.libre.sh/application"
	interfaces "k8s.libre.sh/interfaces"
	"k8s.libre.sh/objects"
	"k8s.libre.sh/status"
	ctrl "sigs.k8s.io/controller-runtime"
	"sigs.k8s.io/controller-runtime/pkg/reconcile"
)

type ComponentReconciler struct {
	ReconcilerBase *ReconcilerBase
	Component      application.Component
	Status         status.ComponentStatus
	experiments    map[string]chan struct{}
	Owner          interfaces.Object
}

func (r *ComponentReconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) {

	for _, o := range r.Component.GetObjects() {
		reconciler := NewResourceReconciler(r.ReconcilerBase, o, r.Owner, context.TODO())
		res, err := reconciler.Reconcile(request)
		if err != nil {
			return res, err
		}
		r.Status.Resources.Objects = append(r.Status.Resources.Objects, reconciler.Status)

	}

	return ctrl.Result{}, nil
}

func SyncComponent(ctx context.Context, r interfaces.Reconcile, m application.ComponentMutate, owner interfaces.Object) (resources status.Resources, err error) {
	keys := []int{}
	syncers := make(map[int]syncer.Interface, len(m.GetObjects()))

	for k, o := range m.GetObjects() {
		keys = append(keys, k)
		syncers[k] = objects.NewObjectSyncer(o, owner, r)
	}

	resources, err = SyncObjects(context.TODO(), r, syncers)
	if err != nil {
		return resources, err
	}

	return resources, nil
}