From 7f6d95f1c9c67cecf7f3e203813fbaa49a6a5ef8 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 0594201dc7..141725d5c3 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 }