From 169ca53989fcd33a92fdfdf4688c47a108a70d45 Mon Sep 17 00:00:00 2001 From: Armon Dadgar Date: Thu, 20 Aug 2015 16:29:19 -0700 Subject: [PATCH] fingerprint: adding arch fingerprint --- client/fingerprint/arch.go | 25 +++++++++++++++++++++++++ client/fingerprint/arch_test.go | 24 ++++++++++++++++++++++++ client/fingerprint/fingerprint.go | 3 ++- client/fingerprint/os.go | 3 ++- 4 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 client/fingerprint/arch.go create mode 100644 client/fingerprint/arch_test.go diff --git a/client/fingerprint/arch.go b/client/fingerprint/arch.go new file mode 100644 index 000000000..4e65bb0c8 --- /dev/null +++ b/client/fingerprint/arch.go @@ -0,0 +1,25 @@ +package fingerprint + +import ( + "log" + "runtime" + + "github.com/hashicorp/nomad/nomad/structs" +) + +// ArchFingerprint is used to fingerprint the architecture +type ArchFingerprint struct { + logger *log.Logger +} + +// NewArchFingerprint is used to create an OS fingerprint +func NewArchFingerprint(logger *log.Logger) Fingerprint { + f := &ArchFingerprint{logger} + return f +} + +func (f *ArchFingerprint) Fingerprint(node *structs.Node) (bool, error) { + node.Attributes["arch"] = runtime.GOARCH + f.logger.Printf("[DEBUG] fingerprint.arch: detected '%s'", runtime.GOARCH) + return true, nil +} diff --git a/client/fingerprint/arch_test.go b/client/fingerprint/arch_test.go new file mode 100644 index 000000000..a27cc719e --- /dev/null +++ b/client/fingerprint/arch_test.go @@ -0,0 +1,24 @@ +package fingerprint + +import ( + "testing" + + "github.com/hashicorp/nomad/nomad/structs" +) + +func TestArchFingerprint(t *testing.T) { + f := NewArchFingerprint(testLogger()) + node := &structs.Node{ + Attributes: make(map[string]string), + } + ok, err := f.Fingerprint(node) + if err != nil { + t.Fatalf("err: %v", err) + } + if !ok { + t.Fatalf("should apply") + } + if node.Attributes["arch"] == "" { + t.Fatalf("missing arch") + } +} diff --git a/client/fingerprint/fingerprint.go b/client/fingerprint/fingerprint.go index e35e219bd..161e1aaee 100644 --- a/client/fingerprint/fingerprint.go +++ b/client/fingerprint/fingerprint.go @@ -10,7 +10,8 @@ import ( // BuiltinFingerprints contains the built in registered fingerprints // which are available var BuiltinFingerprints = map[string]Factory{ - "os": NewOSFingerprint, + "os": NewOSFingerprint, + "arch": NewArchFingerprint, } // NewFingerprint is used to instantiate and return a new fingerprint diff --git a/client/fingerprint/os.go b/client/fingerprint/os.go index b1bc76eac..6983270de 100644 --- a/client/fingerprint/os.go +++ b/client/fingerprint/os.go @@ -18,7 +18,8 @@ func NewOSFingerprint(logger *log.Logger) Fingerprint { return f } -func (o *OSFingerprint) Fingerprint(node *structs.Node) (bool, error) { +func (f *OSFingerprint) Fingerprint(node *structs.Node) (bool, error) { node.Attributes["os"] = runtime.GOOS + f.logger.Printf("[DEBUG] fingerprint.os: detected '%s'", runtime.GOOS) return true, nil }