github.com/niedbalski/juju@v0.0.0-20190215020005-8ff100488e47/apiserver/common/instancetypes.go (about) 1 // Copyright 2016 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package common 5 6 import ( 7 "github.com/juju/errors" 8 9 "github.com/juju/juju/apiserver/params" 10 "github.com/juju/juju/core/constraints" 11 "github.com/juju/juju/environs" 12 "github.com/juju/juju/environs/context" 13 "github.com/juju/juju/environs/instances" 14 ) 15 16 func toParamsInstanceTypeResult(itypes []instances.InstanceType) []params.InstanceType { 17 result := make([]params.InstanceType, len(itypes)) 18 for i, t := range itypes { 19 virtType := "" 20 if t.VirtType != nil { 21 virtType = *t.VirtType 22 } 23 result[i] = params.InstanceType{ 24 Name: t.Name, 25 Arches: t.Arches, 26 CPUCores: int(t.CpuCores), 27 Memory: int(t.Mem), 28 RootDiskSize: int(t.RootDisk), 29 VirtType: virtType, 30 Deprecated: t.Deprecated, 31 Cost: int(t.Cost), 32 } 33 } 34 return result 35 } 36 37 // NewInstanceTypeConstraints returns an instanceTypeConstraints with the passed 38 // parameters. 39 func NewInstanceTypeConstraints(env environs.Environ, ctx context.ProviderCallContext, constraints constraints.Value) instanceTypeConstraints { 40 return instanceTypeConstraints{ 41 environ: env, 42 constraints: constraints, 43 context: ctx, 44 } 45 } 46 47 // instanceTypeConstraints holds necessary params to filter instance types. 48 type instanceTypeConstraints struct { 49 constraints constraints.Value 50 environ environs.Environ 51 context context.ProviderCallContext 52 } 53 54 // InstanceTypes returns a list of the available instance types in the provider according 55 // to the passed constraints. 56 func InstanceTypes(cons instanceTypeConstraints) (params.InstanceTypesResult, error) { 57 instanceTypes, err := cons.environ.InstanceTypes(cons.context, cons.constraints) 58 if err != nil { 59 return params.InstanceTypesResult{}, errors.Trace(err) 60 } 61 62 return params.InstanceTypesResult{ 63 InstanceTypes: toParamsInstanceTypeResult(instanceTypes.InstanceTypes), 64 CostUnit: instanceTypes.CostUnit, 65 CostCurrency: instanceTypes.CostCurrency, 66 CostDivisor: instanceTypes.CostDivisor, 67 }, nil 68 }