github.com/makyo/juju@v0.0.0-20160425123129-2608902037e9/provider/azure/utils.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package azure 5 6 import ( 7 "math/rand" 8 9 "github.com/Azure/azure-sdk-for-go/Godeps/_workspace/src/github.com/Azure/go-autorest/autorest/to" 10 "github.com/juju/utils" 11 ) 12 13 func toTagsPtr(tags map[string]string) *map[string]*string { 14 stringPtrMap := to.StringMapPtr(tags) 15 return &stringPtrMap 16 } 17 18 func toTags(tags *map[string]*string) map[string]string { 19 if tags == nil { 20 return nil 21 } 22 return to.StringMap(*tags) 23 } 24 25 // randomAdminPassword returns a random administrator password for 26 // Windows machines. 27 func randomAdminPassword() string { 28 // We want at least one each of lower-alpha, upper-alpha, and digit. 29 // Allocate 16 of each (randomly), and then the remaining characters 30 // will be randomly chosen from the full set. 31 validRunes := append(utils.LowerAlpha, utils.Digits...) 32 validRunes = append(validRunes, utils.UpperAlpha...) 33 34 lowerAlpha := utils.RandomString(16, utils.LowerAlpha) 35 upperAlpha := utils.RandomString(16, utils.UpperAlpha) 36 digits := utils.RandomString(16, utils.Digits) 37 mixed := utils.RandomString(16, validRunes) 38 password := []rune(lowerAlpha + upperAlpha + digits + mixed) 39 for i := len(password) - 1; i >= 1; i-- { 40 j := rand.Intn(i + 1) 41 password[i], password[j] = password[j], password[i] 42 } 43 return string(password) 44 }