in calculator/pricing.go [261:521]
func GetAutopilotPricing(sku string, region string) (AutopilotPriceList, error) {
// Init all to zeroes
pricing := AutopilotPriceList{
Region: region,
StoragePrice: 0,
CpuPrice: 0,
MemoryPrice: 0,
SpotCpuPrice: 0,
SpotMemoryPrice: 0,
CpuBalancedPrice: 0,
MemoryBalancedPrice: 0,
SpotCpuBalancedPrice: 0,
SpotMemoryBalancedPrice: 0,
CpuScaleoutPrice: 0,
MemoryScaleoutPrice: 0,
SpotCpuScaleoutPrice: 0,
SpotMemoryScaleoutPrice: 0,
CpuArmScaleoutPrice: 0,
MemoryArmScaleoutPrice: 0,
SpotArmCpuScaleoutPrice: 0,
SpotArmMemoryScaleoutPrice: 0,
GPUPodvCPUPrice: 0,
GPUPodMemoryPrice: 0,
GPUPodLocalSSDPrice: 0,
NVIDIAL4PodGPUPrice: 0,
NVIDIAT4PodGPUPrice: 0,
NVIDIAA10040GPodGPUPrice: 0,
NVIDIAA10080GPodGPUPrice: 0,
SpotGPUPodvCPUPrice: 0,
SpotGPUPodMemoryPrice: 0,
SpotGPUPodLocalSSDPrice: 0,
SpotNVIDIAL4PodGPUPrice: 0,
SpotNVIDIAT4PodGPUPrice: 0,
SpotNVIDIAA10040GPodGPUPrice: 0,
SpotNVIDIAA10080GPodGPUPrice: 0,
PerformanceCpuPricePremium: 0,
PerformanceMemoryPricePremium: 0,
PerformancePDPricePremium: 0,
PerformanceLocalSSDPricePremium: 0,
SpotPerformanceCpuPricePremium: 0,
SpotPerformanceMemoryPricePremium: 0,
SpotPerformancePDPricePremium: 0,
SpotPerformanceLocalSSDPricePremium: 0,
AcceleratorCpuPricePremium: 0,
AcceleratorMemoryGPUPricePremium: 0,
AcceleratorPDPricePremium: 0,
AcceleratorLocalSSDPricePremium: 0,
AcceleratorT4GPUPricePremium: 0,
AcceleratorL4GPUPricePremium: 0,
AcceleratorA10040GGPUPricePremium: 0,
AcceleratorA10080GGPUPricePremium: 0,
AcceleratorH100GPUPricePremium: 0,
SpotAcceleratorCpuPricePremium: 0,
SpotAcceleratorMemoryGPUPricePremium: 0,
SpotAcceleratorPDPricePremium: 0,
SpotAcceleratorLocalSSDPricePremium: 0,
SpotAcceleratorT4GPUPricePremium: 0,
SpotAcceleratorL4GPUPricePremium: 0,
SpotAcceleratorA10040GGPUPricePremium: 0,
SpotAcceleratorA10080GGPUPricePremium: 0,
SpotAcceleratorH100GPUPricePremium: 0,
}
// If the "region" is actual "zone", we need to remove the zone to get the pricing for the whole region.
if len(strings.Split(region, "-")) > 2 {
region = strings.Join(
strings.Split(region, "-")[:len(
strings.Split(
region,
"-",
),
)-1],
"-",
)
}
ctx := context.Background()
cloudbillingService, err := cloudbilling.NewService(ctx, option.WithScopes(cloudbilling.CloudPlatformScope))
if err != nil {
err = fmt.Errorf("unable to initialize cloud billing service: %v", err)
return AutopilotPriceList{}, err
}
err = cloudbillingService.Services.Skus.List("services/"+sku).CurrencyCode("USD").Pages(ctx, func(pricingInfo *cloudbilling.ListSkusResponse) error {
for _, sku := range pricingInfo.Skus {
if !slices.Contains(sku.ServiceRegions, region) {
continue
}
decimal := sku.PricingInfo[0].PricingExpression.TieredRates[0].UnitPrice.Units * 1000000000
mantissa := sku.PricingInfo[0].PricingExpression.TieredRates[0].UnitPrice.Nanos * int64(sku.PricingInfo[0].PricingExpression.DisplayQuantity)
price := float64(decimal+mantissa) / 1000000000
switch sku.Description {
case "Autopilot Pod Ephemeral Storage Requests (" + region + ")":
pricing.StoragePrice = price
case "Autopilot Pod Memory Requests (" + region + ")":
pricing.MemoryPrice = price
case "Autopilot Pod mCPU Requests (" + region + ")":
pricing.CpuPrice = price
case "Autopilot Balanced Pod Memory Requests (" + region + ")":
pricing.MemoryBalancedPrice = price
case "Autopilot Balanced Pod mCPU Requests (" + region + ")":
pricing.CpuBalancedPrice = price
case "Autopilot Scale-Out x86 Pod Memory Requests (" + region + ")":
pricing.MemoryScaleoutPrice = price
case "Autopilot Scale-Out x86 Pod mCPU Requests (" + region + ")":
pricing.CpuScaleoutPrice = price
case "Autopilot Scale-Out Arm Spot Pod Memory Requests (" + region + ")":
pricing.MemoryArmScaleoutPrice = price
case "Autopilot Scale-Out Arm Spot Pod mCPU Requests (" + region + ")":
pricing.CpuArmScaleoutPrice = price
case "Autopilot Spot Pod Memory Requests (" + region + ")":
pricing.SpotMemoryPrice = price
case "Autopilot Spot Pod mCPU Requests (" + region + ")":
pricing.SpotCpuPrice = price
case "Autopilot Balanced Spot Pod Memory Requests (" + region + ")":
pricing.SpotMemoryBalancedPrice = price
case "Autopilot Balanced Spot Pod mCPU Requests (" + region + ")":
pricing.SpotCpuBalancedPrice = price
case "Autopilot Scale-Out x86 Spot Pod Memory Requests (" + region + ")":
pricing.SpotMemoryScaleoutPrice = price
case "Autopilot Scale-Out x86 Spot Pod mCPU Requests (" + region + ")":
pricing.SpotCpuScaleoutPrice = price
case "Autopilot Scale-Out Arm Spot Pod Memory Requests (" + region + ")":
pricing.SpotArmMemoryScaleoutPrice = price
case "Autopilot Scale-Out Arm Spot Pod mCPU Requests (" + region + ")":
pricing.SpotArmCpuScaleoutPrice = price
case "Autopilot NVIDIA T4 Pod mCPU Requests (" + region + ")":
case "Autopilot NVIDIA L4 Pod mCPU Requests (" + region + ")":
case "Autopilot NVIDIA A100 Pod mCPU Requests (" + region + ")":
case "Autopilot NVIDIA A100 80GB Pod mCPU Requests (" + region + ")":
pricing.GPUPodvCPUPrice = price
case "Autopilot NVIDIA T4 Pod Memory Requests (" + region + ")":
case "Autopilot NVIDIA L4 Pod Memory Requests (" + region + ")":
case "Autopilot NVIDIA A100 Pod Memory Requests (" + region + ")":
case "Autopilot NVIDIA A100 80GB Pod Memory Requests (" + region + ")":
pricing.GPUPodMemoryPrice = price
case "Autopilot NVIDIA T4 Pod GPU Requests (" + region + ")":
pricing.NVIDIAT4PodGPUPrice = price
case "Autopilot NVIDIA L4 Pod GPU Requests (" + region + ")":
pricing.NVIDIAL4PodGPUPrice = price
case "Autopilot NVIDIA A100 Pod GPU Requests (" + region + ")":
pricing.NVIDIAA10040GPodGPUPrice = price
case "Autopilot NVIDIA A100 80GB Pod GPU Requests (" + region + ")":
pricing.NVIDIAA10080GPodGPUPrice = price
case "Autopilot GPU Pod Local SSD (" + region + ")":
pricing.SpotGPUPodLocalSSDPrice = price
case "Autopilot NVIDIA T4 Spot Pod mCPU Requests (" + region + ")":
case "Autopilot NVIDIA L4 Spot Pod mCPU Requests (" + region + ")":
case "Autopilot NVIDIA A100 Spot Pod mCPU Requests (" + region + ")":
case "Autopilot NVIDIA A100 80GB Spot Pod mCPU Requests (" + region + ")":
pricing.GPUPodvCPUPrice = price
case "Autopilot NVIDIA T4 Spot Pod Memory Requests (" + region + ")":
case "Autopilot NVIDIA L4 Spot Pod Memory Requests (" + region + ")":
case "Autopilot NVIDIA A100 Spot Pod Memory Requests (" + region + ")":
case "Autopilot NVIDIA A100 80GB Spot Pod Memory Requests (" + region + ")":
pricing.GPUPodMemoryPrice = price
case "Autopilot NVIDIA T4 Spot Pod GPU Requests (" + region + ")":
pricing.NVIDIAT4PodGPUPrice = price
case "Autopilot NVIDIA L4 Spot Pod GPU Requests (" + region + ")":
pricing.NVIDIAL4PodGPUPrice = price
case "Autopilot NVIDIA A100 Spot Pod GPU Requests (" + region + ")":
pricing.NVIDIAA10040GPodGPUPrice = price
case "Autopilot NVIDIA A100 80GB Spot Pod GPU Requests (" + region + ")":
pricing.NVIDIAA10080GPodGPUPrice = price
case "Autopilot GPU Spot Pod Local SSD (" + region + ")":
pricing.SpotGPUPodLocalSSDPrice = price
case "Autopilot PD Balanced Premium (" + region + ")":
pricing.PerformancePDPricePremium = price
pricing.SpotPerformancePDPricePremium = price
pricing.AcceleratorPDPricePremium = price
pricing.SpotAcceleratorPDPricePremium = price
case "Autopilot Performance CPU Premium (" + region + ")":
pricing.PerformanceCpuPricePremium = price
case "Autopilot Performance Memory Premium (" + region + ")":
pricing.PerformanceMemoryPricePremium = price
case "Autopilot Local SSD Premium (" + region + ")":
pricing.PerformanceLocalSSDPricePremium = price
pricing.AcceleratorLocalSSDPricePremium = price
case "Autopilot Spot PD Balanced Premium (" + region + ")":
pricing.PerformancePDPricePremium = price
pricing.SpotPerformancePDPricePremium = price
pricing.AcceleratorPDPricePremium = price
pricing.SpotAcceleratorPDPricePremium = price
case "Autopilot Performance Spot CPU Premium (" + region + ")":
pricing.SpotPerformanceCpuPricePremium = price
case "Autopilot Performance Spot Memory Premium (" + region + ")":
pricing.SpotPerformanceMemoryPricePremium = price
case "Autopilot Local SSD Spot Premium (" + region + ")":
pricing.SpotPerformanceLocalSSDPricePremium = price
pricing.SpotAcceleratorLocalSSDPricePremium = price
case "Autopilot Accelerator CPU Premium (" + region + ")":
pricing.AcceleratorCpuPricePremium = price
case "Autopilot Accelerator Memory Premium (" + region + ")":
pricing.AcceleratorMemoryGPUPricePremium = price
case "Autopilot T4 Premium (" + region + ")":
pricing.AcceleratorT4GPUPricePremium = price
case "Autopilot L4 Premium (" + region + ")":
pricing.AcceleratorL4GPUPricePremium = price
case "Autopilot A100 40GB Premium (" + region + ")":
pricing.AcceleratorA10040GGPUPricePremium = price
case "Autopilot A100 80GB Premium (" + region + ")":
pricing.AcceleratorA10080GGPUPricePremium = price
case "Autopilot H100 80GB Premium (" + region + ")":
pricing.AcceleratorH100GPUPricePremium = price
case "Autopilot Accelerator Spot CPU Premium (" + region + ")":
pricing.SpotAcceleratorCpuPricePremium = price
case "Autopilot Accelerator Spot Memory Premium (" + region + ")":
pricing.SpotAcceleratorMemoryGPUPricePremium = price
case "Autopilot T4 Spot Premium (" + region + ")":
pricing.SpotAcceleratorT4GPUPricePremium = price
case "Autopilot L4 Spot Premium (" + region + ")":
pricing.SpotAcceleratorL4GPUPricePremium = price
case "Autopilot A100 40GB Spot Premium (" + region + ")":
pricing.SpotAcceleratorA10040GGPUPricePremium = price
case "Autopilot A100 80GB Spot Premium (" + region + ")":
pricing.SpotAcceleratorA10080GGPUPricePremium = price
case "Autopilot H100 80GB Spot Premium (" + region + ")":
pricing.SpotAcceleratorH100GPUPricePremium = price
}
}
return nil
})
if err != nil {
err = fmt.Errorf("unable to fetch autopilot cloud billing information: %v", err)
return AutopilotPriceList{}, err
}
return pricing, nil
}