diff --git a/nomad/job_endpoint_oss.go b/nomad/job_endpoint_oss.go index e234844293a8..96c30a750d63 100644 --- a/nomad/job_endpoint_oss.go +++ b/nomad/job_endpoint_oss.go @@ -3,6 +3,7 @@ package nomad import ( + "errors" "fmt" "strings" @@ -10,6 +11,9 @@ import ( vapi "github.com/hashicorp/vault/api" ) +// ErrMultipleNamespaces is send when multiple namespaces are used in the OSS setup +var ErrMultipleNamespaces = errors.New("multiple vault namespaces requires Nomad Enterprise") + // enforceSubmitJob is used to check any Sentinel policies for the submit-job scope func (j *Job) enforceSubmitJob(override bool, job *structs.Job) (error, error) { return nil, nil @@ -51,7 +55,7 @@ func (j *Job) multiVaultNamespaceValidation( ) error { requestedNamespaces := structs.VaultNamespaceSet(policies) if len(requestedNamespaces) > 0 { - return fmt.Errorf("multiple vault namespaces requires Nomad Enterprise, Namespaces: %s", strings.Join(requestedNamespaces, ", ")) + return fmt.Errorf("%w, Namespaces: %s", ErrMultipleNamespaces, strings.Join(requestedNamespaces, ", ")) } return nil } diff --git a/nomad/job_endpoint_test.go b/nomad/job_endpoint_test.go index 970a35b38992..7ff57ccd06cc 100644 --- a/nomad/job_endpoint_test.go +++ b/nomad/job_endpoint_test.go @@ -1736,8 +1736,9 @@ func TestJobEndpoint_Register_Vault_MultiNamespaces(t *testing.T) { var resp structs.JobRegisterResponse err := msgpackrpc.CallWithCodec(codec, "Job.Register", req, &resp) // OSS or Ent check - if s1.EnterpriseState.Features() == 0 { - require.Contains(t, err.Error(), "multiple vault namespaces requires Nomad Enterprise") + if err != nil && s1.EnterpriseState.Features() == 0 { + // errors.Is cannot be used because the RPC call break error wrapping. + require.Contains(t, err.Error(), ErrMultipleNamespaces.Error()) } else { require.NoError(t, err) }