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.
This commit is contained in:
Alex Dadgar 2017-04-10 11:57:24 -07:00
parent af1d22135a
commit 13f026dec4
1 changed files with 12 additions and 0 deletions

View File

@ -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
}