d5aa72190f
Add structs and fields to support the Nomad Pools Governance Enterprise feature of controlling node pool access via namespaces. Nomad Enterprise allows users to specify a default node pool to be used by jobs that don't specify one. In order to accomplish this, it's necessary to distinguish between a job that explicitly uses the `default` node pool and one that did not specify any. If the `default` node pool is set during job canonicalization it's impossible to do this, so this commit allows a job to have an empty node pool value during registration but sets to `default` at the admission controller mutator. In order to guarantee state consistency the state store validates that the job node pool is set and exists before inserting it.
33 lines
784 B
Go
33 lines
784 B
Go
// Copyright (c) HashiCorp, Inc.
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
//go:build !ent
|
|
// +build !ent
|
|
|
|
package nomad
|
|
|
|
import "github.com/hashicorp/nomad/nomad/structs"
|
|
|
|
// enterpriseValidation implements any admission hooks for node pools for Nomad
|
|
// Enterprise.
|
|
func (j jobNodePoolValidatingHook) enterpriseValidation(_ *structs.Job, _ *structs.NodePool) ([]error, error) {
|
|
return nil, nil
|
|
}
|
|
|
|
// jobNodePoolMutatingHook mutates the job on Nomad Enterprise only.
|
|
type jobNodePoolMutatingHook struct {
|
|
srv *Server
|
|
}
|
|
|
|
func (c jobNodePoolMutatingHook) Name() string {
|
|
return "node-pool-mutation"
|
|
}
|
|
|
|
func (c jobNodePoolMutatingHook) Mutate(job *structs.Job) (*structs.Job, []error, error) {
|
|
if job.NodePool == "" {
|
|
job.NodePool = structs.NodePoolDefault
|
|
}
|
|
|
|
return job, nil, nil
|
|
}
|