func GetAutopilotPricing()

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
}