Skip to content

Commit b1c5449

Browse files
committed
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 <[email protected]>
1 parent 687feca commit b1c5449

3 files changed

Lines changed: 44 additions & 2 deletions

File tree

store/store_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,26 @@ func TestNodeManagement(t *testing.T) {
235235
require.NotNil(t, ng)
236236
require.Equal(t, "mybuild", ng.Name)
237237
}
238+
239+
func TestNodeInvalidName(t *testing.T) {
240+
t.Parallel()
241+
tmpdir := t.TempDir()
242+
243+
s, err := New(tmpdir)
244+
require.NoError(t, err)
245+
246+
txn, release, err := s.Txn()
247+
require.NoError(t, err)
248+
defer release()
249+
250+
_, err = txn.NodeGroupByName("123builder")
251+
require.Error(t, err)
252+
require.True(t, IsErrInvalidName(err))
253+
254+
err = txn.Save(&NodeGroup{
255+
Name: "123builder",
256+
Driver: "mydriver",
257+
})
258+
require.Error(t, err)
259+
require.True(t, IsErrInvalidName(err))
260+
}

store/storeutil/storeutil.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func GetCurrentInstance(txn *store.Txn, dockerCli command.Cli) (*store.NodeGroup
7474
func GetNodeGroup(txn *store.Txn, dockerCli command.Cli, name string) (*store.NodeGroup, error) {
7575
ng, err := txn.NodeGroupByName(name)
7676
if err != nil {
77-
if !os.IsNotExist(errors.Cause(err)) {
77+
if !os.IsNotExist(errors.Cause(err)) && !store.IsErrInvalidName(err) {
7878
return nil, err
7979
}
8080
}

store/util.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,28 @@ import (
1111

1212
var namePattern = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9\.\-_]*$`)
1313

14+
type errInvalidName struct {
15+
error
16+
}
17+
18+
func (e *errInvalidName) Error() string {
19+
return e.error.Error()
20+
}
21+
22+
func (e *errInvalidName) Unwrap() error {
23+
return e.error
24+
}
25+
26+
func IsErrInvalidName(err error) bool {
27+
_, ok := err.(*errInvalidName)
28+
return ok
29+
}
30+
1431
func ValidateName(s string) (string, error) {
1532
if !namePattern.MatchString(s) {
16-
return "", errors.Errorf("invalid name %s, name needs to start with a letter and may not contain symbols, except ._-", s)
33+
return "", &errInvalidName{
34+
errors.Errorf("invalid name %s, name needs to start with a letter and may not contain symbols, except ._-", s),
35+
}
1736
}
1837
return strings.ToLower(s), nil
1938
}

0 commit comments

Comments
 (0)