in pkg/providers/pricing/pricing.go [241:292]
func (p *DefaultProvider) fetchOnDemandPricing(ctx context.Context, additionalFilters ...pricingtypes.Filter) (map[ec2types.InstanceType]float64, error) {
prices := map[ec2types.InstanceType]float64{}
filters := append([]pricingtypes.Filter{
{
Field: aws.String("regionCode"),
Type: "TERM_MATCH",
Value: aws.String(p.region),
},
{
Field: aws.String("serviceCode"),
Type: "TERM_MATCH",
Value: aws.String("AmazonEC2"),
},
{
Field: aws.String("preInstalledSw"),
Type: "TERM_MATCH",
Value: aws.String("NA"),
},
{
Field: aws.String("operatingSystem"),
Type: "TERM_MATCH",
Value: aws.String("Linux"),
},
{
Field: aws.String("capacitystatus"),
Type: "TERM_MATCH",
Value: aws.String("Used"),
},
{
Field: aws.String("marketoption"),
Type: "TERM_MATCH",
Value: aws.String("OnDemand"),
}},
additionalFilters...)
input := &pricing.GetProductsInput{
Filters: filters,
ServiceCode: aws.String("AmazonEC2"),
}
paginator := pricing.NewGetProductsPaginator(p.pricing, input)
for paginator.HasMorePages() {
output, err := paginator.NextPage(ctx)
if err != nil {
return nil, fmt.Errorf("getting pricing data, %w", err)
}
prices = lo.Assign(prices, p.onDemandPage(ctx, output))
}
return prices, nil
}