10 const UniqueIdPrefix = `terraform-`
12 // idCounter is a randomly seeded monotonic counter for generating ordered
13 // unique ids. It uses a big.Int so we can easily increment a long numeric
14 // string. The max possible hex value here with 12 random bytes is
15 // "01000000000000000000000000", so there's no chance of rollover during
17 var idMutex sync.Mutex
18 var idCounter = big.NewInt(0).SetBytes(randomBytes(12))
20 // Helper for a resource to generate a unique identifier w/ default prefix
21 func UniqueId() string {
22 return PrefixedUniqueId(UniqueIdPrefix)
25 // Helper for a resource to generate a unique identifier w/ given prefix
27 // After the prefix, the ID consists of an incrementing 26 digit value (to match
28 // previous timestamp output).
29 func PrefixedUniqueId(prefix string) string {
31 defer idMutex.Unlock()
32 return fmt.Sprintf("%s%026x", prefix, idCounter.Add(idCounter, big.NewInt(1)))
35 func randomBytes(n int) []byte {