d1268cfb76
cgroup's are applicable to Windows and will require a more specific abstraction. Stub out the difference. The *NIX exec drivers will likely be broken out over time (e.g. *BSD and Solaris).
37 lines
1.1 KiB
Go
37 lines
1.1 KiB
Go
// +build darwin dragonfly freebsd linux netbsd openbsd solaris
|
|
|
|
package driver
|
|
|
|
import (
|
|
"github.com/hashicorp/nomad/client/config"
|
|
"github.com/hashicorp/nomad/nomad/structs"
|
|
"golang.org/x/sys/unix"
|
|
)
|
|
|
|
func (d *ExecDriver) Fingerprint(cfg *config.Config, node *structs.Node) (bool, error) {
|
|
// Get the current status so that we can log any debug messages only if the
|
|
// state changes
|
|
_, currentlyEnabled := node.Attributes[execDriverAttr]
|
|
|
|
// Only enable if cgroups are available and we are root
|
|
if _, ok := node.Attributes["unique.cgroup.mountpoint"]; !ok {
|
|
if currentlyEnabled {
|
|
d.logger.Printf("[DEBUG] driver.exec: cgroups unavailable, disabling")
|
|
}
|
|
delete(node.Attributes, execDriverAttr)
|
|
return false, nil
|
|
} else if unix.Geteuid() != 0 {
|
|
if currentlyEnabled {
|
|
d.logger.Printf("[DEBUG] driver.exec: must run as root user, disabling")
|
|
}
|
|
delete(node.Attributes, execDriverAttr)
|
|
return false, nil
|
|
}
|
|
|
|
if !currentlyEnabled {
|
|
d.logger.Printf("[DEBUG] driver.exec: exec driver is enabled")
|
|
}
|
|
node.Attributes[execDriverAttr] = "1"
|
|
return true, nil
|
|
}
|