github.com/caos/orbos@v1.5.14-0.20221103111702-e6cd0cea7ad4/internal/operator/orbiter/kinds/clusters/kubernetes/pool.go (about)

     1  package kubernetes
     2  
     3  import (
     4  	"sync"
     5  
     6  	"github.com/caos/orbos/internal/helpers"
     7  	"github.com/caos/orbos/internal/operator/orbiter/kinds/clusters/core/infra"
     8  )
     9  
    10  func newMachines(pool infra.Pool, number int, desiredInstances int) (machines []infra.Machine, err error) {
    11  
    12  	var wg sync.WaitGroup
    13  	var it int
    14  	for it = 0; it < number; it++ {
    15  		wg.Add(1)
    16  		go func() {
    17  			defer wg.Done()
    18  			infraMachines, addErr := pool.AddMachine(desiredInstances)
    19  			if addErr != nil {
    20  				err = helpers.Concat(err, addErr)
    21  				return
    22  			}
    23  			for _, machine := range infraMachines {
    24  				machines = append(machines, machine)
    25  			}
    26  		}()
    27  	}
    28  
    29  	wg.Wait()
    30  
    31  	if err != nil {
    32  		for _, machine := range machines {
    33  			wg.Add(1)
    34  			go func() {
    35  				defer wg.Done()
    36  
    37  				remove, destroyErr := machine.Destroy()
    38  				err = helpers.Concat(err, destroyErr)
    39  				if destroyErr != nil {
    40  					return
    41  				}
    42  
    43  				err = helpers.Concat(err, remove())
    44  			}()
    45  		}
    46  		wg.Wait()
    47  	}
    48  
    49  	return machines, err
    50  }