github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/provider/cloudsigma/constraints.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package cloudsigma 5 6 import ( 7 "fmt" 8 9 "github.com/altoros/gosigma" 10 11 "github.com/juju/juju/core/constraints" 12 "github.com/juju/juju/environs/imagemetadata" 13 ) 14 15 type sigmaConstraints struct { 16 driveTemplate string 17 driveSize uint64 18 cores uint64 //number of cpu cores 19 power uint64 //cpu power in MHz 20 mem uint64 //memory size in GB 21 } 22 23 const ( 24 defaultCPUPower = 2000 25 defaultDriveGB = 5 26 defaultMemoryGB = 2 27 ) 28 29 // newConstraints creates new CloudSigma constraints from juju common constraints 30 func newConstraints(bootstrap bool, jc constraints.Value, img *imagemetadata.ImageMetadata) *sigmaConstraints { 31 var sc = sigmaConstraints{ 32 driveTemplate: img.Id, 33 } 34 35 if size := jc.RootDisk; bootstrap && size == nil { 36 sc.driveSize = defaultDriveGB * gosigma.Gigabyte 37 } else if size != nil { 38 sc.driveSize = *size * gosigma.Megabyte 39 } 40 41 if c := jc.CpuCores; c != nil { 42 sc.cores = *c 43 } else { 44 sc.cores = 1 45 } 46 47 if p := jc.CpuPower; p != nil { 48 sc.power = *p 49 } else { 50 if sc.cores == 1 { 51 // The default of cpu power is 2000 Mhz 52 sc.power = defaultCPUPower 53 } else { 54 // The maximum amount of cpu per smp is 2300 55 sc.power = sc.cores * defaultCPUPower 56 } 57 } 58 59 if m := jc.Mem; m != nil { 60 sc.mem = *m * gosigma.Megabyte 61 } else { 62 sc.mem = defaultMemoryGB * gosigma.Gigabyte 63 } 64 65 return &sc 66 } 67 68 func (c *sigmaConstraints) String() string { 69 s := fmt.Sprintf("template=%s,drive=%dG", c.driveTemplate, c.driveSize/gosigma.Gigabyte) 70 if c.cores > 0 { 71 s += fmt.Sprintf(",cores=%d", c.cores) 72 } 73 if c.power > 0 { 74 s += fmt.Sprintf(",power=%d", c.power) 75 } 76 if c.mem > 0 { 77 s += fmt.Sprintf(",mem=%dG", c.mem/gosigma.Gigabyte) 78 } 79 return s 80 }