github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/providers/cs/ensure.go (about)

     1  package cs
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/caos/orbos/internal/helpers"
     7  	"github.com/caos/orbos/internal/operator/common"
     8  	"github.com/caos/orbos/internal/operator/orbiter"
     9  	"github.com/caos/orbos/internal/operator/orbiter/kinds/clusters/core/infra"
    10  	dynamiclbmodel "github.com/caos/orbos/internal/operator/orbiter/kinds/loadbalancers/dynamic"
    11  	"github.com/caos/orbos/internal/operator/orbiter/kinds/loadbalancers/dynamic/wrap"
    12  	"github.com/caos/orbos/internal/operator/orbiter/kinds/providers/core"
    13  	"github.com/caos/orbos/mntr"
    14  )
    15  
    16  func query(
    17  	desired *Spec,
    18  	current *Current,
    19  	lb interface{},
    20  	context *context,
    21  	nodeAgentsCurrent *common.CurrentNodeAgents,
    22  	nodeAgentsDesired *common.DesiredNodeAgents,
    23  	naFuncs core.IterateNodeAgentFuncs,
    24  	orbiterCommit string,
    25  ) (ensureFunc orbiter.EnsureFunc, err error) {
    26  
    27  	lbCurrent, ok := lb.(*dynamiclbmodel.Current)
    28  	if !ok {
    29  		panic(fmt.Errorf("unknown or unsupported load balancing of type %T", lb))
    30  	}
    31  
    32  	hostPools, authChecks, err := lbCurrent.Current.Spec(context.machinesService)
    33  	if err != nil {
    34  		return nil, err
    35  	}
    36  
    37  	ensureFIPs, removeFIPs, poolsWithUnassignedVIPs, err := queryFloatingIPs(context, hostPools, current)
    38  	if err != nil {
    39  		return nil, err
    40  	}
    41  
    42  	queryNA, installNA := naFuncs(nodeAgentsCurrent)
    43  	ensureNodeAgent := func(m infra.Machine) error {
    44  		running, err := queryNA(m, orbiterCommit)
    45  		if err != nil {
    46  			return err
    47  		}
    48  		if !running {
    49  			return installNA(m)
    50  		}
    51  		return nil
    52  	}
    53  
    54  	ensureServers, err := queryServers(context, current, hostPools, ensureNodeAgent)
    55  	if err != nil {
    56  		return nil, err
    57  	}
    58  
    59  	context.machinesService.onCreate = func(pool string, m infra.Machine) error {
    60  		_, err := core.DesireInternalOSFirewall(context.monitor, nodeAgentsDesired, nodeAgentsCurrent, context.machinesService, true, []string{"eth0"})
    61  		if err != nil {
    62  			return err
    63  		}
    64  
    65  		return ensureServer(context, current, hostPools, pool, m.(*machine), ensureNodeAgent)
    66  	}
    67  	wrappedMachines := wrap.MachinesService(context.machinesService, *lbCurrent, &dynamiclbmodel.VRRP{
    68  		VRRPInterface: "eth1",
    69  		VIPInterface:  "eth0",
    70  		NotifyMaster:  notifyMaster(hostPools, current, poolsWithUnassignedVIPs),
    71  		AuthCheck:     checkAuth,
    72  	}, desiredToCurrentVIP(current))
    73  	return func(pdf func(mntr.Monitor) error) *orbiter.EnsureResult {
    74  		var done bool
    75  		return orbiter.ToEnsureResult(done, helpers.Fanout([]func() error{
    76  			func() error {
    77  				return helpers.Fanout(ensureTokens(context.monitor, []byte(desired.APIToken.Value), authChecks))()
    78  			},
    79  			func() error { return helpers.Fanout(ensureFIPs)() },
    80  			func() error { return helpers.Fanout(removeFIPs)() },
    81  			func() error { return helpers.Fanout(ensureServers)() },
    82  			func() error {
    83  				lbDone, err := wrappedMachines.InitializeDesiredNodeAgents()
    84  				if err != nil {
    85  					return err
    86  				}
    87  
    88  				fwDone, err := core.DesireInternalOSFirewall(context.monitor, nodeAgentsDesired, nodeAgentsCurrent, context.machinesService, true, []string{"eth0"})
    89  				if err != nil {
    90  					return err
    91  				}
    92  				/* TODO: Remove unused code
    93  				vips, err := allHostedVIPs(hostPools, context.machinesService, current)
    94  				if err != nil {
    95  					return err
    96  				}
    97  				nwDone, err := core.DesireOSNetworking(context.monitor, nodeAgentsDesired, nodeAgentsCurrent, context.machinesService, "dummy", vips)
    98  				if err != nil {
    99  					return err
   100  				}
   101  				*/
   102  				done = lbDone && fwDone //&& nwDone
   103  				return nil
   104  			},
   105  		})())
   106  	}, addPools(current, desired, wrappedMachines)
   107  }