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  }