From 32ade79a6273c9209dfc4c36d1df39eea73295a9 Mon Sep 17 00:00:00 2001 From: Sean Chittenden Date: Mon, 9 May 2016 00:54:33 -0700 Subject: [PATCH] cgroups are a decidedly Linux-only feature. Build and test as such. --- client/fingerprint/cgroup.go | 31 -------------------------- client/fingerprint/cgroup_default.go | 10 +++++++++ client/fingerprint/cgroup_linux.go | 33 ++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/client/fingerprint/cgroup.go b/client/fingerprint/cgroup.go index 3fb14a2f3..c0ec7c674 100644 --- a/client/fingerprint/cgroup.go +++ b/client/fingerprint/cgroup.go @@ -1,11 +1,9 @@ package fingerprint import ( - "fmt" "log" "time" - client "github.com/hashicorp/nomad/client/config" "github.com/hashicorp/nomad/nomad/structs" ) @@ -47,35 +45,6 @@ func NewCGroupFingerprint(logger *log.Logger) Fingerprint { return f } -// Fingerprint tries to find a valid cgroup moint point -func (f *CGroupFingerprint) Fingerprint(cfg *client.Config, node *structs.Node) (bool, error) { - mount, err := f.mountPointDetector.MountPoint() - if err != nil { - f.clearCGroupAttributes(node) - return false, fmt.Errorf("Failed to discover cgroup mount point: %s", err) - } - - // Check if a cgroup mount point was found - if mount == "" { - // Clear any attributes from the previous fingerprint. - f.clearCGroupAttributes(node) - - if f.lastState == cgroupAvailable { - f.logger.Printf("[INFO] fingerprint.cgroups: cgroups are unavailable") - } - f.lastState = cgroupUnavailable - return true, nil - } - - node.Attributes["unique.cgroup.mountpoint"] = mount - - if f.lastState == cgroupUnavailable { - f.logger.Printf("[INFO] fingerprint.cgroups: cgroups are available") - } - f.lastState = cgroupAvailable - return true, nil -} - // clearCGroupAttributes clears any node attributes related to cgroups that might // have been set in a previous fingerprint run. func (f *CGroupFingerprint) clearCGroupAttributes(n *structs.Node) { diff --git a/client/fingerprint/cgroup_default.go b/client/fingerprint/cgroup_default.go index eeeade435..43c55fd85 100644 --- a/client/fingerprint/cgroup_default.go +++ b/client/fingerprint/cgroup_default.go @@ -2,7 +2,17 @@ package fingerprint +import ( + client "github.com/hashicorp/nomad/client/config" + "github.com/hashicorp/nomad/nomad/structs" +) + // FindCgroupMountpointDir returns an empty path on non-Linux systems func FindCgroupMountpointDir() (string, error) { return "", nil } + +// Fingerprint tries to find a valid cgroup moint point +func (f *CGroupFingerprint) Fingerprint(cfg *client.Config, node *structs.Node) (bool, error) { + return false, nil +} diff --git a/client/fingerprint/cgroup_linux.go b/client/fingerprint/cgroup_linux.go index 25171c1f4..9abb959b5 100644 --- a/client/fingerprint/cgroup_linux.go +++ b/client/fingerprint/cgroup_linux.go @@ -3,6 +3,10 @@ package fingerprint import ( + "fmt" + + client "github.com/hashicorp/nomad/client/config" + "github.com/hashicorp/nomad/nomad/structs" "github.com/opencontainers/runc/libcontainer/cgroups" ) @@ -22,3 +26,32 @@ func FindCgroupMountpointDir() (string, error) { } return mount, nil } + +// Fingerprint tries to find a valid cgroup moint point +func (f *CGroupFingerprint) Fingerprint(cfg *client.Config, node *structs.Node) (bool, error) { + mount, err := f.mountPointDetector.MountPoint() + if err != nil { + f.clearCGroupAttributes(node) + return false, fmt.Errorf("Failed to discover cgroup mount point: %s", err) + } + + // Check if a cgroup mount point was found + if mount == "" { + // Clear any attributes from the previous fingerprint. + f.clearCGroupAttributes(node) + + if f.lastState == cgroupAvailable { + f.logger.Printf("[INFO] fingerprint.cgroups: cgroups are unavailable") + } + f.lastState = cgroupUnavailable + return true, nil + } + + node.Attributes["unique.cgroup.mountpoint"] = mount + + if f.lastState == cgroupUnavailable { + f.logger.Printf("[INFO] fingerprint.cgroups: cgroups are available") + } + f.lastState = cgroupAvailable + return true, nil +}