diff --git a/linter_exclusions.yml b/linter_exclusions.yml index 444667c011e..140c52768ed 100644 --- a/linter_exclusions.yml +++ b/linter_exclusions.yml @@ -1382,6 +1382,9 @@ consumption budget create: resource_groups: rule_exclusions: - option_length_too_long +consumption budget update: + rule_exclusions: + - missing_command_example consumption pricesheet show: parameters: include_meter_details: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/_help.py b/src/azure-cli/azure/cli/command_modules/consumption/_help.py index 4d8bdd4cac4..9f8fece1a9b 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/_help.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/_help.py @@ -39,6 +39,14 @@ short-summary: List budgets for an Azure subscription. """ +helps['consumption budget update'] = """ +type: command +short-summary: Update a budget for an Azure subscription. +examples: + - name: Update the amount for a budget. + text: az consumption budget update --budget-name MyBudget --amount 200.0 +""" + helps['consumption budget show'] = """ type: command short-summary: Show budget for an Azure subscription. diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/__init__.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/__init__.py index 5757aea3175..f6acc11aa4e 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/__init__.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/__init__.py @@ -4,3 +4,7 @@ # # Code generated by aaz-dev-tools # -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/__cmd_group.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/__cmd_group.py index b2266170a61..ac122e347c4 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/__cmd_group.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/__cmd_group.py @@ -13,7 +13,6 @@ @register_command_group( "consumption budget", - is_preview=True, ) class __CMDGroup(AAZCommandGroup): """Manage budgets for an Azure subscription. diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_create.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_create.py index 86a8f3f73fb..ea2867cc6f1 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_create.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_create.py @@ -13,16 +13,15 @@ @register_command( "consumption budget create", - is_preview=True, ) class Create(AAZCommand): - """Create 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. + """Create operation to create or update a budget. You can optionally provide an eTag if desired as a form of concurrency control. To obtain the latest eTag for a given budget, perform a get operation prior to your put operation. """ _aaz_info = { - "version": "2023-05-01", + "version": "2024-08-01", "resources": [ - ["mgmt-plane", "/subscriptions/{}/providers/microsoft.consumption/budgets/{}", "2023-05-01"], + ["mgmt-plane", "/{scope}/providers/microsoft.consumption/budgets/{}", "2024-08-01"], ] } @@ -43,10 +42,15 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.budget_name = AAZStrArg( - options=["-n", "--name", "--budget-name"], + options=["--budget-name"], help="Budget Name.", required=True, ) + _args_schema.scope = AAZStrArg( + options=["--scope"], + help="The fully qualified Azure Resource manager identifier of the resource.", + required=True, + ) # define Arg Group "Parameters" @@ -69,12 +73,12 @@ def _build_arguments_schema(cls, *args, **kwargs): options=["--category"], arg_group="Properties", help="The category of the budget, whether the budget tracks cost or usage.", - enum={"Cost": "Cost", "Usage": "Usage"}, + enum={"Cost": "Cost"}, ) - _args_schema.filters = AAZObjectArg( - options=["--filters"], + _args_schema.filter = AAZObjectArg( + options=["--filter"], arg_group="Properties", - help="May be used to filter budgets by resource group, resource, or meter.", + help="May be used to filter budgets by user-specified dimensions and/or tags.", ) _args_schema.notifications = AAZDictArg( options=["--notifications"], @@ -84,37 +88,48 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema.time_grain = AAZStrArg( options=["--time-grain"], arg_group="Properties", - help="The time covered by a budget. Tracking of the amount will be reset based on the time grain.", - enum={"Annually": "Annually", "Monthly": "Monthly", "Quarterly": "Quarterly"}, + help="The time covered by a budget. Tracking of the amount will be reset based on the time grain. BillingMonth, BillingQuarter, and BillingAnnual are only supported by WD customers", + enum={"Annually": "Annually", "BillingAnnual": "BillingAnnual", "BillingMonth": "BillingMonth", "BillingQuarter": "BillingQuarter", "Monthly": "Monthly", "Quarterly": "Quarterly"}, ) _args_schema.time_period = AAZObjectArg( options=["--time-period"], arg_group="Properties", - help="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.", + help="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 twelve months. Past start date should be selected within the timegrain period. There are no restrictions on the end date.", ) - filters = cls._args_schema.filters - filters.meters = AAZListArg( - options=["meters"], - help="The list of filters on meters, mandatory for budgets of usage category. ", + filter = cls._args_schema.filter + filter.and_ = AAZListArg( + options=["and"], + help="The logical \"AND\" expression. Must have at least 2 items.", + fmt=AAZListArgFormat( + min_length=0, + ), ) - filters.resource_groups = AAZListArg( - options=["resource-groups"], - help="The list of filters on resource groups, allowed at subscription level only.", + filter.dimensions = AAZObjectArg( + options=["dimensions"], + help="Has comparison expression for a dimension", ) - filters.resources = AAZListArg( - options=["resources"], - help="The list of filters on resources.", + cls._build_args_budget_comparison_expression_create(filter.dimensions) + filter.tags = AAZObjectArg( + options=["tags"], + help="Has comparison expression for a tag", ) + cls._build_args_budget_comparison_expression_create(filter.tags) - meters = cls._args_schema.filters.meters - meters.Element = AAZStrArg() + and_ = cls._args_schema.filter.and_ + and_.Element = AAZObjectArg() - resource_groups = cls._args_schema.filters.resource_groups - resource_groups.Element = AAZStrArg() - - resources = cls._args_schema.filters.resources - resources.Element = AAZStrArg() + _element = cls._args_schema.filter.and_.Element + _element.dimensions = AAZObjectArg( + options=["dimensions"], + help="Has comparison expression for a dimension", + ) + cls._build_args_budget_comparison_expression_create(_element.dimensions) + _element.tags = AAZObjectArg( + options=["tags"], + help="Has comparison expression for a tag", + ) + cls._build_args_budget_comparison_expression_create(_element.tags) notifications = cls._args_schema.notifications notifications.Element = AAZObjectArg() @@ -122,12 +137,20 @@ def _build_arguments_schema(cls, *args, **kwargs): _element = cls._args_schema.notifications.Element _element.contact_emails = AAZListArg( options=["contact-emails"], - help="Email addresses to send the budget notification to when the threshold is exceeded.", + help="Email addresses to send the budget notification to when the threshold is exceeded. Must have at least one contact email or contact group specified at the Subscription or Resource Group scopes. All other scopes must have at least one contact email specified.", required=True, + fmt=AAZListArgFormat( + max_length=50, + min_length=0, + ), ) _element.contact_groups = AAZListArg( options=["contact-groups"], - help="Action groups to send the budget notification to when the threshold is exceeded.", + help="Action groups to send the budget notification to when the threshold is exceeded. Must be provided as a fully qualified Azure resource id. Only supported at Subscription or Resource Group scopes.", + fmt=AAZListArgFormat( + max_length=50, + min_length=0, + ), ) _element.contact_roles = AAZListArg( options=["contact-roles"], @@ -138,6 +161,11 @@ def _build_arguments_schema(cls, *args, **kwargs): help="The notification is enabled or not.", required=True, ) + _element.locale = AAZStrArg( + options=["locale"], + help="Language in which the recipient will receive the notification", + enum={"cs-cz": "cs-cz", "da-dk": "da-dk", "de-de": "de-de", "en-gb": "en-gb", "en-us": "en-us", "es-es": "es-es", "fr-fr": "fr-fr", "hu-hu": "hu-hu", "it-it": "it-it", "ja-jp": "ja-jp", "ko-kr": "ko-kr", "nb-no": "nb-no", "nl-nl": "nl-nl", "pl-pl": "pl-pl", "pt-br": "pt-br", "pt-pt": "pt-pt", "ru-ru": "ru-ru", "sv-se": "sv-se", "tr-tr": "tr-tr", "zh-cn": "zh-cn", "zh-tw": "zh-tw"}, + ) _element.operator = AAZStrArg( options=["operator"], help="The comparison operator.", @@ -149,6 +177,12 @@ def _build_arguments_schema(cls, *args, **kwargs): help="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.", required=True, ) + _element.threshold_type = AAZStrArg( + options=["threshold-type"], + help="The type of threshold", + default="Actual", + enum={"Actual": "Actual", "Forecasted": "Forecasted"}, + ) contact_emails = cls._args_schema.notifications.Element.contact_emails contact_emails.Element = AAZStrArg() @@ -163,14 +197,60 @@ def _build_arguments_schema(cls, *args, **kwargs): time_period.end_date = AAZDateTimeArg( options=["end-date"], help="The end date for the budget. If not provided, we default this to 10 years from the start date.", + fmt=AAZDateTimeFormat( + protocol="iso", + ), ) time_period.start_date = AAZDateTimeArg( options=["start-date"], help="The start date for the budget.", required=True, + fmt=AAZDateTimeFormat( + protocol="iso", + ), ) return cls._args_schema + _args_budget_comparison_expression_create = None + + @classmethod + def _build_args_budget_comparison_expression_create(cls, _schema): + if cls._args_budget_comparison_expression_create is not None: + _schema.name = cls._args_budget_comparison_expression_create.name + _schema.operator = cls._args_budget_comparison_expression_create.operator + _schema.values = cls._args_budget_comparison_expression_create.values + return + + cls._args_budget_comparison_expression_create = AAZObjectArg() + + budget_comparison_expression_create = cls._args_budget_comparison_expression_create + budget_comparison_expression_create.name = AAZStrArg( + options=["name"], + help="The name of the column to use in comparison.", + required=True, + ) + budget_comparison_expression_create.operator = AAZStrArg( + options=["operator"], + help="The operator to use for comparison.", + required=True, + enum={"In": "In"}, + ) + budget_comparison_expression_create.values = AAZListArg( + options=["values"], + help="Array of values to use for comparison", + required=True, + fmt=AAZListArgFormat( + min_length=0, + ), + ) + + values = cls._args_budget_comparison_expression_create.values + values.Element = AAZStrArg() + + _schema.name = cls._args_budget_comparison_expression_create.name + _schema.operator = cls._args_budget_comparison_expression_create.operator + _schema.values = cls._args_budget_comparison_expression_create.values + def _execute_operations(self): self.pre_operations() self.BudgetsCreateOrUpdate(ctx=self.ctx)() @@ -202,7 +282,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets/{budgetName}", + "/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", **self.url_parameters ) @@ -212,7 +292,7 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): @@ -222,7 +302,8 @@ def url_parameters(self): required=True, ), **self.serialize_url_param( - "subscriptionId", self.ctx.subscription_id, + "scope", self.ctx.args.scope, + skip_quote=True, required=True, ), } @@ -232,7 +313,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -264,28 +345,25 @@ def content(self): if properties is not None: properties.set_prop("amount", AAZFloatType, ".amount", typ_kwargs={"flags": {"required": True}}) properties.set_prop("category", AAZStrType, ".category", typ_kwargs={"flags": {"required": True}}) - properties.set_prop("filters", AAZObjectType, ".filters") + properties.set_prop("filter", AAZObjectType, ".filter") properties.set_prop("notifications", AAZDictType, ".notifications") properties.set_prop("timeGrain", AAZStrType, ".time_grain", typ_kwargs={"flags": {"required": True}}) properties.set_prop("timePeriod", AAZObjectType, ".time_period", typ_kwargs={"flags": {"required": True}}) - filters = _builder.get(".properties.filters") - if filters is not None: - filters.set_prop("meters", AAZListType, ".meters") - filters.set_prop("resourceGroups", AAZListType, ".resource_groups") - filters.set_prop("resources", AAZListType, ".resources") + filter = _builder.get(".properties.filter") + if filter is not None: + filter.set_prop("and", AAZListType, ".and_") + _CreateHelper._build_schema_budget_comparison_expression_create(filter.set_prop("dimensions", AAZObjectType, ".dimensions")) + _CreateHelper._build_schema_budget_comparison_expression_create(filter.set_prop("tags", AAZObjectType, ".tags")) - meters = _builder.get(".properties.filters.meters") - if meters is not None: - meters.set_elements(AAZStrType, ".") + and_ = _builder.get(".properties.filter.and") + if and_ is not None: + and_.set_elements(AAZObjectType, ".") - resource_groups = _builder.get(".properties.filters.resourceGroups") - if resource_groups is not None: - resource_groups.set_elements(AAZStrType, ".") - - resources = _builder.get(".properties.filters.resources") - if resources is not None: - resources.set_elements(AAZStrType, ".") + _elements = _builder.get(".properties.filter.and[]") + if _elements is not None: + _CreateHelper._build_schema_budget_comparison_expression_create(_elements.set_prop("dimensions", AAZObjectType, ".dimensions")) + _CreateHelper._build_schema_budget_comparison_expression_create(_elements.set_prop("tags", AAZObjectType, ".tags")) notifications = _builder.get(".properties.notifications") if notifications is not None: @@ -297,8 +375,10 @@ def content(self): _elements.set_prop("contactGroups", AAZListType, ".contact_groups") _elements.set_prop("contactRoles", AAZListType, ".contact_roles") _elements.set_prop("enabled", AAZBoolType, ".enabled", typ_kwargs={"flags": {"required": True}}) + _elements.set_prop("locale", AAZStrType, ".locale") _elements.set_prop("operator", AAZStrType, ".operator", typ_kwargs={"flags": {"required": True}}) _elements.set_prop("threshold", AAZFloatType, ".threshold", typ_kwargs={"flags": {"required": True}}) + _elements.set_prop("thresholdType", AAZStrType, ".threshold_type") contact_emails = _builder.get(".properties.notifications{}.contactEmails") if contact_emails is not None: @@ -349,6 +429,10 @@ def _build_schema_on_200_201(cls): _schema_on_200_201.properties = AAZObjectType( flags={"client_flatten": True}, ) + _schema_on_200_201.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _schema_on_200_201.type = AAZStrType( flags={"read_only": True}, ) @@ -362,8 +446,13 @@ def _build_schema_on_200_201(cls): ) properties.current_spend = AAZObjectType( serialized_name="currentSpend", + flags={"read_only": True}, + ) + properties.filter = AAZObjectType() + properties.forecast_spend = AAZObjectType( + serialized_name="forecastSpend", + flags={"read_only": True}, ) - properties.filters = AAZObjectType() properties.notifications = AAZDictType() properties.time_grain = AAZStrType( serialized_name="timeGrain", @@ -382,21 +471,29 @@ def _build_schema_on_200_201(cls): flags={"read_only": True}, ) - filters = cls._schema_on_200_201.properties.filters - filters.meters = AAZListType() - filters.resource_groups = AAZListType( - serialized_name="resourceGroups", - ) - filters.resources = AAZListType() + filter = cls._schema_on_200_201.properties.filter + filter["and"] = AAZListType() + filter.dimensions = AAZObjectType() + _CreateHelper._build_schema_budget_comparison_expression_read(filter.dimensions) + filter.tags = AAZObjectType() + _CreateHelper._build_schema_budget_comparison_expression_read(filter.tags) - meters = cls._schema_on_200_201.properties.filters.meters - meters.Element = AAZStrType() + and_ = cls._schema_on_200_201.properties.filter["and"] + and_.Element = AAZObjectType() - resource_groups = cls._schema_on_200_201.properties.filters.resource_groups - resource_groups.Element = AAZStrType() + _element = cls._schema_on_200_201.properties.filter["and"].Element + _element.dimensions = AAZObjectType() + _CreateHelper._build_schema_budget_comparison_expression_read(_element.dimensions) + _element.tags = AAZObjectType() + _CreateHelper._build_schema_budget_comparison_expression_read(_element.tags) - resources = cls._schema_on_200_201.properties.filters.resources - resources.Element = AAZStrType() + forecast_spend = cls._schema_on_200_201.properties.forecast_spend + forecast_spend.amount = AAZFloatType( + flags={"read_only": True}, + ) + forecast_spend.unit = AAZStrType( + flags={"read_only": True}, + ) notifications = cls._schema_on_200_201.properties.notifications notifications.Element = AAZObjectType() @@ -415,12 +512,16 @@ def _build_schema_on_200_201(cls): _element.enabled = AAZBoolType( flags={"required": True}, ) + _element.locale = AAZStrType() _element.operator = AAZStrType( flags={"required": True}, ) _element.threshold = AAZFloatType( flags={"required": True}, ) + _element.threshold_type = AAZStrType( + serialized_name="thresholdType", + ) contact_emails = cls._schema_on_200_201.properties.notifications.Element.contact_emails contact_emails.Element = AAZStrType() @@ -440,11 +541,73 @@ def _build_schema_on_200_201(cls): flags={"required": True}, ) + system_data = cls._schema_on_200_201.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", + ) + system_data.created_by = AAZStrType( + serialized_name="createdBy", + ) + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", + ) + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", + ) + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", + ) + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", + ) + return cls._schema_on_200_201 class _CreateHelper: """Helper class for Create""" + @classmethod + def _build_schema_budget_comparison_expression_create(cls, _builder): + if _builder is None: + return + _builder.set_prop("name", AAZStrType, ".name", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("operator", AAZStrType, ".operator", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("values", AAZListType, ".values", typ_kwargs={"flags": {"required": True}}) + + values = _builder.get(".values") + if values is not None: + values.set_elements(AAZStrType, ".") + + _schema_budget_comparison_expression_read = None + + @classmethod + def _build_schema_budget_comparison_expression_read(cls, _schema): + if cls._schema_budget_comparison_expression_read is not None: + _schema.name = cls._schema_budget_comparison_expression_read.name + _schema.operator = cls._schema_budget_comparison_expression_read.operator + _schema.values = cls._schema_budget_comparison_expression_read.values + return + + cls._schema_budget_comparison_expression_read = _schema_budget_comparison_expression_read = AAZObjectType() + + budget_comparison_expression_read = _schema_budget_comparison_expression_read + budget_comparison_expression_read.name = AAZStrType( + flags={"required": True}, + ) + budget_comparison_expression_read.operator = AAZStrType( + flags={"required": True}, + ) + budget_comparison_expression_read.values = AAZListType( + flags={"required": True}, + ) + + values = _schema_budget_comparison_expression_read.values + values.Element = AAZStrType() + + _schema.name = cls._schema_budget_comparison_expression_read.name + _schema.operator = cls._schema_budget_comparison_expression_read.operator + _schema.values = cls._schema_budget_comparison_expression_read.values + __all__ = ["Create"] diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_create_with_rg.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_create_with_rg.py index d2c62508505..84acf3a7e79 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_create_with_rg.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_create_with_rg.py @@ -20,9 +20,9 @@ class CreateWithRg(AAZCommand): """ _aaz_info = { - "version": "2023-05-01", + "version": "2018-01-31", "resources": [ - ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.consumption/budgets/{}", "2023-05-01"], + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.consumption/budgets/{}", "2018-01-31"], ] } @@ -240,7 +240,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2018-01-31", required=True, ), } diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_delete.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_delete.py index 7d2900f26ae..08b77265787 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_delete.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_delete.py @@ -13,16 +13,16 @@ @register_command( "consumption budget delete", - is_preview=True, + confirmation="Are you sure you want to perform this operation?", ) class Delete(AAZCommand): """Delete operation to delete a budget. """ _aaz_info = { - "version": "2023-05-01", + "version": "2024-08-01", "resources": [ - ["mgmt-plane", "/subscriptions/{}/providers/microsoft.consumption/budgets/{}", "2023-05-01"], + ["mgmt-plane", "/{scope}/providers/microsoft.consumption/budgets/{}", "2024-08-01"], ] } @@ -43,10 +43,14 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.budget_name = AAZStrArg( - options=["-n", "--name", "--budget-name"], + options=["--budget-name"], help="Budget Name.", required=True, - id_part="name", + ) + _args_schema.scope = AAZStrArg( + options=["--scope"], + help="The fully qualified Azure Resource manager identifier of the resource.", + required=True, ) return cls._args_schema @@ -77,7 +81,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets/{budgetName}", + "/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", **self.url_parameters ) @@ -87,7 +91,7 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): @@ -97,7 +101,8 @@ def url_parameters(self): required=True, ), **self.serialize_url_param( - "subscriptionId", self.ctx.subscription_id, + "scope", self.ctx.args.scope, + skip_quote=True, required=True, ), } @@ -107,7 +112,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_delete_with_rg.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_delete_with_rg.py index 287aada6fbc..c52df39a33a 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_delete_with_rg.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_delete_with_rg.py @@ -20,9 +20,9 @@ class DeleteWithRg(AAZCommand): """ _aaz_info = { - "version": "2023-05-01", + "version": "2018-01-31", "resources": [ - ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.consumption/budgets/{}", "2023-05-01"], + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.consumption/budgets/{}", "2018-01-31"], ] } @@ -114,7 +114,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2018-01-31", required=True, ), } diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_list.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_list.py index 7dd237a599c..6dcb4ca2761 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_list.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_list.py @@ -13,17 +13,15 @@ @register_command( "consumption budget list", - is_preview=True, ) class List(AAZCommand): - """List budgets for an Azure subscription. + """List all budgets for the defined scope. """ _aaz_info = { - "version": "2023-05-01", + "version": "2024-08-01", "resources": [ - ["mgmt-plane", "/subscriptions/{}/providers/microsoft.consumption/budgets", "2023-05-01"], - ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.consumption/budgets", "2023-05-01"], + ["mgmt-plane", "/{scope}/providers/microsoft.consumption/budgets", "2024-08-01"], ] } @@ -44,17 +42,16 @@ def _build_arguments_schema(cls, *args, **kwargs): # define Arg Group "" _args_schema = cls._args_schema - _args_schema.resource_group = AAZResourceGroupNameArg() + _args_schema.scope = AAZStrArg( + options=["--scope"], + help="The fully qualified Azure Resource manager identifier of the resource.", + required=True, + ) return cls._args_schema def _execute_operations(self): self.pre_operations() - condition_0 = has_value(self.ctx.args.resource_group) and has_value(self.ctx.subscription_id) - condition_1 = has_value(self.ctx.subscription_id) and has_value(self.ctx.args.resource_group) is not True - if condition_0: - self.BudgetsListByResourceGroupName(ctx=self.ctx)() - if condition_1: - self.BudgetsList(ctx=self.ctx)() + self.BudgetsList(ctx=self.ctx)() self.post_operations() @register_callback @@ -70,7 +67,7 @@ def _output(self, *args, **kwargs): next_link = self.deserialize_output(self.ctx.vars.instance.next_link) return result, next_link - class BudgetsListByResourceGroupName(AAZHttpOperation): + class BudgetsList(AAZHttpOperation): CLIENT_TYPE = "MgmtClient" def __call__(self, *args, **kwargs): @@ -84,7 +81,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Consumption/budgets", + "/{scope}/providers/Microsoft.Consumption/budgets", **self.url_parameters ) @@ -94,17 +91,14 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): parameters = { **self.serialize_url_param( - "resourceGroupName", self.ctx.args.resource_group, - required=True, - ), - **self.serialize_url_param( - "subscriptionId", self.ctx.subscription_id, + "scope", self.ctx.args.scope, + skip_quote=True, required=True, ), } @@ -114,7 +108,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -171,6 +165,10 @@ def _build_schema_on_200(cls): _element.properties = AAZObjectType( flags={"client_flatten": True}, ) + _element.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _element.type = AAZStrType( flags={"read_only": True}, ) @@ -184,8 +182,13 @@ def _build_schema_on_200(cls): ) properties.current_spend = AAZObjectType( serialized_name="currentSpend", + flags={"read_only": True}, + ) + properties.filter = AAZObjectType() + properties.forecast_spend = AAZObjectType( + serialized_name="forecastSpend", + flags={"read_only": True}, ) - properties.filters = AAZObjectType() properties.notifications = AAZDictType() properties.time_grain = AAZStrType( serialized_name="timeGrain", @@ -204,21 +207,29 @@ def _build_schema_on_200(cls): flags={"read_only": True}, ) - filters = cls._schema_on_200.value.Element.properties.filters - filters.meters = AAZListType() - filters.resource_groups = AAZListType( - serialized_name="resourceGroups", - ) - filters.resources = AAZListType() + filter = cls._schema_on_200.value.Element.properties.filter + filter["and"] = AAZListType() + filter.dimensions = AAZObjectType() + _ListHelper._build_schema_budget_comparison_expression_read(filter.dimensions) + filter.tags = AAZObjectType() + _ListHelper._build_schema_budget_comparison_expression_read(filter.tags) - meters = cls._schema_on_200.value.Element.properties.filters.meters - meters.Element = AAZStrType() + and_ = cls._schema_on_200.value.Element.properties.filter["and"] + and_.Element = AAZObjectType() - resource_groups = cls._schema_on_200.value.Element.properties.filters.resource_groups - resource_groups.Element = AAZStrType() + _element = cls._schema_on_200.value.Element.properties.filter["and"].Element + _element.dimensions = AAZObjectType() + _ListHelper._build_schema_budget_comparison_expression_read(_element.dimensions) + _element.tags = AAZObjectType() + _ListHelper._build_schema_budget_comparison_expression_read(_element.tags) - resources = cls._schema_on_200.value.Element.properties.filters.resources - resources.Element = AAZStrType() + forecast_spend = cls._schema_on_200.value.Element.properties.forecast_spend + forecast_spend.amount = AAZFloatType( + flags={"read_only": True}, + ) + forecast_spend.unit = AAZStrType( + flags={"read_only": True}, + ) notifications = cls._schema_on_200.value.Element.properties.notifications notifications.Element = AAZObjectType() @@ -237,12 +248,16 @@ def _build_schema_on_200(cls): _element.enabled = AAZBoolType( flags={"required": True}, ) + _element.locale = AAZStrType() _element.operator = AAZStrType( flags={"required": True}, ) _element.threshold = AAZFloatType( flags={"required": True}, ) + _element.threshold_type = AAZStrType( + serialized_name="thresholdType", + ) contact_emails = cls._schema_on_200.value.Element.properties.notifications.Element.contact_emails contact_emails.Element = AAZStrType() @@ -262,194 +277,24 @@ def _build_schema_on_200(cls): flags={"required": True}, ) - return cls._schema_on_200 - - class BudgetsList(AAZHttpOperation): - CLIENT_TYPE = "MgmtClient" - - def __call__(self, *args, **kwargs): - request = self.make_request() - session = self.client.send_request(request=request, stream=False, **kwargs) - if session.http_response.status_code in [200]: - return self.on_200(session) - - return self.on_error(session.http_response) - - @property - def url(self): - return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets", - **self.url_parameters + system_data = cls._schema_on_200.value.Element.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", ) - - @property - def method(self): - return "GET" - - @property - def error_format(self): - return "ODataV4Format" - - @property - def url_parameters(self): - parameters = { - **self.serialize_url_param( - "subscriptionId", self.ctx.subscription_id, - required=True, - ), - } - return parameters - - @property - def query_parameters(self): - parameters = { - **self.serialize_query_param( - "api-version", "2023-05-01", - required=True, - ), - } - return parameters - - @property - def header_parameters(self): - parameters = { - **self.serialize_header_param( - "Accept", "application/json", - ), - } - return parameters - - def on_200(self, session): - data = self.deserialize_http_content(session) - self.ctx.set_var( - "instance", - data, - schema_builder=self._build_schema_on_200 + system_data.created_by = AAZStrType( + serialized_name="createdBy", ) - - _schema_on_200 = None - - @classmethod - def _build_schema_on_200(cls): - if cls._schema_on_200 is not None: - return cls._schema_on_200 - - cls._schema_on_200 = AAZObjectType() - - _schema_on_200 = cls._schema_on_200 - _schema_on_200.next_link = AAZStrType( - serialized_name="nextLink", - flags={"read_only": True}, + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", ) - _schema_on_200.value = AAZListType( - flags={"read_only": True}, + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", ) - - value = cls._schema_on_200.value - value.Element = AAZObjectType() - - _element = cls._schema_on_200.value.Element - _element.e_tag = AAZStrType( - serialized_name="eTag", - ) - _element.id = AAZStrType( - flags={"read_only": True}, - ) - _element.name = AAZStrType( - flags={"read_only": True}, - ) - _element.properties = AAZObjectType( - flags={"client_flatten": True}, - ) - _element.type = AAZStrType( - flags={"read_only": True}, - ) - - properties = cls._schema_on_200.value.Element.properties - properties.amount = AAZFloatType( - flags={"required": True}, - ) - properties.category = AAZStrType( - flags={"required": True}, - ) - properties.current_spend = AAZObjectType( - serialized_name="currentSpend", - ) - properties.filters = AAZObjectType() - properties.notifications = AAZDictType() - properties.time_grain = AAZStrType( - serialized_name="timeGrain", - flags={"required": True}, - ) - properties.time_period = AAZObjectType( - serialized_name="timePeriod", - flags={"required": True}, - ) - - current_spend = cls._schema_on_200.value.Element.properties.current_spend - current_spend.amount = AAZFloatType( - flags={"read_only": True}, - ) - current_spend.unit = AAZStrType( - flags={"read_only": True}, - ) - - filters = cls._schema_on_200.value.Element.properties.filters - filters.meters = AAZListType() - filters.resource_groups = AAZListType( - serialized_name="resourceGroups", - ) - filters.resources = AAZListType() - - meters = cls._schema_on_200.value.Element.properties.filters.meters - meters.Element = AAZStrType() - - resource_groups = cls._schema_on_200.value.Element.properties.filters.resource_groups - resource_groups.Element = AAZStrType() - - resources = cls._schema_on_200.value.Element.properties.filters.resources - resources.Element = AAZStrType() - - notifications = cls._schema_on_200.value.Element.properties.notifications - notifications.Element = AAZObjectType() - - _element = cls._schema_on_200.value.Element.properties.notifications.Element - _element.contact_emails = AAZListType( - serialized_name="contactEmails", - flags={"required": True}, - ) - _element.contact_groups = AAZListType( - serialized_name="contactGroups", - ) - _element.contact_roles = AAZListType( - serialized_name="contactRoles", - ) - _element.enabled = AAZBoolType( - flags={"required": True}, - ) - _element.operator = AAZStrType( - flags={"required": True}, + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", ) - _element.threshold = AAZFloatType( - flags={"required": True}, - ) - - contact_emails = cls._schema_on_200.value.Element.properties.notifications.Element.contact_emails - contact_emails.Element = AAZStrType() - - contact_groups = cls._schema_on_200.value.Element.properties.notifications.Element.contact_groups - contact_groups.Element = AAZStrType() - - contact_roles = cls._schema_on_200.value.Element.properties.notifications.Element.contact_roles - contact_roles.Element = AAZStrType() - - time_period = cls._schema_on_200.value.Element.properties.time_period - time_period.end_date = AAZStrType( - serialized_name="endDate", - ) - time_period.start_date = AAZStrType( - serialized_name="startDate", - flags={"required": True}, + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", ) return cls._schema_on_200 @@ -458,5 +303,35 @@ def _build_schema_on_200(cls): class _ListHelper: """Helper class for List""" + _schema_budget_comparison_expression_read = None + + @classmethod + def _build_schema_budget_comparison_expression_read(cls, _schema): + if cls._schema_budget_comparison_expression_read is not None: + _schema.name = cls._schema_budget_comparison_expression_read.name + _schema.operator = cls._schema_budget_comparison_expression_read.operator + _schema.values = cls._schema_budget_comparison_expression_read.values + return + + cls._schema_budget_comparison_expression_read = _schema_budget_comparison_expression_read = AAZObjectType() + + budget_comparison_expression_read = _schema_budget_comparison_expression_read + budget_comparison_expression_read.name = AAZStrType( + flags={"required": True}, + ) + budget_comparison_expression_read.operator = AAZStrType( + flags={"required": True}, + ) + budget_comparison_expression_read.values = AAZListType( + flags={"required": True}, + ) + + values = _schema_budget_comparison_expression_read.values + values.Element = AAZStrType() + + _schema.name = cls._schema_budget_comparison_expression_read.name + _schema.operator = cls._schema_budget_comparison_expression_read.operator + _schema.values = cls._schema_budget_comparison_expression_read.values + __all__ = ["List"] diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_show.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_show.py index 42e1cfb9bd6..4932437b7a7 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_show.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_show.py @@ -13,16 +13,15 @@ @register_command( "consumption budget show", - is_preview=True, ) class Show(AAZCommand): - """Get the budget for a subscription by budget name. + """Get the budget for the scope by budget name. """ _aaz_info = { - "version": "2023-05-01", + "version": "2024-08-01", "resources": [ - ["mgmt-plane", "/subscriptions/{}/providers/microsoft.consumption/budgets/{}", "2023-05-01"], + ["mgmt-plane", "/{scope}/providers/microsoft.consumption/budgets/{}", "2024-08-01"], ] } @@ -43,10 +42,14 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.budget_name = AAZStrArg( - options=["-n", "--name", "--budget-name"], + options=["--budget-name"], help="Budget Name.", required=True, - id_part="name", + ) + _args_schema.scope = AAZStrArg( + options=["--scope"], + help="The fully qualified Azure Resource manager identifier of the resource.", + required=True, ) return cls._args_schema @@ -81,7 +84,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets/{budgetName}", + "/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", **self.url_parameters ) @@ -91,7 +94,7 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): @@ -101,7 +104,8 @@ def url_parameters(self): required=True, ), **self.serialize_url_param( - "subscriptionId", self.ctx.subscription_id, + "scope", self.ctx.args.scope, + skip_quote=True, required=True, ), } @@ -111,7 +115,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -156,6 +160,10 @@ def _build_schema_on_200(cls): _schema_on_200.properties = AAZObjectType( flags={"client_flatten": True}, ) + _schema_on_200.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _schema_on_200.type = AAZStrType( flags={"read_only": True}, ) @@ -169,8 +177,13 @@ def _build_schema_on_200(cls): ) properties.current_spend = AAZObjectType( serialized_name="currentSpend", + flags={"read_only": True}, + ) + properties.filter = AAZObjectType() + properties.forecast_spend = AAZObjectType( + serialized_name="forecastSpend", + flags={"read_only": True}, ) - properties.filters = AAZObjectType() properties.notifications = AAZDictType() properties.time_grain = AAZStrType( serialized_name="timeGrain", @@ -189,21 +202,29 @@ def _build_schema_on_200(cls): flags={"read_only": True}, ) - filters = cls._schema_on_200.properties.filters - filters.meters = AAZListType() - filters.resource_groups = AAZListType( - serialized_name="resourceGroups", - ) - filters.resources = AAZListType() + filter = cls._schema_on_200.properties.filter + filter["and"] = AAZListType() + filter.dimensions = AAZObjectType() + _ShowHelper._build_schema_budget_comparison_expression_read(filter.dimensions) + filter.tags = AAZObjectType() + _ShowHelper._build_schema_budget_comparison_expression_read(filter.tags) - meters = cls._schema_on_200.properties.filters.meters - meters.Element = AAZStrType() + and_ = cls._schema_on_200.properties.filter["and"] + and_.Element = AAZObjectType() - resource_groups = cls._schema_on_200.properties.filters.resource_groups - resource_groups.Element = AAZStrType() + _element = cls._schema_on_200.properties.filter["and"].Element + _element.dimensions = AAZObjectType() + _ShowHelper._build_schema_budget_comparison_expression_read(_element.dimensions) + _element.tags = AAZObjectType() + _ShowHelper._build_schema_budget_comparison_expression_read(_element.tags) - resources = cls._schema_on_200.properties.filters.resources - resources.Element = AAZStrType() + forecast_spend = cls._schema_on_200.properties.forecast_spend + forecast_spend.amount = AAZFloatType( + flags={"read_only": True}, + ) + forecast_spend.unit = AAZStrType( + flags={"read_only": True}, + ) notifications = cls._schema_on_200.properties.notifications notifications.Element = AAZObjectType() @@ -222,12 +243,16 @@ def _build_schema_on_200(cls): _element.enabled = AAZBoolType( flags={"required": True}, ) + _element.locale = AAZStrType() _element.operator = AAZStrType( flags={"required": True}, ) _element.threshold = AAZFloatType( flags={"required": True}, ) + _element.threshold_type = AAZStrType( + serialized_name="thresholdType", + ) contact_emails = cls._schema_on_200.properties.notifications.Element.contact_emails contact_emails.Element = AAZStrType() @@ -247,11 +272,61 @@ def _build_schema_on_200(cls): flags={"required": True}, ) + system_data = cls._schema_on_200.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", + ) + system_data.created_by = AAZStrType( + serialized_name="createdBy", + ) + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", + ) + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", + ) + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", + ) + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", + ) + return cls._schema_on_200 class _ShowHelper: """Helper class for Show""" + _schema_budget_comparison_expression_read = None + + @classmethod + def _build_schema_budget_comparison_expression_read(cls, _schema): + if cls._schema_budget_comparison_expression_read is not None: + _schema.name = cls._schema_budget_comparison_expression_read.name + _schema.operator = cls._schema_budget_comparison_expression_read.operator + _schema.values = cls._schema_budget_comparison_expression_read.values + return + + cls._schema_budget_comparison_expression_read = _schema_budget_comparison_expression_read = AAZObjectType() + + budget_comparison_expression_read = _schema_budget_comparison_expression_read + budget_comparison_expression_read.name = AAZStrType( + flags={"required": True}, + ) + budget_comparison_expression_read.operator = AAZStrType( + flags={"required": True}, + ) + budget_comparison_expression_read.values = AAZListType( + flags={"required": True}, + ) + + values = _schema_budget_comparison_expression_read.values + values.Element = AAZStrType() + + _schema.name = cls._schema_budget_comparison_expression_read.name + _schema.operator = cls._schema_budget_comparison_expression_read.operator + _schema.values = cls._schema_budget_comparison_expression_read.values + __all__ = ["Show"] diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_show_with_rg.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_show_with_rg.py index 4ecec430b56..f51716b4478 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_show_with_rg.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_show_with_rg.py @@ -20,9 +20,9 @@ class ShowWithRg(AAZCommand): """ _aaz_info = { - "version": "2023-05-01", + "version": "2018-01-31", "resources": [ - ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.consumption/budgets/{}", "2023-05-01"], + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.consumption/budgets/{}", "2018-01-31"], ] } @@ -118,7 +118,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2018-01-31", required=True, ), } diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_update.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_update.py index d3660d4dc67..8538de0c489 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_update.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_update.py @@ -13,16 +13,15 @@ @register_command( "consumption budget update", - is_preview=True, ) class Update(AAZCommand): - """Update 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. + """Update operation to create or update a budget. You can optionally provide an eTag if desired as a form of concurrency control. To obtain the latest eTag for a given budget, perform a get operation prior to your put operation. """ _aaz_info = { - "version": "2023-05-01", + "version": "2024-08-01", "resources": [ - ["mgmt-plane", "/subscriptions/{}/providers/microsoft.consumption/budgets/{}", "2023-05-01"], + ["mgmt-plane", "/{scope}/providers/microsoft.consumption/budgets/{}", "2024-08-01"], ] } @@ -45,10 +44,14 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema = cls._args_schema _args_schema.budget_name = AAZStrArg( - options=["-n", "--name", "--budget-name"], + options=["--budget-name"], help="Budget Name.", required=True, - id_part="name", + ) + _args_schema.scope = AAZStrArg( + options=["--scope"], + help="The fully qualified Azure Resource manager identifier of the resource.", + required=True, ) # define Arg Group "Parameters" @@ -73,12 +76,12 @@ def _build_arguments_schema(cls, *args, **kwargs): options=["--category"], arg_group="Properties", help="The category of the budget, whether the budget tracks cost or usage.", - enum={"Cost": "Cost", "Usage": "Usage"}, + enum={"Cost": "Cost"}, ) - _args_schema.filters = AAZObjectArg( - options=["--filters"], + _args_schema.filter = AAZObjectArg( + options=["--filter"], arg_group="Properties", - help="May be used to filter budgets by resource group, resource, or meter.", + help="May be used to filter budgets by user-specified dimensions and/or tags.", nullable=True, ) _args_schema.notifications = AAZDictArg( @@ -90,46 +93,55 @@ def _build_arguments_schema(cls, *args, **kwargs): _args_schema.time_grain = AAZStrArg( options=["--time-grain"], arg_group="Properties", - help="The time covered by a budget. Tracking of the amount will be reset based on the time grain.", - enum={"Annually": "Annually", "Monthly": "Monthly", "Quarterly": "Quarterly"}, + help="The time covered by a budget. Tracking of the amount will be reset based on the time grain. BillingMonth, BillingQuarter, and BillingAnnual are only supported by WD customers", + enum={"Annually": "Annually", "BillingAnnual": "BillingAnnual", "BillingMonth": "BillingMonth", "BillingQuarter": "BillingQuarter", "Monthly": "Monthly", "Quarterly": "Quarterly"}, ) _args_schema.time_period = AAZObjectArg( options=["--time-period"], arg_group="Properties", - help="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.", + help="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 twelve months. Past start date should be selected within the timegrain period. There are no restrictions on the end date.", ) - filters = cls._args_schema.filters - filters.meters = AAZListArg( - options=["meters"], - help="The list of filters on meters, mandatory for budgets of usage category. ", + filter = cls._args_schema.filter + filter.and_ = AAZListArg( + options=["and"], + help="The logical \"AND\" expression. Must have at least 2 items.", nullable=True, + fmt=AAZListArgFormat( + min_length=0, + ), ) - filters.resource_groups = AAZListArg( - options=["resource-groups"], - help="The list of filters on resource groups, allowed at subscription level only.", + filter.dimensions = AAZObjectArg( + options=["dimensions"], + help="Has comparison expression for a dimension", nullable=True, ) - filters.resources = AAZListArg( - options=["resources"], - help="The list of filters on resources.", + cls._build_args_budget_comparison_expression_update(filter.dimensions) + filter.tags = AAZObjectArg( + options=["tags"], + help="Has comparison expression for a tag", nullable=True, ) + cls._build_args_budget_comparison_expression_update(filter.tags) - meters = cls._args_schema.filters.meters - meters.Element = AAZStrArg( + and_ = cls._args_schema.filter.and_ + and_.Element = AAZObjectArg( nullable=True, ) - resource_groups = cls._args_schema.filters.resource_groups - resource_groups.Element = AAZStrArg( + _element = cls._args_schema.filter.and_.Element + _element.dimensions = AAZObjectArg( + options=["dimensions"], + help="Has comparison expression for a dimension", nullable=True, ) - - resources = cls._args_schema.filters.resources - resources.Element = AAZStrArg( + cls._build_args_budget_comparison_expression_update(_element.dimensions) + _element.tags = AAZObjectArg( + options=["tags"], + help="Has comparison expression for a tag", nullable=True, ) + cls._build_args_budget_comparison_expression_update(_element.tags) notifications = cls._args_schema.notifications notifications.Element = AAZObjectArg( @@ -139,12 +151,20 @@ def _build_arguments_schema(cls, *args, **kwargs): _element = cls._args_schema.notifications.Element _element.contact_emails = AAZListArg( options=["contact-emails"], - help="Email addresses to send the budget notification to when the threshold is exceeded.", + help="Email addresses to send the budget notification to when the threshold is exceeded. Must have at least one contact email or contact group specified at the Subscription or Resource Group scopes. All other scopes must have at least one contact email specified.", + fmt=AAZListArgFormat( + max_length=50, + min_length=0, + ), ) _element.contact_groups = AAZListArg( options=["contact-groups"], - help="Action groups to send the budget notification to when the threshold is exceeded.", + help="Action groups to send the budget notification to when the threshold is exceeded. Must be provided as a fully qualified Azure resource id. Only supported at Subscription or Resource Group scopes.", nullable=True, + fmt=AAZListArgFormat( + max_length=50, + min_length=0, + ), ) _element.contact_roles = AAZListArg( options=["contact-roles"], @@ -155,6 +175,12 @@ def _build_arguments_schema(cls, *args, **kwargs): options=["enabled"], help="The notification is enabled or not.", ) + _element.locale = AAZStrArg( + options=["locale"], + help="Language in which the recipient will receive the notification", + nullable=True, + enum={"cs-cz": "cs-cz", "da-dk": "da-dk", "de-de": "de-de", "en-gb": "en-gb", "en-us": "en-us", "es-es": "es-es", "fr-fr": "fr-fr", "hu-hu": "hu-hu", "it-it": "it-it", "ja-jp": "ja-jp", "ko-kr": "ko-kr", "nb-no": "nb-no", "nl-nl": "nl-nl", "pl-pl": "pl-pl", "pt-br": "pt-br", "pt-pt": "pt-pt", "ru-ru": "ru-ru", "sv-se": "sv-se", "tr-tr": "tr-tr", "zh-cn": "zh-cn", "zh-tw": "zh-tw"}, + ) _element.operator = AAZStrArg( options=["operator"], help="The comparison operator.", @@ -164,6 +190,12 @@ def _build_arguments_schema(cls, *args, **kwargs): options=["threshold"], help="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.", ) + _element.threshold_type = AAZStrArg( + options=["threshold-type"], + help="The type of threshold", + nullable=True, + enum={"Actual": "Actual", "Forecasted": "Forecasted"}, + ) contact_emails = cls._args_schema.notifications.Element.contact_emails contact_emails.Element = AAZStrArg( @@ -185,13 +217,60 @@ def _build_arguments_schema(cls, *args, **kwargs): options=["end-date"], help="The end date for the budget. If not provided, we default this to 10 years from the start date.", nullable=True, + fmt=AAZDateTimeFormat( + protocol="iso", + ), ) time_period.start_date = AAZDateTimeArg( options=["start-date"], help="The start date for the budget.", + fmt=AAZDateTimeFormat( + protocol="iso", + ), ) return cls._args_schema + _args_budget_comparison_expression_update = None + + @classmethod + def _build_args_budget_comparison_expression_update(cls, _schema): + if cls._args_budget_comparison_expression_update is not None: + _schema.name = cls._args_budget_comparison_expression_update.name + _schema.operator = cls._args_budget_comparison_expression_update.operator + _schema.values = cls._args_budget_comparison_expression_update.values + return + + cls._args_budget_comparison_expression_update = AAZObjectArg( + nullable=True, + ) + + budget_comparison_expression_update = cls._args_budget_comparison_expression_update + budget_comparison_expression_update.name = AAZStrArg( + options=["name"], + help="The name of the column to use in comparison.", + ) + budget_comparison_expression_update.operator = AAZStrArg( + options=["operator"], + help="The operator to use for comparison.", + enum={"In": "In"}, + ) + budget_comparison_expression_update.values = AAZListArg( + options=["values"], + help="Array of values to use for comparison", + fmt=AAZListArgFormat( + min_length=0, + ), + ) + + values = cls._args_budget_comparison_expression_update.values + values.Element = AAZStrArg( + nullable=True, + ) + + _schema.name = cls._args_budget_comparison_expression_update.name + _schema.operator = cls._args_budget_comparison_expression_update.operator + _schema.values = cls._args_budget_comparison_expression_update.values + def _execute_operations(self): self.pre_operations() self.BudgetsGet(ctx=self.ctx)() @@ -236,7 +315,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets/{budgetName}", + "/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", **self.url_parameters ) @@ -246,7 +325,7 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): @@ -256,7 +335,8 @@ def url_parameters(self): required=True, ), **self.serialize_url_param( - "subscriptionId", self.ctx.subscription_id, + "scope", self.ctx.args.scope, + skip_quote=True, required=True, ), } @@ -266,7 +346,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -315,7 +395,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/budgets/{budgetName}", + "/{scope}/providers/Microsoft.Consumption/budgets/{budgetName}", **self.url_parameters ) @@ -325,7 +405,7 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): @@ -335,7 +415,8 @@ def url_parameters(self): required=True, ), **self.serialize_url_param( - "subscriptionId", self.ctx.subscription_id, + "scope", self.ctx.args.scope, + skip_quote=True, required=True, ), } @@ -345,7 +426,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -410,28 +491,25 @@ def _update_instance(self, instance): if properties is not None: properties.set_prop("amount", AAZFloatType, ".amount", typ_kwargs={"flags": {"required": True}}) properties.set_prop("category", AAZStrType, ".category", typ_kwargs={"flags": {"required": True}}) - properties.set_prop("filters", AAZObjectType, ".filters") + properties.set_prop("filter", AAZObjectType, ".filter") properties.set_prop("notifications", AAZDictType, ".notifications") properties.set_prop("timeGrain", AAZStrType, ".time_grain", typ_kwargs={"flags": {"required": True}}) properties.set_prop("timePeriod", AAZObjectType, ".time_period", typ_kwargs={"flags": {"required": True}}) - filters = _builder.get(".properties.filters") - if filters is not None: - filters.set_prop("meters", AAZListType, ".meters") - filters.set_prop("resourceGroups", AAZListType, ".resource_groups") - filters.set_prop("resources", AAZListType, ".resources") - - meters = _builder.get(".properties.filters.meters") - if meters is not None: - meters.set_elements(AAZStrType, ".") + filter = _builder.get(".properties.filter") + if filter is not None: + filter.set_prop("and", AAZListType, ".and_") + _UpdateHelper._build_schema_budget_comparison_expression_update(filter.set_prop("dimensions", AAZObjectType, ".dimensions")) + _UpdateHelper._build_schema_budget_comparison_expression_update(filter.set_prop("tags", AAZObjectType, ".tags")) - resource_groups = _builder.get(".properties.filters.resourceGroups") - if resource_groups is not None: - resource_groups.set_elements(AAZStrType, ".") + and_ = _builder.get(".properties.filter.and") + if and_ is not None: + and_.set_elements(AAZObjectType, ".") - resources = _builder.get(".properties.filters.resources") - if resources is not None: - resources.set_elements(AAZStrType, ".") + _elements = _builder.get(".properties.filter.and[]") + if _elements is not None: + _UpdateHelper._build_schema_budget_comparison_expression_update(_elements.set_prop("dimensions", AAZObjectType, ".dimensions")) + _UpdateHelper._build_schema_budget_comparison_expression_update(_elements.set_prop("tags", AAZObjectType, ".tags")) notifications = _builder.get(".properties.notifications") if notifications is not None: @@ -443,8 +521,10 @@ def _update_instance(self, instance): _elements.set_prop("contactGroups", AAZListType, ".contact_groups") _elements.set_prop("contactRoles", AAZListType, ".contact_roles") _elements.set_prop("enabled", AAZBoolType, ".enabled", typ_kwargs={"flags": {"required": True}}) + _elements.set_prop("locale", AAZStrType, ".locale") _elements.set_prop("operator", AAZStrType, ".operator", typ_kwargs={"flags": {"required": True}}) _elements.set_prop("threshold", AAZFloatType, ".threshold", typ_kwargs={"flags": {"required": True}}) + _elements.set_prop("thresholdType", AAZStrType, ".threshold_type") contact_emails = _builder.get(".properties.notifications{}.contactEmails") if contact_emails is not None: @@ -477,6 +557,48 @@ def __call__(self, *args, **kwargs): class _UpdateHelper: """Helper class for Update""" + @classmethod + def _build_schema_budget_comparison_expression_update(cls, _builder): + if _builder is None: + return + _builder.set_prop("name", AAZStrType, ".name", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("operator", AAZStrType, ".operator", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("values", AAZListType, ".values", typ_kwargs={"flags": {"required": True}}) + + values = _builder.get(".values") + if values is not None: + values.set_elements(AAZStrType, ".") + + _schema_budget_comparison_expression_read = None + + @classmethod + def _build_schema_budget_comparison_expression_read(cls, _schema): + if cls._schema_budget_comparison_expression_read is not None: + _schema.name = cls._schema_budget_comparison_expression_read.name + _schema.operator = cls._schema_budget_comparison_expression_read.operator + _schema.values = cls._schema_budget_comparison_expression_read.values + return + + cls._schema_budget_comparison_expression_read = _schema_budget_comparison_expression_read = AAZObjectType() + + budget_comparison_expression_read = _schema_budget_comparison_expression_read + budget_comparison_expression_read.name = AAZStrType( + flags={"required": True}, + ) + budget_comparison_expression_read.operator = AAZStrType( + flags={"required": True}, + ) + budget_comparison_expression_read.values = AAZListType( + flags={"required": True}, + ) + + values = _schema_budget_comparison_expression_read.values + values.Element = AAZStrType() + + _schema.name = cls._schema_budget_comparison_expression_read.name + _schema.operator = cls._schema_budget_comparison_expression_read.operator + _schema.values = cls._schema_budget_comparison_expression_read.values + _schema_budget_read = None @classmethod @@ -486,6 +608,7 @@ def _build_schema_budget_read(cls, _schema): _schema.id = cls._schema_budget_read.id _schema.name = cls._schema_budget_read.name _schema.properties = cls._schema_budget_read.properties + _schema.system_data = cls._schema_budget_read.system_data _schema.type = cls._schema_budget_read.type return @@ -504,6 +627,10 @@ def _build_schema_budget_read(cls, _schema): budget_read.properties = AAZObjectType( flags={"client_flatten": True}, ) + budget_read.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) budget_read.type = AAZStrType( flags={"read_only": True}, ) @@ -517,8 +644,13 @@ def _build_schema_budget_read(cls, _schema): ) properties.current_spend = AAZObjectType( serialized_name="currentSpend", + flags={"read_only": True}, + ) + properties.filter = AAZObjectType() + properties.forecast_spend = AAZObjectType( + serialized_name="forecastSpend", + flags={"read_only": True}, ) - properties.filters = AAZObjectType() properties.notifications = AAZDictType() properties.time_grain = AAZStrType( serialized_name="timeGrain", @@ -537,21 +669,29 @@ def _build_schema_budget_read(cls, _schema): flags={"read_only": True}, ) - filters = _schema_budget_read.properties.filters - filters.meters = AAZListType() - filters.resource_groups = AAZListType( - serialized_name="resourceGroups", - ) - filters.resources = AAZListType() + filter = _schema_budget_read.properties.filter + filter["and"] = AAZListType() + filter.dimensions = AAZObjectType() + cls._build_schema_budget_comparison_expression_read(filter.dimensions) + filter.tags = AAZObjectType() + cls._build_schema_budget_comparison_expression_read(filter.tags) - meters = _schema_budget_read.properties.filters.meters - meters.Element = AAZStrType() + and_ = _schema_budget_read.properties.filter["and"] + and_.Element = AAZObjectType() - resource_groups = _schema_budget_read.properties.filters.resource_groups - resource_groups.Element = AAZStrType() + _element = _schema_budget_read.properties.filter["and"].Element + _element.dimensions = AAZObjectType() + cls._build_schema_budget_comparison_expression_read(_element.dimensions) + _element.tags = AAZObjectType() + cls._build_schema_budget_comparison_expression_read(_element.tags) - resources = _schema_budget_read.properties.filters.resources - resources.Element = AAZStrType() + forecast_spend = _schema_budget_read.properties.forecast_spend + forecast_spend.amount = AAZFloatType( + flags={"read_only": True}, + ) + forecast_spend.unit = AAZStrType( + flags={"read_only": True}, + ) notifications = _schema_budget_read.properties.notifications notifications.Element = AAZObjectType() @@ -570,12 +710,16 @@ def _build_schema_budget_read(cls, _schema): _element.enabled = AAZBoolType( flags={"required": True}, ) + _element.locale = AAZStrType() _element.operator = AAZStrType( flags={"required": True}, ) _element.threshold = AAZFloatType( flags={"required": True}, ) + _element.threshold_type = AAZStrType( + serialized_name="thresholdType", + ) contact_emails = _schema_budget_read.properties.notifications.Element.contact_emails contact_emails.Element = AAZStrType() @@ -595,10 +739,31 @@ def _build_schema_budget_read(cls, _schema): flags={"required": True}, ) + system_data = _schema_budget_read.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", + ) + system_data.created_by = AAZStrType( + serialized_name="createdBy", + ) + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", + ) + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", + ) + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", + ) + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", + ) + _schema.e_tag = cls._schema_budget_read.e_tag _schema.id = cls._schema_budget_read.id _schema.name = cls._schema_budget_read.name _schema.properties = cls._schema_budget_read.properties + _schema.system_data = cls._schema_budget_read.system_data _schema.type = cls._schema_budget_read.type diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_update_with_rg.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_update_with_rg.py index ad798e5b1d5..14b0ca16248 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_update_with_rg.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/budget/_update_with_rg.py @@ -20,9 +20,9 @@ class UpdateWithRg(AAZCommand): """ _aaz_info = { - "version": "2023-05-01", + "version": "2018-01-31", "resources": [ - ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.consumption/budgets/{}", "2023-05-01"], + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.consumption/budgets/{}", "2018-01-31"], ] } @@ -270,7 +270,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2018-01-31", required=True, ), } @@ -353,7 +353,7 @@ def url_parameters(self): def query_parameters(self): parameters = { **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2018-01-31", required=True, ), } diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/marketplace/__cmd_group.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/marketplace/__cmd_group.py index ede879da938..cf1809840d1 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/marketplace/__cmd_group.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/marketplace/__cmd_group.py @@ -13,7 +13,6 @@ @register_command_group( "consumption marketplace", - is_preview=True, ) class __CMDGroup(AAZCommandGroup): """Inspect the marketplace usage data of an Azure subscription within a billing period. diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/marketplace/_list.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/marketplace/_list.py index 7dfb3130390..de1ef56195a 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/marketplace/_list.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/marketplace/_list.py @@ -13,17 +13,15 @@ @register_command( "consumption marketplace list", - is_preview=True, ) class List(AAZCommand): - """List the marketplace for an Azure subscription within a billing period. + """List the marketplaces for a scope at the defined scope. Marketplaces are available via this API only for May 1, 2014 or later. """ _aaz_info = { - "version": "2023-05-01", + "version": "2024-08-01", "resources": [ - ["mgmt-plane", "/subscriptions/{}/providers/microsoft.billing/billingperiods/{}/providers/microsoft.consumption/marketplaces", "2023-05-01"], - ["mgmt-plane", "/subscriptions/{}/providers/microsoft.consumption/marketplaces", "2023-05-01"], + ["mgmt-plane", "/{scope}/providers/microsoft.consumption/marketplaces", "2024-08-01"], ] } @@ -44,9 +42,10 @@ def _build_arguments_schema(cls, *args, **kwargs): # define Arg Group "" _args_schema = cls._args_schema - _args_schema.billing_period_name = AAZStrArg( - options=["-p", "--billing-period-name"], - help="Name of the billing period to get the marketplace.", + _args_schema.scope = AAZStrArg( + options=["--scope"], + help="The fully qualified Azure Resource manager identifier of the resource.", + required=True, ) _args_schema.filter = AAZStrArg( options=["--filter"], @@ -57,8 +56,8 @@ def _build_arguments_schema(cls, *args, **kwargs): help="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.", ) _args_schema.top = AAZIntArg( - options=["-t", "--top"], - help="Maximum number of items to return. Value range: 1-1000.", + options=["--top"], + help="May be used to limit the number of results to the most recent N marketplaces.", fmt=AAZIntArgFormat( maximum=1000, minimum=1, @@ -68,12 +67,7 @@ def _build_arguments_schema(cls, *args, **kwargs): def _execute_operations(self): self.pre_operations() - condition_0 = has_value(self.ctx.subscription_id) and has_value(self.ctx.args.billing_period_name) is not True - condition_1 = has_value(self.ctx.args.billing_period_name) and has_value(self.ctx.subscription_id) - if condition_0: - self.MarketplacesList(ctx=self.ctx)() - if condition_1: - self.MarketplacesListByBillingPeriod(ctx=self.ctx)() + self.MarketplacesList(ctx=self.ctx)() self.post_operations() @register_callback @@ -97,13 +91,15 @@ def __call__(self, *args, **kwargs): session = self.client.send_request(request=request, stream=False, **kwargs) if session.http_response.status_code in [200]: return self.on_200(session) + if session.http_response.status_code in [204]: + return self.on_204(session) return self.on_error(session.http_response) @property def url(self): return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/marketplaces", + "/{scope}/providers/Microsoft.Consumption/marketplaces", **self.url_parameters ) @@ -113,13 +109,14 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): parameters = { **self.serialize_url_param( - "subscriptionId", self.ctx.subscription_id, + "scope", self.ctx.args.scope, + skip_quote=True, required=True, ), } @@ -138,7 +135,7 @@ def query_parameters(self): "$top", self.ctx.args.top, ), **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -183,6 +180,9 @@ def _build_schema_on_200(cls): value.Element = AAZObjectType() _element = cls._schema_on_200.value.Element + _element.etag = AAZStrType( + flags={"read_only": True}, + ) _element.id = AAZStrType( flags={"read_only": True}, ) @@ -192,6 +192,10 @@ def _build_schema_on_200(cls): _element.properties = AAZObjectType( flags={"client_flatten": True}, ) + _element.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _element.tags = AAZDictType( flags={"read_only": True}, ) @@ -204,6 +208,10 @@ def _build_schema_on_200(cls): serialized_name="accountName", flags={"read_only": True}, ) + properties.additional_info = AAZStrType( + serialized_name="additionalInfo", + flags={"read_only": True}, + ) properties.additional_properties = AAZStrType( serialized_name="additionalProperties", flags={"read_only": True}, @@ -243,6 +251,10 @@ def _build_schema_on_200(cls): serialized_name="isEstimated", flags={"read_only": True}, ) + properties.is_recurring_charge = AAZBoolType( + serialized_name="isRecurringCharge", + flags={"read_only": True}, + ) properties.meter_id = AAZStrType( serialized_name="meterId", flags={"read_only": True}, @@ -296,220 +308,24 @@ def _build_schema_on_200(cls): flags={"read_only": True}, ) - tags = cls._schema_on_200.value.Element.tags - tags.Element = AAZStrType() - - return cls._schema_on_200 - - class MarketplacesListByBillingPeriod(AAZHttpOperation): - CLIENT_TYPE = "MgmtClient" - - def __call__(self, *args, **kwargs): - request = self.make_request() - session = self.client.send_request(request=request, stream=False, **kwargs) - if session.http_response.status_code in [200]: - return self.on_200(session) - - return self.on_error(session.http_response) - - @property - def url(self): - return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}/providers/Microsoft.Consumption/marketplaces", - **self.url_parameters - ) - - @property - def method(self): - return "GET" - - @property - def error_format(self): - return "ODataV4Format" - - @property - def url_parameters(self): - parameters = { - **self.serialize_url_param( - "billingPeriodName", self.ctx.args.billing_period_name, - required=True, - ), - **self.serialize_url_param( - "subscriptionId", self.ctx.subscription_id, - required=True, - ), - } - return parameters - - @property - def query_parameters(self): - parameters = { - **self.serialize_query_param( - "$filter", self.ctx.args.filter, - ), - **self.serialize_query_param( - "$skiptoken", self.ctx.args.skiptoken, - ), - **self.serialize_query_param( - "$top", self.ctx.args.top, - ), - **self.serialize_query_param( - "api-version", "2023-05-01", - required=True, - ), - } - return parameters - - @property - def header_parameters(self): - parameters = { - **self.serialize_header_param( - "Accept", "application/json", - ), - } - return parameters - - def on_200(self, session): - data = self.deserialize_http_content(session) - self.ctx.set_var( - "instance", - data, - schema_builder=self._build_schema_on_200 - ) - - _schema_on_200 = None - - @classmethod - def _build_schema_on_200(cls): - if cls._schema_on_200 is not None: - return cls._schema_on_200 - - cls._schema_on_200 = AAZObjectType() - - _schema_on_200 = cls._schema_on_200 - _schema_on_200.next_link = AAZStrType( - serialized_name="nextLink", - flags={"read_only": True}, - ) - _schema_on_200.value = AAZListType( - flags={"read_only": True}, - ) - - value = cls._schema_on_200.value - value.Element = AAZObjectType() - - _element = cls._schema_on_200.value.Element - _element.id = AAZStrType( - flags={"read_only": True}, - ) - _element.name = AAZStrType( - flags={"read_only": True}, - ) - _element.properties = AAZObjectType( - flags={"client_flatten": True}, - ) - _element.tags = AAZDictType( - flags={"read_only": True}, - ) - _element.type = AAZStrType( - flags={"read_only": True}, - ) - - properties = cls._schema_on_200.value.Element.properties - properties.account_name = AAZStrType( - serialized_name="accountName", - flags={"read_only": True}, - ) - properties.additional_properties = AAZStrType( - serialized_name="additionalProperties", - flags={"read_only": True}, - ) - properties.billing_period_id = AAZStrType( - serialized_name="billingPeriodId", - flags={"read_only": True}, - ) - properties.consumed_quantity = AAZFloatType( - serialized_name="consumedQuantity", - flags={"read_only": True}, - ) - properties.consumed_service = AAZStrType( - serialized_name="consumedService", - flags={"read_only": True}, - ) - properties.cost_center = AAZStrType( - serialized_name="costCenter", - flags={"read_only": True}, - ) - properties.currency = AAZStrType( - flags={"read_only": True}, - ) - properties.department_name = AAZStrType( - serialized_name="departmentName", - flags={"read_only": True}, - ) - properties.instance_id = AAZStrType( - serialized_name="instanceId", - flags={"read_only": True}, - ) - properties.instance_name = AAZStrType( - serialized_name="instanceName", - flags={"read_only": True}, + system_data = cls._schema_on_200.value.Element.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", ) - properties.is_estimated = AAZBoolType( - serialized_name="isEstimated", - flags={"read_only": True}, + system_data.created_by = AAZStrType( + serialized_name="createdBy", ) - properties.meter_id = AAZStrType( - serialized_name="meterId", - flags={"read_only": True}, + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", ) - properties.offer_name = AAZStrType( - serialized_name="offerName", - flags={"read_only": True}, + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", ) - properties.order_number = AAZStrType( - serialized_name="orderNumber", - flags={"read_only": True}, + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", ) - properties.plan_name = AAZStrType( - serialized_name="planName", - flags={"read_only": True}, - ) - properties.pretax_cost = AAZFloatType( - serialized_name="pretaxCost", - flags={"read_only": True}, - ) - properties.publisher_name = AAZStrType( - serialized_name="publisherName", - flags={"read_only": True}, - ) - properties.resource_group = AAZStrType( - serialized_name="resourceGroup", - flags={"read_only": True}, - ) - properties.resource_rate = AAZFloatType( - serialized_name="resourceRate", - flags={"read_only": True}, - ) - properties.subscription_guid = AAZStrType( - serialized_name="subscriptionGuid", - flags={"read_only": True}, - ) - properties.subscription_name = AAZStrType( - serialized_name="subscriptionName", - flags={"read_only": True}, - ) - properties.unit_of_measure = AAZStrType( - serialized_name="unitOfMeasure", - flags={"read_only": True}, - ) - properties.usage_end = AAZStrType( - serialized_name="usageEnd", - flags={"read_only": True}, - ) - properties.usage_start = AAZStrType( - serialized_name="usageStart", - flags={"read_only": True}, + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", ) tags = cls._schema_on_200.value.Element.tags @@ -517,6 +333,9 @@ def _build_schema_on_200(cls): return cls._schema_on_200 + def on_204(self, session): + pass + class _ListHelper: """Helper class for List""" diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/pricesheet/__cmd_group.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/pricesheet/__cmd_group.py index 03fe3063825..7fc9ccb6d5e 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/pricesheet/__cmd_group.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/pricesheet/__cmd_group.py @@ -13,7 +13,6 @@ @register_command_group( "consumption pricesheet", - is_preview=True, ) class __CMDGroup(AAZCommandGroup): """Inspect the price sheet of an Azure subscription within a billing period. diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/pricesheet/_show.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/pricesheet/_show.py index 2a45f6f5b52..1cbc0880a4d 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/pricesheet/_show.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/pricesheet/_show.py @@ -20,10 +20,10 @@ class Show(AAZCommand): """ _aaz_info = { - "version": "2023-05-01", + "version": "2024-08-01", "resources": [ - ["mgmt-plane", "/subscriptions/{}/providers/microsoft.billing/billingperiods/{}/providers/microsoft.consumption/pricesheets/default", "2023-05-01"], - ["mgmt-plane", "/subscriptions/{}/providers/microsoft.consumption/pricesheets/default", "2023-05-01"], + ["mgmt-plane", "/subscriptions/{}/providers/microsoft.billing/billingperiods/{}/providers/microsoft.consumption/pricesheets/default", "2024-08-01"], + ["mgmt-plane", "/subscriptions/{}/providers/microsoft.consumption/pricesheets/default", "2024-08-01"], ] } @@ -68,12 +68,12 @@ def _build_arguments_schema(cls, *args, **kwargs): def _execute_operations(self): self.pre_operations() - condition_0 = has_value(self.ctx.subscription_id) and has_value(self.ctx.args.billing_period_name) is not True - condition_1 = has_value(self.ctx.args.billing_period_name) and has_value(self.ctx.subscription_id) + condition_0 = has_value(self.ctx.args.billing_period_name) and has_value(self.ctx.subscription_id) + condition_1 = has_value(self.ctx.subscription_id) and has_value(self.ctx.args.billing_period_name) is not True if condition_0: - self.PriceSheetGet(ctx=self.ctx)() - if condition_1: self.PriceSheetGetByBillingPeriod(ctx=self.ctx)() + if condition_1: + self.PriceSheetGet(ctx=self.ctx)() self.post_operations() @register_callback @@ -88,7 +88,7 @@ def _output(self, *args, **kwargs): result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True) return result - class PriceSheetGet(AAZHttpOperation): + class PriceSheetGetByBillingPeriod(AAZHttpOperation): CLIENT_TYPE = "MgmtClient" def __call__(self, *args, **kwargs): @@ -102,7 +102,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/pricesheets/default", + "/subscriptions/{subscriptionId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}/providers/Microsoft.Consumption/pricesheets/default", **self.url_parameters ) @@ -112,11 +112,15 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): parameters = { + **self.serialize_url_param( + "billingPeriodName", self.ctx.args.billing_period_name, + required=True, + ), **self.serialize_url_param( "subscriptionId", self.ctx.subscription_id, required=True, @@ -137,7 +141,7 @@ def query_parameters(self): "$top", self.ctx.args.top, ), **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -170,6 +174,9 @@ def _build_schema_on_200(cls): cls._schema_on_200 = AAZObjectType() _schema_on_200 = cls._schema_on_200 + _schema_on_200.etag = AAZStrType( + flags={"read_only": True}, + ) _schema_on_200.id = AAZStrType( flags={"read_only": True}, ) @@ -179,6 +186,10 @@ def _build_schema_on_200(cls): _schema_on_200.properties = AAZObjectType( flags={"client_flatten": True}, ) + _schema_on_200.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _schema_on_200.tags = AAZDictType( flags={"read_only": True}, ) @@ -187,6 +198,10 @@ def _build_schema_on_200(cls): ) properties = cls._schema_on_200.properties + properties.download = AAZObjectType( + flags={"read_only": True}, + ) + _ShowHelper._build_schema_meter_details_read(properties.download) properties.next_link = AAZStrType( serialized_name="nextLink", flags={"read_only": True}, @@ -213,15 +228,25 @@ def _build_schema_on_200(cls): ) _element.meter_details = AAZObjectType( serialized_name="meterDetails", + flags={"read_only": True}, ) + _ShowHelper._build_schema_meter_details_read(_element.meter_details) _element.meter_id = AAZStrType( serialized_name="meterId", flags={"read_only": True}, ) + _element.offer_id = AAZStrType( + serialized_name="offerId", + flags={"read_only": True}, + ) _element.part_number = AAZStrType( serialized_name="partNumber", flags={"read_only": True}, ) + _element.savings_plan = AAZObjectType( + serialized_name="savingsPlan", + flags={"read_only": True}, + ) _element.unit_of_measure = AAZStrType( serialized_name="unitOfMeasure", flags={"read_only": True}, @@ -231,33 +256,37 @@ def _build_schema_on_200(cls): flags={"read_only": True}, ) - meter_details = cls._schema_on_200.properties.pricesheets.Element.meter_details - meter_details.meter_category = AAZStrType( - serialized_name="meterCategory", + savings_plan = cls._schema_on_200.properties.pricesheets.Element.savings_plan + savings_plan.effective_price = AAZFloatType( + serialized_name="effectivePrice", flags={"read_only": True}, ) - meter_details.meter_location = AAZStrType( - serialized_name="meterLocation", + savings_plan.market_price = AAZFloatType( + serialized_name="marketPrice", flags={"read_only": True}, ) - meter_details.meter_name = AAZStrType( - serialized_name="meterName", + savings_plan.term = AAZStrType( flags={"read_only": True}, ) - meter_details.meter_sub_category = AAZStrType( - serialized_name="meterSubCategory", - flags={"read_only": True}, + + system_data = cls._schema_on_200.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", ) - meter_details.pretax_standard_rate = AAZFloatType( - serialized_name="pretaxStandardRate", - flags={"read_only": True}, + system_data.created_by = AAZStrType( + serialized_name="createdBy", ) - meter_details.total_included_quantity = AAZFloatType( - serialized_name="totalIncludedQuantity", - flags={"read_only": True}, + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", ) - meter_details.unit = AAZStrType( - flags={"read_only": True}, + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", + ) + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", + ) + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", ) tags = cls._schema_on_200.tags @@ -265,7 +294,7 @@ def _build_schema_on_200(cls): return cls._schema_on_200 - class PriceSheetGetByBillingPeriod(AAZHttpOperation): + class PriceSheetGet(AAZHttpOperation): CLIENT_TYPE = "MgmtClient" def __call__(self, *args, **kwargs): @@ -279,7 +308,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/subscriptions/{subscriptionId}/providers/Microsoft.Billing/billingPeriods/{billingPeriodName}/providers/Microsoft.Consumption/pricesheets/default", + "/subscriptions/{subscriptionId}/providers/Microsoft.Consumption/pricesheets/default", **self.url_parameters ) @@ -289,15 +318,11 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): parameters = { - **self.serialize_url_param( - "billingPeriodName", self.ctx.args.billing_period_name, - required=True, - ), **self.serialize_url_param( "subscriptionId", self.ctx.subscription_id, required=True, @@ -318,7 +343,7 @@ def query_parameters(self): "$top", self.ctx.args.top, ), **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -351,6 +376,9 @@ def _build_schema_on_200(cls): cls._schema_on_200 = AAZObjectType() _schema_on_200 = cls._schema_on_200 + _schema_on_200.etag = AAZStrType( + flags={"read_only": True}, + ) _schema_on_200.id = AAZStrType( flags={"read_only": True}, ) @@ -360,6 +388,10 @@ def _build_schema_on_200(cls): _schema_on_200.properties = AAZObjectType( flags={"client_flatten": True}, ) + _schema_on_200.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _schema_on_200.tags = AAZDictType( flags={"read_only": True}, ) @@ -368,6 +400,10 @@ def _build_schema_on_200(cls): ) properties = cls._schema_on_200.properties + properties.download = AAZObjectType( + flags={"read_only": True}, + ) + _ShowHelper._build_schema_meter_details_read(properties.download) properties.next_link = AAZStrType( serialized_name="nextLink", flags={"read_only": True}, @@ -394,15 +430,25 @@ def _build_schema_on_200(cls): ) _element.meter_details = AAZObjectType( serialized_name="meterDetails", + flags={"read_only": True}, ) + _ShowHelper._build_schema_meter_details_read(_element.meter_details) _element.meter_id = AAZStrType( serialized_name="meterId", flags={"read_only": True}, ) + _element.offer_id = AAZStrType( + serialized_name="offerId", + flags={"read_only": True}, + ) _element.part_number = AAZStrType( serialized_name="partNumber", flags={"read_only": True}, ) + _element.savings_plan = AAZObjectType( + serialized_name="savingsPlan", + flags={"read_only": True}, + ) _element.unit_of_measure = AAZStrType( serialized_name="unitOfMeasure", flags={"read_only": True}, @@ -412,33 +458,37 @@ def _build_schema_on_200(cls): flags={"read_only": True}, ) - meter_details = cls._schema_on_200.properties.pricesheets.Element.meter_details - meter_details.meter_category = AAZStrType( - serialized_name="meterCategory", + savings_plan = cls._schema_on_200.properties.pricesheets.Element.savings_plan + savings_plan.effective_price = AAZFloatType( + serialized_name="effectivePrice", flags={"read_only": True}, ) - meter_details.meter_location = AAZStrType( - serialized_name="meterLocation", + savings_plan.market_price = AAZFloatType( + serialized_name="marketPrice", flags={"read_only": True}, ) - meter_details.meter_name = AAZStrType( - serialized_name="meterName", + savings_plan.term = AAZStrType( flags={"read_only": True}, ) - meter_details.meter_sub_category = AAZStrType( - serialized_name="meterSubCategory", - flags={"read_only": True}, + + system_data = cls._schema_on_200.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", ) - meter_details.pretax_standard_rate = AAZFloatType( - serialized_name="pretaxStandardRate", - flags={"read_only": True}, + system_data.created_by = AAZStrType( + serialized_name="createdBy", ) - meter_details.total_included_quantity = AAZFloatType( - serialized_name="totalIncludedQuantity", - flags={"read_only": True}, + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", ) - meter_details.unit = AAZStrType( - flags={"read_only": True}, + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", + ) + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", + ) + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", ) tags = cls._schema_on_200.tags @@ -450,5 +500,72 @@ def _build_schema_on_200(cls): class _ShowHelper: """Helper class for Show""" + _schema_meter_details_read = None + + @classmethod + def _build_schema_meter_details_read(cls, _schema): + if cls._schema_meter_details_read is not None: + _schema.meter_category = cls._schema_meter_details_read.meter_category + _schema.meter_location = cls._schema_meter_details_read.meter_location + _schema.meter_name = cls._schema_meter_details_read.meter_name + _schema.meter_sub_category = cls._schema_meter_details_read.meter_sub_category + _schema.pretax_standard_rate = cls._schema_meter_details_read.pretax_standard_rate + _schema.service_name = cls._schema_meter_details_read.service_name + _schema.service_tier = cls._schema_meter_details_read.service_tier + _schema.total_included_quantity = cls._schema_meter_details_read.total_included_quantity + _schema.unit = cls._schema_meter_details_read.unit + return + + cls._schema_meter_details_read = _schema_meter_details_read = AAZObjectType( + flags={"read_only": True} + ) + + meter_details_read = _schema_meter_details_read + meter_details_read.meter_category = AAZStrType( + serialized_name="meterCategory", + flags={"read_only": True}, + ) + meter_details_read.meter_location = AAZStrType( + serialized_name="meterLocation", + flags={"read_only": True}, + ) + meter_details_read.meter_name = AAZStrType( + serialized_name="meterName", + flags={"read_only": True}, + ) + meter_details_read.meter_sub_category = AAZStrType( + serialized_name="meterSubCategory", + flags={"read_only": True}, + ) + meter_details_read.pretax_standard_rate = AAZFloatType( + serialized_name="pretaxStandardRate", + flags={"read_only": True}, + ) + meter_details_read.service_name = AAZStrType( + serialized_name="serviceName", + flags={"read_only": True}, + ) + meter_details_read.service_tier = AAZStrType( + serialized_name="serviceTier", + flags={"read_only": True}, + ) + meter_details_read.total_included_quantity = AAZFloatType( + serialized_name="totalIncludedQuantity", + flags={"read_only": True}, + ) + meter_details_read.unit = AAZStrType( + flags={"read_only": True}, + ) + + _schema.meter_category = cls._schema_meter_details_read.meter_category + _schema.meter_location = cls._schema_meter_details_read.meter_location + _schema.meter_name = cls._schema_meter_details_read.meter_name + _schema.meter_sub_category = cls._schema_meter_details_read.meter_sub_category + _schema.pretax_standard_rate = cls._schema_meter_details_read.pretax_standard_rate + _schema.service_name = cls._schema_meter_details_read.service_name + _schema.service_tier = cls._schema_meter_details_read.service_tier + _schema.total_included_quantity = cls._schema_meter_details_read.total_included_quantity + _schema.unit = cls._schema_meter_details_read.unit + __all__ = ["Show"] diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/reservation/detail/_list.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/reservation/detail/_list.py index d4a3db8b096..f0548a6faa1 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/reservation/detail/_list.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/reservation/detail/_list.py @@ -19,10 +19,10 @@ class List(AAZCommand): """ _aaz_info = { - "version": "2023-05-01", + "version": "2024-08-01", "resources": [ - ["mgmt-plane", "/providers/microsoft.capacity/reservationorders/{}/providers/microsoft.consumption/reservationdetails", "2023-05-01"], - ["mgmt-plane", "/providers/microsoft.capacity/reservationorders/{}/reservations/{}/providers/microsoft.consumption/reservationdetails", "2023-05-01"], + ["mgmt-plane", "/providers/microsoft.capacity/reservationorders/{}/providers/microsoft.consumption/reservationdetails", "2024-08-01"], + ["mgmt-plane", "/providers/microsoft.capacity/reservationorders/{}/reservations/{}/providers/microsoft.consumption/reservationdetails", "2024-08-01"], ] } @@ -61,12 +61,12 @@ def _build_arguments_schema(cls, *args, **kwargs): def _execute_operations(self): self.pre_operations() - condition_0 = has_value(self.ctx.args.reservation_id) and has_value(self.ctx.args.reservation_order_id) and has_value(self.ctx.args.filter) - condition_1 = has_value(self.ctx.args.reservation_order_id) and has_value(self.ctx.args.filter) and has_value(self.ctx.args.reservation_id) is not True + condition_0 = has_value(self.ctx.args.reservation_order_id) and has_value(self.ctx.args.filter) and has_value(self.ctx.args.reservation_id) is not True + condition_1 = has_value(self.ctx.args.reservation_id) and has_value(self.ctx.args.reservation_order_id) and has_value(self.ctx.args.filter) if condition_0: - self.ReservationsDetailsListByReservationOrderAndReservation(ctx=self.ctx)() - if condition_1: self.ReservationsDetailsListByReservationOrder(ctx=self.ctx)() + if condition_1: + self.ReservationsDetailsListByReservationOrderAndReservation(ctx=self.ctx)() self.post_operations() @register_callback @@ -82,7 +82,7 @@ def _output(self, *args, **kwargs): next_link = self.deserialize_output(self.ctx.vars.instance.next_link) return result, next_link - class ReservationsDetailsListByReservationOrderAndReservation(AAZHttpOperation): + class ReservationsDetailsListByReservationOrder(AAZHttpOperation): CLIENT_TYPE = "MgmtClient" def __call__(self, *args, **kwargs): @@ -96,7 +96,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationDetails", + "/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationDetails", **self.url_parameters ) @@ -106,15 +106,11 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): parameters = { - **self.serialize_url_param( - "reservationId", self.ctx.args.reservation_id, - required=True, - ), **self.serialize_url_param( "reservationOrderId", self.ctx.args.reservation_order_id, required=True, @@ -130,7 +126,7 @@ def query_parameters(self): required=True, ), **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -175,6 +171,9 @@ def _build_schema_on_200(cls): value.Element = AAZObjectType() _element = cls._schema_on_200.value.Element + _element.etag = AAZStrType( + flags={"read_only": True}, + ) _element.id = AAZStrType( flags={"read_only": True}, ) @@ -184,6 +183,10 @@ def _build_schema_on_200(cls): _element.properties = AAZObjectType( flags={"client_flatten": True}, ) + _element.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _element.tags = AAZDictType( flags={"read_only": True}, ) @@ -192,10 +195,21 @@ def _build_schema_on_200(cls): ) properties = cls._schema_on_200.value.Element.properties + properties.instance_flexibility_group = AAZStrType( + serialized_name="instanceFlexibilityGroup", + flags={"read_only": True}, + ) + properties.instance_flexibility_ratio = AAZStrType( + serialized_name="instanceFlexibilityRatio", + flags={"read_only": True}, + ) properties.instance_id = AAZStrType( serialized_name="instanceId", flags={"read_only": True}, ) + properties.kind = AAZStrType( + flags={"read_only": True}, + ) properties.reservation_id = AAZStrType( serialized_name="reservationId", flags={"read_only": True}, @@ -225,12 +239,32 @@ def _build_schema_on_200(cls): flags={"read_only": True}, ) + system_data = cls._schema_on_200.value.Element.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", + ) + system_data.created_by = AAZStrType( + serialized_name="createdBy", + ) + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", + ) + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", + ) + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", + ) + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", + ) + tags = cls._schema_on_200.value.Element.tags tags.Element = AAZStrType() return cls._schema_on_200 - class ReservationsDetailsListByReservationOrder(AAZHttpOperation): + class ReservationsDetailsListByReservationOrderAndReservation(AAZHttpOperation): CLIENT_TYPE = "MgmtClient" def __call__(self, *args, **kwargs): @@ -244,7 +278,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationDetails", + "/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationDetails", **self.url_parameters ) @@ -254,11 +288,15 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): parameters = { + **self.serialize_url_param( + "reservationId", self.ctx.args.reservation_id, + required=True, + ), **self.serialize_url_param( "reservationOrderId", self.ctx.args.reservation_order_id, required=True, @@ -274,7 +312,7 @@ def query_parameters(self): required=True, ), **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -319,6 +357,9 @@ def _build_schema_on_200(cls): value.Element = AAZObjectType() _element = cls._schema_on_200.value.Element + _element.etag = AAZStrType( + flags={"read_only": True}, + ) _element.id = AAZStrType( flags={"read_only": True}, ) @@ -328,6 +369,10 @@ def _build_schema_on_200(cls): _element.properties = AAZObjectType( flags={"client_flatten": True}, ) + _element.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _element.tags = AAZDictType( flags={"read_only": True}, ) @@ -336,10 +381,21 @@ def _build_schema_on_200(cls): ) properties = cls._schema_on_200.value.Element.properties + properties.instance_flexibility_group = AAZStrType( + serialized_name="instanceFlexibilityGroup", + flags={"read_only": True}, + ) + properties.instance_flexibility_ratio = AAZStrType( + serialized_name="instanceFlexibilityRatio", + flags={"read_only": True}, + ) properties.instance_id = AAZStrType( serialized_name="instanceId", flags={"read_only": True}, ) + properties.kind = AAZStrType( + flags={"read_only": True}, + ) properties.reservation_id = AAZStrType( serialized_name="reservationId", flags={"read_only": True}, @@ -369,6 +425,26 @@ def _build_schema_on_200(cls): flags={"read_only": True}, ) + system_data = cls._schema_on_200.value.Element.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", + ) + system_data.created_by = AAZStrType( + serialized_name="createdBy", + ) + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", + ) + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", + ) + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", + ) + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", + ) + tags = cls._schema_on_200.value.Element.tags tags.Element = AAZStrType() diff --git a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/reservation/summary/_list.py b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/reservation/summary/_list.py index 3b7308d4e79..190b5534069 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/reservation/summary/_list.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/aaz/latest/consumption/reservation/summary/_list.py @@ -19,10 +19,10 @@ class List(AAZCommand): """ _aaz_info = { - "version": "2023-05-01", + "version": "2024-08-01", "resources": [ - ["mgmt-plane", "/providers/microsoft.capacity/reservationorders/{}/providers/microsoft.consumption/reservationsummaries", "2023-05-01"], - ["mgmt-plane", "/providers/microsoft.capacity/reservationorders/{}/reservations/{}/providers/microsoft.consumption/reservationsummaries", "2023-05-01"], + ["mgmt-plane", "/providers/microsoft.capacity/reservationorders/{}/providers/microsoft.consumption/reservationsummaries", "2024-08-01"], + ["mgmt-plane", "/providers/microsoft.capacity/reservationorders/{}/reservations/{}/providers/microsoft.consumption/reservationsummaries", "2024-08-01"], ] } @@ -66,12 +66,12 @@ def _build_arguments_schema(cls, *args, **kwargs): def _execute_operations(self): self.pre_operations() - condition_0 = has_value(self.ctx.args.reservation_id) and has_value(self.ctx.args.reservation_order_id) and has_value(self.ctx.args.grain) - condition_1 = has_value(self.ctx.args.reservation_order_id) and has_value(self.ctx.args.grain) and has_value(self.ctx.args.reservation_id) is not True + condition_0 = has_value(self.ctx.args.reservation_order_id) and has_value(self.ctx.args.grain) and has_value(self.ctx.args.reservation_id) is not True + condition_1 = has_value(self.ctx.args.reservation_id) and has_value(self.ctx.args.reservation_order_id) and has_value(self.ctx.args.grain) if condition_0: - self.ReservationsSummariesListByReservationOrderAndReservation(ctx=self.ctx)() - if condition_1: self.ReservationsSummariesListByReservationOrder(ctx=self.ctx)() + if condition_1: + self.ReservationsSummariesListByReservationOrderAndReservation(ctx=self.ctx)() self.post_operations() @register_callback @@ -87,7 +87,7 @@ def _output(self, *args, **kwargs): next_link = self.deserialize_output(self.ctx.vars.instance.next_link) return result, next_link - class ReservationsSummariesListByReservationOrderAndReservation(AAZHttpOperation): + class ReservationsSummariesListByReservationOrder(AAZHttpOperation): CLIENT_TYPE = "MgmtClient" def __call__(self, *args, **kwargs): @@ -101,7 +101,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationSummaries", + "/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationSummaries", **self.url_parameters ) @@ -111,15 +111,11 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): parameters = { - **self.serialize_url_param( - "reservationId", self.ctx.args.reservation_id, - required=True, - ), **self.serialize_url_param( "reservationOrderId", self.ctx.args.reservation_order_id, required=True, @@ -138,7 +134,7 @@ def query_parameters(self): required=True, ), **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -183,6 +179,9 @@ def _build_schema_on_200(cls): value.Element = AAZObjectType() _element = cls._schema_on_200.value.Element + _element.etag = AAZStrType( + flags={"read_only": True}, + ) _element.id = AAZStrType( flags={"read_only": True}, ) @@ -192,6 +191,10 @@ def _build_schema_on_200(cls): _element.properties = AAZObjectType( flags={"client_flatten": True}, ) + _element.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _element.tags = AAZDictType( flags={"read_only": True}, ) @@ -204,6 +207,9 @@ def _build_schema_on_200(cls): serialized_name="avgUtilizationPercentage", flags={"read_only": True}, ) + properties.kind = AAZStrType( + flags={"read_only": True}, + ) properties.max_utilization_percentage = AAZFloatType( serialized_name="maxUtilizationPercentage", flags={"read_only": True}, @@ -212,6 +218,14 @@ def _build_schema_on_200(cls): serialized_name="minUtilizationPercentage", flags={"read_only": True}, ) + properties.purchased_quantity = AAZFloatType( + serialized_name="purchasedQuantity", + flags={"read_only": True}, + ) + properties.remaining_quantity = AAZFloatType( + serialized_name="remainingQuantity", + flags={"read_only": True}, + ) properties.reservation_id = AAZStrType( serialized_name="reservationId", flags={"read_only": True}, @@ -228,6 +242,10 @@ def _build_schema_on_200(cls): serialized_name="skuName", flags={"read_only": True}, ) + properties.total_reserved_quantity = AAZFloatType( + serialized_name="totalReservedQuantity", + flags={"read_only": True}, + ) properties.usage_date = AAZStrType( serialized_name="usageDate", flags={"read_only": True}, @@ -236,13 +254,41 @@ def _build_schema_on_200(cls): serialized_name="usedHours", flags={"read_only": True}, ) + properties.used_quantity = AAZFloatType( + serialized_name="usedQuantity", + flags={"read_only": True}, + ) + properties.utilized_percentage = AAZFloatType( + serialized_name="utilizedPercentage", + flags={"read_only": True}, + ) + + system_data = cls._schema_on_200.value.Element.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", + ) + system_data.created_by = AAZStrType( + serialized_name="createdBy", + ) + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", + ) + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", + ) + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", + ) + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", + ) tags = cls._schema_on_200.value.Element.tags tags.Element = AAZStrType() return cls._schema_on_200 - class ReservationsSummariesListByReservationOrder(AAZHttpOperation): + class ReservationsSummariesListByReservationOrderAndReservation(AAZHttpOperation): CLIENT_TYPE = "MgmtClient" def __call__(self, *args, **kwargs): @@ -256,7 +302,7 @@ def __call__(self, *args, **kwargs): @property def url(self): return self.client.format_url( - "/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/providers/Microsoft.Consumption/reservationSummaries", + "/providers/Microsoft.Capacity/reservationorders/{reservationOrderId}/reservations/{reservationId}/providers/Microsoft.Consumption/reservationSummaries", **self.url_parameters ) @@ -266,11 +312,15 @@ def method(self): @property def error_format(self): - return "ODataV4Format" + return "MgmtErrorFormat" @property def url_parameters(self): parameters = { + **self.serialize_url_param( + "reservationId", self.ctx.args.reservation_id, + required=True, + ), **self.serialize_url_param( "reservationOrderId", self.ctx.args.reservation_order_id, required=True, @@ -289,7 +339,7 @@ def query_parameters(self): required=True, ), **self.serialize_query_param( - "api-version", "2023-05-01", + "api-version", "2024-08-01", required=True, ), } @@ -334,6 +384,9 @@ def _build_schema_on_200(cls): value.Element = AAZObjectType() _element = cls._schema_on_200.value.Element + _element.etag = AAZStrType( + flags={"read_only": True}, + ) _element.id = AAZStrType( flags={"read_only": True}, ) @@ -343,6 +396,10 @@ def _build_schema_on_200(cls): _element.properties = AAZObjectType( flags={"client_flatten": True}, ) + _element.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) _element.tags = AAZDictType( flags={"read_only": True}, ) @@ -355,6 +412,9 @@ def _build_schema_on_200(cls): serialized_name="avgUtilizationPercentage", flags={"read_only": True}, ) + properties.kind = AAZStrType( + flags={"read_only": True}, + ) properties.max_utilization_percentage = AAZFloatType( serialized_name="maxUtilizationPercentage", flags={"read_only": True}, @@ -363,6 +423,14 @@ def _build_schema_on_200(cls): serialized_name="minUtilizationPercentage", flags={"read_only": True}, ) + properties.purchased_quantity = AAZFloatType( + serialized_name="purchasedQuantity", + flags={"read_only": True}, + ) + properties.remaining_quantity = AAZFloatType( + serialized_name="remainingQuantity", + flags={"read_only": True}, + ) properties.reservation_id = AAZStrType( serialized_name="reservationId", flags={"read_only": True}, @@ -379,6 +447,10 @@ def _build_schema_on_200(cls): serialized_name="skuName", flags={"read_only": True}, ) + properties.total_reserved_quantity = AAZFloatType( + serialized_name="totalReservedQuantity", + flags={"read_only": True}, + ) properties.usage_date = AAZStrType( serialized_name="usageDate", flags={"read_only": True}, @@ -387,6 +459,34 @@ def _build_schema_on_200(cls): serialized_name="usedHours", flags={"read_only": True}, ) + properties.used_quantity = AAZFloatType( + serialized_name="usedQuantity", + flags={"read_only": True}, + ) + properties.utilized_percentage = AAZFloatType( + serialized_name="utilizedPercentage", + flags={"read_only": True}, + ) + + system_data = cls._schema_on_200.value.Element.system_data + system_data.created_at = AAZStrType( + serialized_name="createdAt", + ) + system_data.created_by = AAZStrType( + serialized_name="createdBy", + ) + system_data.created_by_type = AAZStrType( + serialized_name="createdByType", + ) + system_data.last_modified_at = AAZStrType( + serialized_name="lastModifiedAt", + ) + system_data.last_modified_by = AAZStrType( + serialized_name="lastModifiedBy", + ) + system_data.last_modified_by_type = AAZStrType( + serialized_name="lastModifiedByType", + ) tags = cls._schema_on_200.value.Element.tags tags.Element = AAZStrType() diff --git a/src/azure-cli/azure/cli/command_modules/consumption/commands.py b/src/azure-cli/azure/cli/command_modules/consumption/commands.py index 5b40ed0a78d..ef8b18aad7d 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/commands.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/commands.py @@ -31,8 +31,9 @@ def load_command_table(self, _): self.command_table["consumption marketplace list"] = ConsumptionMarketplaceList(loader=self) with self.command_group('consumption budget') as p: - from azure.cli.command_modules.consumption.custom import ConsumptionBudgetsList + from azure.cli.command_modules.consumption.custom import ConsumptionBudgetsList, BudgetUpdateAdapter self.command_table["consumption budget list"] = ConsumptionBudgetsList(loader=self) + self.command_table["consumption budget update"] = BudgetUpdateAdapter(loader=self) p.custom_show_command('show', 'cli_consumption_show_budget', transform=transform_budget_show_output) diff --git a/src/azure-cli/azure/cli/command_modules/consumption/custom.py b/src/azure-cli/azure/cli/command_modules/consumption/custom.py index aed839599ff..70d1e848fb8 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/custom.py +++ b/src/azure-cli/azure/cli/command_modules/consumption/custom.py @@ -4,7 +4,13 @@ # -------------------------------------------------------------------------------------------- from knack.util import CLIError -from .aaz.latest.consumption.budget import List as _ConsumptionBudgetsList +from .aaz.latest.consumption.budget import ( + List as _ConsumptionBudgetsList, + Show as _BudgetShow, + Create as _BudgetCreate, + Delete as _BudgetDelete, + Update as _BudgetUpdate, +) from .aaz.latest.consumption.marketplace import List as _ConsumptionMarketplaceList from .aaz.latest.consumption.pricesheet import Show as _ConsumptionPricesheetShow from .aaz.latest.consumption.reservation.detail import List as _ConsumptionReservationDetailList @@ -14,7 +20,7 @@ from datetime import datetime -# pylint: disable=line-too-long, disable=protected-access, consider-using-generator +# pylint: disable=line-too-long, disable=protected-access, consider-using-generator, unused-argument, too-few-public-methods def validate_both_start_end_dates(args): """Validates the existence of both start and end dates in the parameter or neither""" if bool(has_value(args.start_date)) != bool(has_value(args.end_date)): @@ -259,6 +265,11 @@ class ConsumptionMarketplaceList(_ConsumptionMarketplaceList): def _build_arguments_schema(cls, *args, **kwargs): from azure.cli.core.aaz import AAZStrArg args_schema = super()._build_arguments_schema(*args, **kwargs) + args_schema.scope._required = False + args_schema.billing_period_name = AAZStrArg( + options=["-p", "--billing-period-name"], + help="Name of the billing period to get the marketplace.", + ) args_schema.end_date = AAZStrArg( options=["--end-date", "-e"], help="End date (YYYY-MM-DD in UTC). If specified, also requires --start-date.", @@ -269,11 +280,19 @@ def _build_arguments_schema(cls, *args, **kwargs): ) args_schema.filter._registered = False args_schema.skiptoken._registered = False + # Restore -t alias for --top + args_schema.top.options = ["-t", "--top"] return args_schema def pre_operations(self): args = self.ctx.args validate_both_start_end_dates(args) + sub_scope = "/subscriptions/{}".format(self.ctx.subscription_id) + if has_value(args.billing_period_name): + args.scope = "{}/providers/Microsoft.Billing/billingPeriods/{}".format( + sub_scope, args.billing_period_name.to_serialized_data()) + elif not has_value(args.scope): + args.scope = sub_scope if has_value(args.start_date) and has_value(args.end_date): start_date = datetime_type(args.start_date.to_serialized_data()) end_date = datetime_type(args.end_date.to_serialized_data()) @@ -299,7 +318,137 @@ def marketplace_list_output(result): return result +class _BudgetShowAdapter(_BudgetShow): + """Adapter that makes --scope optional, defaulting to the current subscription.""" + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + args_schema = super()._build_arguments_schema(*args, **kwargs) + args_schema.scope._required = False + return args_schema + + def pre_operations(self): + args = self.ctx.args + if not has_value(args.scope): + args.scope = "/subscriptions/{}".format(self.ctx.subscription_id) + + +class _BudgetDeleteAdapter(_BudgetDelete): + """Adapter that makes --scope optional, defaulting to the current subscription.""" + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + args_schema = super()._build_arguments_schema(*args, **kwargs) + args_schema.scope._required = False + return args_schema + + def pre_operations(self): + args = self.ctx.args + if not has_value(args.scope): + args.scope = "/subscriptions/{}".format(self.ctx.subscription_id) + + +class _BudgetCreateAdapter(_BudgetCreate): + """Adapter that makes --scope optional and preserves backward-compatible category values.""" + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + args_schema = super()._build_arguments_schema(*args, **kwargs) + args_schema.scope._required = False + # Expand enum to support legacy 'usage' value without redefining the field + args_schema.category.enum.items["Usage"] = "Usage" + return args_schema + + def pre_operations(self): + args = self.ctx.args + if not has_value(args.scope): + args.scope = "/subscriptions/{}".format(self.ctx.subscription_id) + + +class _BudgetUpdateAdapter(_BudgetUpdate): + """Adapter that restores backward compatibility for budget update after swagger upgrade.""" + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + from azure.cli.core.aaz import AAZObjectArg, AAZListArg, AAZStrArg + args_schema = super()._build_arguments_schema(*args, **kwargs) + args_schema.scope._required = False + args_schema.scope._registered = False + # Restore -n/--name aliases for budget_name + args_schema.budget_name.options = ["-n", "--name", "--budget-name"] + # Restore --filters with legacy structure (meters, resource_groups, resources) + args_schema.filters = AAZObjectArg( + options=["--filters"], + arg_group="Properties", + help="May be used to filter budgets by resource group, resource, or meter.", + nullable=True, + ) + args_schema.filters.meters = AAZListArg( + options=["meters"], + help="Space-separated list of meters to filter on.", + nullable=True, + ) + args_schema.filters.meters.Element = AAZStrArg(nullable=True) + args_schema.filters.resource_groups = AAZListArg( + options=["resource-groups"], + help="Space-separated list of resource groups to filter on.", + nullable=True, + ) + args_schema.filters.resource_groups.Element = AAZStrArg(nullable=True) + args_schema.filters.resources = AAZListArg( + options=["resources"], + help="Space-separated list of resources to filter on.", + nullable=True, + ) + args_schema.filters.resources.Element = AAZStrArg(nullable=True) + # Expand category to include legacy Usage value + args_schema.category.enum.items["Usage"] = "Usage" + return args_schema + + def pre_operations(self): + args = self.ctx.args + if not has_value(args.scope): + args.scope = "/subscriptions/{}".format(self.ctx.subscription_id) + # Map legacy --filters to new --filter structure + if has_value(args.filters): + filters = args.filters.to_serialized_data() + legacy = [] + if filters.get("meters"): + legacy.append({"dimensions": {"name": "Meter", "operator": "In", "values": filters["meters"]}}) + if filters.get("resources"): + legacy.append({"dimensions": {"name": "Resource", "operator": "In", "values": filters["resources"]}}) + if filters.get("resource_groups"): + legacy.append({"dimensions": {"name": "ResourceGroupName", "operator": "In", "values": filters["resource_groups"]}}) + if len(legacy) == 1: + args.filter = legacy[0] + elif len(legacy) > 1: + args.filter = {"and_": legacy} + + +BudgetUpdateAdapter = _BudgetUpdateAdapter + + class ConsumptionBudgetsList(_ConsumptionBudgetsList): + """Adapter that restores --resource-group and hides --scope for backward compatibility.""" + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + from azure.cli.core.aaz import AAZResourceGroupNameArg + args_schema = super()._build_arguments_schema(*args, **kwargs) + args_schema.scope._required = False + args_schema.scope._registered = False + args_schema.resource_group = AAZResourceGroupNameArg( + help="Name of resource group.", + ) + return args_schema + + def pre_operations(self): + args = self.ctx.args + sub_scope = "/subscriptions/{}".format(self.ctx.subscription_id) + if has_value(args.resource_group): + args.scope = "{}/resourceGroups/{}".format(sub_scope, args.resource_group.to_serialized_data()) + else: + args.scope = sub_scope def _output(self, *args, **kwargs): result = self.deserialize_output(self.ctx.vars.instance.value, client_flatten=True) @@ -315,8 +464,7 @@ def cli_consumption_show_budget(cmd, budget_name, resource_group_name=None): from .aaz.latest.consumption.budget import ShowWithRg args['resource_group'] = resource_group_name return ShowWithRg(cli_ctx=cmd.cli_ctx)(command_args=args) - from .aaz.latest.consumption.budget import Show - return Show(cli_ctx=cmd.cli_ctx)(command_args=args) + return _BudgetShowAdapter(cli_ctx=cmd.cli_ctx)(command_args=args) def cli_consumption_create_budget(cmd, budget_name, category, amount, time_grain, start_date, end_date, resource_groups=None, resources=None, meters=None, resource_group_name=None): @@ -326,14 +474,25 @@ def cli_consumption_create_budget(cmd, budget_name, category, amount, time_grain "amount": float(amount), "time_grain": time_grain, "time_period": {"start_date": str(start_date), "end_date": str(end_date)}, - "filters": {"resource_groups": resource_groups, "meters": meters, "resources": resources}, } + # Map legacy filter args (meters/resources/resource_groups) to new filter structure + legacy_filters = [] + if meters: + legacy_filters.append({"dimensions": {"name": "Meter", "operator": "In", "values": list(meters)}}) + if resources: + legacy_filters.append({"dimensions": {"name": "Resource", "operator": "In", "values": list(resources)}}) + if resource_groups: + legacy_filters.append({"dimensions": {"name": "ResourceGroupName", "operator": "In", "values": list(resource_groups)}}) + if len(legacy_filters) == 1: + args["filter"] = legacy_filters[0] + elif len(legacy_filters) > 1: + args["filter"] = {"and_": legacy_filters} + if resource_group_name: from .aaz.latest.consumption.budget import CreateWithRg args['resource_group'] = resource_group_name return CreateWithRg(cli_ctx=cmd.cli_ctx)(command_args=args) - from .aaz.latest.consumption.budget import Create - return Create(cli_ctx=cmd.cli_ctx)(command_args=args) + return _BudgetCreateAdapter(cli_ctx=cmd.cli_ctx)(command_args=args) def cli_consumption_delete_budget(cmd, budget_name, resource_group_name=None): @@ -342,5 +501,4 @@ def cli_consumption_delete_budget(cmd, budget_name, resource_group_name=None): args['resource_group'] = resource_group_name from .aaz.latest.consumption.budget import DeleteWithRg return DeleteWithRg(cli_ctx=cmd.cli_ctx)(command_args=args) - from .aaz.latest.consumption.budget import Delete - return Delete(cli_ctx=cmd.cli_ctx)(command_args=args) + return _BudgetDeleteAdapter(cli_ctx=cmd.cli_ctx)(command_args=args) diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_create.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_create.yaml index 037596aec93..fbc41d726a7 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_create.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_create.yaml @@ -13,7 +13,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/costbudget?api-version=2023-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/costbudget?api-version=2024-08-01 response: body: {string: '{"id":"subscriptions/0f88eb23-845d-48b9-b363-efd011b05586/providers/Microsoft.Consumption/budgets/costbudget","name":"costbudget","type":"Microsoft.Consumption/budgets","eTag":"\"1d3ab6019183d09\"","properties":{"timePeriod":{"startDate":"2018-02-01T00:00:00Z","endDate":"2018-10-01T00:00:00Z"},"timeGrain":"Monthly","amount":100.0,"currentSpend":null,"category":"Cost","notifications":{},"filters":{"resourceGroups":[],"resources":[],"meters":[]}}}'} headers: @@ -22,7 +22,7 @@ interactions: content-type: [application/json; charset=utf-8] date: ['Wed, 21 Feb 2018 22:05:32 GMT'] expires: ['-1'] - location: ['https://consumption.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/costbudget?api-version=2023-05-01'] + location: ['https://consumption.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/costbudget?api-version=2024-08-01'] pragma: [no-cache] server: [Microsoft-IIS/8.5] session-id: [5215920e-8606-48f6-b900-5b2a5d59794a] diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_delete.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_delete.yaml index c2f1934aed8..7d495396770 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_delete.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_delete.yaml @@ -12,7 +12,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: DELETE - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/costbudget?api-version=2023-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/costbudget?api-version=2024-08-01 response: body: {string: ''} headers: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_show.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_show.yaml index b701f6d90b2..c73aaf40da0 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_show.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_show.yaml @@ -12,7 +12,7 @@ interactions: azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.52] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/havTest01?api-version=2023-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/havTest01?api-version=2024-08-01 response: body: {string: '{"id":"subscriptions/f2ddfccd-77af-44b8-b0cd-38500f84b95e/providers/Microsoft.Consumption/budgets/havTest01","name":"havTest01","type":"Microsoft.Consumption/budgets","eTag":"\"1d4877ebd701de2\"","properties":{"timePeriod":{"startDate":"2018-11-01T00:00:00Z","endDate":"2018-12-31T00:00:00Z"},"timeGrain":"Monthly","amount":800.0,"currentSpend":{"amount":41.712656643888759,"unit":"USD"},"category":"Cost","notifications":{"actual_GreaterThan_25_Percent":{"enabled":true,"operator":"GreaterThan","threshold":25.00,"contactEmails":["aaa@foo.com"],"contactRoles":[],"contactGroups":[]},"actual_GreaterThan_75_Percent":{"enabled":true,"operator":"GreaterThan","threshold":75.00,"contactEmails":["aaa@foo.com"],"contactRoles":[],"contactGroups":[]},"actual_GreaterThan_100_Percent":{"enabled":true,"operator":"GreaterThan","threshold":100.0,"contactEmails":["aaa@foo.com"],"contactRoles":[],"contactGroups":[]}},"filters":{"resourceGroups":[],"resources":[],"meters":[],"tags":{}}}}'} headers: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_usage_create.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_usage_create.yaml index 2c6c2185d61..5d0bd6ef68b 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_usage_create.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_budget_usage_create.yaml @@ -14,7 +14,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/usagetypebudget1?api-version=2023-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/usagetypebudget1?api-version=2024-08-01 response: body: {string: '{"id":"subscriptions/0f88eb23-845d-48b9-b363-efd011b05586/providers/Microsoft.Consumption/budgets/usagetypebudget1","name":"usagetypebudget1","type":"Microsoft.Consumption/budgets","eTag":"\"1d3ab875141ad02\"","properties":{"timePeriod":{"startDate":"2018-02-01T00:00:00Z","endDate":"2018-10-01T00:00:00Z"},"timeGrain":"Annually","amount":20.0,"currentSpend":null,"category":"Usage","notifications":{},"filters":{"resourceGroups":[],"resources":[],"meters":["0dfadad2-6e4f-4078-85e1-90c230d4d482"]}}}'} headers: @@ -23,7 +23,7 @@ interactions: content-type: [application/json; charset=utf-8] date: ['Thu, 22 Feb 2018 02:46:20 GMT'] expires: ['-1'] - location: ['https://consumption.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/usagetypebudget1?api-version=2023-05-01'] + location: ['https://consumption.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/budgets/usagetypebudget1?api-version=2024-08-01'] pragma: [no-cache] server: [Microsoft-IIS/8.5] session-id: [3268b230-5476-48b4-9e87-07f73dee71d7] diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list.yaml index fc22aec8063..f10785ec0d4 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list.yaml @@ -11,7 +11,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/marketplaces?api-version=2023-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/marketplaces?api-version=2024-08-01 response: body: {string: '{"value":[{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/69ce08f3-4b03-a837-a4ad-32e4737ea608","name":"69ce08f3-4b03-a837-a4ad-32e4737ea608","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-01-28T00:00:00.0000000Z","usageEnd":"2018-01-29T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/06756d50-64f5-59dc-ce68-9d29658ad398","name":"06756d50-64f5-59dc-ce68-9d29658ad398","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-01-29T00:00:00.0000000Z","usageEnd":"2018-01-30T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":23.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/8c159481-6eb9-03ff-5d92-2a71931fe26e","name":"8c159481-6eb9-03ff-5d92-2a71931fe26e","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-01-30T00:00:00.0000000Z","usageEnd":"2023-05-01T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/a7c22f16-c898-5248-27af-bcbcbac04d4b","name":"a7c22f16-c898-5248-27af-bcbcbac04d4b","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2023-05-01T00:00:00.0000000Z","usageEnd":"2018-02-01T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/dd36ac4f-e01e-ffdc-2748-9dee86a78825","name":"dd36ac4f-e01e-ffdc-2748-9dee86a78825","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-01T00:00:00.0000000Z","usageEnd":"2018-02-02T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/f55fba7e-b9e3-b71f-d437-403c51ba6cd5","name":"f55fba7e-b9e3-b71f-d437-403c51ba6cd5","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-02T00:00:00.0000000Z","usageEnd":"2018-02-03T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/575cd34b-559c-998a-b0e1-763614f5fef2","name":"575cd34b-559c-998a-b0e1-763614f5fef2","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-03T00:00:00.0000000Z","usageEnd":"2018-02-04T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/74d1e71c-9c54-4ee0-6ddc-c9808bb34bd2","name":"74d1e71c-9c54-4ee0-6ddc-c9808bb34bd2","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-04T00:00:00.0000000Z","usageEnd":"2018-02-05T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/0d45cf26-2994-485f-a16f-5dd7b778db8b","name":"0d45cf26-2994-485f-a16f-5dd7b778db8b","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-05T00:00:00.0000000Z","usageEnd":"2018-02-06T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/98426570-0050-56fc-7910-e124ccc7be9d","name":"98426570-0050-56fc-7910-e124ccc7be9d","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-06T00:00:00.0000000Z","usageEnd":"2018-02-07T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/43c5c50c-d208-11d8-b584-c4299c703579","name":"43c5c50c-d208-11d8-b584-c4299c703579","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-07T00:00:00.0000000Z","usageEnd":"2018-02-08T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":23.983353,"resourceRate":0,"pretaxCost":0.0000000,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/5b9df0d9-ae34-ebdb-362d-b7eab784f4e8","name":"5b9df0d9-ae34-ebdb-362d-b7eab784f4e8","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-08T00:00:00.0000000Z","usageEnd":"2018-02-09T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/829b8fc0-c021-7711-57a1-346f49a9b98d","name":"829b8fc0-c021-7711-57a1-346f49a9b98d","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-09T00:00:00.0000000Z","usageEnd":"2018-02-10T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/edae0adc-e142-7f67-6ea7-aab3374cd33d","name":"edae0adc-e142-7f67-6ea7-aab3374cd33d","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-10T00:00:00.0000000Z","usageEnd":"2018-02-11T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/c0cac971-554f-1350-8252-6dbec76d39c4","name":"c0cac971-554f-1350-8252-6dbec76d39c4","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-11T00:00:00.0000000Z","usageEnd":"2018-02-12T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":23.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/401e40cf-a726-a74f-efc4-75f16ceddf77","name":"401e40cf-a726-a74f-efc4-75f16ceddf77","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-12T00:00:00.0000000Z","usageEnd":"2018-02-13T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/2ba8c119-5141-32e4-86b7-854dd8e42011","name":"2ba8c119-5141-32e4-86b7-854dd8e42011","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-13T00:00:00.0000000Z","usageEnd":"2018-02-14T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/9f084cd8-c679-3d97-66e5-63f02fbee19d","name":"9f084cd8-c679-3d97-66e5-63f02fbee19d","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-14T00:00:00.0000000Z","usageEnd":"2018-02-15T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/1a9fd580-7db6-4fc5-4fe8-6115840889f7","name":"1a9fd580-7db6-4fc5-4fe8-6115840889f7","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-15T00:00:00.0000000Z","usageEnd":"2018-02-16T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/65e61f21-9305-202d-200d-1e0dd85602c0","name":"65e61f21-9305-202d-200d-1e0dd85602c0","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-16T00:00:00.0000000Z","usageEnd":"2018-02-17T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/eaa0d22b-dff2-cf61-3f4d-bd3ddaeb384e","name":"eaa0d22b-dff2-cf61-3f4d-bd3ddaeb384e","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-17T00:00:00.0000000Z","usageEnd":"2018-02-18T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/8e24c52d-ec24-b3ac-f374-0260a87ef5ab","name":"8e24c52d-ec24-b3ac-f374-0260a87ef5ab","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-18T00:00:00.0000000Z","usageEnd":"2018-02-19T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/13cbd1c1-5f16-28ff-5afc-03618e89101b","name":"13cbd1c1-5f16-28ff-5afc-03618e89101b","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-19T00:00:00.0000000Z","usageEnd":"2018-02-20T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/8236f7bd-18fb-91ab-edee-656e1a2f6e5f","name":"8236f7bd-18fb-91ab-edee-656e1a2f6e5f","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-20T00:00:00.0000000Z","usageEnd":"2018-02-21T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/b23cb88d-fede-f09b-d1ce-7e6c8dd3fd6a","name":"b23cb88d-fede-f09b-d1ce-7e6c8dd3fd6a","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-21T00:00:00.0000000Z","usageEnd":"2018-02-22T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":21.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}}]}'} headers: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list_billing_period.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list_billing_period.yaml index d7ff813d34d..06a5a979af8 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list_billing_period.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list_billing_period.yaml @@ -11,7 +11,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces?api-version=2023-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces?api-version=2024-08-01 response: body: {string: '{"value":[{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/69ce08f3-4b03-a837-a4ad-32e4737ea608","name":"69ce08f3-4b03-a837-a4ad-32e4737ea608","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-01-28T00:00:00.0000000Z","usageEnd":"2018-01-29T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/06756d50-64f5-59dc-ce68-9d29658ad398","name":"06756d50-64f5-59dc-ce68-9d29658ad398","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-01-29T00:00:00.0000000Z","usageEnd":"2018-01-30T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":23.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/8c159481-6eb9-03ff-5d92-2a71931fe26e","name":"8c159481-6eb9-03ff-5d92-2a71931fe26e","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-01-30T00:00:00.0000000Z","usageEnd":"2023-05-01T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/a7c22f16-c898-5248-27af-bcbcbac04d4b","name":"a7c22f16-c898-5248-27af-bcbcbac04d4b","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2023-05-01T00:00:00.0000000Z","usageEnd":"2018-02-01T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/dd36ac4f-e01e-ffdc-2748-9dee86a78825","name":"dd36ac4f-e01e-ffdc-2748-9dee86a78825","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-01T00:00:00.0000000Z","usageEnd":"2018-02-02T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/f55fba7e-b9e3-b71f-d437-403c51ba6cd5","name":"f55fba7e-b9e3-b71f-d437-403c51ba6cd5","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-02T00:00:00.0000000Z","usageEnd":"2018-02-03T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/575cd34b-559c-998a-b0e1-763614f5fef2","name":"575cd34b-559c-998a-b0e1-763614f5fef2","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-03T00:00:00.0000000Z","usageEnd":"2018-02-04T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/74d1e71c-9c54-4ee0-6ddc-c9808bb34bd2","name":"74d1e71c-9c54-4ee0-6ddc-c9808bb34bd2","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-04T00:00:00.0000000Z","usageEnd":"2018-02-05T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/0d45cf26-2994-485f-a16f-5dd7b778db8b","name":"0d45cf26-2994-485f-a16f-5dd7b778db8b","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-05T00:00:00.0000000Z","usageEnd":"2018-02-06T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/98426570-0050-56fc-7910-e124ccc7be9d","name":"98426570-0050-56fc-7910-e124ccc7be9d","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-06T00:00:00.0000000Z","usageEnd":"2018-02-07T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/43c5c50c-d208-11d8-b584-c4299c703579","name":"43c5c50c-d208-11d8-b584-c4299c703579","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-07T00:00:00.0000000Z","usageEnd":"2018-02-08T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":23.983353,"resourceRate":0,"pretaxCost":0.0000000,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/5b9df0d9-ae34-ebdb-362d-b7eab784f4e8","name":"5b9df0d9-ae34-ebdb-362d-b7eab784f4e8","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-08T00:00:00.0000000Z","usageEnd":"2018-02-09T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/829b8fc0-c021-7711-57a1-346f49a9b98d","name":"829b8fc0-c021-7711-57a1-346f49a9b98d","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-09T00:00:00.0000000Z","usageEnd":"2018-02-10T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/edae0adc-e142-7f67-6ea7-aab3374cd33d","name":"edae0adc-e142-7f67-6ea7-aab3374cd33d","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-10T00:00:00.0000000Z","usageEnd":"2018-02-11T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/c0cac971-554f-1350-8252-6dbec76d39c4","name":"c0cac971-554f-1350-8252-6dbec76d39c4","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-11T00:00:00.0000000Z","usageEnd":"2018-02-12T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":23.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/401e40cf-a726-a74f-efc4-75f16ceddf77","name":"401e40cf-a726-a74f-efc4-75f16ceddf77","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-12T00:00:00.0000000Z","usageEnd":"2018-02-13T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/2ba8c119-5141-32e4-86b7-854dd8e42011","name":"2ba8c119-5141-32e4-86b7-854dd8e42011","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-13T00:00:00.0000000Z","usageEnd":"2018-02-14T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/9f084cd8-c679-3d97-66e5-63f02fbee19d","name":"9f084cd8-c679-3d97-66e5-63f02fbee19d","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-14T00:00:00.0000000Z","usageEnd":"2018-02-15T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/1a9fd580-7db6-4fc5-4fe8-6115840889f7","name":"1a9fd580-7db6-4fc5-4fe8-6115840889f7","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-15T00:00:00.0000000Z","usageEnd":"2018-02-16T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/65e61f21-9305-202d-200d-1e0dd85602c0","name":"65e61f21-9305-202d-200d-1e0dd85602c0","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-16T00:00:00.0000000Z","usageEnd":"2018-02-17T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/eaa0d22b-dff2-cf61-3f4d-bd3ddaeb384e","name":"eaa0d22b-dff2-cf61-3f4d-bd3ddaeb384e","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-17T00:00:00.0000000Z","usageEnd":"2018-02-18T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/8e24c52d-ec24-b3ac-f374-0260a87ef5ab","name":"8e24c52d-ec24-b3ac-f374-0260a87ef5ab","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-18T00:00:00.0000000Z","usageEnd":"2018-02-19T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/13cbd1c1-5f16-28ff-5afc-03618e89101b","name":"13cbd1c1-5f16-28ff-5afc-03618e89101b","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-19T00:00:00.0000000Z","usageEnd":"2018-02-20T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/8236f7bd-18fb-91ab-edee-656e1a2f6e5f","name":"8236f7bd-18fb-91ab-edee-656e1a2f6e5f","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-20T00:00:00.0000000Z","usageEnd":"2018-02-21T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}},{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/b23cb88d-fede-f09b-d1ce-7e6c8dd3fd6a","name":"b23cb88d-fede-f09b-d1ce-7e6c8dd3fd6a","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-02-21T00:00:00.0000000Z","usageEnd":"2018-02-22T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":21.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}}]}'} headers: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list_billing_period_filter.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list_billing_period_filter.yaml index c458c56c2c1..beb7db08925 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list_billing_period_filter.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_marketplace_list_billing_period_filter.yaml @@ -11,9 +11,9 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces?$top=1&api-version=2023-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces?$top=1&api-version=2024-08-01 response: - body: {string: '{"nextLink":"https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces?$top=1&api-version=2023-05-01&$skiptoken=AQAAAA%3D%3D","value":[{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/69ce08f3-4b03-a837-a4ad-32e4737ea608","name":"69ce08f3-4b03-a837-a4ad-32e4737ea608","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-01-28T00:00:00.0000000Z","usageEnd":"2018-01-29T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}}]}'} + body: {string: '{"nextLink":"https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces?$top=1&api-version=2024-08-01&$skiptoken=AQAAAA%3D%3D","value":[{"id":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1/providers/Microsoft.Consumption/marketplaces/69ce08f3-4b03-a837-a4ad-32e4737ea608","name":"69ce08f3-4b03-a837-a4ad-32e4737ea608","type":"Microsoft.Consumption/usageDetails","tags":null,"properties":{"billingPeriodId":"subscriptions/6b74c45b-9597-4939-a202-36b2ee8fbb3d/providers/Microsoft.Billing/billingPeriods/201804-1","usageStart":"2018-01-28T00:00:00.0000000Z","usageEnd":"2018-01-29T00:00:00.0000000Z","currency":"USD","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/TESTRG1/providers/Microsoft.Compute/virtualMachines/TestVM","instanceName":"TestVM","orderNumber":"2b380487-dc18-4e5d-981f-1ee2cc59e776","consumedQuantity":24.0,"resourceRate":0,"pretaxCost":0.00,"isEstimated":false,"subscriptionGuid":"6b74c45b-9597-4939-a202-36b2ee8fbb3d"}}]}'} headers: cache-control: [no-cache] content-length: ['1147'] diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_pricesheet.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_pricesheet.yaml index 0ef01e7bf51..5d91787fa2b 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_pricesheet.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_pricesheet.yaml @@ -11,9 +11,9 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/pricesheets/default?api-version=2023-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/pricesheets/default?api-version=2024-08-01 response: - body: {string: '{"id":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20180201/providers/Microsoft.Consumption/pricesheets/default","name":"default","type":"Microsoft.Consumption/pricesheets","tags":null,"properties":{"nextLink":"https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/pricesheets/default?api-version=2023-05-01&$skiptoken=AQAAAA%3D%3D","download":null,"pricesheets":[{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20180201","meterId":"BACDDD36-2C2C-46BB-8CFA-D13C15EE4A7E","unitOfMeasure":"10 + body: {string: '{"id":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20180201/providers/Microsoft.Consumption/pricesheets/default","name":"default","type":"Microsoft.Consumption/pricesheets","tags":null,"properties":{"nextLink":"https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Consumption/pricesheets/default?api-version=2024-08-01&$skiptoken=AQAAAA%3D%3D","download":null,"pricesheets":[{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20180201","meterId":"BACDDD36-2C2C-46BB-8CFA-D13C15EE4A7E","unitOfMeasure":"10 Hours","includedQuantity":0.0000,"partNumber":"AAA-49135","unitPrice":0,"currencyCode":"USD","meterDetails":null},{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20180201","meterId":"11214343-48E4-4B8A-8FB7-F2ED23716F2E","unitOfMeasure":"1000000 Operations","includedQuantity":0.0000,"partNumber":"N9H-01158","unitPrice":0,"currencyCode":"USD","meterDetails":null},{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20180201","meterId":"46367D67-1E4C-4ED4-8267-4477083F581C","unitOfMeasure":"10 Hours","includedQuantity":0.0000,"partNumber":"AAA-53590","unitPrice":0,"currencyCode":"USD","meterDetails":null},{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20180201","meterId":"767A249C-98A9-458E-9567-367120C60A08","unitOfMeasure":"10 diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_pricesheet_billing_period.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_pricesheet_billing_period.yaml index 84b33ee4463..4412b10982b 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_pricesheet_billing_period.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_consumption_pricesheet_billing_period.yaml @@ -11,9 +11,9 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/20171001/providers/Microsoft.Consumption/pricesheets/default?api-version=2023-05-01 + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/20171001/providers/Microsoft.Consumption/pricesheets/default?api-version=2024-08-01 response: - body: {string: '{"id":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20171001/providers/Microsoft.Consumption/pricesheets/default","name":"default","type":"Microsoft.Consumption/pricesheets","tags":null,"properties":{"nextLink":"https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/20171001/providers/Microsoft.Consumption/pricesheets/default?api-version=2023-05-01&$skiptoken=AQAAAA%3D%3D","download":null,"pricesheets":[{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20171001","meterId":"BACDDD36-2C2C-46BB-8CFA-D13C15EE4A7E","unitOfMeasure":"10 + body: {string: '{"id":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20171001/providers/Microsoft.Consumption/pricesheets/default","name":"default","type":"Microsoft.Consumption/pricesheets","tags":null,"properties":{"nextLink":"https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Billing/billingPeriods/20171001/providers/Microsoft.Consumption/pricesheets/default?api-version=2024-08-01&$skiptoken=AQAAAA%3D%3D","download":null,"pricesheets":[{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20171001","meterId":"BACDDD36-2C2C-46BB-8CFA-D13C15EE4A7E","unitOfMeasure":"10 Hours","includedQuantity":0.0000,"partNumber":"AAA-49135","unitPrice":0,"currencyCode":"USD","meterDetails":null},{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20171001","meterId":"11214343-48E4-4B8A-8FB7-F2ED23716F2E","unitOfMeasure":"1000000 Operations","includedQuantity":0.0000,"partNumber":"N9H-01158","unitPrice":0,"currencyCode":"USD","meterDetails":null},{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20171001","meterId":"767A249C-98A9-458E-9567-367120C60A08","unitOfMeasure":"10 Hours","includedQuantity":0.0000,"partNumber":"N7H-09822","unitPrice":0,"currencyCode":"USD","meterDetails":null},{"billingPeriodId":"subscriptions/a98d6dc5-eb8f-46cf-8938-f1fb08f03706/providers/Microsoft.Billing/billingPeriods/20171001","meterId":"4018A121-F1C4-4405-AA40-A59DF52080AB","unitOfMeasure":"10 diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_details.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_details.yaml index 2e3a1ce0a9f..94098cb57f3 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_details.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_details.yaml @@ -11,7 +11,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/providers/Microsoft.Consumption/reservationDetails?$filter=properties%2FUsageDate%20ge%202017-12-01T00%3A00%3A00Z%20and%20properties%2FUsageDate%20le%202017-12-07T00%3A00%3A00Z&api-version=2023-05-01 + uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/providers/Microsoft.Consumption/reservationDetails?$filter=properties%2FUsageDate%20ge%202017-12-01T00%3A00%3A00Z%20and%20properties%2FUsageDate%20le%202017-12-07T00%3A00%3A00Z&api-version=2024-08-01 response: body: {string: '{"value":[{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171201","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171201","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-01T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171202","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171202","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-02T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171203","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171203","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-03T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171204","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171204","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-04T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171205","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171205","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-05T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171206","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171206","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-06T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":23.970000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171206","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171206","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-06T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrgukwest/providers/microsoft.compute/virtualmachines/testwindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":0.030000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171207","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171207","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-07T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}}]}'} headers: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_details_with_reservationid.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_details_with_reservationid.yaml index 011aa00bbe9..8fec8d8dc83 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_details_with_reservationid.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_details_with_reservationid.yaml @@ -11,7 +11,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationDetails?$filter=properties%2FUsageDate%20ge%202017-12-01T00%3A00%3A00Z%20and%20properties%2FUsageDate%20le%202017-12-07T00%3A00%3A00Z&api-version=2023-05-01 + uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationDetails?$filter=properties%2FUsageDate%20ge%202017-12-01T00%3A00%3A00Z%20and%20properties%2FUsageDate%20le%202017-12-07T00%3A00%3A00Z&api-version=2024-08-01 response: body: {string: '{"value":[{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171201","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171201","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-01T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171202","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171202","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-02T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171203","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171203","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-03T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171204","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171204","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-04T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171205","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171205","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-05T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171206","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171206","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-06T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":23.970000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171206","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171206","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-06T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrgukwest/providers/microsoft.compute/virtualmachines/testwindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":0.030000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640providers/Microsoft.Consumption/reservationDetails/20171207","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171207","type":"Microsoft.Consumption/reservationDetails","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","usageDate":"2017-12-07T00:00:00Z","skuName":"Standard_DS2_v2","instanceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/testrg/providers/microsoft.compute/virtualmachines/std2swindows","totalReservedQuantity":1.000000000000000,"reservedHours":24.000000000000000,"usedHours":24.000000000000000}}]}'} headers: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_daily.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_daily.yaml index 8f641320bb6..f3d45e03bc2 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_daily.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_daily.yaml @@ -11,7 +11,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/providers/Microsoft.Consumption/reservationSummaries?grain=daily&$filter=properties%2FUsageDate%20ge%202017-12-01T00%3A00%3A00Z%20and%20properties%2FUsageDate%20le%202017-12-07T00%3A00%3A00Z&api-version=2023-05-01 + uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/providers/Microsoft.Consumption/reservationSummaries?grain=daily&$filter=properties%2FUsageDate%20ge%202017-12-01T00%3A00%3A00Z%20and%20properties%2FUsageDate%20le%202017-12-07T00%3A00%3A00Z&api-version=2024-08-01 response: body: {string: '{"value":[{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171201","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171201","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-01T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171202","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171202","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-02T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171203","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171203","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-03T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171204","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171204","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-04T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171205","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171205","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-05T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171206","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171206","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-06T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171207","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171207","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-07T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}}]}'} headers: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_daily_with_reservationid.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_daily_with_reservationid.yaml index 1bd54b3c761..85286676cdd 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_daily_with_reservationid.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_daily_with_reservationid.yaml @@ -11,7 +11,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries?grain=daily&$filter=properties%2FUsageDate%20ge%202017-12-01T00%3A00%3A00Z%20and%20properties%2FUsageDate%20le%202017-12-07T00%3A00%3A00Z&api-version=2023-05-01 + uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries?grain=daily&$filter=properties%2FUsageDate%20ge%202017-12-01T00%3A00%3A00Z%20and%20properties%2FUsageDate%20le%202017-12-07T00%3A00%3A00Z&api-version=2024-08-01 response: body: {string: '{"value":[{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171201","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171201","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-01T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171202","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171202","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-02T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171203","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171203","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-03T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171204","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171204","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-04T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171205","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171205","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-05T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171206","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171206","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-06T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171207","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171207","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":24.000000000000000,"usageDate":"2017-12-07T00:00:00Z","usedHours":24.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}}]}'} headers: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_monthly.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_monthly.yaml index 75ff76af9d1..66f91f0d3b4 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_monthly.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_monthly.yaml @@ -11,7 +11,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/providers/Microsoft.Consumption/reservationSummaries?grain=monthly&api-version=2023-05-01 + uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/providers/Microsoft.Consumption/reservationSummaries?grain=monthly&api-version=2024-08-01 response: body: {string: '{"value":[{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20170901","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20170901","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":288.000000000000000,"usageDate":"2017-09-01T00:00:00Z","usedHours":288.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171001","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171001","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":744.000000000000000,"usageDate":"2017-10-01T00:00:00Z","usedHours":744.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171101","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171101","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":720.000000000000000,"usageDate":"2017-11-01T00:00:00Z","usedHours":720.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171201","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171201","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":744.000000000000000,"usageDate":"2017-12-01T00:00:00Z","usedHours":743.000000000000000,"minUtilizationPercentage":0.000000000000000,"avgUtilizationPercentage":99.870000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20180101","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20180101","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":744.000000000000000,"usageDate":"2018-01-01T00:00:00Z","usedHours":744.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20180201","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20180201","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":310.000000000000000,"usageDate":"2018-02-01T00:00:00Z","usedHours":310.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}}]}'} headers: diff --git a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_monthly_with_reservationid.yaml b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_monthly_with_reservationid.yaml index fcd9d91a34c..e1223167e34 100644 --- a/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_monthly_with_reservationid.yaml +++ b/src/azure-cli/azure/cli/command_modules/consumption/tests/latest/recordings/test_list_reservations_summaries_monthly_with_reservationid.yaml @@ -11,7 +11,7 @@ interactions: msrest_azure/0.4.21 azure-mgmt-consumption/2.0.0 Azure-SDK-For-Python AZURECLI/2.0.28] accept-language: [en-US] method: GET - uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries?grain=monthly&api-version=2023-05-01 + uri: https://management.azure.com/providers/Microsoft.Capacity/reservationorders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries?grain=monthly&api-version=2024-08-01 response: body: {string: '{"value":[{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20170901","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20170901","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":288.000000000000000,"usageDate":"2017-09-01T00:00:00Z","usedHours":288.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171001","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171001","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":744.000000000000000,"usageDate":"2017-10-01T00:00:00Z","usedHours":744.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171101","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171101","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":720.000000000000000,"usageDate":"2017-11-01T00:00:00Z","usedHours":720.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20171201","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20171201","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":744.000000000000000,"usageDate":"2017-12-01T00:00:00Z","usedHours":743.000000000000000,"minUtilizationPercentage":0.000000000000000,"avgUtilizationPercentage":99.870000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20180101","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20180101","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":744.000000000000000,"usageDate":"2018-01-01T00:00:00Z","usedHours":744.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}},{"id":"providers/Microsoft.Capacity/reservationOrders/ca69259e-bd4f-45c3-bf28-3f353f9cce9b/reservations/f37f4b70-52ba-4344-a8bd-28abfd21d640/providers/Microsoft.Consumption/reservationSummaries/20180201","name":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b_f37f4b70-52ba-4344-a8bd-28abfd21d640_20180201","type":"Microsoft.Consumption/reservationSummaries","tags":null,"properties":{"reservationOrderId":"ca69259e-bd4f-45c3-bf28-3f353f9cce9b","reservationId":"f37f4b70-52ba-4344-a8bd-28abfd21d640","skuName":"Standard_DS2_v2","reservedHours":310.000000000000000,"usageDate":"2018-02-01T00:00:00Z","usedHours":310.000000000000000,"minUtilizationPercentage":100.000000000000000,"avgUtilizationPercentage":100.000000000000000,"maxUtilizationPercentage":100.000000000000000}}]}'} headers: