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 }