mirror of https://github.com/docker/docs.git
46 lines
1.3 KiB
Go
46 lines
1.3 KiB
Go
package azureutil
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
/* Utilities */
|
|
|
|
// randomAzureStorageAccountName generates a valid storage account name prefixed
|
|
// with a predefined string. Availability of the name is not checked. Uses maximum
|
|
// length to maximise randomness.
|
|
func randomAzureStorageAccountName() string {
|
|
const (
|
|
maxLen = 24
|
|
chars = "0123456789abcdefghijklmnopqrstuvwxyz"
|
|
)
|
|
return storageAccountPrefix + randomString(maxLen-len(storageAccountPrefix), chars)
|
|
}
|
|
|
|
// randomString generates a random string of given length using specified alphabet.
|
|
func randomString(n int, alphabet string) string {
|
|
r := timeSeed()
|
|
b := make([]byte, n)
|
|
for i := range b {
|
|
b[i] = alphabet[r.Intn(len(alphabet))]
|
|
}
|
|
return string(b)
|
|
}
|
|
|
|
// imageName holds various components of an OS image name identifier
|
|
type imageName struct{ publisher, offer, sku, version string }
|
|
|
|
// parseImageName parses a publisher:offer:sku:version into those parts.
|
|
func parseImageName(image string) (imageName, error) {
|
|
l := strings.Split(image, ":")
|
|
if len(l) != 4 {
|
|
return imageName{}, fmt.Errorf("Image name %q not a valid format.", image)
|
|
}
|
|
return imageName{l[0], l[1], l[2], l[3]}, nil
|
|
}
|
|
|
|
func timeSeed() *rand.Rand { return rand.New(rand.NewSource(time.Now().UTC().UnixNano())) }
|