mirror of
https://github.com/kemko/nomad.git
synced 2026-01-04 17:35:43 +03:00
fingerprint: implement client fingerprinting of reservable cores
on Linux systems this is derived from the configure cpuset cgroup parent (defaults to /nomad) for non Linux systems and Linux systems where cgroups are not enabled, the client defaults to using all cores
This commit is contained in:
@@ -14,6 +14,8 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/hashicorp/nomad/lib/cpuset"
|
||||
|
||||
metrics "github.com/armon/go-metrics"
|
||||
consulapi "github.com/hashicorp/consul/api"
|
||||
"github.com/hashicorp/consul/lib"
|
||||
@@ -613,6 +615,13 @@ func convertClientConfig(agentConfig *Config) (*clientconfig.Config, error) {
|
||||
res.Memory.MemoryMB = int64(agentConfig.Client.Reserved.MemoryMB)
|
||||
res.Disk.DiskMB = int64(agentConfig.Client.Reserved.DiskMB)
|
||||
res.Networks.ReservedHostPorts = agentConfig.Client.Reserved.ReservedPorts
|
||||
if agentConfig.Client.Reserved.Cores != "" {
|
||||
cores, err := cpuset.Parse(agentConfig.Client.Reserved.Cores)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("failed to parse client > reserved > cores value %q: %v", agentConfig.Client.Reserved.Cores, err)
|
||||
}
|
||||
res.Cpu.ReservedCpuCores = cores.ToSlice()
|
||||
}
|
||||
|
||||
conf.Version = agentConfig.Version
|
||||
|
||||
@@ -661,6 +670,8 @@ func convertClientConfig(agentConfig *Config) (*clientconfig.Config, error) {
|
||||
}
|
||||
conf.BindWildcardDefaultHostNetwork = agentConfig.Client.BindWildcardDefaultHostNetwork
|
||||
|
||||
conf.CgroupParent = agentConfig.Client.CgroupParent
|
||||
|
||||
return conf, nil
|
||||
}
|
||||
|
||||
|
||||
@@ -299,6 +299,10 @@ type ClientConfig struct {
|
||||
// matching any destination address (true). Defaults to true
|
||||
BindWildcardDefaultHostNetwork bool `hcl:"bind_wildcard_default_host_network"`
|
||||
|
||||
// CgroupParent sets the parent cgroup for subsystems managed by Nomad. If the cgroup
|
||||
// doest not exist Nomad will attempt to create it during startup. Defaults to '/nomad'
|
||||
CgroupParent string `hcl:"cgroup_parent"`
|
||||
|
||||
// ExtraKeysHCL is used by hcl to surface unexpected keys
|
||||
ExtraKeysHCL []string `hcl:",unusedKeys" json:"-"`
|
||||
}
|
||||
@@ -720,18 +724,11 @@ type Resources struct {
|
||||
MemoryMB int `hcl:"memory"`
|
||||
DiskMB int `hcl:"disk"`
|
||||
ReservedPorts string `hcl:"reserved_ports"`
|
||||
Cores string `hcl:"cores"`
|
||||
// ExtraKeysHCL is used by hcl to surface unexpected keys
|
||||
ExtraKeysHCL []string `hcl:",unusedKeys" json:"-"`
|
||||
}
|
||||
|
||||
// CanParseReserved returns if the reserved ports specification is parsable.
|
||||
// The supported syntax is comma separated integers or ranges separated by
|
||||
// hyphens. For example, "80,120-150,160"
|
||||
func (r *Resources) CanParseReserved() error {
|
||||
_, err := structs.ParsePortRanges(r.ReservedPorts)
|
||||
return err
|
||||
}
|
||||
|
||||
// devModeConfig holds the config for the -dev and -dev-connect flags
|
||||
type devModeConfig struct {
|
||||
// mode flags are set at the command line via -dev and -dev-connect
|
||||
@@ -1741,6 +1738,9 @@ func (r *Resources) Merge(b *Resources) *Resources {
|
||||
if b.ReservedPorts != "" {
|
||||
result.ReservedPorts = b.ReservedPorts
|
||||
}
|
||||
if b.Cores != "" {
|
||||
result.Cores = b.Cores
|
||||
}
|
||||
return &result
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user