func()

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
}