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  }