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  }