mirror of https://github.com/docker/buildx.git
builder: skip name validation for docker context
Although a builder from the store cannot be created unless it has a valid name, this is not the case for a Docker context. We should skip name validation when checking a node from the store and fall back to finding one from Docker context instead. Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
parent
687feca9e8
commit
b1c5449428
|
@ -235,3 +235,26 @@ func TestNodeManagement(t *testing.T) {
|
||||||
require.NotNil(t, ng)
|
require.NotNil(t, ng)
|
||||||
require.Equal(t, "mybuild", ng.Name)
|
require.Equal(t, "mybuild", ng.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNodeInvalidName(t *testing.T) {
|
||||||
|
t.Parallel()
|
||||||
|
tmpdir := t.TempDir()
|
||||||
|
|
||||||
|
s, err := New(tmpdir)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
txn, release, err := s.Txn()
|
||||||
|
require.NoError(t, err)
|
||||||
|
defer release()
|
||||||
|
|
||||||
|
_, err = txn.NodeGroupByName("123builder")
|
||||||
|
require.Error(t, err)
|
||||||
|
require.True(t, IsErrInvalidName(err))
|
||||||
|
|
||||||
|
err = txn.Save(&NodeGroup{
|
||||||
|
Name: "123builder",
|
||||||
|
Driver: "mydriver",
|
||||||
|
})
|
||||||
|
require.Error(t, err)
|
||||||
|
require.True(t, IsErrInvalidName(err))
|
||||||
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ func GetCurrentInstance(txn *store.Txn, dockerCli command.Cli) (*store.NodeGroup
|
||||||
func GetNodeGroup(txn *store.Txn, dockerCli command.Cli, name string) (*store.NodeGroup, error) {
|
func GetNodeGroup(txn *store.Txn, dockerCli command.Cli, name string) (*store.NodeGroup, error) {
|
||||||
ng, err := txn.NodeGroupByName(name)
|
ng, err := txn.NodeGroupByName(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !os.IsNotExist(errors.Cause(err)) {
|
if !os.IsNotExist(errors.Cause(err)) && !store.IsErrInvalidName(err) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,9 +11,28 @@ import (
|
||||||
|
|
||||||
var namePattern = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9\.\-_]*$`)
|
var namePattern = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9\.\-_]*$`)
|
||||||
|
|
||||||
|
type errInvalidName struct {
|
||||||
|
error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *errInvalidName) Error() string {
|
||||||
|
return e.error.Error()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *errInvalidName) Unwrap() error {
|
||||||
|
return e.error
|
||||||
|
}
|
||||||
|
|
||||||
|
func IsErrInvalidName(err error) bool {
|
||||||
|
_, ok := err.(*errInvalidName)
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
func ValidateName(s string) (string, error) {
|
func ValidateName(s string) (string, error) {
|
||||||
if !namePattern.MatchString(s) {
|
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 "", &errInvalidName{
|
||||||
|
errors.Errorf("invalid name %s, name needs to start with a letter and may not contain symbols, except ._-", s),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return strings.ToLower(s), nil
|
return strings.ToLower(s), nil
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue