diff --git a/profiles/latest/consumption/mgmt/consumption/consumptionapi/models.go b/profiles/latest/consumption/mgmt/consumption/consumptionapi/models.go index be45073f1991..d168dc27d646 100644 --- a/profiles/latest/consumption/mgmt/consumption/consumptionapi/models.go +++ b/profiles/latest/consumption/mgmt/consumption/consumptionapi/models.go @@ -19,7 +19,7 @@ package consumptionapi -import original "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2018-10-01/consumption/consumptionapi" +import original "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-01-01/consumption/consumptionapi" type AggregatedCostClientAPI = original.AggregatedCostClientAPI type BalancesClientAPI = original.BalancesClientAPI diff --git a/profiles/latest/consumption/mgmt/consumption/models.go b/profiles/latest/consumption/mgmt/consumption/models.go index 2f36d3868e82..1a2880a62e0b 100644 --- a/profiles/latest/consumption/mgmt/consumption/models.go +++ b/profiles/latest/consumption/mgmt/consumption/models.go @@ -22,7 +22,7 @@ package consumption import ( "context" - original "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2018-10-01/consumption" + original "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-01-01/consumption" ) const ( diff --git a/profiles/preview/consumption/mgmt/consumption/consumptionapi/models.go b/profiles/preview/consumption/mgmt/consumption/consumptionapi/models.go index be45073f1991..d168dc27d646 100644 --- a/profiles/preview/consumption/mgmt/consumption/consumptionapi/models.go +++ b/profiles/preview/consumption/mgmt/consumption/consumptionapi/models.go @@ -19,7 +19,7 @@ package consumptionapi -import original "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2018-10-01/consumption/consumptionapi" +import original "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-01-01/consumption/consumptionapi" type AggregatedCostClientAPI = original.AggregatedCostClientAPI type BalancesClientAPI = original.BalancesClientAPI diff --git a/profiles/preview/consumption/mgmt/consumption/models.go b/profiles/preview/consumption/mgmt/consumption/models.go index 08ad587ec097..2c5576284c5a 100644 --- a/profiles/preview/consumption/mgmt/consumption/models.go +++ b/profiles/preview/consumption/mgmt/consumption/models.go @@ -22,7 +22,7 @@ package consumption import ( "context" - original "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2018-10-01/consumption" + original "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-01-01/consumption" ) const ( diff --git a/services/consumption/mgmt/2019-01-01/consumption/aggregatedcost.go b/services/consumption/mgmt/2019-01-01/consumption/aggregatedcost.go new file mode 100644 index 000000000000..3d0d68e87c15 --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/aggregatedcost.go @@ -0,0 +1,200 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// AggregatedCostClient is the consumption management client provides access to consumption resources for Azure +// Enterprise Subscriptions. +type AggregatedCostClient struct { + BaseClient +} + +// NewAggregatedCostClient creates an instance of the AggregatedCostClient client. +func NewAggregatedCostClient(subscriptionID string) AggregatedCostClient { + return NewAggregatedCostClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewAggregatedCostClientWithBaseURI creates an instance of the AggregatedCostClient client. +func NewAggregatedCostClientWithBaseURI(baseURI string, subscriptionID string) AggregatedCostClient { + return AggregatedCostClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// GetByManagementGroup provides the aggregate cost of a management group and all child management groups by current +// billing period. +// Parameters: +// managementGroupID - azure Management Group ID. +// filter - may be used to filter aggregated cost by properties/usageStart (Utc time), properties/usageEnd (Utc +// time). The filter supports 'eq', 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support 'ne', +// 'or', or 'not'. Tag filter is a key value pair string where key and value is separated by a colon (:). +func (client AggregatedCostClient) GetByManagementGroup(ctx context.Context, managementGroupID string, filter string) (result ManagementGroupAggregatedCostResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AggregatedCostClient.GetByManagementGroup") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetByManagementGroupPreparer(ctx, managementGroupID, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetByManagementGroup", nil, "Failure preparing request") + return + } + + resp, err := client.GetByManagementGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetByManagementGroup", resp, "Failure sending request") + return + } + + result, err = client.GetByManagementGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetByManagementGroup", resp, "Failure responding to request") + } + + return +} + +// GetByManagementGroupPreparer prepares the GetByManagementGroup request. +func (client AggregatedCostClient) GetByManagementGroupPreparer(ctx context.Context, managementGroupID string, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "managementGroupId": autorest.Encode("path", managementGroupID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Consumption/aggregatedcost", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetByManagementGroupSender sends the GetByManagementGroup request. The method will close the +// http.Response Body if it receives an error. +func (client AggregatedCostClient) GetByManagementGroupSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// GetByManagementGroupResponder handles the response to the GetByManagementGroup request. The method always +// closes the http.Response Body. +func (client AggregatedCostClient) GetByManagementGroupResponder(resp *http.Response) (result ManagementGroupAggregatedCostResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetForBillingPeriodByManagementGroup provides the aggregate cost of a management group and all child management +// groups by specified billing period +// Parameters: +// managementGroupID - azure Management Group ID. +// billingPeriodName - billing Period Name. +func (client AggregatedCostClient) GetForBillingPeriodByManagementGroup(ctx context.Context, managementGroupID string, billingPeriodName string) (result ManagementGroupAggregatedCostResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/AggregatedCostClient.GetForBillingPeriodByManagementGroup") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetForBillingPeriodByManagementGroupPreparer(ctx, managementGroupID, billingPeriodName) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetForBillingPeriodByManagementGroup", nil, "Failure preparing request") + return + } + + resp, err := client.GetForBillingPeriodByManagementGroupSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetForBillingPeriodByManagementGroup", resp, "Failure sending request") + return + } + + result, err = client.GetForBillingPeriodByManagementGroupResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.AggregatedCostClient", "GetForBillingPeriodByManagementGroup", resp, "Failure responding to request") + } + + return +} + +// GetForBillingPeriodByManagementGroupPreparer prepares the GetForBillingPeriodByManagementGroup request. +func (client AggregatedCostClient) GetForBillingPeriodByManagementGroupPreparer(ctx context.Context, managementGroupID string, billingPeriodName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "billingPeriodName": autorest.Encode("path", billingPeriodName), + "managementGroupId": autorest.Encode("path", managementGroupID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Management/managementGroups/{managementGroupId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}/Microsoft.Consumption/aggregatedcost", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetForBillingPeriodByManagementGroupSender sends the GetForBillingPeriodByManagementGroup request. The method will close the +// http.Response Body if it receives an error. +func (client AggregatedCostClient) GetForBillingPeriodByManagementGroupSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// GetForBillingPeriodByManagementGroupResponder handles the response to the GetForBillingPeriodByManagementGroup request. The method always +// closes the http.Response Body. +func (client AggregatedCostClient) GetForBillingPeriodByManagementGroupResponder(resp *http.Response) (result ManagementGroupAggregatedCostResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/balances.go b/services/consumption/mgmt/2019-01-01/consumption/balances.go new file mode 100644 index 000000000000..7c9bb3c92bec --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/balances.go @@ -0,0 +1,194 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// BalancesClient is the consumption management client provides access to consumption resources for Azure Enterprise +// Subscriptions. +type BalancesClient struct { + BaseClient +} + +// NewBalancesClient creates an instance of the BalancesClient client. +func NewBalancesClient(subscriptionID string) BalancesClient { + return NewBalancesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewBalancesClientWithBaseURI creates an instance of the BalancesClient client. +func NewBalancesClientWithBaseURI(baseURI string, subscriptionID string) BalancesClient { + return BalancesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// GetByBillingAccount gets the balances for a scope by billingAccountId. Balances are available via this API only for +// May 1, 2014 or later. +// Parameters: +// billingAccountID - billingAccount ID +func (client BalancesClient) GetByBillingAccount(ctx context.Context, billingAccountID string) (result Balance, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BalancesClient.GetByBillingAccount") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetByBillingAccountPreparer(ctx, billingAccountID) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetByBillingAccount", nil, "Failure preparing request") + return + } + + resp, err := client.GetByBillingAccountSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetByBillingAccount", resp, "Failure sending request") + return + } + + result, err = client.GetByBillingAccountResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetByBillingAccount", resp, "Failure responding to request") + } + + return +} + +// GetByBillingAccountPreparer prepares the GetByBillingAccount request. +func (client BalancesClient) GetByBillingAccountPreparer(ctx context.Context, billingAccountID string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "billingAccountId": autorest.Encode("path", billingAccountID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/providers/Microsoft.Consumption/balances", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetByBillingAccountSender sends the GetByBillingAccount request. The method will close the +// http.Response Body if it receives an error. +func (client BalancesClient) GetByBillingAccountSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// GetByBillingAccountResponder handles the response to the GetByBillingAccount request. The method always +// closes the http.Response Body. +func (client BalancesClient) GetByBillingAccountResponder(resp *http.Response) (result Balance, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetForBillingPeriodByBillingAccount gets the balances for a scope by billing period and billingAccountId. Balances +// are available via this API only for May 1, 2014 or later. +// Parameters: +// billingAccountID - billingAccount ID +// billingPeriodName - billing Period Name. +func (client BalancesClient) GetForBillingPeriodByBillingAccount(ctx context.Context, billingAccountID string, billingPeriodName string) (result Balance, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BalancesClient.GetForBillingPeriodByBillingAccount") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetForBillingPeriodByBillingAccountPreparer(ctx, billingAccountID, billingPeriodName) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetForBillingPeriodByBillingAccount", nil, "Failure preparing request") + return + } + + resp, err := client.GetForBillingPeriodByBillingAccountSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetForBillingPeriodByBillingAccount", resp, "Failure sending request") + return + } + + result, err = client.GetForBillingPeriodByBillingAccountResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BalancesClient", "GetForBillingPeriodByBillingAccount", resp, "Failure responding to request") + } + + return +} + +// GetForBillingPeriodByBillingAccountPreparer prepares the GetForBillingPeriodByBillingAccount request. +func (client BalancesClient) GetForBillingPeriodByBillingAccountPreparer(ctx context.Context, billingAccountID string, billingPeriodName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "billingAccountId": autorest.Encode("path", billingAccountID), + "billingPeriodName": autorest.Encode("path", billingPeriodName), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}/providers/Microsoft.Consumption/balances", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetForBillingPeriodByBillingAccountSender sends the GetForBillingPeriodByBillingAccount request. The method will close the +// http.Response Body if it receives an error. +func (client BalancesClient) GetForBillingPeriodByBillingAccountSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// GetForBillingPeriodByBillingAccountResponder handles the response to the GetForBillingPeriodByBillingAccount request. The method always +// closes the http.Response Body. +func (client BalancesClient) GetForBillingPeriodByBillingAccountResponder(resp *http.Response) (result Balance, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/budgets.go b/services/consumption/mgmt/2019-01-01/consumption/budgets.go new file mode 100644 index 000000000000..2efb297a1b24 --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/budgets.go @@ -0,0 +1,439 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// BudgetsClient is the consumption management client provides access to consumption resources for Azure Enterprise +// Subscriptions. +type BudgetsClient struct { + BaseClient +} + +// NewBudgetsClient creates an instance of the BudgetsClient client. +func NewBudgetsClient(subscriptionID string) BudgetsClient { + return NewBudgetsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewBudgetsClientWithBaseURI creates an instance of the BudgetsClient client. +func NewBudgetsClientWithBaseURI(baseURI string, subscriptionID string) BudgetsClient { + return BudgetsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// CreateOrUpdate the operation to create or update a budget. Update operation requires latest eTag to be set in the +// request mandatorily. You may obtain the latest eTag by performing a get operation. Create operation does not require +// eTag. +// Parameters: +// scope - the scope associated with budget operations. This includes '/subscriptions/{subscriptionId}/' for +// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup +// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department +// scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' +// for EnrollmentAccount scope and '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for +// Management Group scope.. +// budgetName - budget Name. +// parameters - parameters supplied to the Create Budget operation. +func (client BudgetsClient) CreateOrUpdate(ctx context.Context, scope string, budgetName string, parameters Budget) (result Budget, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.CreateOrUpdate") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: parameters, + Constraints: []validation.Constraint{{Target: "parameters.BudgetProperties", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Amount", Name: validation.Null, Rule: true, Chain: nil}, + {Target: "parameters.BudgetProperties.TimePeriod", Name: validation.Null, Rule: true, + Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.TimePeriod.StartDate", Name: validation.Null, Rule: true, Chain: nil}}}, + {Target: "parameters.BudgetProperties.Filters", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filters.ResourceGroups", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filters.ResourceGroups", Name: validation.MaxItems, Rule: 10, Chain: nil}, + {Target: "parameters.BudgetProperties.Filters.ResourceGroups", Name: validation.MinItems, Rule: 0, Chain: nil}, + }}, + {Target: "parameters.BudgetProperties.Filters.Resources", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filters.Resources", Name: validation.MaxItems, Rule: 10, Chain: nil}, + {Target: "parameters.BudgetProperties.Filters.Resources", Name: validation.MinItems, Rule: 0, Chain: nil}, + }}, + {Target: "parameters.BudgetProperties.Filters.Meters", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "parameters.BudgetProperties.Filters.Meters", Name: validation.MaxItems, Rule: 10, Chain: nil}, + {Target: "parameters.BudgetProperties.Filters.Meters", Name: validation.MinItems, Rule: 0, Chain: nil}, + }}, + }}, + }}}}}); err != nil { + return result, validation.NewError("consumption.BudgetsClient", "CreateOrUpdate", err.Error()) + } + + req, err := client.CreateOrUpdatePreparer(ctx, scope, budgetName, parameters) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "CreateOrUpdate", nil, "Failure preparing request") + return + } + + resp, err := client.CreateOrUpdateSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "CreateOrUpdate", resp, "Failure sending request") + return + } + + result, err = client.CreateOrUpdateResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "CreateOrUpdate", resp, "Failure responding to request") + } + + return +} + +// CreateOrUpdatePreparer prepares the CreateOrUpdate request. +func (client BudgetsClient) CreateOrUpdatePreparer(ctx context.Context, scope string, budgetName string, parameters Budget) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "budgetName": autorest.Encode("path", budgetName), + "scope": scope, + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsContentType("application/json; charset=utf-8"), + autorest.AsPut(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", pathParameters), + autorest.WithJSON(parameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the +// http.Response Body if it receives an error. +func (client BudgetsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always +// closes the http.Response Body. +func (client BudgetsClient) CreateOrUpdateResponder(resp *http.Response) (result Budget, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// Delete the operation to delete a budget. +// Parameters: +// scope - the scope associated with budget operations. This includes '/subscriptions/{subscriptionId}/' for +// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup +// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department +// scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' +// for EnrollmentAccount scope and '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for +// Management Group scope.. +// budgetName - budget Name. +func (client BudgetsClient) Delete(ctx context.Context, scope string, budgetName string) (result autorest.Response, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.Delete") + defer func() { + sc := -1 + if result.Response != nil { + sc = result.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.DeletePreparer(ctx, scope, budgetName) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Delete", nil, "Failure preparing request") + return + } + + resp, err := client.DeleteSender(req) + if err != nil { + result.Response = resp + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Delete", resp, "Failure sending request") + return + } + + result, err = client.DeleteResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Delete", resp, "Failure responding to request") + } + + return +} + +// DeletePreparer prepares the Delete request. +func (client BudgetsClient) DeletePreparer(ctx context.Context, scope string, budgetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "budgetName": autorest.Encode("path", budgetName), + "scope": scope, + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsDelete(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// DeleteSender sends the Delete request. The method will close the +// http.Response Body if it receives an error. +func (client BudgetsClient) DeleteSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// DeleteResponder handles the response to the Delete request. The method always +// closes the http.Response Body. +func (client BudgetsClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByClosing()) + result.Response = resp + return +} + +// Get gets the budget for the scope by budget name. +// Parameters: +// scope - the scope associated with budget operations. This includes '/subscriptions/{subscriptionId}/' for +// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup +// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department +// scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' +// for EnrollmentAccount scope and '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for +// Management Group scope.. +// budgetName - budget Name. +func (client BudgetsClient) Get(ctx context.Context, scope string, budgetName string) (result Budget, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, scope, budgetName) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "Get", resp, "Failure responding to request") + } + + return +} + +// GetPreparer prepares the Get request. +func (client BudgetsClient) GetPreparer(ctx context.Context, scope string, budgetName string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "budgetName": autorest.Encode("path", budgetName), + "scope": scope, + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client BudgetsClient) GetSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client BudgetsClient) GetResponder(resp *http.Response) (result Budget, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// List lists all budgets for the defined scope. +// Parameters: +// scope - the scope associated with budget operations. This includes '/subscriptions/{subscriptionId}/' for +// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup +// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department +// scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' +// for EnrollmentAccount scope and '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for +// Management Group scope.. +func (client BudgetsClient) List(ctx context.Context, scope string) (result BudgetsListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.List") + defer func() { + sc := -1 + if result.blr.Response.Response != nil { + sc = result.blr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, scope) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.blr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "List", resp, "Failure sending request") + return + } + + result.blr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "List", resp, "Failure responding to request") + } + + return +} + +// ListPreparer prepares the List request. +func (client BudgetsClient) ListPreparer(ctx context.Context, scope string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "scope": scope, + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/budgets", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client BudgetsClient) ListSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client BudgetsClient) ListResponder(resp *http.Response) (result BudgetsListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client BudgetsClient) listNextResults(ctx context.Context, lastResults BudgetsListResult) (result BudgetsListResult, err error) { + req, err := lastResults.budgetsListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "consumption.BudgetsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "consumption.BudgetsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.BudgetsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client BudgetsClient) ListComplete(ctx context.Context, scope string) (result BudgetsListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, scope) + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/charges.go b/services/consumption/mgmt/2019-01-01/consumption/charges.go new file mode 100644 index 000000000000..7eb6717a36ef --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/charges.go @@ -0,0 +1,129 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ChargesClient is the consumption management client provides access to consumption resources for Azure Enterprise +// Subscriptions. +type ChargesClient struct { + BaseClient +} + +// NewChargesClient creates an instance of the ChargesClient client. +func NewChargesClient(subscriptionID string) ChargesClient { + return NewChargesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewChargesClientWithBaseURI creates an instance of the ChargesClient client. +func NewChargesClientWithBaseURI(baseURI string, subscriptionID string) ChargesClient { + return ChargesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// ListByScope lists the charges based for the defined scope. +// Parameters: +// scope - the scope associated with usage details operations. This includes +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department +// scope and +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' +// for EnrollmentAccount scope. For department and enrollment accounts, you can also add billing period to the +// scope using '/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}'. For e.g. to specify billing +// period at department scope use +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}' +// filter - may be used to filter charges by properties/usageEnd (Utc time), properties/usageStart (Utc time). +// The filter supports 'eq', 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support 'ne', 'or', or +// 'not'. Tag filter is a key value pair string where key and value is separated by a colon (:). +func (client ChargesClient) ListByScope(ctx context.Context, scope string, filter string) (result ChargeSummary, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ChargesClient.ListByScope") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListByScopePreparer(ctx, scope, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ChargesClient", "ListByScope", nil, "Failure preparing request") + return + } + + resp, err := client.ListByScopeSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.ChargesClient", "ListByScope", resp, "Failure sending request") + return + } + + result, err = client.ListByScopeResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ChargesClient", "ListByScope", resp, "Failure responding to request") + } + + return +} + +// ListByScopePreparer prepares the ListByScope request. +func (client ChargesClient) ListByScopePreparer(ctx context.Context, scope string, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "scope": scope, + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/charges", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByScopeSender sends the ListByScope request. The method will close the +// http.Response Body if it receives an error. +func (client ChargesClient) ListByScopeSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListByScopeResponder handles the response to the ListByScope request. The method always +// closes the http.Response Body. +func (client ChargesClient) ListByScopeResponder(resp *http.Response) (result ChargeSummary, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/client.go b/services/consumption/mgmt/2019-01-01/consumption/client.go new file mode 100644 index 000000000000..9fc24e1ef08d --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/client.go @@ -0,0 +1,51 @@ +// Package consumption implements the Azure ARM Consumption service API version 2019-01-01. +// +// Consumption management client provides access to consumption resources for Azure Enterprise Subscriptions. +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "github.com/Azure/go-autorest/autorest" +) + +const ( + // DefaultBaseURI is the default URI used for the service Consumption + DefaultBaseURI = "https://management.azure.com" +) + +// BaseClient is the base client for Consumption. +type BaseClient struct { + autorest.Client + BaseURI string + SubscriptionID string +} + +// New creates an instance of the BaseClient client. +func New(subscriptionID string) BaseClient { + return NewWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewWithBaseURI creates an instance of the BaseClient client. +func NewWithBaseURI(baseURI string, subscriptionID string) BaseClient { + return BaseClient{ + Client: autorest.NewClientWithUserAgent(UserAgent()), + BaseURI: baseURI, + SubscriptionID: subscriptionID, + } +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/consumptionapi/interfaces.go b/services/consumption/mgmt/2019-01-01/consumption/consumptionapi/interfaces.go new file mode 100644 index 000000000000..a4d15ecee905 --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/consumptionapi/interfaces.go @@ -0,0 +1,123 @@ +package consumptionapi + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-01-01/consumption" + "github.com/Azure/go-autorest/autorest" +) + +// UsageDetailsClientAPI contains the set of methods on the UsageDetailsClient type. +type UsageDetailsClientAPI interface { + List(ctx context.Context, scope string, expand string, filter string, skiptoken string, top *int32, apply string) (result consumption.UsageDetailsListResultPage, err error) +} + +var _ UsageDetailsClientAPI = (*consumption.UsageDetailsClient)(nil) + +// MarketplacesClientAPI contains the set of methods on the MarketplacesClient type. +type MarketplacesClientAPI interface { + List(ctx context.Context, scope string, filter string, top *int32, skiptoken string) (result consumption.MarketplacesListResultPage, err error) +} + +var _ MarketplacesClientAPI = (*consumption.MarketplacesClient)(nil) + +// BudgetsClientAPI contains the set of methods on the BudgetsClient type. +type BudgetsClientAPI interface { + CreateOrUpdate(ctx context.Context, scope string, budgetName string, parameters consumption.Budget) (result consumption.Budget, err error) + Delete(ctx context.Context, scope string, budgetName string) (result autorest.Response, err error) + Get(ctx context.Context, scope string, budgetName string) (result consumption.Budget, err error) + List(ctx context.Context, scope string) (result consumption.BudgetsListResultPage, err error) +} + +var _ BudgetsClientAPI = (*consumption.BudgetsClient)(nil) + +// TagsClientAPI contains the set of methods on the TagsClient type. +type TagsClientAPI interface { + Get(ctx context.Context, scope string) (result consumption.TagsResult, err error) +} + +var _ TagsClientAPI = (*consumption.TagsClient)(nil) + +// ChargesClientAPI contains the set of methods on the ChargesClient type. +type ChargesClientAPI interface { + ListByScope(ctx context.Context, scope string, filter string) (result consumption.ChargeSummary, err error) +} + +var _ ChargesClientAPI = (*consumption.ChargesClient)(nil) + +// BalancesClientAPI contains the set of methods on the BalancesClient type. +type BalancesClientAPI interface { + GetByBillingAccount(ctx context.Context, billingAccountID string) (result consumption.Balance, err error) + GetForBillingPeriodByBillingAccount(ctx context.Context, billingAccountID string, billingPeriodName string) (result consumption.Balance, err error) +} + +var _ BalancesClientAPI = (*consumption.BalancesClient)(nil) + +// ReservationsSummariesClientAPI contains the set of methods on the ReservationsSummariesClient type. +type ReservationsSummariesClientAPI interface { + ListByReservationOrder(ctx context.Context, reservationOrderID string, grain consumption.Datagrain, filter string) (result consumption.ReservationSummariesListResultPage, err error) + ListByReservationOrderAndReservation(ctx context.Context, reservationOrderID string, reservationID string, grain consumption.Datagrain, filter string) (result consumption.ReservationSummariesListResultPage, err error) +} + +var _ ReservationsSummariesClientAPI = (*consumption.ReservationsSummariesClient)(nil) + +// ReservationsDetailsClientAPI contains the set of methods on the ReservationsDetailsClient type. +type ReservationsDetailsClientAPI interface { + ListByReservationOrder(ctx context.Context, reservationOrderID string, filter string) (result consumption.ReservationDetailsListResultPage, err error) + ListByReservationOrderAndReservation(ctx context.Context, reservationOrderID string, reservationID string, filter string) (result consumption.ReservationDetailsListResultPage, err error) +} + +var _ ReservationsDetailsClientAPI = (*consumption.ReservationsDetailsClient)(nil) + +// ReservationRecommendationsClientAPI contains the set of methods on the ReservationRecommendationsClient type. +type ReservationRecommendationsClientAPI interface { + List(ctx context.Context, filter string) (result consumption.ReservationRecommendationsListResultPage, err error) +} + +var _ ReservationRecommendationsClientAPI = (*consumption.ReservationRecommendationsClient)(nil) + +// PriceSheetClientAPI contains the set of methods on the PriceSheetClient type. +type PriceSheetClientAPI interface { + Get(ctx context.Context, expand string, skiptoken string, top *int32) (result consumption.PriceSheetResult, err error) + GetByBillingPeriod(ctx context.Context, billingPeriodName string, expand string, skiptoken string, top *int32) (result consumption.PriceSheetResult, err error) +} + +var _ PriceSheetClientAPI = (*consumption.PriceSheetClient)(nil) + +// ForecastsClientAPI contains the set of methods on the ForecastsClient type. +type ForecastsClientAPI interface { + List(ctx context.Context, filter string) (result consumption.ForecastsListResult, err error) +} + +var _ ForecastsClientAPI = (*consumption.ForecastsClient)(nil) + +// OperationsClientAPI contains the set of methods on the OperationsClient type. +type OperationsClientAPI interface { + List(ctx context.Context) (result consumption.OperationListResultPage, err error) +} + +var _ OperationsClientAPI = (*consumption.OperationsClient)(nil) + +// AggregatedCostClientAPI contains the set of methods on the AggregatedCostClient type. +type AggregatedCostClientAPI interface { + GetByManagementGroup(ctx context.Context, managementGroupID string, filter string) (result consumption.ManagementGroupAggregatedCostResult, err error) + GetForBillingPeriodByManagementGroup(ctx context.Context, managementGroupID string, billingPeriodName string) (result consumption.ManagementGroupAggregatedCostResult, err error) +} + +var _ AggregatedCostClientAPI = (*consumption.AggregatedCostClient)(nil) diff --git a/services/consumption/mgmt/2019-01-01/consumption/forecasts.go b/services/consumption/mgmt/2019-01-01/consumption/forecasts.go new file mode 100644 index 000000000000..6f691bc2ab97 --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/forecasts.go @@ -0,0 +1,121 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ForecastsClient is the consumption management client provides access to consumption resources for Azure Enterprise +// Subscriptions. +type ForecastsClient struct { + BaseClient +} + +// NewForecastsClient creates an instance of the ForecastsClient client. +func NewForecastsClient(subscriptionID string) ForecastsClient { + return NewForecastsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewForecastsClientWithBaseURI creates an instance of the ForecastsClient client. +func NewForecastsClientWithBaseURI(baseURI string, subscriptionID string) ForecastsClient { + return ForecastsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List lists the forecast charges by subscriptionId. +// Parameters: +// filter - may be used to filter forecasts by properties/usageDate (Utc time), properties/chargeType or +// properties/grain. The filter supports 'eq', 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support +// 'ne', 'or', or 'not'. +func (client ForecastsClient) List(ctx context.Context, filter string) (result ForecastsListResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ForecastsClient.List") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.ListPreparer(ctx, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ForecastsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.ForecastsClient", "List", resp, "Failure sending request") + return + } + + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ForecastsClient", "List", resp, "Failure responding to request") + } + + return +} + +// ListPreparer prepares the List request. +func (client ForecastsClient) ListPreparer(ctx context.Context, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/forecasts", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ForecastsClient) ListSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ForecastsClient) ListResponder(resp *http.Response) (result ForecastsListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/marketplaces.go b/services/consumption/mgmt/2019-01-01/consumption/marketplaces.go new file mode 100644 index 000000000000..dbf7aa86f96f --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/marketplaces.go @@ -0,0 +1,190 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// MarketplacesClient is the consumption management client provides access to consumption resources for Azure +// Enterprise Subscriptions. +type MarketplacesClient struct { + BaseClient +} + +// NewMarketplacesClient creates an instance of the MarketplacesClient client. +func NewMarketplacesClient(subscriptionID string) MarketplacesClient { + return NewMarketplacesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewMarketplacesClientWithBaseURI creates an instance of the MarketplacesClient client. +func NewMarketplacesClientWithBaseURI(baseURI string, subscriptionID string) MarketplacesClient { + return MarketplacesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List lists the marketplaces for a scope at the defined scope. Marketplaces are available via this API only for May +// 1, 2014 or later. +// Parameters: +// scope - the scope associated with marketplace operations. This includes '/subscriptions/{subscriptionId}/' +// for subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for +// resourceGroup scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account +// scope, '/providers/Microsoft.Billing/departments/{departmentId}' for Department scope, +// '/providers/Microsoft.Billing/enrollmentAccounts/{enrollmentAccountId}' for EnrollmentAccount scope and +// '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for Management Group scope. For +// subscription, billing account, department, enrollment account and ManagementGroup, you can also add billing +// period to the scope using '/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}'. For e.g. to +// specify billing period at department scope use +// '/providers/Microsoft.Billing/departments/{departmentId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}' +// filter - may be used to filter marketplaces by properties/usageEnd (Utc time), properties/usageStart (Utc +// time), properties/resourceGroup, properties/instanceName or properties/instanceId. The filter supports 'eq', +// 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support 'ne', 'or', or 'not'. +// top - may be used to limit the number of results to the most recent N marketplaces. +// skiptoken - skiptoken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that +// specifies a starting point to use for subsequent calls. +func (client MarketplacesClient) List(ctx context.Context, scope string, filter string, top *int32, skiptoken string) (result MarketplacesListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/MarketplacesClient.List") + defer func() { + sc := -1 + if result.mlr.Response.Response != nil { + sc = result.mlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: 1, Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("consumption.MarketplacesClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, scope, filter, top, skiptoken) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.mlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "List", resp, "Failure sending request") + return + } + + result.mlr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "List", resp, "Failure responding to request") + } + + return +} + +// ListPreparer prepares the List request. +func (client MarketplacesClient) ListPreparer(ctx context.Context, scope string, filter string, top *int32, skiptoken string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "scope": scope, + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(skiptoken) > 0 { + queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/marketplaces", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client MarketplacesClient) ListSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client MarketplacesClient) ListResponder(resp *http.Response) (result MarketplacesListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client MarketplacesClient) listNextResults(ctx context.Context, lastResults MarketplacesListResult) (result MarketplacesListResult, err error) { + req, err := lastResults.marketplacesListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.MarketplacesClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client MarketplacesClient) ListComplete(ctx context.Context, scope string, filter string, top *int32, skiptoken string) (result MarketplacesListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/MarketplacesClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, scope, filter, top, skiptoken) + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/models.go b/services/consumption/mgmt/2019-01-01/consumption/models.go new file mode 100644 index 000000000000..7130bfce1001 --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/models.go @@ -0,0 +1,2912 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "encoding/json" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/date" + "github.com/Azure/go-autorest/autorest/to" + "github.com/Azure/go-autorest/tracing" + "github.com/satori/go.uuid" + "github.com/shopspring/decimal" + "net/http" +) + +// The package's fully qualified name. +const fqdn = "github.com/Azure/azure-sdk-for-go/services/consumption/mgmt/2019-01-01/consumption" + +// BillingFrequency enumerates the values for billing frequency. +type BillingFrequency string + +const ( + // Month ... + Month BillingFrequency = "Month" + // Quarter ... + Quarter BillingFrequency = "Quarter" + // Year ... + Year BillingFrequency = "Year" +) + +// PossibleBillingFrequencyValues returns an array of possible values for the BillingFrequency const type. +func PossibleBillingFrequencyValues() []BillingFrequency { + return []BillingFrequency{Month, Quarter, Year} +} + +// Bound enumerates the values for bound. +type Bound string + +const ( + // Lower ... + Lower Bound = "Lower" + // Upper ... + Upper Bound = "Upper" +) + +// PossibleBoundValues returns an array of possible values for the Bound const type. +func PossibleBoundValues() []Bound { + return []Bound{Lower, Upper} +} + +// CategoryType enumerates the values for category type. +type CategoryType string + +const ( + // Cost ... + Cost CategoryType = "Cost" + // Usage ... + Usage CategoryType = "Usage" +) + +// PossibleCategoryTypeValues returns an array of possible values for the CategoryType const type. +func PossibleCategoryTypeValues() []CategoryType { + return []CategoryType{Cost, Usage} +} + +// ChargeType enumerates the values for charge type. +type ChargeType string + +const ( + // ChargeTypeActual ... + ChargeTypeActual ChargeType = "Actual" + // ChargeTypeForecast ... + ChargeTypeForecast ChargeType = "Forecast" +) + +// PossibleChargeTypeValues returns an array of possible values for the ChargeType const type. +func PossibleChargeTypeValues() []ChargeType { + return []ChargeType{ChargeTypeActual, ChargeTypeForecast} +} + +// Datagrain enumerates the values for datagrain. +type Datagrain string + +const ( + // DailyGrain Daily grain of data + DailyGrain Datagrain = "daily" + // MonthlyGrain Monthly grain of data + MonthlyGrain Datagrain = "monthly" +) + +// PossibleDatagrainValues returns an array of possible values for the Datagrain const type. +func PossibleDatagrainValues() []Datagrain { + return []Datagrain{DailyGrain, MonthlyGrain} +} + +// Grain enumerates the values for grain. +type Grain string + +const ( + // Daily ... + Daily Grain = "Daily" + // Monthly ... + Monthly Grain = "Monthly" + // Yearly ... + Yearly Grain = "Yearly" +) + +// PossibleGrainValues returns an array of possible values for the Grain const type. +func PossibleGrainValues() []Grain { + return []Grain{Daily, Monthly, Yearly} +} + +// OperatorType enumerates the values for operator type. +type OperatorType string + +const ( + // EqualTo ... + EqualTo OperatorType = "EqualTo" + // GreaterThan ... + GreaterThan OperatorType = "GreaterThan" + // GreaterThanOrEqualTo ... + GreaterThanOrEqualTo OperatorType = "GreaterThanOrEqualTo" +) + +// PossibleOperatorTypeValues returns an array of possible values for the OperatorType const type. +func PossibleOperatorTypeValues() []OperatorType { + return []OperatorType{EqualTo, GreaterThan, GreaterThanOrEqualTo} +} + +// TimeGrainType enumerates the values for time grain type. +type TimeGrainType string + +const ( + // TimeGrainTypeAnnually ... + TimeGrainTypeAnnually TimeGrainType = "Annually" + // TimeGrainTypeMonthly ... + TimeGrainTypeMonthly TimeGrainType = "Monthly" + // TimeGrainTypeQuarterly ... + TimeGrainTypeQuarterly TimeGrainType = "Quarterly" +) + +// PossibleTimeGrainTypeValues returns an array of possible values for the TimeGrainType const type. +func PossibleTimeGrainTypeValues() []TimeGrainType { + return []TimeGrainType{TimeGrainTypeAnnually, TimeGrainTypeMonthly, TimeGrainTypeQuarterly} +} + +// Balance a balance resource. +type Balance struct { + autorest.Response `json:"-"` + *BalanceProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Balance. +func (b Balance) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if b.BalanceProperties != nil { + objectMap["properties"] = b.BalanceProperties + } + if b.ID != nil { + objectMap["id"] = b.ID + } + if b.Name != nil { + objectMap["name"] = b.Name + } + if b.Type != nil { + objectMap["type"] = b.Type + } + if b.Tags != nil { + objectMap["tags"] = b.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for Balance struct. +func (b *Balance) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var balanceProperties BalanceProperties + err = json.Unmarshal(*v, &balanceProperties) + if err != nil { + return err + } + b.BalanceProperties = &balanceProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + b.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + b.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + b.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + b.Tags = tags + } + } + } + + return nil +} + +// BalanceProperties the properties of the balance. +type BalanceProperties struct { + // Currency - The ISO currency in which the meter is charged, for example, USD. + Currency *string `json:"currency,omitempty"` + // BeginningBalance - The beginning balance for the billing period. + BeginningBalance *decimal.Decimal `json:"beginningBalance,omitempty"` + // EndingBalance - The ending balance for the billing period (for open periods this will be updated daily). + EndingBalance *decimal.Decimal `json:"endingBalance,omitempty"` + // NewPurchases - Total new purchase amount. + NewPurchases *decimal.Decimal `json:"newPurchases,omitempty"` + // Adjustments - Total adjustment amount. + Adjustments *decimal.Decimal `json:"adjustments,omitempty"` + // Utilized - Total Commitment usage. + Utilized *decimal.Decimal `json:"utilized,omitempty"` + // ServiceOverage - Overage for Azure services. + ServiceOverage *decimal.Decimal `json:"serviceOverage,omitempty"` + // ChargesBilledSeparately - Charges Billed separately. + ChargesBilledSeparately *decimal.Decimal `json:"chargesBilledSeparately,omitempty"` + // TotalOverage - serviceOverage + chargesBilledSeparately. + TotalOverage *decimal.Decimal `json:"totalOverage,omitempty"` + // TotalUsage - Azure service commitment + total Overage. + TotalUsage *decimal.Decimal `json:"totalUsage,omitempty"` + // AzureMarketplaceServiceCharges - Total charges for Azure Marketplace. + AzureMarketplaceServiceCharges *decimal.Decimal `json:"azureMarketplaceServiceCharges,omitempty"` + // BillingFrequency - The billing frequency. Possible values include: 'Month', 'Quarter', 'Year' + BillingFrequency BillingFrequency `json:"billingFrequency,omitempty"` + // PriceHidden - Price is hidden or not. + PriceHidden *bool `json:"priceHidden,omitempty"` + // NewPurchasesDetails - List of new purchases. + NewPurchasesDetails *[]BalancePropertiesNewPurchasesDetailsItem `json:"newPurchasesDetails,omitempty"` + // AdjustmentDetails - List of Adjustments (Promo credit, SIE credit etc.). + AdjustmentDetails *[]BalancePropertiesAdjustmentDetailsItem `json:"adjustmentDetails,omitempty"` +} + +// BalancePropertiesAdjustmentDetailsItem ... +type BalancePropertiesAdjustmentDetailsItem struct { + // Name - the name of new adjustment. + Name *string `json:"name,omitempty"` + // Value - the value of new adjustment. + Value *decimal.Decimal `json:"value,omitempty"` +} + +// BalancePropertiesNewPurchasesDetailsItem ... +type BalancePropertiesNewPurchasesDetailsItem struct { + // Name - the name of new purchase. + Name *string `json:"name,omitempty"` + // Value - the value of new purchase. + Value *decimal.Decimal `json:"value,omitempty"` +} + +// Budget a budget resource. +type Budget struct { + autorest.Response `json:"-"` + *BudgetProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // ETag - eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not. + ETag *string `json:"eTag,omitempty"` +} + +// MarshalJSON is the custom marshaler for Budget. +func (b Budget) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if b.BudgetProperties != nil { + objectMap["properties"] = b.BudgetProperties + } + if b.ID != nil { + objectMap["id"] = b.ID + } + if b.Name != nil { + objectMap["name"] = b.Name + } + if b.Type != nil { + objectMap["type"] = b.Type + } + if b.ETag != nil { + objectMap["eTag"] = b.ETag + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for Budget struct. +func (b *Budget) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var budgetProperties BudgetProperties + err = json.Unmarshal(*v, &budgetProperties) + if err != nil { + return err + } + b.BudgetProperties = &budgetProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + b.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + b.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + b.Type = &typeVar + } + case "eTag": + if v != nil { + var eTag string + err = json.Unmarshal(*v, &eTag) + if err != nil { + return err + } + b.ETag = &eTag + } + } + } + + return nil +} + +// BudgetProperties the properties of the budget. +type BudgetProperties struct { + // Category - The category of the budget, whether the budget tracks cost or usage. Possible values include: 'Cost', 'Usage' + Category CategoryType `json:"category,omitempty"` + // Amount - The total amount of cost to track with the budget + Amount *decimal.Decimal `json:"amount,omitempty"` + // TimeGrain - The time covered by a budget. Tracking of the amount will be reset based on the time grain. Possible values include: 'TimeGrainTypeMonthly', 'TimeGrainTypeQuarterly', 'TimeGrainTypeAnnually' + TimeGrain TimeGrainType `json:"timeGrain,omitempty"` + // TimePeriod - Has start and end date of the budget. The start date must be first of the month and should be less than the end date. Budget start date must be on or after June 1, 2017. Future start date should not be more than three months. Past start date should be selected within the timegrain period. There are no restrictions on the end date. + TimePeriod *BudgetTimePeriod `json:"timePeriod,omitempty"` + // Filters - May be used to filter budgets by resource group, resource, or meter. + Filters *Filters `json:"filters,omitempty"` + // CurrentSpend - The current amount of cost which is being tracked for a budget. + CurrentSpend *CurrentSpend `json:"currentSpend,omitempty"` + // Notifications - Dictionary of notifications associated with the budget. Budget can have up to five notifications. + Notifications map[string]*Notification `json:"notifications"` +} + +// MarshalJSON is the custom marshaler for BudgetProperties. +func (bp BudgetProperties) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if bp.Category != "" { + objectMap["category"] = bp.Category + } + if bp.Amount != nil { + objectMap["amount"] = bp.Amount + } + if bp.TimeGrain != "" { + objectMap["timeGrain"] = bp.TimeGrain + } + if bp.TimePeriod != nil { + objectMap["timePeriod"] = bp.TimePeriod + } + if bp.Filters != nil { + objectMap["filters"] = bp.Filters + } + if bp.CurrentSpend != nil { + objectMap["currentSpend"] = bp.CurrentSpend + } + if bp.Notifications != nil { + objectMap["notifications"] = bp.Notifications + } + return json.Marshal(objectMap) +} + +// BudgetsListResult result of listing budgets. It contains a list of available budgets in the scope +// provided. +type BudgetsListResult struct { + autorest.Response `json:"-"` + // Value - The list of budgets. + Value *[]Budget `json:"value,omitempty"` + // NextLink - The link (url) to the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// BudgetsListResultIterator provides access to a complete listing of Budget values. +type BudgetsListResultIterator struct { + i int + page BudgetsListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *BudgetsListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *BudgetsListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter BudgetsListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter BudgetsListResultIterator) Response() BudgetsListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter BudgetsListResultIterator) Value() Budget { + if !iter.page.NotDone() { + return Budget{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the BudgetsListResultIterator type. +func NewBudgetsListResultIterator(page BudgetsListResultPage) BudgetsListResultIterator { + return BudgetsListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (blr BudgetsListResult) IsEmpty() bool { + return blr.Value == nil || len(*blr.Value) == 0 +} + +// budgetsListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (blr BudgetsListResult) budgetsListResultPreparer(ctx context.Context) (*http.Request, error) { + if blr.NextLink == nil || len(to.String(blr.NextLink)) < 1 { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(blr.NextLink))) +} + +// BudgetsListResultPage contains a page of Budget values. +type BudgetsListResultPage struct { + fn func(context.Context, BudgetsListResult) (BudgetsListResult, error) + blr BudgetsListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *BudgetsListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/BudgetsListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.blr) + if err != nil { + return err + } + page.blr = next + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *BudgetsListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page BudgetsListResultPage) NotDone() bool { + return !page.blr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page BudgetsListResultPage) Response() BudgetsListResult { + return page.blr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page BudgetsListResultPage) Values() []Budget { + if page.blr.IsEmpty() { + return nil + } + return *page.blr.Value +} + +// Creates a new instance of the BudgetsListResultPage type. +func NewBudgetsListResultPage(getNextPage func(context.Context, BudgetsListResult) (BudgetsListResult, error)) BudgetsListResultPage { + return BudgetsListResultPage{fn: getNextPage} +} + +// BudgetTimePeriod the start and end date for a budget. +type BudgetTimePeriod struct { + // StartDate - The start date for the budget. + StartDate *date.Time `json:"startDate,omitempty"` + // EndDate - The end date for the budget. If not provided, we default this to 10 years from the start date. + EndDate *date.Time `json:"endDate,omitempty"` +} + +// ChargesListResult result of listing charge summary. +type ChargesListResult struct { + // Value - The list of charge summary + Value *[]ChargeSummary `json:"value,omitempty"` +} + +// ChargeSummary a charge summary resource. +type ChargeSummary struct { + autorest.Response `json:"-"` + *ChargeSummaryProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for ChargeSummary. +func (cs ChargeSummary) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if cs.ChargeSummaryProperties != nil { + objectMap["properties"] = cs.ChargeSummaryProperties + } + if cs.ID != nil { + objectMap["id"] = cs.ID + } + if cs.Name != nil { + objectMap["name"] = cs.Name + } + if cs.Type != nil { + objectMap["type"] = cs.Type + } + if cs.Tags != nil { + objectMap["tags"] = cs.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ChargeSummary struct. +func (cs *ChargeSummary) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var chargeSummaryProperties ChargeSummaryProperties + err = json.Unmarshal(*v, &chargeSummaryProperties) + if err != nil { + return err + } + cs.ChargeSummaryProperties = &chargeSummaryProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + cs.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + cs.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + cs.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + cs.Tags = tags + } + } + } + + return nil +} + +// ChargeSummaryProperties the properties of the charge summary. +type ChargeSummaryProperties struct { + // BillingPeriodID - The id of the billing period resource that the charge belongs to. + BillingPeriodID *string `json:"billingPeriodId,omitempty"` + // UsageStart - Usage start date. + UsageStart *string `json:"usageStart,omitempty"` + // UsageEnd - Usage end date. + UsageEnd *string `json:"usageEnd,omitempty"` + // AzureCharges - Azure Charges. + AzureCharges *decimal.Decimal `json:"azureCharges,omitempty"` + // ChargesBilledSeparately - Charges Billed separately. + ChargesBilledSeparately *decimal.Decimal `json:"chargesBilledSeparately,omitempty"` + // MarketplaceCharges - Marketplace Charges. + MarketplaceCharges *decimal.Decimal `json:"marketplaceCharges,omitempty"` + // Currency - Currency Code + Currency *string `json:"currency,omitempty"` +} + +// CurrentSpend the current amount of cost which is being tracked for a budget. +type CurrentSpend struct { + // Amount - The total amount of cost which is being tracked by the budget. + Amount *decimal.Decimal `json:"amount,omitempty"` + // Unit - The unit of measure for the budget amount. + Unit *string `json:"unit,omitempty"` +} + +// ErrorDetails the details of the error. +type ErrorDetails struct { + // Code - Error code. + Code *string `json:"code,omitempty"` + // Message - Error message indicating why the operation failed. + Message *string `json:"message,omitempty"` +} + +// ErrorResponse error response indicates that the service is not able to process the incoming request. The +// reason is provided in the error message. +type ErrorResponse struct { + // Error - The details of the error. + Error *ErrorDetails `json:"error,omitempty"` +} + +// Filters may be used to filter budgets by resource group, resource, or meter. +type Filters struct { + // ResourceGroups - The list of filters on resource groups, allowed at subscription level only. + ResourceGroups *[]string `json:"resourceGroups,omitempty"` + // Resources - The list of filters on resources. + Resources *[]string `json:"resources,omitempty"` + // Meters - The list of filters on meters (GUID), mandatory for budgets of usage category. + Meters *[]uuid.UUID `json:"meters,omitempty"` + // Tags - The dictionary of filters on tags. + Tags map[string][]string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Filters. +func (f Filters) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if f.ResourceGroups != nil { + objectMap["resourceGroups"] = f.ResourceGroups + } + if f.Resources != nil { + objectMap["resources"] = f.Resources + } + if f.Meters != nil { + objectMap["meters"] = f.Meters + } + if f.Tags != nil { + objectMap["tags"] = f.Tags + } + return json.Marshal(objectMap) +} + +// Forecast a forecast resource. +type Forecast struct { + *ForecastProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Forecast. +func (f Forecast) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if f.ForecastProperties != nil { + objectMap["properties"] = f.ForecastProperties + } + if f.ID != nil { + objectMap["id"] = f.ID + } + if f.Name != nil { + objectMap["name"] = f.Name + } + if f.Type != nil { + objectMap["type"] = f.Type + } + if f.Tags != nil { + objectMap["tags"] = f.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for Forecast struct. +func (f *Forecast) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var forecastProperties ForecastProperties + err = json.Unmarshal(*v, &forecastProperties) + if err != nil { + return err + } + f.ForecastProperties = &forecastProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + f.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + f.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + f.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + f.Tags = tags + } + } + } + + return nil +} + +// ForecastProperties the properties of the forecast charge. +type ForecastProperties struct { + // UsageDate - The usage date of the forecast. + UsageDate *string `json:"usageDate,omitempty"` + // Grain - The granularity of forecast. Possible values include: 'Daily', 'Monthly', 'Yearly' + Grain Grain `json:"grain,omitempty"` + // Charge - The amount of charge + Charge *decimal.Decimal `json:"charge,omitempty"` + // Currency - The ISO currency in which the meter is charged, for example, USD. + Currency *string `json:"currency,omitempty"` + // ChargeType - The type of the charge. Could be actual or forecast. Possible values include: 'ChargeTypeActual', 'ChargeTypeForecast' + ChargeType ChargeType `json:"chargeType,omitempty"` + // ConfidenceLevels - The details about the forecast confidence levels. This is populated only when chargeType is Forecast. + ConfidenceLevels *[]ForecastPropertiesConfidenceLevelsItem `json:"confidenceLevels,omitempty"` +} + +// ForecastPropertiesConfidenceLevelsItem ... +type ForecastPropertiesConfidenceLevelsItem struct { + // Percentage - The percentage level of the confidence + Percentage *decimal.Decimal `json:"percentage,omitempty"` + // Bound - The boundary of the percentage, values could be 'Upper' or 'Lower'. Possible values include: 'Upper', 'Lower' + Bound Bound `json:"bound,omitempty"` + // Value - The amount of forecast within the percentage level + Value *decimal.Decimal `json:"value,omitempty"` +} + +// ForecastsListResult result of listing forecasts. It contains a list of available forecasts. +type ForecastsListResult struct { + autorest.Response `json:"-"` + // Value - The list of forecasts. + Value *[]Forecast `json:"value,omitempty"` +} + +// ManagementGroupAggregatedCostProperties the properties of the Management Group Aggregated Cost. +type ManagementGroupAggregatedCostProperties struct { + // BillingPeriodID - The id of the billing period resource that the aggregated cost belongs to. + BillingPeriodID *string `json:"billingPeriodId,omitempty"` + // UsageStart - The start of the date time range covered by aggregated cost. + UsageStart *date.Time `json:"usageStart,omitempty"` + // UsageEnd - The end of the date time range covered by the aggregated cost. + UsageEnd *date.Time `json:"usageEnd,omitempty"` + // AzureCharges - Azure Charges. + AzureCharges *decimal.Decimal `json:"azureCharges,omitempty"` + // MarketplaceCharges - Marketplace Charges. + MarketplaceCharges *decimal.Decimal `json:"marketplaceCharges,omitempty"` + // ChargesBilledSeparately - Charges Billed Separately. + ChargesBilledSeparately *decimal.Decimal `json:"chargesBilledSeparately,omitempty"` + // Currency - The ISO currency in which the meter is charged, for example, USD. + Currency *string `json:"currency,omitempty"` + // Children - Children of a management group + Children *[]ManagementGroupAggregatedCostResult `json:"children,omitempty"` + // IncludedSubscriptions - List of subscription Guids included in the calculation of aggregated cost + IncludedSubscriptions *[]string `json:"includedSubscriptions,omitempty"` + // ExcludedSubscriptions - List of subscription Guids excluded from the calculation of aggregated cost + ExcludedSubscriptions *[]string `json:"excludedSubscriptions,omitempty"` +} + +// ManagementGroupAggregatedCostResult a management group aggregated cost resource. +type ManagementGroupAggregatedCostResult struct { + autorest.Response `json:"-"` + *ManagementGroupAggregatedCostProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for ManagementGroupAggregatedCostResult. +func (mgacr ManagementGroupAggregatedCostResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if mgacr.ManagementGroupAggregatedCostProperties != nil { + objectMap["properties"] = mgacr.ManagementGroupAggregatedCostProperties + } + if mgacr.ID != nil { + objectMap["id"] = mgacr.ID + } + if mgacr.Name != nil { + objectMap["name"] = mgacr.Name + } + if mgacr.Type != nil { + objectMap["type"] = mgacr.Type + } + if mgacr.Tags != nil { + objectMap["tags"] = mgacr.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ManagementGroupAggregatedCostResult struct. +func (mgacr *ManagementGroupAggregatedCostResult) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var managementGroupAggregatedCostProperties ManagementGroupAggregatedCostProperties + err = json.Unmarshal(*v, &managementGroupAggregatedCostProperties) + if err != nil { + return err + } + mgacr.ManagementGroupAggregatedCostProperties = &managementGroupAggregatedCostProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + mgacr.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + mgacr.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + mgacr.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + mgacr.Tags = tags + } + } + } + + return nil +} + +// Marketplace an marketplace resource. +type Marketplace struct { + *MarketplaceProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Marketplace. +func (mVar Marketplace) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if mVar.MarketplaceProperties != nil { + objectMap["properties"] = mVar.MarketplaceProperties + } + if mVar.ID != nil { + objectMap["id"] = mVar.ID + } + if mVar.Name != nil { + objectMap["name"] = mVar.Name + } + if mVar.Type != nil { + objectMap["type"] = mVar.Type + } + if mVar.Tags != nil { + objectMap["tags"] = mVar.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for Marketplace struct. +func (mVar *Marketplace) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var marketplaceProperties MarketplaceProperties + err = json.Unmarshal(*v, &marketplaceProperties) + if err != nil { + return err + } + mVar.MarketplaceProperties = &marketplaceProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + mVar.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + mVar.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + mVar.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + mVar.Tags = tags + } + } + } + + return nil +} + +// MarketplaceProperties the properties of the marketplace usage detail. +type MarketplaceProperties struct { + // BillingPeriodID - The id of the billing period resource that the usage belongs to. + BillingPeriodID *string `json:"billingPeriodId,omitempty"` + // UsageStart - The start of the date time range covered by the usage detail. + UsageStart *date.Time `json:"usageStart,omitempty"` + // UsageEnd - The end of the date time range covered by the usage detail. + UsageEnd *date.Time `json:"usageEnd,omitempty"` + // ResourceRate - The marketplace resource rate. + ResourceRate *decimal.Decimal `json:"resourceRate,omitempty"` + // OfferName - The type of offer. + OfferName *string `json:"offerName,omitempty"` + // ResourceGroup - The name of resource group. + ResourceGroup *string `json:"resourceGroup,omitempty"` + // OrderNumber - The order number. + OrderNumber *string `json:"orderNumber,omitempty"` + // InstanceName - The name of the resource instance that the usage is about. + InstanceName *string `json:"instanceName,omitempty"` + // InstanceID - The uri of the resource instance that the usage is about. + InstanceID *string `json:"instanceId,omitempty"` + // Currency - The ISO currency in which the meter is charged, for example, USD. + Currency *string `json:"currency,omitempty"` + // ConsumedQuantity - The quantity of usage. + ConsumedQuantity *decimal.Decimal `json:"consumedQuantity,omitempty"` + // UnitOfMeasure - The unit of measure. + UnitOfMeasure *string `json:"unitOfMeasure,omitempty"` + // PretaxCost - The amount of cost before tax. + PretaxCost *decimal.Decimal `json:"pretaxCost,omitempty"` + // IsEstimated - The estimated usage is subject to change. + IsEstimated *bool `json:"isEstimated,omitempty"` + // MeterID - The meter id (GUID). + MeterID *uuid.UUID `json:"meterId,omitempty"` + // SubscriptionGUID - Subscription guid. + SubscriptionGUID *uuid.UUID `json:"subscriptionGuid,omitempty"` + // SubscriptionName - Subscription name. + SubscriptionName *string `json:"subscriptionName,omitempty"` + // AccountName - Account name. + AccountName *string `json:"accountName,omitempty"` + // DepartmentName - Department name. + DepartmentName *string `json:"departmentName,omitempty"` + // ConsumedService - Consumed service name. + ConsumedService *string `json:"consumedService,omitempty"` + // CostCenter - The cost center of this department if it is a department and a costcenter exists + CostCenter *string `json:"costCenter,omitempty"` + // AdditionalProperties - Additional details of this usage item. By default this is not populated, unless it's specified in $expand. + AdditionalProperties *string `json:"additionalProperties,omitempty"` + // PublisherName - The name of publisher. + PublisherName *string `json:"publisherName,omitempty"` + // PlanName - The name of plan. + PlanName *string `json:"planName,omitempty"` + // IsRecurringCharge - Flag indicating whether this is a recurring charge or not. + IsRecurringCharge *bool `json:"isRecurringCharge,omitempty"` +} + +// MarketplacesListResult result of listing marketplaces. It contains a list of available marketplaces in +// reverse chronological order by billing period. +type MarketplacesListResult struct { + autorest.Response `json:"-"` + // Value - The list of marketplaces. + Value *[]Marketplace `json:"value,omitempty"` + // NextLink - The link (url) to the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// MarketplacesListResultIterator provides access to a complete listing of Marketplace values. +type MarketplacesListResultIterator struct { + i int + page MarketplacesListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *MarketplacesListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/MarketplacesListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *MarketplacesListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter MarketplacesListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter MarketplacesListResultIterator) Response() MarketplacesListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter MarketplacesListResultIterator) Value() Marketplace { + if !iter.page.NotDone() { + return Marketplace{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the MarketplacesListResultIterator type. +func NewMarketplacesListResultIterator(page MarketplacesListResultPage) MarketplacesListResultIterator { + return MarketplacesListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (mlr MarketplacesListResult) IsEmpty() bool { + return mlr.Value == nil || len(*mlr.Value) == 0 +} + +// marketplacesListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (mlr MarketplacesListResult) marketplacesListResultPreparer(ctx context.Context) (*http.Request, error) { + if mlr.NextLink == nil || len(to.String(mlr.NextLink)) < 1 { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(mlr.NextLink))) +} + +// MarketplacesListResultPage contains a page of Marketplace values. +type MarketplacesListResultPage struct { + fn func(context.Context, MarketplacesListResult) (MarketplacesListResult, error) + mlr MarketplacesListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *MarketplacesListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/MarketplacesListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.mlr) + if err != nil { + return err + } + page.mlr = next + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *MarketplacesListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page MarketplacesListResultPage) NotDone() bool { + return !page.mlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page MarketplacesListResultPage) Response() MarketplacesListResult { + return page.mlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page MarketplacesListResultPage) Values() []Marketplace { + if page.mlr.IsEmpty() { + return nil + } + return *page.mlr.Value +} + +// Creates a new instance of the MarketplacesListResultPage type. +func NewMarketplacesListResultPage(getNextPage func(context.Context, MarketplacesListResult) (MarketplacesListResult, error)) MarketplacesListResultPage { + return MarketplacesListResultPage{fn: getNextPage} +} + +// MeterDetails the properties of the meter detail. +type MeterDetails struct { + // MeterName - The name of the meter, within the given meter category + MeterName *string `json:"meterName,omitempty"` + // MeterCategory - The category of the meter, for example, 'Cloud services', 'Networking', etc.. + MeterCategory *string `json:"meterCategory,omitempty"` + // MeterSubCategory - The subcategory of the meter, for example, 'A6 Cloud services', 'ExpressRoute (IXP)', etc.. + MeterSubCategory *string `json:"meterSubCategory,omitempty"` + // Unit - The unit in which the meter consumption is charged, for example, 'Hours', 'GB', etc. + Unit *string `json:"unit,omitempty"` + // MeterLocation - The location in which the Azure service is available. + MeterLocation *string `json:"meterLocation,omitempty"` + // TotalIncludedQuantity - The total included quantity associated with the offer. + TotalIncludedQuantity *decimal.Decimal `json:"totalIncludedQuantity,omitempty"` + // PretaxStandardRate - The pretax listing price. + PretaxStandardRate *decimal.Decimal `json:"pretaxStandardRate,omitempty"` + // ServiceName - The name of the service. + ServiceName *string `json:"serviceName,omitempty"` + // ServiceTier - The service tier. + ServiceTier *string `json:"serviceTier,omitempty"` +} + +// Notification the notification associated with a budget. +type Notification struct { + // Enabled - The notification is enabled or not. + Enabled *bool `json:"enabled,omitempty"` + // Operator - The comparison operator. Possible values include: 'EqualTo', 'GreaterThan', 'GreaterThanOrEqualTo' + Operator OperatorType `json:"operator,omitempty"` + // Threshold - Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0 and 1000. + Threshold *decimal.Decimal `json:"threshold,omitempty"` + // ContactEmails - Email addresses to send the budget notification to when the threshold is exceeded. + ContactEmails *[]string `json:"contactEmails,omitempty"` + // ContactRoles - Contact roles to send the budget notification to when the threshold is exceeded. + ContactRoles *[]string `json:"contactRoles,omitempty"` + // ContactGroups - Action groups to send the budget notification to when the threshold is exceeded. + ContactGroups *[]string `json:"contactGroups,omitempty"` +} + +// Operation a Consumption REST API operation. +type Operation struct { + // Name - Operation name: {provider}/{resource}/{operation}. + Name *string `json:"name,omitempty"` + // Display - The object that represents the operation. + Display *OperationDisplay `json:"display,omitempty"` +} + +// OperationDisplay the object that represents the operation. +type OperationDisplay struct { + // Provider - Service provider: Microsoft.Consumption. + Provider *string `json:"provider,omitempty"` + // Resource - Resource on which the operation is performed: UsageDetail, etc. + Resource *string `json:"resource,omitempty"` + // Operation - Operation type: Read, write, delete, etc. + Operation *string `json:"operation,omitempty"` +} + +// OperationListResult result of listing consumption operations. It contains a list of operations and a URL +// link to get the next set of results. +type OperationListResult struct { + autorest.Response `json:"-"` + // Value - List of consumption operations supported by the Microsoft.Consumption resource provider. + Value *[]Operation `json:"value,omitempty"` + // NextLink - URL to get the next set of operation list results if there are any. + NextLink *string `json:"nextLink,omitempty"` +} + +// OperationListResultIterator provides access to a complete listing of Operation values. +type OperationListResultIterator struct { + i int + page OperationListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *OperationListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter OperationListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter OperationListResultIterator) Response() OperationListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter OperationListResultIterator) Value() Operation { + if !iter.page.NotDone() { + return Operation{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the OperationListResultIterator type. +func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator { + return OperationListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (olr OperationListResult) IsEmpty() bool { + return olr.Value == nil || len(*olr.Value) == 0 +} + +// operationListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) { + if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(olr.NextLink))) +} + +// OperationListResultPage contains a page of Operation values. +type OperationListResultPage struct { + fn func(context.Context, OperationListResult) (OperationListResult, error) + olr OperationListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.olr) + if err != nil { + return err + } + page.olr = next + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *OperationListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page OperationListResultPage) NotDone() bool { + return !page.olr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page OperationListResultPage) Response() OperationListResult { + return page.olr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page OperationListResultPage) Values() []Operation { + if page.olr.IsEmpty() { + return nil + } + return *page.olr.Value +} + +// Creates a new instance of the OperationListResultPage type. +func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage { + return OperationListResultPage{fn: getNextPage} +} + +// PriceSheetModel price sheet result. It contains the pricesheet associated with billing period +type PriceSheetModel struct { + // Pricesheets - Price sheet + Pricesheets *[]PriceSheetProperties `json:"pricesheets,omitempty"` + // NextLink - The link (url) to the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// PriceSheetProperties the properties of the price sheet. +type PriceSheetProperties struct { + // BillingPeriodID - The id of the billing period resource that the usage belongs to. + BillingPeriodID *string `json:"billingPeriodId,omitempty"` + // MeterID - The meter id (GUID) + MeterID *uuid.UUID `json:"meterId,omitempty"` + // MeterDetails - The details about the meter. By default this is not populated, unless it's specified in $expand. + MeterDetails *MeterDetails `json:"meterDetails,omitempty"` + // UnitOfMeasure - Unit of measure + UnitOfMeasure *string `json:"unitOfMeasure,omitempty"` + // IncludedQuantity - Included quality for an offer + IncludedQuantity *decimal.Decimal `json:"includedQuantity,omitempty"` + // PartNumber - Part Number + PartNumber *string `json:"partNumber,omitempty"` + // UnitPrice - Unit Price + UnitPrice *decimal.Decimal `json:"unitPrice,omitempty"` + // CurrencyCode - Currency Code + CurrencyCode *string `json:"currencyCode,omitempty"` + // OfferID - Offer Id + OfferID *string `json:"offerId,omitempty"` +} + +// PriceSheetResult an pricesheet resource. +type PriceSheetResult struct { + autorest.Response `json:"-"` + *PriceSheetModel `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for PriceSheetResult. +func (psr PriceSheetResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if psr.PriceSheetModel != nil { + objectMap["properties"] = psr.PriceSheetModel + } + if psr.ID != nil { + objectMap["id"] = psr.ID + } + if psr.Name != nil { + objectMap["name"] = psr.Name + } + if psr.Type != nil { + objectMap["type"] = psr.Type + } + if psr.Tags != nil { + objectMap["tags"] = psr.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for PriceSheetResult struct. +func (psr *PriceSheetResult) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var priceSheetModel PriceSheetModel + err = json.Unmarshal(*v, &priceSheetModel) + if err != nil { + return err + } + psr.PriceSheetModel = &priceSheetModel + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + psr.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + psr.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + psr.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + psr.Tags = tags + } + } + } + + return nil +} + +// ProxyResource the Resource model definition. +type ProxyResource struct { + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // ETag - eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not. + ETag *string `json:"eTag,omitempty"` +} + +// ReservationDetail reservation detail resource. +type ReservationDetail struct { + *ReservationDetailProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for ReservationDetail. +func (rd ReservationDetail) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rd.ReservationDetailProperties != nil { + objectMap["properties"] = rd.ReservationDetailProperties + } + if rd.ID != nil { + objectMap["id"] = rd.ID + } + if rd.Name != nil { + objectMap["name"] = rd.Name + } + if rd.Type != nil { + objectMap["type"] = rd.Type + } + if rd.Tags != nil { + objectMap["tags"] = rd.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ReservationDetail struct. +func (rd *ReservationDetail) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var reservationDetailProperties ReservationDetailProperties + err = json.Unmarshal(*v, &reservationDetailProperties) + if err != nil { + return err + } + rd.ReservationDetailProperties = &reservationDetailProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + rd.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + rd.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + rd.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + rd.Tags = tags + } + } + } + + return nil +} + +// ReservationDetailProperties the properties of the reservation detail. +type ReservationDetailProperties struct { + // ReservationOrderID - The reservation order ID is the identifier for a reservation purchase. Each reservation order ID represents a single purchase transaction. A reservation order contains reservations. The reservation order specifies the VM size and region for the reservations. + ReservationOrderID *string `json:"reservationOrderId,omitempty"` + // ReservationID - The reservation ID is the identifier of a reservation within a reservation order. Each reservation is the grouping for applying the benefit scope and also specifies the number of instances to which the reservation benefit can be applied to. + ReservationID *string `json:"reservationId,omitempty"` + // SkuName - This is the ARM Sku name. It can be used to join with the serviceType field in additional info in usage records. + SkuName *string `json:"skuName,omitempty"` + // ReservedHours - This is the total hours reserved for the day. E.g. if reservation for 1 instance was made on 1 PM, this will be 11 hours for that day and 24 hours from subsequent days. + ReservedHours *decimal.Decimal `json:"reservedHours,omitempty"` + // UsageDate - The date on which consumption occurred. + UsageDate *date.Time `json:"usageDate,omitempty"` + // UsedHours - This is the total hours used by the instance. + UsedHours *decimal.Decimal `json:"usedHours,omitempty"` + // InstanceID - This identifier is the name of the resource or the fully qualified Resource ID. + InstanceID *string `json:"instanceId,omitempty"` + // TotalReservedQuantity - This is the total count of instances that are reserved for the reservationId. + TotalReservedQuantity *decimal.Decimal `json:"totalReservedQuantity,omitempty"` +} + +// ReservationDetailsListResult result of listing reservation details. +type ReservationDetailsListResult struct { + autorest.Response `json:"-"` + // Value - The list of reservation details. + Value *[]ReservationDetail `json:"value,omitempty"` + // NextLink - The link (url) to the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// ReservationDetailsListResultIterator provides access to a complete listing of ReservationDetail values. +type ReservationDetailsListResultIterator struct { + i int + page ReservationDetailsListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ReservationDetailsListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationDetailsListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ReservationDetailsListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ReservationDetailsListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ReservationDetailsListResultIterator) Response() ReservationDetailsListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ReservationDetailsListResultIterator) Value() ReservationDetail { + if !iter.page.NotDone() { + return ReservationDetail{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ReservationDetailsListResultIterator type. +func NewReservationDetailsListResultIterator(page ReservationDetailsListResultPage) ReservationDetailsListResultIterator { + return ReservationDetailsListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (rdlr ReservationDetailsListResult) IsEmpty() bool { + return rdlr.Value == nil || len(*rdlr.Value) == 0 +} + +// reservationDetailsListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (rdlr ReservationDetailsListResult) reservationDetailsListResultPreparer(ctx context.Context) (*http.Request, error) { + if rdlr.NextLink == nil || len(to.String(rdlr.NextLink)) < 1 { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(rdlr.NextLink))) +} + +// ReservationDetailsListResultPage contains a page of ReservationDetail values. +type ReservationDetailsListResultPage struct { + fn func(context.Context, ReservationDetailsListResult) (ReservationDetailsListResult, error) + rdlr ReservationDetailsListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ReservationDetailsListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationDetailsListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.rdlr) + if err != nil { + return err + } + page.rdlr = next + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ReservationDetailsListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ReservationDetailsListResultPage) NotDone() bool { + return !page.rdlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ReservationDetailsListResultPage) Response() ReservationDetailsListResult { + return page.rdlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ReservationDetailsListResultPage) Values() []ReservationDetail { + if page.rdlr.IsEmpty() { + return nil + } + return *page.rdlr.Value +} + +// Creates a new instance of the ReservationDetailsListResultPage type. +func NewReservationDetailsListResultPage(getNextPage func(context.Context, ReservationDetailsListResult) (ReservationDetailsListResult, error)) ReservationDetailsListResultPage { + return ReservationDetailsListResultPage{fn: getNextPage} +} + +// ReservationRecommendation reservation recommendation resource. +type ReservationRecommendation struct { + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` + // Location - Resource location + Location *string `json:"location,omitempty"` + // Sku - Resource sku + Sku *string `json:"sku,omitempty"` + *ReservationRecommendationProperties `json:"properties,omitempty"` +} + +// MarshalJSON is the custom marshaler for ReservationRecommendation. +func (rr ReservationRecommendation) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rr.ID != nil { + objectMap["id"] = rr.ID + } + if rr.Name != nil { + objectMap["name"] = rr.Name + } + if rr.Type != nil { + objectMap["type"] = rr.Type + } + if rr.Tags != nil { + objectMap["tags"] = rr.Tags + } + if rr.Location != nil { + objectMap["location"] = rr.Location + } + if rr.Sku != nil { + objectMap["sku"] = rr.Sku + } + if rr.ReservationRecommendationProperties != nil { + objectMap["properties"] = rr.ReservationRecommendationProperties + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ReservationRecommendation struct. +func (rr *ReservationRecommendation) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + rr.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + rr.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + rr.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + rr.Tags = tags + } + case "location": + if v != nil { + var location string + err = json.Unmarshal(*v, &location) + if err != nil { + return err + } + rr.Location = &location + } + case "sku": + if v != nil { + var sku string + err = json.Unmarshal(*v, &sku) + if err != nil { + return err + } + rr.Sku = &sku + } + case "properties": + if v != nil { + var reservationRecommendationProperties ReservationRecommendationProperties + err = json.Unmarshal(*v, &reservationRecommendationProperties) + if err != nil { + return err + } + rr.ReservationRecommendationProperties = &reservationRecommendationProperties + } + } + } + + return nil +} + +// ReservationRecommendationProperties the properties of the reservation recommendation. +type ReservationRecommendationProperties struct { + // LookBackPeriod - The number of days of usage to look back for recommendation. + LookBackPeriod *string `json:"lookBackPeriod,omitempty"` + // MeterID - The meter id (GUID) + MeterID *uuid.UUID `json:"meterId,omitempty"` + // Term - RI recommendations in one or three year terms. + Term *string `json:"term,omitempty"` + // CostWithNoReservedInstances - The total amount of cost without reserved instances. + CostWithNoReservedInstances *decimal.Decimal `json:"costWithNoReservedInstances,omitempty"` + // RecommendedQuantity - Recommended quality for reserved instances. + RecommendedQuantity *decimal.Decimal `json:"recommendedQuantity,omitempty"` + // TotalCostWithReservedInstances - The total amount of cost with reserved instances. + TotalCostWithReservedInstances *decimal.Decimal `json:"totalCostWithReservedInstances,omitempty"` + // NetSavings - Total estimated savings with reserved instances. + NetSavings *decimal.Decimal `json:"netSavings,omitempty"` + // FirstUsageDate - The usage date for looking back. + FirstUsageDate *date.Time `json:"firstUsageDate,omitempty"` + // Scope - Shared or single recommendation. + Scope *string `json:"scope,omitempty"` +} + +// ReservationRecommendationsListResult result of listing reservation recommendations. +type ReservationRecommendationsListResult struct { + autorest.Response `json:"-"` + // Value - The list of reservation recommendations. + Value *[]ReservationRecommendation `json:"value,omitempty"` + // NextLink - The link (url) to the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// ReservationRecommendationsListResultIterator provides access to a complete listing of +// ReservationRecommendation values. +type ReservationRecommendationsListResultIterator struct { + i int + page ReservationRecommendationsListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ReservationRecommendationsListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationRecommendationsListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ReservationRecommendationsListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ReservationRecommendationsListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ReservationRecommendationsListResultIterator) Response() ReservationRecommendationsListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ReservationRecommendationsListResultIterator) Value() ReservationRecommendation { + if !iter.page.NotDone() { + return ReservationRecommendation{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ReservationRecommendationsListResultIterator type. +func NewReservationRecommendationsListResultIterator(page ReservationRecommendationsListResultPage) ReservationRecommendationsListResultIterator { + return ReservationRecommendationsListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (rrlr ReservationRecommendationsListResult) IsEmpty() bool { + return rrlr.Value == nil || len(*rrlr.Value) == 0 +} + +// reservationRecommendationsListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (rrlr ReservationRecommendationsListResult) reservationRecommendationsListResultPreparer(ctx context.Context) (*http.Request, error) { + if rrlr.NextLink == nil || len(to.String(rrlr.NextLink)) < 1 { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(rrlr.NextLink))) +} + +// ReservationRecommendationsListResultPage contains a page of ReservationRecommendation values. +type ReservationRecommendationsListResultPage struct { + fn func(context.Context, ReservationRecommendationsListResult) (ReservationRecommendationsListResult, error) + rrlr ReservationRecommendationsListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ReservationRecommendationsListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationRecommendationsListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.rrlr) + if err != nil { + return err + } + page.rrlr = next + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ReservationRecommendationsListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ReservationRecommendationsListResultPage) NotDone() bool { + return !page.rrlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ReservationRecommendationsListResultPage) Response() ReservationRecommendationsListResult { + return page.rrlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ReservationRecommendationsListResultPage) Values() []ReservationRecommendation { + if page.rrlr.IsEmpty() { + return nil + } + return *page.rrlr.Value +} + +// Creates a new instance of the ReservationRecommendationsListResultPage type. +func NewReservationRecommendationsListResultPage(getNextPage func(context.Context, ReservationRecommendationsListResult) (ReservationRecommendationsListResult, error)) ReservationRecommendationsListResultPage { + return ReservationRecommendationsListResultPage{fn: getNextPage} +} + +// ReservationSummariesListResult result of listing reservation summaries. +type ReservationSummariesListResult struct { + autorest.Response `json:"-"` + // Value - The list of reservation summaries. + Value *[]ReservationSummary `json:"value,omitempty"` + // NextLink - The link (url) to the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// ReservationSummariesListResultIterator provides access to a complete listing of ReservationSummary +// values. +type ReservationSummariesListResultIterator struct { + i int + page ReservationSummariesListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *ReservationSummariesListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationSummariesListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *ReservationSummariesListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter ReservationSummariesListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter ReservationSummariesListResultIterator) Response() ReservationSummariesListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter ReservationSummariesListResultIterator) Value() ReservationSummary { + if !iter.page.NotDone() { + return ReservationSummary{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the ReservationSummariesListResultIterator type. +func NewReservationSummariesListResultIterator(page ReservationSummariesListResultPage) ReservationSummariesListResultIterator { + return ReservationSummariesListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (rslr ReservationSummariesListResult) IsEmpty() bool { + return rslr.Value == nil || len(*rslr.Value) == 0 +} + +// reservationSummariesListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (rslr ReservationSummariesListResult) reservationSummariesListResultPreparer(ctx context.Context) (*http.Request, error) { + if rslr.NextLink == nil || len(to.String(rslr.NextLink)) < 1 { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(rslr.NextLink))) +} + +// ReservationSummariesListResultPage contains a page of ReservationSummary values. +type ReservationSummariesListResultPage struct { + fn func(context.Context, ReservationSummariesListResult) (ReservationSummariesListResult, error) + rslr ReservationSummariesListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *ReservationSummariesListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationSummariesListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.rslr) + if err != nil { + return err + } + page.rslr = next + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *ReservationSummariesListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page ReservationSummariesListResultPage) NotDone() bool { + return !page.rslr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page ReservationSummariesListResultPage) Response() ReservationSummariesListResult { + return page.rslr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page ReservationSummariesListResultPage) Values() []ReservationSummary { + if page.rslr.IsEmpty() { + return nil + } + return *page.rslr.Value +} + +// Creates a new instance of the ReservationSummariesListResultPage type. +func NewReservationSummariesListResultPage(getNextPage func(context.Context, ReservationSummariesListResult) (ReservationSummariesListResult, error)) ReservationSummariesListResultPage { + return ReservationSummariesListResultPage{fn: getNextPage} +} + +// ReservationSummary reservation summary resource. +type ReservationSummary struct { + *ReservationSummaryProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for ReservationSummary. +func (rs ReservationSummary) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if rs.ReservationSummaryProperties != nil { + objectMap["properties"] = rs.ReservationSummaryProperties + } + if rs.ID != nil { + objectMap["id"] = rs.ID + } + if rs.Name != nil { + objectMap["name"] = rs.Name + } + if rs.Type != nil { + objectMap["type"] = rs.Type + } + if rs.Tags != nil { + objectMap["tags"] = rs.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for ReservationSummary struct. +func (rs *ReservationSummary) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var reservationSummaryProperties ReservationSummaryProperties + err = json.Unmarshal(*v, &reservationSummaryProperties) + if err != nil { + return err + } + rs.ReservationSummaryProperties = &reservationSummaryProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + rs.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + rs.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + rs.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + rs.Tags = tags + } + } + } + + return nil +} + +// ReservationSummaryProperties the properties of the reservation summary. +type ReservationSummaryProperties struct { + // ReservationOrderID - The reservation order ID is the identifier for a reservation purchase. Each reservation order ID represents a single purchase transaction. A reservation order contains reservations. The reservation order specifies the VM size and region for the reservations. + ReservationOrderID *string `json:"reservationOrderId,omitempty"` + // ReservationID - The reservation ID is the identifier of a reservation within a reservation order. Each reservation is the grouping for applying the benefit scope and also specifies the number of instances to which the reservation benefit can be applied to. + ReservationID *string `json:"reservationId,omitempty"` + // SkuName - This is the ARM Sku name. It can be used to join with the serviceType field in additional info in usage records. + SkuName *string `json:"skuName,omitempty"` + // ReservedHours - This is the total hours reserved. E.g. if reservation for 1 instance was made on 1 PM, this will be 11 hours for that day and 24 hours from subsequent days + ReservedHours *decimal.Decimal `json:"reservedHours,omitempty"` + // UsageDate - Data corresponding to the utilization record. If the grain of data is monthly, it will be first day of month. + UsageDate *date.Time `json:"usageDate,omitempty"` + // UsedHours - Total used hours by the reservation + UsedHours *decimal.Decimal `json:"usedHours,omitempty"` + // MinUtilizationPercentage - This is the minimum hourly utilization in the usage time (day or month). E.g. if usage record corresponds to 12/10/2017 and on that for hour 4 and 5, utilization was 10%, this field will return 10% for that day + MinUtilizationPercentage *decimal.Decimal `json:"minUtilizationPercentage,omitempty"` + // AvgUtilizationPercentage - This is average utilization for the entire time range. (day or month depending on the grain) + AvgUtilizationPercentage *decimal.Decimal `json:"avgUtilizationPercentage,omitempty"` + // MaxUtilizationPercentage - This is the maximum hourly utilization in the usage time (day or month). E.g. if usage record corresponds to 12/10/2017 and on that for hour 4 and 5, utilization was 100%, this field will return 100% for that day. + MaxUtilizationPercentage *decimal.Decimal `json:"maxUtilizationPercentage,omitempty"` +} + +// Resource the Resource model definition. +type Resource struct { + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for Resource. +func (r Resource) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if r.ID != nil { + objectMap["id"] = r.ID + } + if r.Name != nil { + objectMap["name"] = r.Name + } + if r.Type != nil { + objectMap["type"] = r.Type + } + if r.Tags != nil { + objectMap["tags"] = r.Tags + } + return json.Marshal(objectMap) +} + +// ResourceAttributes the Resource model definition. +type ResourceAttributes struct { + // Location - Resource location + Location *string `json:"location,omitempty"` + // Sku - Resource sku + Sku *string `json:"sku,omitempty"` +} + +// Tag the tag resource. +type Tag struct { + // Key - Tag key. + Key *string `json:"key,omitempty"` +} + +// TagProperties the properties of the tag. +type TagProperties struct { + // Tags - A list of Tag. + Tags *[]Tag `json:"tags,omitempty"` +} + +// TagsResult a resource listing all tags. +type TagsResult struct { + autorest.Response `json:"-"` + *TagProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // ETag - eTag of the resource. To handle concurrent update scenario, this field will be used to determine whether the user is updating the latest version or not. + ETag *string `json:"eTag,omitempty"` +} + +// MarshalJSON is the custom marshaler for TagsResult. +func (tr TagsResult) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if tr.TagProperties != nil { + objectMap["properties"] = tr.TagProperties + } + if tr.ID != nil { + objectMap["id"] = tr.ID + } + if tr.Name != nil { + objectMap["name"] = tr.Name + } + if tr.Type != nil { + objectMap["type"] = tr.Type + } + if tr.ETag != nil { + objectMap["eTag"] = tr.ETag + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for TagsResult struct. +func (tr *TagsResult) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var tagProperties TagProperties + err = json.Unmarshal(*v, &tagProperties) + if err != nil { + return err + } + tr.TagProperties = &tagProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + tr.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + tr.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + tr.Type = &typeVar + } + case "eTag": + if v != nil { + var eTag string + err = json.Unmarshal(*v, &eTag) + if err != nil { + return err + } + tr.ETag = &eTag + } + } + } + + return nil +} + +// UsageDetail an usage detail resource. +type UsageDetail struct { + *UsageDetailProperties `json:"properties,omitempty"` + // ID - Resource Id. + ID *string `json:"id,omitempty"` + // Name - Resource name. + Name *string `json:"name,omitempty"` + // Type - Resource type. + Type *string `json:"type,omitempty"` + // Tags - Resource tags. + Tags map[string]*string `json:"tags"` +} + +// MarshalJSON is the custom marshaler for UsageDetail. +func (ud UsageDetail) MarshalJSON() ([]byte, error) { + objectMap := make(map[string]interface{}) + if ud.UsageDetailProperties != nil { + objectMap["properties"] = ud.UsageDetailProperties + } + if ud.ID != nil { + objectMap["id"] = ud.ID + } + if ud.Name != nil { + objectMap["name"] = ud.Name + } + if ud.Type != nil { + objectMap["type"] = ud.Type + } + if ud.Tags != nil { + objectMap["tags"] = ud.Tags + } + return json.Marshal(objectMap) +} + +// UnmarshalJSON is the custom unmarshaler for UsageDetail struct. +func (ud *UsageDetail) UnmarshalJSON(body []byte) error { + var m map[string]*json.RawMessage + err := json.Unmarshal(body, &m) + if err != nil { + return err + } + for k, v := range m { + switch k { + case "properties": + if v != nil { + var usageDetailProperties UsageDetailProperties + err = json.Unmarshal(*v, &usageDetailProperties) + if err != nil { + return err + } + ud.UsageDetailProperties = &usageDetailProperties + } + case "id": + if v != nil { + var ID string + err = json.Unmarshal(*v, &ID) + if err != nil { + return err + } + ud.ID = &ID + } + case "name": + if v != nil { + var name string + err = json.Unmarshal(*v, &name) + if err != nil { + return err + } + ud.Name = &name + } + case "type": + if v != nil { + var typeVar string + err = json.Unmarshal(*v, &typeVar) + if err != nil { + return err + } + ud.Type = &typeVar + } + case "tags": + if v != nil { + var tags map[string]*string + err = json.Unmarshal(*v, &tags) + if err != nil { + return err + } + ud.Tags = tags + } + } + } + + return nil +} + +// UsageDetailProperties the properties of the usage detail. +type UsageDetailProperties struct { + // BillingPeriodID - The id of the billing period resource that the usage belongs to. + BillingPeriodID *string `json:"billingPeriodId,omitempty"` + // InvoiceID - The id of the invoice resource that the usage belongs to. + InvoiceID *string `json:"invoiceId,omitempty"` + // UsageStart - The start of the date time range covered by the usage detail. + UsageStart *date.Time `json:"usageStart,omitempty"` + // UsageEnd - The end of the date time range covered by the usage detail. + UsageEnd *date.Time `json:"usageEnd,omitempty"` + // InstanceName - The name of the resource instance that the usage is about. + InstanceName *string `json:"instanceName,omitempty"` + // InstanceID - The uri of the resource instance that the usage is about. + InstanceID *string `json:"instanceId,omitempty"` + // InstanceLocation - The location of the resource instance that the usage is about. + InstanceLocation *string `json:"instanceLocation,omitempty"` + // Currency - The ISO currency in which the meter is charged, for example, USD. + Currency *string `json:"currency,omitempty"` + // UsageQuantity - The quantity of usage. + UsageQuantity *decimal.Decimal `json:"usageQuantity,omitempty"` + // BillableQuantity - The billable usage quantity. + BillableQuantity *decimal.Decimal `json:"billableQuantity,omitempty"` + // PretaxCost - The amount of cost before tax. + PretaxCost *decimal.Decimal `json:"pretaxCost,omitempty"` + // IsEstimated - The estimated usage is subject to change. + IsEstimated *bool `json:"isEstimated,omitempty"` + // MeterID - The meter id (GUID). + MeterID *uuid.UUID `json:"meterId,omitempty"` + // MeterDetails - The details about the meter. By default this is not populated, unless it's specified in $expand. + MeterDetails *MeterDetails `json:"meterDetails,omitempty"` + // SubscriptionGUID - Subscription guid. + SubscriptionGUID *uuid.UUID `json:"subscriptionGuid,omitempty"` + // SubscriptionName - Subscription name. + SubscriptionName *string `json:"subscriptionName,omitempty"` + // AccountName - Account name. + AccountName *string `json:"accountName,omitempty"` + // DepartmentName - Department name. + DepartmentName *string `json:"departmentName,omitempty"` + // Product - Product name. + Product *string `json:"product,omitempty"` + // ConsumedService - Consumed service name. + ConsumedService *string `json:"consumedService,omitempty"` + // CostCenter - The cost center of this department if it is a department and a costcenter exists + CostCenter *string `json:"costCenter,omitempty"` + // PartNumber - Part Number + PartNumber *string `json:"partNumber,omitempty"` + // ResourceGUID - Resource Guid + ResourceGUID *string `json:"resourceGuid,omitempty"` + // OfferID - Offer Id + OfferID *string `json:"offerId,omitempty"` + // ChargesBilledSeparately - Charges billed separately + ChargesBilledSeparately *bool `json:"chargesBilledSeparately,omitempty"` + // Location - Resource Location + Location *string `json:"location,omitempty"` + // AdditionalProperties - Additional details of this usage item. By default this is not populated, unless it's specified in $expand. + AdditionalProperties *string `json:"additionalProperties,omitempty"` +} + +// UsageDetailsListResult result of listing usage details. It contains a list of available usage details in +// reverse chronological order by billing period. +type UsageDetailsListResult struct { + autorest.Response `json:"-"` + // Value - The list of usage details. + Value *[]UsageDetail `json:"value,omitempty"` + // NextLink - The link (url) to the next page of results. + NextLink *string `json:"nextLink,omitempty"` +} + +// UsageDetailsListResultIterator provides access to a complete listing of UsageDetail values. +type UsageDetailsListResultIterator struct { + i int + page UsageDetailsListResultPage +} + +// NextWithContext advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +func (iter *UsageDetailsListResultIterator) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsageDetailsListResultIterator.NextWithContext") + defer func() { + sc := -1 + if iter.Response().Response.Response != nil { + sc = iter.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + iter.i++ + if iter.i < len(iter.page.Values()) { + return nil + } + err = iter.page.NextWithContext(ctx) + if err != nil { + iter.i-- + return err + } + iter.i = 0 + return nil +} + +// Next advances to the next value. If there was an error making +// the request the iterator does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (iter *UsageDetailsListResultIterator) Next() error { + return iter.NextWithContext(context.Background()) +} + +// NotDone returns true if the enumeration should be started or is not yet complete. +func (iter UsageDetailsListResultIterator) NotDone() bool { + return iter.page.NotDone() && iter.i < len(iter.page.Values()) +} + +// Response returns the raw server response from the last page request. +func (iter UsageDetailsListResultIterator) Response() UsageDetailsListResult { + return iter.page.Response() +} + +// Value returns the current value or a zero-initialized value if the +// iterator has advanced beyond the end of the collection. +func (iter UsageDetailsListResultIterator) Value() UsageDetail { + if !iter.page.NotDone() { + return UsageDetail{} + } + return iter.page.Values()[iter.i] +} + +// Creates a new instance of the UsageDetailsListResultIterator type. +func NewUsageDetailsListResultIterator(page UsageDetailsListResultPage) UsageDetailsListResultIterator { + return UsageDetailsListResultIterator{page: page} +} + +// IsEmpty returns true if the ListResult contains no values. +func (udlr UsageDetailsListResult) IsEmpty() bool { + return udlr.Value == nil || len(*udlr.Value) == 0 +} + +// usageDetailsListResultPreparer prepares a request to retrieve the next set of results. +// It returns nil if no more results exist. +func (udlr UsageDetailsListResult) usageDetailsListResultPreparer(ctx context.Context) (*http.Request, error) { + if udlr.NextLink == nil || len(to.String(udlr.NextLink)) < 1 { + return nil, nil + } + return autorest.Prepare((&http.Request{}).WithContext(ctx), + autorest.AsJSON(), + autorest.AsGet(), + autorest.WithBaseURL(to.String(udlr.NextLink))) +} + +// UsageDetailsListResultPage contains a page of UsageDetail values. +type UsageDetailsListResultPage struct { + fn func(context.Context, UsageDetailsListResult) (UsageDetailsListResult, error) + udlr UsageDetailsListResult +} + +// NextWithContext advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +func (page *UsageDetailsListResultPage) NextWithContext(ctx context.Context) (err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsageDetailsListResultPage.NextWithContext") + defer func() { + sc := -1 + if page.Response().Response.Response != nil { + sc = page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + next, err := page.fn(ctx, page.udlr) + if err != nil { + return err + } + page.udlr = next + return nil +} + +// Next advances to the next page of values. If there was an error making +// the request the page does not advance and the error is returned. +// Deprecated: Use NextWithContext() instead. +func (page *UsageDetailsListResultPage) Next() error { + return page.NextWithContext(context.Background()) +} + +// NotDone returns true if the page enumeration should be started or is not yet complete. +func (page UsageDetailsListResultPage) NotDone() bool { + return !page.udlr.IsEmpty() +} + +// Response returns the raw server response from the last page request. +func (page UsageDetailsListResultPage) Response() UsageDetailsListResult { + return page.udlr +} + +// Values returns the slice of values for the current page or nil if there are no values. +func (page UsageDetailsListResultPage) Values() []UsageDetail { + if page.udlr.IsEmpty() { + return nil + } + return *page.udlr.Value +} + +// Creates a new instance of the UsageDetailsListResultPage type. +func NewUsageDetailsListResultPage(getNextPage func(context.Context, UsageDetailsListResult) (UsageDetailsListResult, error)) UsageDetailsListResultPage { + return UsageDetailsListResultPage{fn: getNextPage} +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/operations.go b/services/consumption/mgmt/2019-01-01/consumption/operations.go new file mode 100644 index 000000000000..3f850541b482 --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/operations.go @@ -0,0 +1,148 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// OperationsClient is the consumption management client provides access to consumption resources for Azure Enterprise +// Subscriptions. +type OperationsClient struct { + BaseClient +} + +// NewOperationsClient creates an instance of the OperationsClient client. +func NewOperationsClient(subscriptionID string) OperationsClient { + return NewOperationsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewOperationsClientWithBaseURI creates an instance of the OperationsClient client. +func NewOperationsClientWithBaseURI(baseURI string, subscriptionID string) OperationsClient { + return OperationsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List lists all of the available consumption REST API operations. +func (client OperationsClient) List(ctx context.Context) (result OperationListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/OperationsClient.List") + defer func() { + sc := -1 + if result.olr.Response.Response != nil { + sc = result.olr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.OperationsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.olr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.OperationsClient", "List", resp, "Failure sending request") + return + } + + result.olr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.OperationsClient", "List", resp, "Failure responding to request") + } + + return +} + +// ListPreparer prepares the List request. +func (client OperationsClient) ListPreparer(ctx context.Context) (*http.Request, error) { + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPath("/providers/Microsoft.Consumption/operations"), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client OperationsClient) ListSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client OperationsClient) ListResponder(resp *http.Response) (result OperationListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client OperationsClient) listNextResults(ctx context.Context, lastResults OperationListResult) (result OperationListResult, err error) { + req, err := lastResults.operationListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "consumption.OperationsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "consumption.OperationsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.OperationsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client OperationsClient) ListComplete(ctx context.Context) (result OperationListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/OperationsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx) + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/pricesheet.go b/services/consumption/mgmt/2019-01-01/consumption/pricesheet.go new file mode 100644 index 000000000000..3ec21cdd6005 --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/pricesheet.go @@ -0,0 +1,241 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// PriceSheetClient is the consumption management client provides access to consumption resources for Azure Enterprise +// Subscriptions. +type PriceSheetClient struct { + BaseClient +} + +// NewPriceSheetClient creates an instance of the PriceSheetClient client. +func NewPriceSheetClient(subscriptionID string) PriceSheetClient { + return NewPriceSheetClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewPriceSheetClientWithBaseURI creates an instance of the PriceSheetClient client. +func NewPriceSheetClientWithBaseURI(baseURI string, subscriptionID string) PriceSheetClient { + return PriceSheetClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get gets the price sheet for a scope by subscriptionId. Price sheet is available via this API only for May 1, 2014 +// or later. +// Parameters: +// expand - may be used to expand the properties/meterDetails within a price sheet. By default, these fields +// are not included when returning price sheet. +// skiptoken - skiptoken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that +// specifies a starting point to use for subsequent calls. +// top - may be used to limit the number of results to the top N results. +func (client PriceSheetClient) Get(ctx context.Context, expand string, skiptoken string, top *int32) (result PriceSheetResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PriceSheetClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: 1, Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("consumption.PriceSheetClient", "Get", err.Error()) + } + + req, err := client.GetPreparer(ctx, expand, skiptoken, top) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "Get", resp, "Failure responding to request") + } + + return +} + +// GetPreparer prepares the Get request. +func (client PriceSheetClient) GetPreparer(ctx context.Context, expand string, skiptoken string, top *int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + if len(skiptoken) > 0 { + queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken) + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/pricesheets/default", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client PriceSheetClient) GetSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + azure.DoRetryWithRegistration(client.Client)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client PriceSheetClient) GetResponder(resp *http.Response) (result PriceSheetResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// GetByBillingPeriod get the price sheet for a scope by subscriptionId and billing period. Price sheet is available +// via this API only for May 1, 2014 or later. +// Parameters: +// billingPeriodName - billing Period Name. +// expand - may be used to expand the properties/meterDetails within a price sheet. By default, these fields +// are not included when returning price sheet. +// skiptoken - skiptoken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that +// specifies a starting point to use for subsequent calls. +// top - may be used to limit the number of results to the top N results. +func (client PriceSheetClient) GetByBillingPeriod(ctx context.Context, billingPeriodName string, expand string, skiptoken string, top *int32) (result PriceSheetResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/PriceSheetClient.GetByBillingPeriod") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: 1, Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("consumption.PriceSheetClient", "GetByBillingPeriod", err.Error()) + } + + req, err := client.GetByBillingPeriodPreparer(ctx, billingPeriodName, expand, skiptoken, top) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "GetByBillingPeriod", nil, "Failure preparing request") + return + } + + resp, err := client.GetByBillingPeriodSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "GetByBillingPeriod", resp, "Failure sending request") + return + } + + result, err = client.GetByBillingPeriodResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.PriceSheetClient", "GetByBillingPeriod", resp, "Failure responding to request") + } + + return +} + +// GetByBillingPeriodPreparer prepares the GetByBillingPeriod request. +func (client PriceSheetClient) GetByBillingPeriodPreparer(ctx context.Context, billingPeriodName string, expand string, skiptoken string, top *int32) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "billingPeriodName": autorest.Encode("path", billingPeriodName), + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + if len(skiptoken) > 0 { + queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken) + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}/providers/Microsoft.Consumption/pricesheets/default", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetByBillingPeriodSender sends the GetByBillingPeriod request. The method will close the +// http.Response Body if it receives an error. +func (client PriceSheetClient) GetByBillingPeriodSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + azure.DoRetryWithRegistration(client.Client)) +} + +// GetByBillingPeriodResponder handles the response to the GetByBillingPeriod request. The method always +// closes the http.Response Body. +func (client PriceSheetClient) GetByBillingPeriodResponder(resp *http.Response) (result PriceSheetResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/reservationrecommendations.go b/services/consumption/mgmt/2019-01-01/consumption/reservationrecommendations.go new file mode 100644 index 000000000000..92bede3a7d4b --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/reservationrecommendations.go @@ -0,0 +1,157 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ReservationRecommendationsClient is the consumption management client provides access to consumption resources for +// Azure Enterprise Subscriptions. +type ReservationRecommendationsClient struct { + BaseClient +} + +// NewReservationRecommendationsClient creates an instance of the ReservationRecommendationsClient client. +func NewReservationRecommendationsClient(subscriptionID string) ReservationRecommendationsClient { + return NewReservationRecommendationsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewReservationRecommendationsClientWithBaseURI creates an instance of the ReservationRecommendationsClient client. +func NewReservationRecommendationsClientWithBaseURI(baseURI string, subscriptionID string) ReservationRecommendationsClient { + return ReservationRecommendationsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List list of recommendations for purchasing reserved instances. +// Parameters: +// filter - may be used to filter reservationRecommendations by properties/scope and properties/lookBackPeriod. +func (client ReservationRecommendationsClient) List(ctx context.Context, filter string) (result ReservationRecommendationsListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationRecommendationsClient.List") + defer func() { + sc := -1 + if result.rrlr.Response.Response != nil { + sc = result.rrlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.rrlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "List", resp, "Failure sending request") + return + } + + result.rrlr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "List", resp, "Failure responding to request") + } + + return +} + +// ListPreparer prepares the List request. +func (client ReservationRecommendationsClient) ListPreparer(ctx context.Context, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "subscriptionId": autorest.Encode("path", client.SubscriptionID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/reservationRecommendations", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client ReservationRecommendationsClient) ListSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + azure.DoRetryWithRegistration(client.Client)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client ReservationRecommendationsClient) ListResponder(resp *http.Response) (result ReservationRecommendationsListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client ReservationRecommendationsClient) listNextResults(ctx context.Context, lastResults ReservationRecommendationsListResult) (result ReservationRecommendationsListResult, err error) { + req, err := lastResults.reservationRecommendationsListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationRecommendationsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client ReservationRecommendationsClient) ListComplete(ctx context.Context, filter string) (result ReservationRecommendationsListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationRecommendationsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, filter) + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/reservationsdetails.go b/services/consumption/mgmt/2019-01-01/consumption/reservationsdetails.go new file mode 100644 index 000000000000..c10eaf10811e --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/reservationsdetails.go @@ -0,0 +1,274 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ReservationsDetailsClient is the consumption management client provides access to consumption resources for Azure +// Enterprise Subscriptions. +type ReservationsDetailsClient struct { + BaseClient +} + +// NewReservationsDetailsClient creates an instance of the ReservationsDetailsClient client. +func NewReservationsDetailsClient(subscriptionID string) ReservationsDetailsClient { + return NewReservationsDetailsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewReservationsDetailsClientWithBaseURI creates an instance of the ReservationsDetailsClient client. +func NewReservationsDetailsClientWithBaseURI(baseURI string, subscriptionID string) ReservationsDetailsClient { + return ReservationsDetailsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// ListByReservationOrder lists the reservations details for provided date range. +// Parameters: +// reservationOrderID - order Id of the reservation +// filter - filter reservation details by date range. The properties/UsageDate for start date and end date. The +// filter supports 'le' and 'ge' +func (client ReservationsDetailsClient) ListByReservationOrder(ctx context.Context, reservationOrderID string, filter string) (result ReservationDetailsListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrder") + defer func() { + sc := -1 + if result.rdlr.Response.Response != nil { + sc = result.rdlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByReservationOrderNextResults + req, err := client.ListByReservationOrderPreparer(ctx, reservationOrderID, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrder", nil, "Failure preparing request") + return + } + + resp, err := client.ListByReservationOrderSender(req) + if err != nil { + result.rdlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrder", resp, "Failure sending request") + return + } + + result.rdlr, err = client.ListByReservationOrderResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrder", resp, "Failure responding to request") + } + + return +} + +// ListByReservationOrderPreparer prepares the ListByReservationOrder request. +func (client ReservationsDetailsClient) ListByReservationOrderPreparer(ctx context.Context, reservationOrderID string, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "reservationOrderId": autorest.Encode("path", reservationOrderID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "$filter": autorest.Encode("query", filter), + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationDetails", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByReservationOrderSender sends the ListByReservationOrder request. The method will close the +// http.Response Body if it receives an error. +func (client ReservationsDetailsClient) ListByReservationOrderSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListByReservationOrderResponder handles the response to the ListByReservationOrder request. The method always +// closes the http.Response Body. +func (client ReservationsDetailsClient) ListByReservationOrderResponder(resp *http.Response) (result ReservationDetailsListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByReservationOrderNextResults retrieves the next set of results, if any. +func (client ReservationsDetailsClient) listByReservationOrderNextResults(ctx context.Context, lastResults ReservationDetailsListResult) (result ReservationDetailsListResult, err error) { + req, err := lastResults.reservationDetailsListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByReservationOrderSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByReservationOrderResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByReservationOrderComplete enumerates all values, automatically crossing page boundaries as required. +func (client ReservationsDetailsClient) ListByReservationOrderComplete(ctx context.Context, reservationOrderID string, filter string) (result ReservationDetailsListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrder") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByReservationOrder(ctx, reservationOrderID, filter) + return +} + +// ListByReservationOrderAndReservation lists the reservations details for provided date range. +// Parameters: +// reservationOrderID - order Id of the reservation +// reservationID - id of the reservation +// filter - filter reservation details by date range. The properties/UsageDate for start date and end date. The +// filter supports 'le' and 'ge' +func (client ReservationsDetailsClient) ListByReservationOrderAndReservation(ctx context.Context, reservationOrderID string, reservationID string, filter string) (result ReservationDetailsListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrderAndReservation") + defer func() { + sc := -1 + if result.rdlr.Response.Response != nil { + sc = result.rdlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByReservationOrderAndReservationNextResults + req, err := client.ListByReservationOrderAndReservationPreparer(ctx, reservationOrderID, reservationID, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrderAndReservation", nil, "Failure preparing request") + return + } + + resp, err := client.ListByReservationOrderAndReservationSender(req) + if err != nil { + result.rdlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrderAndReservation", resp, "Failure sending request") + return + } + + result.rdlr, err = client.ListByReservationOrderAndReservationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "ListByReservationOrderAndReservation", resp, "Failure responding to request") + } + + return +} + +// ListByReservationOrderAndReservationPreparer prepares the ListByReservationOrderAndReservation request. +func (client ReservationsDetailsClient) ListByReservationOrderAndReservationPreparer(ctx context.Context, reservationOrderID string, reservationID string, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "reservationId": autorest.Encode("path", reservationID), + "reservationOrderId": autorest.Encode("path", reservationOrderID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "$filter": autorest.Encode("query", filter), + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationDetails", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByReservationOrderAndReservationSender sends the ListByReservationOrderAndReservation request. The method will close the +// http.Response Body if it receives an error. +func (client ReservationsDetailsClient) ListByReservationOrderAndReservationSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListByReservationOrderAndReservationResponder handles the response to the ListByReservationOrderAndReservation request. The method always +// closes the http.Response Body. +func (client ReservationsDetailsClient) ListByReservationOrderAndReservationResponder(resp *http.Response) (result ReservationDetailsListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByReservationOrderAndReservationNextResults retrieves the next set of results, if any. +func (client ReservationsDetailsClient) listByReservationOrderAndReservationNextResults(ctx context.Context, lastResults ReservationDetailsListResult) (result ReservationDetailsListResult, err error) { + req, err := lastResults.reservationDetailsListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderAndReservationNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByReservationOrderAndReservationSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderAndReservationNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByReservationOrderAndReservationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsDetailsClient", "listByReservationOrderAndReservationNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByReservationOrderAndReservationComplete enumerates all values, automatically crossing page boundaries as required. +func (client ReservationsDetailsClient) ListByReservationOrderAndReservationComplete(ctx context.Context, reservationOrderID string, reservationID string, filter string) (result ReservationDetailsListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsDetailsClient.ListByReservationOrderAndReservation") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByReservationOrderAndReservation(ctx, reservationOrderID, reservationID, filter) + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/reservationssummaries.go b/services/consumption/mgmt/2019-01-01/consumption/reservationssummaries.go new file mode 100644 index 000000000000..e9ac6335df1e --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/reservationssummaries.go @@ -0,0 +1,282 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// ReservationsSummariesClient is the consumption management client provides access to consumption resources for Azure +// Enterprise Subscriptions. +type ReservationsSummariesClient struct { + BaseClient +} + +// NewReservationsSummariesClient creates an instance of the ReservationsSummariesClient client. +func NewReservationsSummariesClient(subscriptionID string) ReservationsSummariesClient { + return NewReservationsSummariesClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewReservationsSummariesClientWithBaseURI creates an instance of the ReservationsSummariesClient client. +func NewReservationsSummariesClientWithBaseURI(baseURI string, subscriptionID string) ReservationsSummariesClient { + return ReservationsSummariesClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// ListByReservationOrder lists the reservations summaries for daily or monthly grain. +// Parameters: +// reservationOrderID - order Id of the reservation +// grain - can be daily or monthly +// filter - required only for daily grain. The properties/UsageDate for start date and end date. The filter +// supports 'le' and 'ge' +func (client ReservationsSummariesClient) ListByReservationOrder(ctx context.Context, reservationOrderID string, grain Datagrain, filter string) (result ReservationSummariesListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrder") + defer func() { + sc := -1 + if result.rslr.Response.Response != nil { + sc = result.rslr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByReservationOrderNextResults + req, err := client.ListByReservationOrderPreparer(ctx, reservationOrderID, grain, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrder", nil, "Failure preparing request") + return + } + + resp, err := client.ListByReservationOrderSender(req) + if err != nil { + result.rslr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrder", resp, "Failure sending request") + return + } + + result.rslr, err = client.ListByReservationOrderResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrder", resp, "Failure responding to request") + } + + return +} + +// ListByReservationOrderPreparer prepares the ListByReservationOrder request. +func (client ReservationsSummariesClient) ListByReservationOrderPreparer(ctx context.Context, reservationOrderID string, grain Datagrain, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "reservationOrderId": autorest.Encode("path", reservationOrderID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + "grain": autorest.Encode("query", grain), + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationSummaries", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByReservationOrderSender sends the ListByReservationOrder request. The method will close the +// http.Response Body if it receives an error. +func (client ReservationsSummariesClient) ListByReservationOrderSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListByReservationOrderResponder handles the response to the ListByReservationOrder request. The method always +// closes the http.Response Body. +func (client ReservationsSummariesClient) ListByReservationOrderResponder(resp *http.Response) (result ReservationSummariesListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByReservationOrderNextResults retrieves the next set of results, if any. +func (client ReservationsSummariesClient) listByReservationOrderNextResults(ctx context.Context, lastResults ReservationSummariesListResult) (result ReservationSummariesListResult, err error) { + req, err := lastResults.reservationSummariesListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByReservationOrderSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByReservationOrderResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByReservationOrderComplete enumerates all values, automatically crossing page boundaries as required. +func (client ReservationsSummariesClient) ListByReservationOrderComplete(ctx context.Context, reservationOrderID string, grain Datagrain, filter string) (result ReservationSummariesListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrder") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByReservationOrder(ctx, reservationOrderID, grain, filter) + return +} + +// ListByReservationOrderAndReservation lists the reservations summaries for daily or monthly grain. +// Parameters: +// reservationOrderID - order Id of the reservation +// reservationID - id of the reservation +// grain - can be daily or monthly +// filter - required only for daily grain. The properties/UsageDate for start date and end date. The filter +// supports 'le' and 'ge' +func (client ReservationsSummariesClient) ListByReservationOrderAndReservation(ctx context.Context, reservationOrderID string, reservationID string, grain Datagrain, filter string) (result ReservationSummariesListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrderAndReservation") + defer func() { + sc := -1 + if result.rslr.Response.Response != nil { + sc = result.rslr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.fn = client.listByReservationOrderAndReservationNextResults + req, err := client.ListByReservationOrderAndReservationPreparer(ctx, reservationOrderID, reservationID, grain, filter) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrderAndReservation", nil, "Failure preparing request") + return + } + + resp, err := client.ListByReservationOrderAndReservationSender(req) + if err != nil { + result.rslr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrderAndReservation", resp, "Failure sending request") + return + } + + result.rslr, err = client.ListByReservationOrderAndReservationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "ListByReservationOrderAndReservation", resp, "Failure responding to request") + } + + return +} + +// ListByReservationOrderAndReservationPreparer prepares the ListByReservationOrderAndReservation request. +func (client ReservationsSummariesClient) ListByReservationOrderAndReservationPreparer(ctx context.Context, reservationOrderID string, reservationID string, grain Datagrain, filter string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "reservationId": autorest.Encode("path", reservationID), + "reservationOrderId": autorest.Encode("path", reservationOrderID), + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + "grain": autorest.Encode("query", grain), + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationSummaries", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListByReservationOrderAndReservationSender sends the ListByReservationOrderAndReservation request. The method will close the +// http.Response Body if it receives an error. +func (client ReservationsSummariesClient) ListByReservationOrderAndReservationSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListByReservationOrderAndReservationResponder handles the response to the ListByReservationOrderAndReservation request. The method always +// closes the http.Response Body. +func (client ReservationsSummariesClient) ListByReservationOrderAndReservationResponder(resp *http.Response) (result ReservationSummariesListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listByReservationOrderAndReservationNextResults retrieves the next set of results, if any. +func (client ReservationsSummariesClient) listByReservationOrderAndReservationNextResults(ctx context.Context, lastResults ReservationSummariesListResult) (result ReservationSummariesListResult, err error) { + req, err := lastResults.reservationSummariesListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderAndReservationNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListByReservationOrderAndReservationSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderAndReservationNextResults", resp, "Failure sending next results request") + } + result, err = client.ListByReservationOrderAndReservationResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.ReservationsSummariesClient", "listByReservationOrderAndReservationNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListByReservationOrderAndReservationComplete enumerates all values, automatically crossing page boundaries as required. +func (client ReservationsSummariesClient) ListByReservationOrderAndReservationComplete(ctx context.Context, reservationOrderID string, reservationID string, grain Datagrain, filter string) (result ReservationSummariesListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/ReservationsSummariesClient.ListByReservationOrderAndReservation") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.ListByReservationOrderAndReservation(ctx, reservationOrderID, reservationID, grain, filter) + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/tags.go b/services/consumption/mgmt/2019-01-01/consumption/tags.go new file mode 100644 index 000000000000..92224553a1fb --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/tags.go @@ -0,0 +1,123 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// TagsClient is the consumption management client provides access to consumption resources for Azure Enterprise +// Subscriptions. +type TagsClient struct { + BaseClient +} + +// NewTagsClient creates an instance of the TagsClient client. +func NewTagsClient(subscriptionID string) TagsClient { + return NewTagsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewTagsClientWithBaseURI creates an instance of the TagsClient client. +func NewTagsClientWithBaseURI(baseURI string, subscriptionID string) TagsClient { + return TagsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// Get get all available tag keys for the defined scope +// Parameters: +// scope - the scope associated with tags operations. This includes '/subscriptions/{subscriptionId}/' for +// subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for resourceGroup +// scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/departments/{departmentId}' for Department +// scope, +// '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}/enrollmentAccounts/{enrollmentAccountId}' +// for EnrollmentAccount scope and '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for +// Management Group scope.. +func (client TagsClient) Get(ctx context.Context, scope string) (result TagsResult, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/TagsClient.Get") + defer func() { + sc := -1 + if result.Response.Response != nil { + sc = result.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + req, err := client.GetPreparer(ctx, scope) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.TagsClient", "Get", nil, "Failure preparing request") + return + } + + resp, err := client.GetSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.TagsClient", "Get", resp, "Failure sending request") + return + } + + result, err = client.GetResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.TagsClient", "Get", resp, "Failure responding to request") + } + + return +} + +// GetPreparer prepares the Get request. +func (client TagsClient) GetPreparer(ctx context.Context, scope string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "scope": scope, + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/tags", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// GetSender sends the Get request. The method will close the +// http.Response Body if it receives an error. +func (client TagsClient) GetSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// GetResponder handles the response to the Get request. The method always +// closes the http.Response Body. +func (client TagsClient) GetResponder(resp *http.Response) (result TagsResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/usagedetails.go b/services/consumption/mgmt/2019-01-01/consumption/usagedetails.go new file mode 100644 index 000000000000..633f2d85f8ca --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/usagedetails.go @@ -0,0 +1,200 @@ +package consumption + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +import ( + "context" + "github.com/Azure/go-autorest/autorest" + "github.com/Azure/go-autorest/autorest/azure" + "github.com/Azure/go-autorest/autorest/validation" + "github.com/Azure/go-autorest/tracing" + "net/http" +) + +// UsageDetailsClient is the consumption management client provides access to consumption resources for Azure +// Enterprise Subscriptions. +type UsageDetailsClient struct { + BaseClient +} + +// NewUsageDetailsClient creates an instance of the UsageDetailsClient client. +func NewUsageDetailsClient(subscriptionID string) UsageDetailsClient { + return NewUsageDetailsClientWithBaseURI(DefaultBaseURI, subscriptionID) +} + +// NewUsageDetailsClientWithBaseURI creates an instance of the UsageDetailsClient client. +func NewUsageDetailsClientWithBaseURI(baseURI string, subscriptionID string) UsageDetailsClient { + return UsageDetailsClient{NewWithBaseURI(baseURI, subscriptionID)} +} + +// List lists the usage details for the defined scope. Usage details are available via this API only for May 1, 2014 or +// later. +// Parameters: +// scope - the scope associated with usage details operations. This includes '/subscriptions/{subscriptionId}/' +// for subscription scope, '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}' for +// resourceGroup scope, '/providers/Microsoft.Billing/billingAccounts/{billingAccountId}' for Billing Account +// scope, '/providers/Microsoft.Billing/departments/{departmentId}' for Department scope, +// '/providers/Microsoft.Billing/enrollmentAccounts/{enrollmentAccountId}' for EnrollmentAccount scope and +// '/providers/Microsoft.Management/managementGroups/{managementGroupId}' for Management Group scope. For +// subscription, billing account, department, enrollment account and management group, you can also add billing +// period to the scope using '/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}'. For e.g. to +// specify billing period at department scope use +// '/providers/Microsoft.Billing/departments/{departmentId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}' +// expand - may be used to expand the properties/additionalProperties or properties/meterDetails within a list +// of usage details. By default, these fields are not included when listing usage details. +// filter - may be used to filter usageDetails by properties/usageEnd (Utc time), properties/usageStart (Utc +// time), properties/resourceGroup, properties/instanceName, properties/instanceId or tags. The filter supports +// 'eq', 'lt', 'gt', 'le', 'ge', and 'and'. It does not currently support 'ne', 'or', or 'not'. Tag filter is a +// key value pair string where key and value is separated by a colon (:). +// skiptoken - skiptoken is only used if a previous operation returned a partial result. If a previous response +// contains a nextLink element, the value of the nextLink element will include a skiptoken parameter that +// specifies a starting point to use for subsequent calls. +// top - may be used to limit the number of results to the most recent N usageDetails. +// apply - oData apply expression to aggregate usageDetails by tags or (tags and properties/usageStart) +func (client UsageDetailsClient) List(ctx context.Context, scope string, expand string, filter string, skiptoken string, top *int32, apply string) (result UsageDetailsListResultPage, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsageDetailsClient.List") + defer func() { + sc := -1 + if result.udlr.Response.Response != nil { + sc = result.udlr.Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + if err := validation.Validate([]validation.Validation{ + {TargetValue: top, + Constraints: []validation.Constraint{{Target: "top", Name: validation.Null, Rule: false, + Chain: []validation.Constraint{{Target: "top", Name: validation.InclusiveMaximum, Rule: int64(1000), Chain: nil}, + {Target: "top", Name: validation.InclusiveMinimum, Rule: 1, Chain: nil}, + }}}}}); err != nil { + return result, validation.NewError("consumption.UsageDetailsClient", "List", err.Error()) + } + + result.fn = client.listNextResults + req, err := client.ListPreparer(ctx, scope, expand, filter, skiptoken, top, apply) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "List", nil, "Failure preparing request") + return + } + + resp, err := client.ListSender(req) + if err != nil { + result.udlr.Response = autorest.Response{Response: resp} + err = autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "List", resp, "Failure sending request") + return + } + + result.udlr, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "List", resp, "Failure responding to request") + } + + return +} + +// ListPreparer prepares the List request. +func (client UsageDetailsClient) ListPreparer(ctx context.Context, scope string, expand string, filter string, skiptoken string, top *int32, apply string) (*http.Request, error) { + pathParameters := map[string]interface{}{ + "scope": scope, + } + + const APIVersion = "2019-01-01" + queryParameters := map[string]interface{}{ + "api-version": APIVersion, + } + if len(expand) > 0 { + queryParameters["$expand"] = autorest.Encode("query", expand) + } + if len(filter) > 0 { + queryParameters["$filter"] = autorest.Encode("query", filter) + } + if len(skiptoken) > 0 { + queryParameters["$skiptoken"] = autorest.Encode("query", skiptoken) + } + if top != nil { + queryParameters["$top"] = autorest.Encode("query", *top) + } + if len(apply) > 0 { + queryParameters["$apply"] = autorest.Encode("query", apply) + } + + preparer := autorest.CreatePreparer( + autorest.AsGet(), + autorest.WithBaseURL(client.BaseURI), + autorest.WithPathParameters("/{scope}/providers/Microsoft.Consumption/usageDetails", pathParameters), + autorest.WithQueryParameters(queryParameters)) + return preparer.Prepare((&http.Request{}).WithContext(ctx)) +} + +// ListSender sends the List request. The method will close the +// http.Response Body if it receives an error. +func (client UsageDetailsClient) ListSender(req *http.Request) (*http.Response, error) { + return autorest.SendWithSender(client, req, + autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) +} + +// ListResponder handles the response to the List request. The method always +// closes the http.Response Body. +func (client UsageDetailsClient) ListResponder(resp *http.Response) (result UsageDetailsListResult, err error) { + err = autorest.Respond( + resp, + client.ByInspecting(), + azure.WithErrorUnlessStatusCode(http.StatusOK), + autorest.ByUnmarshallingJSON(&result), + autorest.ByClosing()) + result.Response = autorest.Response{Response: resp} + return +} + +// listNextResults retrieves the next set of results, if any. +func (client UsageDetailsClient) listNextResults(ctx context.Context, lastResults UsageDetailsListResult) (result UsageDetailsListResult, err error) { + req, err := lastResults.usageDetailsListResultPreparer(ctx) + if err != nil { + return result, autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "listNextResults", nil, "Failure preparing next results request") + } + if req == nil { + return + } + resp, err := client.ListSender(req) + if err != nil { + result.Response = autorest.Response{Response: resp} + return result, autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "listNextResults", resp, "Failure sending next results request") + } + result, err = client.ListResponder(resp) + if err != nil { + err = autorest.NewErrorWithError(err, "consumption.UsageDetailsClient", "listNextResults", resp, "Failure responding to next results request") + } + return +} + +// ListComplete enumerates all values, automatically crossing page boundaries as required. +func (client UsageDetailsClient) ListComplete(ctx context.Context, scope string, expand string, filter string, skiptoken string, top *int32, apply string) (result UsageDetailsListResultIterator, err error) { + if tracing.IsEnabled() { + ctx = tracing.StartSpan(ctx, fqdn+"/UsageDetailsClient.List") + defer func() { + sc := -1 + if result.Response().Response.Response != nil { + sc = result.page.Response().Response.Response.StatusCode + } + tracing.EndSpan(ctx, sc, err) + }() + } + result.page, err = client.List(ctx, scope, expand, filter, skiptoken, top, apply) + return +} diff --git a/services/consumption/mgmt/2019-01-01/consumption/version.go b/services/consumption/mgmt/2019-01-01/consumption/version.go new file mode 100644 index 000000000000..8cd73c5389b0 --- /dev/null +++ b/services/consumption/mgmt/2019-01-01/consumption/version.go @@ -0,0 +1,30 @@ +package consumption + +import "github.com/Azure/azure-sdk-for-go/version" + +// Copyright (c) Microsoft and contributors. All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// +// See the License for the specific language governing permissions and +// limitations under the License. +// +// Code generated by Microsoft (R) AutoRest Code Generator. +// Changes may cause incorrect behavior and will be lost if the code is regenerated. + +// UserAgent returns the UserAgent string to use when sending http.Requests. +func UserAgent() string { + return "Azure-SDK-For-Go/" + version.Number + " consumption/2019-01-01" +} + +// Version returns the semantic version (see http://semver.org) of the client. +func Version() string { + return version.Number +}