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. Fixes https://github.com/hashicorp/nomad/issues/2534
This commit is contained in:
parent
d2a64d3fd3
commit
2321e8a4a0
|
@ -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()
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package helper
|
||||
|
||||
import (
|
||||
"crypto/sha512"
|
||||
"fmt"
|
||||
"regexp"
|
||||
"time"
|
||||
)
|
||||
|
@ -18,6 +20,23 @@ func IsUUID(str string) bool {
|
|||
return validUUID.MatchString(str)
|
||||
}
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in New Issue