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 }