mirror of https://github.com/docker/buildx.git
36 lines
800 B
Go
36 lines
800 B
Go
package store
|
|
|
|
import (
|
|
"os"
|
|
"regexp"
|
|
"strings"
|
|
|
|
"github.com/docker/docker/pkg/namesgenerator"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
var namePattern = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9\.\-_]*$`)
|
|
|
|
func ValidateName(s string) (string, error) {
|
|
if !namePattern.MatchString(s) {
|
|
return "", errors.Errorf("invalid name %s, name needs to start with a letter and may not contain symbols, except ._-", s)
|
|
}
|
|
return strings.ToLower(s), nil
|
|
}
|
|
|
|
func GenerateName(txn *Txn) (string, error) {
|
|
var name string
|
|
for i := 0; i < 6; i++ {
|
|
name = namesgenerator.GetRandomName(i)
|
|
if _, err := txn.NodeGroupByName(name); err != nil {
|
|
if !os.IsNotExist(errors.Cause(err)) {
|
|
return "", err
|
|
}
|
|
} else {
|
|
continue
|
|
}
|
|
return name, nil
|
|
}
|
|
return "", errors.Errorf("failed to generate random name")
|
|
}
|