github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/clusters/kubernetes/ensure.go (about) 1 package kubernetes 2 3 import ( 4 "github.com/caos/orbos/internal/operator/orbiter/kinds/clusters/core/infra" 5 "github.com/caos/orbos/mntr" 6 "github.com/caos/orbos/pkg/git" 7 "github.com/caos/orbos/pkg/kubernetes" 8 ) 9 10 func ensure( 11 monitor mntr.Monitor, 12 clusterID string, 13 desired *DesiredV0, 14 kubeAPIAddress *infra.Address, 15 pdf func(mntr.Monitor) error, 16 k8sClient *kubernetes.Client, 17 oneoff bool, 18 controlplane *initializedPool, 19 controlplaneMachines []*initializedMachine, 20 workers []*initializedPool, 21 workerMachines []*initializedMachine, 22 initializeMachine initializeMachineFunc, 23 uninitializeMachine uninitializeMachineFunc, 24 gitClient *git.Client, 25 providerK8sSpec infra.Kubernetes, 26 privateInterface string, 27 ) (done bool, err error) { 28 29 desireFW := firewallFunc(monitor, *desired) 30 for _, machine := range append(controlplaneMachines, workerMachines...) { 31 desireFW(machine) 32 } 33 34 if err := scaleDown(append(workers, controlplane), k8sClient, uninitializeMachine, monitor, pdf); err != nil { 35 return false, err 36 } 37 38 done, err = maintainNodes(append(controlplaneMachines, workerMachines...), monitor, k8sClient, pdf) 39 if err != nil || !done { 40 return done, err 41 } 42 43 targetVersion := ParseString(desired.Spec.Versions.Kubernetes) 44 45 machinesDone, initializedMachines, err := alignMachines( 46 monitor, 47 controlplane, 48 workers, 49 func(created infra.Machine, pool *initializedPool) initializedMachine { 50 machine := initializeMachine(created, pool) 51 target := targetVersion.DefineSoftware() 52 machine.desiredNodeagent.Software.Merge(target, true) 53 return *machine 54 }, 55 ) 56 if err != nil || !machinesDone { 57 monitor.Info("Aligning machines is not done yet") 58 return machinesDone, err 59 } 60 61 done, err = ensureSoftware( 62 63 monitor, 64 targetVersion, 65 k8sClient, 66 controlplaneMachines, 67 workerMachines) 68 if err != nil || !done { 69 monitor.Info("Upgrading is not done yet") 70 return done, err 71 } 72 73 done, err = ensureNodes( 74 monitor, 75 clusterID, 76 desired, 77 pdf, 78 kubeAPIAddress, 79 targetVersion, 80 k8sClient, 81 oneoff, 82 providerK8sSpec, 83 initializedMachines, 84 ) 85 if err != nil { 86 return done, err 87 } 88 89 if !done { 90 monitor.Info("Scaling is not done yet") 91 } 92 93 return done, ensureK8sPlugins(monitor, gitClient, k8sClient, *desired, providerK8sSpec, privateInterface) 94 }