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 }