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  }