@@ -2,6 +2,7 @@ package consumption
22
33import (
44 "context"
5+ "net/url"
56
67 "github.com/Azure/azure-sdk-for-go/sdk/azcore/to"
78 "github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/consumption/armconsumption"
@@ -26,10 +27,37 @@ func fetchSubscriptionPriceSheets(ctx context.Context, meta schema.ClientMeta, p
2627 if err != nil {
2728 return err
2829 }
29- resp , err := svc .Get (ctx , & armconsumption.PriceSheetClientGetOptions {Expand : to .Ptr ("properties/meterDetails" )})
30+ opts := & armconsumption.PriceSheetClientGetOptions {Expand : to .Ptr ("properties/meterDetails" )}
31+ resp , err := svc .Get (ctx , opts )
3032 if err != nil {
3133 return err
3234 }
35+
36+ // This is a workaround to get all price sheets
37+ // Somehow related to https://github.com/Azure/azure-sdk-for-go/issues/4142
38+ allPricesSheets := resp .PriceSheetResult .Properties .Pricesheets
39+ nextLink := resp .PriceSheetResult .Properties .NextLink
40+ for nextLink != nil {
41+ parsedNextLink , err := url .Parse (* nextLink )
42+ if err != nil {
43+ cl .Logger ().Warn ().Err (err ).Msgf ("failed to parse next link: %q" , * nextLink )
44+ break
45+ }
46+ token := parsedNextLink .Query ().Get ("skiptoken" )
47+ if token == "" {
48+ cl .Logger ().Warn ().Msgf ("failed to get skiptoken from next link: %q" , * nextLink )
49+ break
50+ }
51+ opts .Skiptoken = to .Ptr (token )
52+ paginatedResponse , err := svc .Get (ctx , opts )
53+ if err != nil {
54+ cl .Logger ().Warn ().Err (err ).Msgf ("failed to get paginated response for next link: %q" , * nextLink )
55+ break
56+ }
57+ allPricesSheets = append (allPricesSheets , paginatedResponse .PriceSheetResult .Properties .Pricesheets ... )
58+ }
59+
60+ resp .PriceSheetResult .Properties .Pricesheets = allPricesSheets
3361 res <- resp .PriceSheetResult
3462 return nil
3563}
0 commit comments