in pkg/selector/aggregates.go [51:100]
func (itf Selector) TransformBaseInstanceType(ctx context.Context, filters Filters) (Filters, error) {
if filters.InstanceTypeBase == nil {
return filters, nil
}
instanceTypesOutput, err := itf.EC2.DescribeInstanceTypes(ctx, &ec2.DescribeInstanceTypesInput{
InstanceTypes: []ec2types.InstanceType{
ec2types.InstanceType(*filters.InstanceTypeBase),
},
})
if err != nil {
return filters, err
}
if len(instanceTypesOutput.InstanceTypes) == 0 {
return filters, fmt.Errorf("error instance type %s is not a valid instance type", *filters.InstanceTypeBase)
}
instanceTypeInfo := instanceTypesOutput.InstanceTypes[0]
if filters.BareMetal == nil {
filters.BareMetal = instanceTypeInfo.BareMetal
}
if filters.CPUArchitecture == nil && len(instanceTypeInfo.ProcessorInfo.SupportedArchitectures) == 1 {
filters.CPUArchitecture = &instanceTypeInfo.ProcessorInfo.SupportedArchitectures[0]
}
if filters.Fpga == nil {
isFpgaSupported := instanceTypeInfo.FpgaInfo != nil
filters.Fpga = &isFpgaSupported
}
if filters.GpusRange == nil {
gpuCount := int32(0)
if instanceTypeInfo.GpuInfo != nil {
gpuCount = *getTotalGpusCount(instanceTypeInfo.GpuInfo)
}
filters.GpusRange = &Int32RangeFilter{LowerBound: gpuCount, UpperBound: gpuCount}
}
if filters.MemoryRange == nil {
lowerBound := bytequantity.ByteQuantity{Quantity: uint64(float64(*instanceTypeInfo.MemoryInfo.SizeInMiB) * AggregateLowPercentile)}
upperBound := bytequantity.ByteQuantity{Quantity: uint64(float64(*instanceTypeInfo.MemoryInfo.SizeInMiB) * AggregateHighPercentile)}
filters.MemoryRange = &ByteQuantityRangeFilter{LowerBound: lowerBound, UpperBound: upperBound}
}
if filters.VCpusRange == nil {
lowerBound := int32(float32(*instanceTypeInfo.VCpuInfo.DefaultVCpus) * AggregateLowPercentile)
upperBound := int32(float32(*instanceTypeInfo.VCpuInfo.DefaultVCpus) * AggregateHighPercentile)
filters.VCpusRange = &Int32RangeFilter{LowerBound: lowerBound, UpperBound: upperBound}
}
if filters.VirtualizationType == nil && len(instanceTypeInfo.SupportedVirtualizationTypes) == 1 {
filters.VirtualizationType = &instanceTypeInfo.SupportedVirtualizationTypes[0]
}
filters.InstanceTypeBase = nil
return filters, nil
}