func()

in pkg/ec2pricing/ec2pricing.go [256:290]


func (p *EC2Pricing) HydrateOndemandCache() error {
	newOnDemandCache := make(map[string]float64)

	regionDescription := p.getRegionForPricingAPI()
	productInput := pricing.GetProductsInput{
		ServiceCode: aws.String(serviceCode),
		Filters: []*pricing.Filter{
			{Type: aws.String(pricing.FilterTypeTermMatch), Field: aws.String("ServiceCode"), Value: aws.String(serviceCode)},
			{Type: aws.String(pricing.FilterTypeTermMatch), Field: aws.String("operatingSystem"), Value: aws.String("linux")},
			{Type: aws.String(pricing.FilterTypeTermMatch), Field: aws.String("location"), Value: aws.String(regionDescription)},
			{Type: aws.String(pricing.FilterTypeTermMatch), Field: aws.String("capacitystatus"), Value: aws.String("used")},
			{Type: aws.String(pricing.FilterTypeTermMatch), Field: aws.String("preInstalledSw"), Value: aws.String("NA")},
			{Type: aws.String(pricing.FilterTypeTermMatch), Field: aws.String("tenancy"), Value: aws.String("shared")},
		},
	}
	var processingErr error
	errAPI := p.PricingClient.GetProductsPages(&productInput, func(pricingOutput *pricing.GetProductsOutput, nextPage bool) bool {
		for _, priceDoc := range pricingOutput.PriceList {
			instanceTypeName, price, errParse := parseOndemandUnitPrice(priceDoc)
			if errParse != nil {
				processingErr = multierr.Append(processingErr, errParse)
				continue
			}
			newOnDemandCache[instanceTypeName] = price
		}
		return true
	})
	if errAPI != nil {
		return errAPI
	}
	cTime := time.Now().UTC()
	p.onDemandCache = newOnDemandCache
	p.lastOnDemandCacheUTC = &cTime
	return processingErr
}