From 16ba370ffb26e63cced4460521b45003129f4064 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Tue, 22 Jul 2025 16:16:03 -0700 Subject: [PATCH 01/13] Initial commit: generate spot placement score py --- .../latest/compute_recommender/__init__.py | 1 + .../_spot_placement_score.py | 259 ++++++++++++++++++ 2 files changed, 260 insertions(+) create mode 100644 src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/__init__.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/__init__.py index c54c216e0fc..43a7f0c7584 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/__init__.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/__init__.py @@ -10,3 +10,4 @@ from .__cmd_group import * from ._spot_placement_recommender import * +from ._spot_placement_score import * diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py new file mode 100644 index 00000000000..f2a1faf04e6 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py @@ -0,0 +1,259 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# +# Code generated by aaz-dev-tools +# -------------------------------------------------------------------------------------------- + +# pylint: skip-file +# flake8: noqa + +from azure.cli.core.aaz import * + + +@register_command( + "compute-recommender spot-placement-score", + is_preview=True, +) +class SpotPlacementScore(AAZCommand): + """Generate placement scores for Spot VM skus. + + :example: generate spot vm placement score example + az compute-recommender spot-placement-score -l eastus --subscription ffffffff-ffff-ffff-ffff-ffffffffffff --availability-zones true --desired-locations '["eastus", "eastus2"]' --desired-count 1 --desired-sizes '[{"sku": "Standard_D2_v2"}]' + """ + + _aaz_info = { + "version": "2025-06-05", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/providers/microsoft.compute/locations/{}/placementscores/spot/generate", "2025-06-05"], + ] + } + + def _handler(self, command_args): + super()._handler(command_args) + self._execute_operations() + return self._output() + + _args_schema = None + + @classmethod + def _build_arguments_schema(cls, *args, **kwargs): + if cls._args_schema is not None: + return cls._args_schema + cls._args_schema = super()._build_arguments_schema(*args, **kwargs) + + # define Arg Group "" + + _args_schema = cls._args_schema + _args_schema.location = AAZResourceLocationArg( + required=True, + id_part="name", + ) + + # define Arg Group "SpotPlacementScoresInput" + + _args_schema = cls._args_schema + _args_schema.availability_zones = AAZBoolArg( + options=["--availability-zones"], + arg_group="SpotPlacementScoresInput", + help="Defines if the scope is zonal or regional.", + ) + _args_schema.desired_count = AAZIntArg( + options=["--desired-count"], + arg_group="SpotPlacementScoresInput", + help="Desired instance count per region/zone based on the scope.", + ) + _args_schema.desired_locations = AAZListArg( + options=["--desired-locations"], + arg_group="SpotPlacementScoresInput", + help="The desired regions", + ) + _args_schema.desired_sizes = AAZListArg( + options=["--desired-sizes"], + arg_group="SpotPlacementScoresInput", + help="The desired resource SKUs.", + ) + + desired_locations = cls._args_schema.desired_locations + desired_locations.Element = AAZStrArg() + + desired_sizes = cls._args_schema.desired_sizes + desired_sizes.Element = AAZObjectArg() + + _element = cls._args_schema.desired_sizes.Element + _element.sku = AAZStrArg( + options=["sku"], + help="The resource's CRP virtual machine SKU size.", + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + self.SpotPlacementScoresPost(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + def _output(self, *args, **kwargs): + result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True) + return result + + class SpotPlacementScoresPost(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.Compute/locations/{location}/placementScores/spot/generate", + **self.url_parameters + ) + + @property + def method(self): + return "POST" + + @property + def error_format(self): + return "MgmtErrorFormat" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "location", self.ctx.args.location, + 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( + "api-version", "2025-06-05", + required=True, + ), + } + return parameters + + @property + def header_parameters(self): + parameters = { + **self.serialize_header_param( + "Content-Type", "application/json", + ), + **self.serialize_header_param( + "Accept", "application/json", + ), + } + return parameters + + @property + def content(self): + _content_value, _builder = self.new_content_builder( + self.ctx.args, + typ=AAZObjectType, + typ_kwargs={"flags": {"required": True, "client_flatten": True}} + ) + _builder.set_prop("availabilityZones", AAZBoolType, ".availability_zones") + _builder.set_prop("desiredCount", AAZIntType, ".desired_count") + _builder.set_prop("desiredLocations", AAZListType, ".desired_locations") + _builder.set_prop("desiredSizes", AAZListType, ".desired_sizes") + + desired_locations = _builder.get(".desiredLocations") + if desired_locations is not None: + desired_locations.set_elements(AAZStrType, ".") + + desired_sizes = _builder.get(".desiredSizes") + if desired_sizes is not None: + desired_sizes.set_elements(AAZObjectType, ".") + + _elements = _builder.get(".desiredSizes[]") + if _elements is not None: + _elements.set_prop("sku", AAZStrType, ".sku") + + return self.serialize_content(_content_value) + + 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.availability_zones = AAZBoolType( + serialized_name="availabilityZones", + ) + _schema_on_200.desired_count = AAZIntType( + serialized_name="desiredCount", + ) + _schema_on_200.desired_locations = AAZListType( + serialized_name="desiredLocations", + ) + _schema_on_200.desired_sizes = AAZListType( + serialized_name="desiredSizes", + ) + _schema_on_200.placement_scores = AAZListType( + serialized_name="placementScores", + ) + + desired_locations = cls._schema_on_200.desired_locations + desired_locations.Element = AAZStrType() + + desired_sizes = cls._schema_on_200.desired_sizes + desired_sizes.Element = AAZObjectType() + + _element = cls._schema_on_200.desired_sizes.Element + _element.sku = AAZStrType() + + placement_scores = cls._schema_on_200.placement_scores + placement_scores.Element = AAZObjectType() + + _element = cls._schema_on_200.placement_scores.Element + _element.availability_zone = AAZStrType( + serialized_name="availabilityZone", + ) + _element.is_quota_available = AAZBoolType( + serialized_name="isQuotaAvailable", + ) + _element.region = AAZStrType() + _element.score = AAZStrType() + _element.sku = AAZStrType() + + return cls._schema_on_200 + + +class _SpotPlacementScoreHelper: + """Helper class for SpotPlacementScore""" + + +__all__ = ["SpotPlacementScore"] From 3e92836deeec2953bfc6d4194a69d4ee8e60acee Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Tue, 22 Jul 2025 16:51:32 -0700 Subject: [PATCH 02/13] Remove is_preview in _spot_placement_score.py --- .../aaz/latest/compute_recommender/_spot_placement_score.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py index f2a1faf04e6..657a2351dbd 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py @@ -13,7 +13,6 @@ @register_command( "compute-recommender spot-placement-score", - is_preview=True, ) class SpotPlacementScore(AAZCommand): """Generate placement scores for Spot VM skus. From 5daf880e7af1ecccedae79c0364d5e381166a264 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Wed, 23 Jul 2025 16:50:36 -0700 Subject: [PATCH 03/13] Update the desired location and desired size to required --- .../latest/compute_recommender/_spot_placement_score.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py index 657a2351dbd..6c8a0918644 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py @@ -13,6 +13,7 @@ @register_command( "compute-recommender spot-placement-score", + is_preview=True, ) class SpotPlacementScore(AAZCommand): """Generate placement scores for Spot VM skus. @@ -66,11 +67,13 @@ def _build_arguments_schema(cls, *args, **kwargs): options=["--desired-locations"], arg_group="SpotPlacementScoresInput", help="The desired regions", + required=True, ) _args_schema.desired_sizes = AAZListArg( options=["--desired-sizes"], arg_group="SpotPlacementScoresInput", help="The desired resource SKUs.", + required=True, ) desired_locations = cls._args_schema.desired_locations @@ -174,8 +177,8 @@ def content(self): ) _builder.set_prop("availabilityZones", AAZBoolType, ".availability_zones") _builder.set_prop("desiredCount", AAZIntType, ".desired_count") - _builder.set_prop("desiredLocations", AAZListType, ".desired_locations") - _builder.set_prop("desiredSizes", AAZListType, ".desired_sizes") + _builder.set_prop("desiredLocations", AAZListType, ".desired_locations", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("desiredSizes", AAZListType, ".desired_sizes", typ_kwargs={"flags": {"required": True}}) desired_locations = _builder.get(".desiredLocations") if desired_locations is not None: From efcd3f8142d6ea217479e9cefa317178ecf78812 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Wed, 23 Jul 2025 17:54:42 -0700 Subject: [PATCH 04/13] Adding spot placement score test and recording file --- .../test_spot_placement_score_generate.yaml | 61 +++++++++++++++++++ .../tests/latest/test_compute_recommender.py | 14 +++++ 2 files changed, 75 insertions(+) create mode 100644 src/azure-cli/azure/cli/command_modules/compute_recommender/tests/latest/recordings/test_spot_placement_score_generate.yaml diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/tests/latest/recordings/test_spot_placement_score_generate.yaml b/src/azure-cli/azure/cli/command_modules/compute_recommender/tests/latest/recordings/test_spot_placement_score_generate.yaml new file mode 100644 index 00000000000..0c5df0780a1 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/tests/latest/recordings/test_spot_placement_score_generate.yaml @@ -0,0 +1,61 @@ +interactions: +- request: + body: '{"availabilityZones": true, "desiredCount": 1, "desiredLocations": ["eastus", + "eastus2"], "desiredSizes": [{"sku": "Standard_D2_v2"}]}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - compute-recommender spot-placement-score + Connection: + - keep-alive + Content-Length: + - '134' + Content-Type: + - application/json + ParameterSetName: + - -l --subscription --availability-zones --desired-locations --desired-count + --desired-sizes + User-Agent: + - AZURECLI/2.75.0 azsdk-python-core/1.35.0 Python/3.12.10 (Windows-11-10.0.22621-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/placementScores/spot/generate?api-version=2025-06-05 + response: + body: + string: '{"desiredLocations":["eastus","eastus2"],"desiredSizes":[{"sku":"Standard_D2_v2"}],"desiredCount":1,"availabilityZones":true,"placementScores":[{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"1","score":"RestrictedSkuNotAvailable","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"2","score":"RestrictedSkuNotAvailable","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"3","score":"RestrictedSkuNotAvailable","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"1","score":"Low","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"2","score":"Low","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"3","score":"Low","isQuotaAvailable":true}]}' + headers: + api-supported-versions: + - 2024-03-01-preview, 2024-06-01-preview, 2025-02-01-preview, 2025-06-05-preview, + 2025-06-05 + cache-control: + - no-cache + content-length: + - '838' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 24 Jul 2025 00:54:07 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-operation-identifier: + - tenantId=72f988bf-86f1-41af-91ab-2d7cd011db47,objectId=08e22377-6d70-4f82-b548-12ea80f00e8a/westus2/6d5eba66-9484-4bea-be37-6f3f019a6390 + x-ms-ratelimit-remaining-subscription-global-writes: + - '11999' + x-ms-ratelimit-remaining-subscription-writes: + - '799' + x-msedge-ref: + - 'Ref A: 5970299CFCE942E98330E15C3118BC33 Ref B: MWH011020809025 Ref C: 2025-07-24T00:54:02Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/tests/latest/test_compute_recommender.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/tests/latest/test_compute_recommender.py index d17f804e03a..1168ebbede6 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/tests/latest/test_compute_recommender.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/tests/latest/test_compute_recommender.py @@ -21,4 +21,18 @@ def test_spot_placement_recommender_generate(self): spot_scores_output = self.cmd('az compute-recommender spot-placement-recommender -l {location} --subscription {subscription_id} --availability-zones {availability_zones} --desired-locations \'{desired_locations}\' --desired-count {desired_count} --desired-sizes \'{desired_sizes}\'').get_output_in_json() + self.assertTrue(len(spot_scores_output["placementScores"]) > 0, "Spot scores should have at least one item") + + def test_spot_placement_score_generate(self): + self.kwargs.update({ + 'location': 'eastus', + 'subscription_id': self.get_subscription_id(), + 'availability_zones': 'true', + 'desired_locations': '["eastus", "eastus2"]', + 'desired_count': 1, + 'desired_sizes': '[{"sku": "Standard_D2_v2"}]' + }) + + spot_scores_output = self.cmd('az compute-recommender spot-placement-score -l {location} --subscription {subscription_id} --availability-zones {availability_zones} --desired-locations \'{desired_locations}\' --desired-count {desired_count} --desired-sizes \'{desired_sizes}\'').get_output_in_json() + self.assertTrue(len(spot_scores_output["placementScores"]) > 0, "Spot scores should have at least one item") \ No newline at end of file From 074489c9b412da7467992a0500bee206eb0bd90f Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Thu, 24 Jul 2025 00:53:17 -0700 Subject: [PATCH 05/13] Adding deprecate_info=self.deprecate(redirect to deprecate spot-placement-recommender with spot-placement-score Adding deprecate_info=self.deprecate(redirect to deprecate spot-placement-recommender with spot-placement-score, and passing Adding deprecate_info=self.deprecate(redirect to deprecate spot-placement-recommender with spot-placement-score, and passing --- .../command_modules/compute_recommender/commands.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py index 30b4e29e7ca..3dad47e707e 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py @@ -13,4 +13,13 @@ def load_command_table(self, _): # pylint: disable=unused-argument - pass + with self.command_group( + 'compute-recommender spot-placement-recommender', + deprecate_info=self.deprecate( + redirect='az compute-recommender spot-placement-score', + hide=True, + expiration='2025-12-31', + message='This command group has been replaced by "az compute-recommender spot-placement-score". Please update your scripts accordingly.' + ) + ): + pass From 192d15a24fe10d2f773d51e0a1ca1dc756a60787 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Thu, 24 Jul 2025 01:40:01 -0700 Subject: [PATCH 06/13] Separating message line into two --- .../cli/command_modules/compute_recommender/commands.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py index 3dad47e707e..05675b34f8c 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py @@ -19,7 +19,10 @@ def load_command_table(self, _): # pylint: disable=unused-argument redirect='az compute-recommender spot-placement-score', hide=True, expiration='2025-12-31', - message='This command group has been replaced by "az compute-recommender spot-placement-score". Please update your scripts accordingly.' + message=( + 'This command group has been replaced by "az compute-recommender spot-placement-score". ' + 'Please update your scripts accordingly.' + ) ) ): pass From f43fd68142d6ccf9c50a33eb370ec82b0bc37049 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Thu, 24 Jul 2025 01:42:33 -0700 Subject: [PATCH 07/13] Remove deprecation date --- .../azure/cli/command_modules/compute_recommender/commands.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py index 05675b34f8c..8198e51f226 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py @@ -18,7 +18,6 @@ def load_command_table(self, _): # pylint: disable=unused-argument deprecate_info=self.deprecate( redirect='az compute-recommender spot-placement-score', hide=True, - expiration='2025-12-31', message=( 'This command group has been replaced by "az compute-recommender spot-placement-score". ' 'Please update your scripts accordingly.' From 80e8ce1a9c78f4d5068fe803103d02eb46e4f2e6 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Fri, 25 Jul 2025 00:58:18 -0700 Subject: [PATCH 08/13] Change redirect from az compute-recommender spot-placement-recommender --- .../azure/cli/command_modules/compute_recommender/commands.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py index 8198e51f226..181797db8ec 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py @@ -14,7 +14,7 @@ def load_command_table(self, _): # pylint: disable=unused-argument with self.command_group( - 'compute-recommender spot-placement-recommender', + 'az compute-recommender spot-placement-recommender', deprecate_info=self.deprecate( redirect='az compute-recommender spot-placement-score', hide=True, From a1e1c35064e42ec78e4cdbcce74cc416854a4809 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Sun, 27 Jul 2025 19:28:09 -0700 Subject: [PATCH 09/13] Remove is preview from compute-recommender and compute-recommender spot-placement-score, change command_group to compute-recommender spot-placement-recommender --- .../aaz/latest/compute_recommender/__cmd_group.py | 1 - .../aaz/latest/compute_recommender/_spot_placement_score.py | 3 +-- .../azure/cli/command_modules/compute_recommender/commands.py | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/__cmd_group.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/__cmd_group.py index b410873acb9..4a35ef8738b 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/__cmd_group.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/__cmd_group.py @@ -13,7 +13,6 @@ @register_command_group( "compute-recommender", - is_preview=True, ) class __CMDGroup(AAZCommandGroup): """Manage sku/zone/region recommender info for compute resources diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py index 6c8a0918644..ebef4cfe4e7 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/aaz/latest/compute_recommender/_spot_placement_score.py @@ -12,8 +12,7 @@ @register_command( - "compute-recommender spot-placement-score", - is_preview=True, + "compute-recommender spot-placement-score" ) class SpotPlacementScore(AAZCommand): """Generate placement scores for Spot VM skus. diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py index 181797db8ec..8198e51f226 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py @@ -14,7 +14,7 @@ def load_command_table(self, _): # pylint: disable=unused-argument with self.command_group( - 'az compute-recommender spot-placement-recommender', + 'compute-recommender spot-placement-recommender', deprecate_info=self.deprecate( redirect='az compute-recommender spot-placement-score', hide=True, From 1691e3fe86ad1d935d7dc3264de7dcf195b33d21 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Sun, 27 Jul 2025 23:13:04 -0700 Subject: [PATCH 10/13] Revert changes in commands.py and add _breaking_change.py --- .../compute_recommender/_breaking_change.py | 9 +++++++++ .../command_modules/compute_recommender/commands.py | 13 +------------ 2 files changed, 10 insertions(+), 12 deletions(-) create mode 100644 src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py new file mode 100644 index 00000000000..b3e95bb8ae7 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py @@ -0,0 +1,9 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +from azure.cli.core.breaking_change import register_command_deprecate + +register_command_deprecate('compute-recommender spot-placement-recommender', redirect='az compute-recommender spot-placement-score', hide=True) +# Warning Message: This command has been deprecated and will be removed in next breaking change release(2.67.0). Use `baz foo` instead. diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py index 8198e51f226..30b4e29e7ca 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/commands.py @@ -13,15 +13,4 @@ def load_command_table(self, _): # pylint: disable=unused-argument - with self.command_group( - 'compute-recommender spot-placement-recommender', - deprecate_info=self.deprecate( - redirect='az compute-recommender spot-placement-score', - hide=True, - message=( - 'This command group has been replaced by "az compute-recommender spot-placement-score". ' - 'Please update your scripts accordingly.' - ) - ) - ): - pass + pass From 7f9d59ae03466a46a6c5f5b62cbaa31854a54daf Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Sun, 27 Jul 2025 23:14:38 -0700 Subject: [PATCH 11/13] Try to fix linter check --- .../command_modules/compute_recommender/_breaking_change.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py index b3e95bb8ae7..6d85b75899f 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py @@ -5,5 +5,5 @@ from azure.cli.core.breaking_change import register_command_deprecate -register_command_deprecate('compute-recommender spot-placement-recommender', redirect='az compute-recommender spot-placement-score', hide=True) -# Warning Message: This command has been deprecated and will be removed in next breaking change release(2.67.0). Use `baz foo` instead. +register_command_deprecate('compute-recommender spot-placement-recommender', + redirect='az compute-recommender spot-placement-score', hide=True) From 91eae4234e5f0c60c74a2c5175d57af4ca4696f7 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Sun, 27 Jul 2025 23:16:18 -0700 Subject: [PATCH 12/13] remove trailing whitespace and tab --- .../command_modules/compute_recommender/_breaking_change.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py index 6d85b75899f..792069380e5 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py @@ -5,5 +5,6 @@ from azure.cli.core.breaking_change import register_command_deprecate -register_command_deprecate('compute-recommender spot-placement-recommender', - redirect='az compute-recommender spot-placement-score', hide=True) +register_command_deprecate('compute-recommender spot-placement-recommender', + redirect='az compute-recommender spot-placement-score', + hide=True) From 4b831183f3bf7a97f5869b3823e357f69f9bb797 Mon Sep 17 00:00:00 2001 From: Elina Liu Date: Sun, 27 Jul 2025 23:18:08 -0700 Subject: [PATCH 13/13] Align indentation --- .../command_modules/compute_recommender/_breaking_change.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py b/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py index 792069380e5..259d4189032 100644 --- a/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py +++ b/src/azure-cli/azure/cli/command_modules/compute_recommender/_breaking_change.py @@ -5,6 +5,7 @@ from azure.cli.core.breaking_change import register_command_deprecate -register_command_deprecate('compute-recommender spot-placement-recommender', +register_command_deprecate( + 'compute-recommender spot-placement-recommender', redirect='az compute-recommender spot-placement-score', hide=True)