diff --git a/.changelog/24642.txt b/.changelog/24642.txt new file mode 100644 index 000000000..ef21ae4af --- /dev/null +++ b/.changelog/24642.txt @@ -0,0 +1,3 @@ +```release-note:improvement +actions: Nomad Actions names now accept a wider range of names +``` diff --git a/nomad/structs/actions.go b/nomad/structs/actions.go index 2791d825e..231c04cbd 100644 --- a/nomad/structs/actions.go +++ b/nomad/structs/actions.go @@ -16,8 +16,8 @@ import ( "github.com/hashicorp/go-multierror" ) -// validJobActionName is used to validate a job action name. -var validJobActionName = regexp.MustCompile("^[a-zA-Z0-9-]{1,128}$") +// validJobActionName is used to validate a action name. +var validJobActionName = regexp.MustCompile(`^[^\x00\s]{1,128}$`) type Action struct { Name string diff --git a/nomad/structs/actions_test.go b/nomad/structs/actions_test.go index 3c7e20714..03102362d 100644 --- a/nomad/structs/actions_test.go +++ b/nomad/structs/actions_test.go @@ -178,12 +178,28 @@ func TestAction_Validate(t *testing.T) { expectedError: errors.New(`invalid name 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'`), }, { - name: "invalid character name", + name: "invalid character name with spaces", inputAction: &Action{ - Name: `\//?|?|?%&%@$&£@$)`, + Name: "invalid name with spaces", Command: "env", }, - expectedError: errors.New(`invalid name '\//?|?|?%&%@$&£@$)'`), + expectedError: errors.New(`invalid name 'invalid name with spaces'`), + }, + { + name: "invalid character name with nulls", + inputAction: &Action{ + Name: "invalid\x00name", + Command: "env", + }, + expectedError: fmt.Errorf("1 error occurred:\n\t* invalid name 'invalid\x00name'\n\n"), // had to use fmt.Errorf to show the null character + }, + { + name: "Emoji characters are valid", + inputAction: &Action{ + Name: "🇳🇴🇲🇦🇩", + Command: "env", + }, + expectedError: nil, }, { name: "valid",