From 13f026dec42e7fe1e47ad4177280a408b7191cd0 Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Mon, 10 Apr 2017 11:57:24 -0700 Subject: [PATCH] Hash host ID so its stable and well distributed This PR takes the host ID and runs it through a hash so that it is well distributed. This makes it so that machines that report similar host IDs are easily distinguished. Instances of similar IDs occur on EC2 where the ID is prefixed and on motherboards created in the same batch. --- command/agent/agent.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/command/agent/agent.go b/command/agent/agent.go index 0594201dc..141725d5c 100644 --- a/command/agent/agent.go +++ b/command/agent/agent.go @@ -1,6 +1,7 @@ package agent import ( + "crypto/sha512" "encoding/json" "errors" "fmt" @@ -645,6 +646,17 @@ func (a *Agent) makeNodeID() (string, error) { return a.makeRandomID() } + // Hash the input to make it well distributed. The reported Host UUID may be + // similar across nodes if they are on a cloud provider or on motherboards + // created from the same batch. + buf := sha512.Sum512([]byte(id)) + id = fmt.Sprintf("%08x-%04x-%04x-%04x-%12x", + buf[0:4], + buf[4:6], + buf[6:8], + buf[8:10], + buf[10:16]) + a.logger.Printf("[DEBUG] Using unique ID %q from host as node ID", id) return id, nil }