github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/networking/kinds/orb/adapt.go (about) 1 package orb 2 3 import ( 4 "context" 5 "fmt" 6 7 "github.com/caos/orbos/internal/operator/core" 8 "github.com/caos/orbos/internal/operator/networking/kinds/networking" 9 "github.com/caos/orbos/mntr" 10 "github.com/caos/orbos/pkg/kubernetes" 11 "github.com/caos/orbos/pkg/labels" 12 "github.com/caos/orbos/pkg/secret" 13 "github.com/caos/orbos/pkg/tree" 14 ) 15 16 func OperatorSelector() *labels.Selector { 17 return labels.OpenOperatorSelector("ORBOS", "networking.caos.ch") 18 } 19 20 func AdaptFunc(ctx context.Context, binaryVersion *string, gitops bool) core.AdaptFunc { 21 22 namespaceStr := "caos-zitadel" 23 return func( 24 monitor mntr.Monitor, 25 desiredTree *tree.Tree, 26 currentTree *tree.Tree, 27 ) (queryFunc core.QueryFunc, 28 destroyFunc core.DestroyFunc, 29 secrets map[string]*secret.Secret, 30 existing map[string]*secret.Existing, 31 migrate bool, 32 err error, 33 ) { 34 defer func() { 35 if err != nil { 36 err = fmt.Errorf("building %s failed: %w", desiredTree.Common.Kind, err) 37 } 38 }() 39 40 orbMonitor := monitor.WithField("kind", "orb") 41 42 desiredKind, err := ParseDesiredV0(desiredTree) 43 if err != nil { 44 return nil, nil, nil, nil, false, fmt.Errorf("parsing desired state failed: %w", err) 45 } 46 desiredTree.Parsed = desiredKind 47 currentTree = &tree.Tree{} 48 49 if desiredKind.Spec.Verbose && !orbMonitor.IsVerbose() { 50 orbMonitor = orbMonitor.Verbose() 51 } 52 53 operatorLabels := mustDatabaseOperator(binaryVersion) 54 networkingCurrent := &tree.Tree{} 55 queryNW, destroyNW, secrets, existing, migrate, err := networking.GetQueryAndDestroyFuncs(ctx, orbMonitor, operatorLabels, desiredKind.Networking, networkingCurrent, namespaceStr) 56 if err != nil { 57 return nil, nil, nil, nil, false, err 58 } 59 60 queriers := []core.QueryFunc{ 61 queryNW, 62 core.EnsureFuncToQueryFunc(Reconcile(monitor, desiredKind.Spec, gitops)), 63 } 64 65 destroyers := []core.DestroyFunc{ 66 destroyNW, 67 } 68 69 currentTree.Parsed = &DesiredV0{ 70 Common: tree.NewCommon("networking.caos.ch/Orb", "v0", false), 71 Networking: networkingCurrent, 72 } 73 74 return func(k8sClient kubernetes.ClientInt, _ map[string]interface{}) (core.EnsureFunc, error) { 75 queried := map[string]interface{}{} 76 monitor.WithField("queriers", len(queriers)).Info("Querying") 77 return core.QueriersToEnsureFunc(monitor, true, queriers, k8sClient, queried) 78 }, 79 func(k8sClient kubernetes.ClientInt) error { 80 monitor.WithField("destroyers", len(queriers)).Info("Destroy") 81 return core.DestroyersToDestroyFunc(monitor, destroyers)(k8sClient) 82 }, 83 secrets, 84 existing, 85 migrate, 86 nil 87 } 88 }