github.com/pdmccormick/importable-docker-buildx@v0.0.0-20240426161518-e47091289030/driver/kubernetes/util/generate.go (about)

     1  package util
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/docker/buildx/store"
     7  	"github.com/google/uuid"
     8  	"github.com/pkg/errors"
     9  	"k8s.io/apiserver/pkg/storage/names"
    10  )
    11  
    12  func GenerateNodeName(builderName string, txn *store.Txn) (string, error) {
    13  	randomName := func() (string, error) {
    14  		u, err := uuid.NewRandom()
    15  		if err != nil {
    16  			return "", err
    17  		}
    18  		return names.SimpleNameGenerator.GenerateName(fmt.Sprintf("buildkit-%s-", u)), nil
    19  	}
    20  
    21  	ng, err := txn.NodeGroupByName(builderName)
    22  	if err != nil {
    23  		return randomName()
    24  	}
    25  
    26  	var name string
    27  	for i := 0; i < 6; i++ {
    28  		name, err = randomName()
    29  		if err != nil {
    30  			return "", err
    31  		}
    32  		exists := func(name string) bool {
    33  			for _, n := range ng.Nodes {
    34  				if n.Name == name {
    35  					return true
    36  				}
    37  			}
    38  			return false
    39  		}(name)
    40  		if exists {
    41  			continue
    42  		}
    43  		return name, nil
    44  	}
    45  
    46  	return "", errors.Errorf("failed to generate random node name")
    47  }