github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/ctrlcrd/networking/networking.go (about)

     1  package networking
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/caos/orbos/internal/api/networking"
     8  	v1 "github.com/caos/orbos/internal/api/networking/v1"
     9  	orbnw "github.com/caos/orbos/internal/operator/networking/kinds/orb"
    10  	"github.com/caos/orbos/mntr"
    11  	"github.com/caos/orbos/pkg/kubernetes"
    12  	"github.com/caos/orbos/pkg/tree"
    13  	"k8s.io/apimachinery/pkg/runtime"
    14  	ctrl "sigs.k8s.io/controller-runtime"
    15  )
    16  
    17  type Reconciler struct {
    18  	kubernetes.ClientInt
    19  	Monitor mntr.Monitor
    20  	Scheme  *runtime.Scheme
    21  	Version string
    22  }
    23  
    24  func (r *Reconciler) Reconcile(ctx context.Context, req ctrl.Request) (res ctrl.Result, err error) {
    25  	internalMonitor := r.Monitor.WithFields(map[string]interface{}{
    26  		"kind": "networking",
    27  	})
    28  
    29  	defer func() {
    30  		r.Monitor.Error(err)
    31  	}()
    32  
    33  	if req.Namespace != networking.Namespace || req.Name != networking.Name {
    34  		return res, fmt.Errorf("resource must be named %s and namespaced in %s", networking.Name, networking.Namespace)
    35  	}
    36  
    37  	desired, err := networking.ReadCRD(r)
    38  	if desired == nil {
    39  		return res, err
    40  	}
    41  
    42  	query, _, _, _, _, err := orbnw.AdaptFunc(ctx, &r.Version, false)(internalMonitor, desired, &tree.Tree{})
    43  	if err != nil {
    44  		return res, err
    45  	}
    46  
    47  	ensure, err := query(r.ClientInt, map[string]interface{}{})
    48  	if err != nil {
    49  		return res, err
    50  	}
    51  
    52  	return res, ensure(r.ClientInt)
    53  }
    54  
    55  func (r *Reconciler) SetupWithManager(mgr ctrl.Manager) error {
    56  	return ctrl.NewControllerManagedBy(mgr).
    57  		For(&v1.Networking{}).
    58  		Complete(r)
    59  }