Skip to content

Commit

Permalink
Merge pull request #2541 from hashicorp/f-stable-distributed-id
Browse files Browse the repository at this point in the history
Hash host ID so its stable and well distributed
  • Loading branch information
dadgar committed Apr 11, 2017
2 parents e2d8640 + 7a78eee commit 211a840
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 3 deletions.
10 changes: 7 additions & 3 deletions client/client.go
Original file line number Diff line number Diff line change
Expand Up @@ -655,9 +655,13 @@ func (c *Client) getAllocRunners() map[string]*AllocRunner {
func (c *Client) nodeID() (id, secret string, err error) {
var hostID string
hostInfo, err := host.Info()
if !c.config.NoHostUUID && err == nil && helper.IsUUID(hostInfo.HostID) {
hostID = hostInfo.HostID
} else {
if !c.config.NoHostUUID && err == nil {
if hashed, ok := helper.HashUUID(hostInfo.HostID); ok {
hostID = hashed
}
}

if hostID == "" {
// Generate a random hostID if no constant ID is available on
// this platform.
hostID = structs.GenerateUUID()
Expand Down
21 changes: 21 additions & 0 deletions helper/funcs.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package helper

import (
"crypto/sha512"
"fmt"
"regexp"
"time"
)
Expand All @@ -18,6 +20,25 @@ func IsUUID(str string) bool {
return validUUID.MatchString(str)
}

// HashUUID takes an input UUID and returns a hashed version of the UUID to
// ensure it is well distributed.
func HashUUID(input string) (output string, hashed bool) {
if !IsUUID(input) {
return "", false
}

// Hash the input
buf := sha512.Sum512([]byte(input))
output = fmt.Sprintf("%08x-%04x-%04x-%04x-%12x",
buf[0:4],
buf[4:6],
buf[6:8],
buf[8:10],
buf[10:16])

return output, true
}

// boolToPtr returns the pointer to a boolean
func BoolToPtr(b bool) *bool {
return &b
Expand Down

0 comments on commit 211a840

Please sign in to comment.