From a58adddd0978e08b30ded7c7821e1634fa1f0519 Mon Sep 17 00:00:00 2001 From: Joanna Li Date: Fri, 15 Mar 2024 16:20:58 -0700 Subject: [PATCH 1/6] add a new cli extension for spot vm placement score --- src/spot-placement-recommender/HISTORY.rst | 8 + src/spot-placement-recommender/README.md | 5 + .../__init__.py | 42 +++ .../azext_spot_placement_recommender/_help.py | 11 + .../_params.py | 13 + .../aaz/__init__.py | 6 + .../aaz/latest/__init__.py | 10 + .../aaz/latest/compute/__cmd_group.py | 23 ++ .../aaz/latest/compute/__init__.py | 11 + .../latest/compute/diagnostic/__cmd_group.py | 23 ++ .../aaz/latest/compute/diagnostic/__init__.py | 11 + .../spot_placement_recommender/__cmd_group.py | 23 ++ .../spot_placement_recommender/__init__.py | 12 + .../spot_placement_recommender/_generate.py | 255 ++++++++++++++++++ .../azext_metadata.json | 4 + .../commands.py | 15 ++ .../custom.py | 14 + .../tests/__init__.py | 6 + .../tests/latest/__init__.py | 6 + ...t_spot_placement_recommender_generate.yaml | 56 ++++ .../latest/test_spot_placement_recommender.py | 24 ++ src/spot-placement-recommender/setup.cfg | 1 + src/spot-placement-recommender/setup.py | 49 ++++ 23 files changed, 628 insertions(+) create mode 100644 src/spot-placement-recommender/HISTORY.rst create mode 100644 src/spot-placement-recommender/README.md create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/__init__.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/_help.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/_params.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/__init__.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/__init__.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__cmd_group.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__init__.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__cmd_group.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__init__.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__cmd_group.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__init__.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/_generate.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/azext_metadata.json create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/commands.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/custom.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/tests/__init__.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/__init__.py create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/recordings/test_spot_placement_recommender_generate.yaml create mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py create mode 100644 src/spot-placement-recommender/setup.cfg create mode 100644 src/spot-placement-recommender/setup.py diff --git a/src/spot-placement-recommender/HISTORY.rst b/src/spot-placement-recommender/HISTORY.rst new file mode 100644 index 00000000000..abbff5a61a7 --- /dev/null +++ b/src/spot-placement-recommender/HISTORY.rst @@ -0,0 +1,8 @@ +.. :changelog: + +Release History +=============== + +1.0.0b1 +++++++ +* Initial release. \ No newline at end of file diff --git a/src/spot-placement-recommender/README.md b/src/spot-placement-recommender/README.md new file mode 100644 index 00000000000..e51172c2a07 --- /dev/null +++ b/src/spot-placement-recommender/README.md @@ -0,0 +1,5 @@ +# Azure CLI SpotPlacementRecommender Extension # +This is an extension to Azure CLI to manage SpotPlacementRecommender resources. + +## How to use ## +Please add commands usage here. \ No newline at end of file diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/__init__.py b/src/spot-placement-recommender/azext_spot_placement_recommender/__init__.py new file mode 100644 index 00000000000..114df70ba5a --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/__init__.py @@ -0,0 +1,42 @@ +# -------------------------------------------------------------------------------------------- +# 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 +# -------------------------------------------------------------------------------------------- + +from azure.cli.core import AzCommandsLoader +from azext_spot_placement_recommender._help import helps # pylint: disable=unused-import + + +class SpotPlacementRecommenderCommandsLoader(AzCommandsLoader): + + def __init__(self, cli_ctx=None): + from azure.cli.core.commands import CliCommandType + custom_command_type = CliCommandType( + operations_tmpl='azext_spot_placement_recommender.custom#{}') + super().__init__(cli_ctx=cli_ctx, + custom_command_type=custom_command_type) + + def load_command_table(self, args): + from azext_spot_placement_recommender.commands import load_command_table + from azure.cli.core.aaz import load_aaz_command_table + try: + from . import aaz + except ImportError: + aaz = None + if aaz: + load_aaz_command_table( + loader=self, + aaz_pkg_name=aaz.__name__, + args=args + ) + load_command_table(self, args) + return self.command_table + + def load_arguments(self, command): + from azext_spot_placement_recommender._params import load_arguments + load_arguments(self, command) + + +COMMAND_LOADER_CLS = SpotPlacementRecommenderCommandsLoader diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/_help.py b/src/spot-placement-recommender/azext_spot_placement_recommender/_help.py new file mode 100644 index 00000000000..126d5d00714 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/_help.py @@ -0,0 +1,11 @@ +# -------------------------------------------------------------------------------------------- +# 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: disable=line-too-long +# pylint: disable=too-many-lines + +from knack.help_files import helps # pylint: disable=unused-import diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/_params.py b/src/spot-placement-recommender/azext_spot_placement_recommender/_params.py new file mode 100644 index 00000000000..cfcec717c9c --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/_params.py @@ -0,0 +1,13 @@ +# -------------------------------------------------------------------------------------------- +# 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: disable=too-many-lines +# pylint: disable=too-many-statements + + +def load_arguments(self, _): # pylint: disable=unused-argument + pass diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/__init__.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/__init__.py new file mode 100644 index 00000000000..5757aea3175 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/__init__.py @@ -0,0 +1,6 @@ +# -------------------------------------------------------------------------------------------- +# 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 +# -------------------------------------------------------------------------------------------- diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/__init__.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/__init__.py new file mode 100644 index 00000000000..f6acc11aa4e --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/__init__.py @@ -0,0 +1,10 @@ +# -------------------------------------------------------------------------------------------- +# 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 + diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__cmd_group.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__cmd_group.py new file mode 100644 index 00000000000..2205fd64389 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__cmd_group.py @@ -0,0 +1,23 @@ +# -------------------------------------------------------------------------------------------- +# 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_group( + "compute", +) +class __CMDGroup(AAZCommandGroup): + """Mange azure compute vm config + """ + pass + + +__all__ = ["__CMDGroup"] diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__init__.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__init__.py new file mode 100644 index 00000000000..5a9d61963d6 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__init__.py @@ -0,0 +1,11 @@ +# -------------------------------------------------------------------------------------------- +# 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 .__cmd_group import * diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__cmd_group.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__cmd_group.py new file mode 100644 index 00000000000..994a1123ba1 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__cmd_group.py @@ -0,0 +1,23 @@ +# -------------------------------------------------------------------------------------------- +# 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_group( + "compute diagnostic", +) +class __CMDGroup(AAZCommandGroup): + """Mange vm sku recommender info + """ + pass + + +__all__ = ["__CMDGroup"] diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__init__.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__init__.py new file mode 100644 index 00000000000..5a9d61963d6 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__init__.py @@ -0,0 +1,11 @@ +# -------------------------------------------------------------------------------------------- +# 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 .__cmd_group import * diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__cmd_group.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__cmd_group.py new file mode 100644 index 00000000000..80b72a14a26 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__cmd_group.py @@ -0,0 +1,23 @@ +# -------------------------------------------------------------------------------------------- +# 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_group( + "compute diagnostic spot-placement-recommender", +) +class __CMDGroup(AAZCommandGroup): + """Manage spot vm placement score info + """ + pass + + +__all__ = ["__CMDGroup"] diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__init__.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__init__.py new file mode 100644 index 00000000000..422378d85da --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__init__.py @@ -0,0 +1,12 @@ +# -------------------------------------------------------------------------------------------- +# 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 .__cmd_group import * +from ._generate import * diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/_generate.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/_generate.py new file mode 100644 index 00000000000..3a3ac8ce815 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/_generate.py @@ -0,0 +1,255 @@ +# -------------------------------------------------------------------------------------------- +# 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 diagnostic spot-placement-recommender generate", +) +class Generate(AAZCommand): + """Generates placement scores for Spot VM skus. + """ + + _aaz_info = { + "version": "2021-06-01-preview", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/providers/microsoft.compute/locations/{}/diagnostics/spotplacementrecommender/generate", "2021-06-01-preview"], + ] + } + + 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 "SpotPlacementRecommenderInput" + + _args_schema = cls._args_schema + _args_schema.availability_zones = AAZBoolArg( + options=["--availability-zones"], + arg_group="SpotPlacementRecommenderInput", + help="Defines if the scope is zonal or regional.", + ) + _args_schema.desired_count = AAZIntArg( + options=["--desired-count"], + arg_group="SpotPlacementRecommenderInput", + help="Desired instance count per region/zone based on the scope.", + ) + _args_schema.desired_locations = AAZListArg( + options=["--desired-locations"], + arg_group="SpotPlacementRecommenderInput", + help="The desired regions", + ) + _args_schema.desired_sizes = AAZListArg( + options=["--desired-sizes"], + arg_group="SpotPlacementRecommenderInput", + 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.SpotPlacementRecommenderPost(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 SpotPlacementRecommenderPost(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}/diagnostics/spotPlacementRecommender/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", "2021-06-01-preview", + 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 _GenerateHelper: + """Helper class for Generate""" + + +__all__ = ["Generate"] diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/azext_metadata.json b/src/spot-placement-recommender/azext_spot_placement_recommender/azext_metadata.json new file mode 100644 index 00000000000..0761e47ffb8 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/azext_metadata.json @@ -0,0 +1,4 @@ +{ + "azext.isPreview": true, + "azext.minCliCoreVersion": "2.56.0" +} \ No newline at end of file diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/commands.py b/src/spot-placement-recommender/azext_spot_placement_recommender/commands.py new file mode 100644 index 00000000000..b0d842e4993 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/commands.py @@ -0,0 +1,15 @@ +# -------------------------------------------------------------------------------------------- +# 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: disable=too-many-lines +# pylint: disable=too-many-statements + +# from azure.cli.core.commands import CliCommandType + + +def load_command_table(self, _): # pylint: disable=unused-argument + pass diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/custom.py b/src/spot-placement-recommender/azext_spot_placement_recommender/custom.py new file mode 100644 index 00000000000..86df1e48ef5 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/custom.py @@ -0,0 +1,14 @@ +# -------------------------------------------------------------------------------------------- +# 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: disable=too-many-lines +# pylint: disable=too-many-statements + +from knack.log import get_logger + + +logger = get_logger(__name__) diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/__init__.py b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/__init__.py new file mode 100644 index 00000000000..5757aea3175 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/__init__.py @@ -0,0 +1,6 @@ +# -------------------------------------------------------------------------------------------- +# 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 +# -------------------------------------------------------------------------------------------- diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/__init__.py b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/__init__.py new file mode 100644 index 00000000000..5757aea3175 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/__init__.py @@ -0,0 +1,6 @@ +# -------------------------------------------------------------------------------------------- +# 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 +# -------------------------------------------------------------------------------------------- diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/recordings/test_spot_placement_recommender_generate.yaml b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/recordings/test_spot_placement_recommender_generate.yaml new file mode 100644 index 00000000000..99403f1413c --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/recordings/test_spot_placement_recommender_generate.yaml @@ -0,0 +1,56 @@ +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 diagnostic spot-placement-recommender generate + 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.58.0 azsdk-python-core/1.28.0 Python/3.8.18 (macOS-13.6.4-x86_64-i386-64bit) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/diagnostics/spotPlacementRecommender/generate?api-version=2021-06-01-preview + 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":"DataNotFoundOrStale","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"2","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"3","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"1","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"2","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"3","score":"High","isQuotaAvailable":true}]}' + headers: + api-supported-versions: + - 2021-06-01-preview, 2022-12-01 + cache-control: + - no-cache + content-length: + - '793' + content-type: + - application/json; charset=utf-8 + date: + - Thu, 14 Mar 2024 22:18:26 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-cache: + - CONFIG_NOCACHE + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + x-msedge-ref: + - 'Ref A: 4F27F2BC123B49E6BA9BE2FF1CA7A7A2 Ref B: CO6AA3150218053 Ref C: 2024-03-14T22:18:25Z' + status: + code: 200 + message: OK +version: 1 diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py new file mode 100644 index 00000000000..dfb60041be5 --- /dev/null +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py @@ -0,0 +1,24 @@ +# -------------------------------------------------------------------------------------------- +# 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 +# -------------------------------------------------------------------------------------------- + +from azure.cli.testsdk import * + + +class SpotPlacementRecommenderScenario(ScenarioTest): + def test_spot_placement_recommender_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 diagnostic spot-placement-recommender generate -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") diff --git a/src/spot-placement-recommender/setup.cfg b/src/spot-placement-recommender/setup.cfg new file mode 100644 index 00000000000..2fdd96e5d39 --- /dev/null +++ b/src/spot-placement-recommender/setup.cfg @@ -0,0 +1 @@ +#setup.cfg \ No newline at end of file diff --git a/src/spot-placement-recommender/setup.py b/src/spot-placement-recommender/setup.py new file mode 100644 index 00000000000..f8bf9902c2c --- /dev/null +++ b/src/spot-placement-recommender/setup.py @@ -0,0 +1,49 @@ +# -------------------------------------------------------------------------------------------- +# 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 +# -------------------------------------------------------------------------------------------- + +from codecs import open +from setuptools import setup, find_packages + + +# HISTORY.rst entry. +VERSION = '1.0.0b1' + +# The full list of classifiers is available at +# https://pypi.python.org/pypi?%3Aaction=list_classifiers +CLASSIFIERS = [ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'Intended Audience :: System Administrators', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'License :: OSI Approved :: MIT License', +] + +DEPENDENCIES = [] + +with open('README.md', 'r', encoding='utf-8') as f: + README = f.read() +with open('HISTORY.rst', 'r', encoding='utf-8') as f: + HISTORY = f.read() + +setup( + name='spot-placement-recommender', + version=VERSION, + description='Microsoft Azure Command-Line Tools SpotPlacementRecommender Extension.', + long_description=README + '\n\n' + HISTORY, + license='MIT', + author='Microsoft Corporation', + author_email='azpycli@microsoft.com', + url='https://github.com/Azure/azure-cli-extensions/tree/main/src/spot-placement-recommender', + classifiers=CLASSIFIERS, + packages=find_packages(exclude=["tests"]), + package_data={'azext_spot_placement_recommender': ['azext_metadata.json']}, + install_requires=DEPENDENCIES +) From 00b652325b328d28849461aa9a5b32ef306f16ea Mon Sep 17 00:00:00 2001 From: Joanna Li Date: Fri, 15 Mar 2024 16:45:46 -0700 Subject: [PATCH 2/6] fix style checking failure --- .../tests/latest/test_spot_placement_recommender.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py index dfb60041be5..3809a35ebde 100644 --- a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py +++ b/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py @@ -5,7 +5,7 @@ # Code generated by aaz-dev-tools # -------------------------------------------------------------------------------------------- -from azure.cli.testsdk import * +from azure.cli.testsdk import ScenarioTest class SpotPlacementRecommenderScenario(ScenarioTest): From 551998e7940da969f8cf1232695826cdc44e03f1 Mon Sep 17 00:00:00 2001 From: Joanna Li Date: Mon, 18 Mar 2024 21:58:51 -0700 Subject: [PATCH 3/6] add mapping --- src/service_name.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/service_name.json b/src/service_name.json index b7658a4aa9a..f2c9105bbd2 100644 --- a/src/service_name.json +++ b/src/service_name.json @@ -99,6 +99,11 @@ "AzureServiceName": "Communication Services", "URL": "https://learn.microsoft.com/azure/communication-services" }, + { + "Command": "az compute diagnostic", + "AzureServiceName": "Compute Diagnostic", + "URL": "" + }, { "Command": "az confcom", "AzureServiceName": "Confidential Computing", From aa60e83a73e186bc097235bc603805ffeab905c7 Mon Sep 17 00:00:00 2001 From: Joanna Li Date: Wed, 20 Mar 2024 14:58:50 -0700 Subject: [PATCH 4/6] change to az compute-diagnostic --- .../HISTORY.rst | 0 src/compute-diagnostic-rp/README.md | 5 ++++ .../azext_compute_diagnostic_rp}/__init__.py | 12 +++++----- .../azext_compute_diagnostic_rp}/_help.py | 0 .../azext_compute_diagnostic_rp}/_params.py | 0 .../aaz/__init__.py | 0 .../aaz/latest/__init__.py | 0 .../latest/compute_diagnostic}/__cmd_group.py | 2 +- .../latest/compute_diagnostic}/__init__.py | 0 .../spot_placement_recommender/__cmd_group.py | 2 +- .../spot_placement_recommender/__init__.py | 0 .../spot_placement_recommender/_generate.py | 5 +++- .../azext_metadata.json | 0 .../azext_compute_diagnostic_rp}/commands.py | 0 .../azext_compute_diagnostic_rp}/custom.py | 0 .../tests/__init__.py | 0 .../tests/latest/__init__.py | 0 ...t_spot_placement_recommender_generate.yaml | 8 +++---- .../latest/test_compute_diagnostic_rp.py} | 6 ++--- .../setup.cfg | 0 .../setup.py | 8 +++---- src/service_name.json | 2 +- src/spot-placement-recommender/README.md | 5 ---- .../aaz/latest/compute/__cmd_group.py | 23 ------------------- .../aaz/latest/compute/diagnostic/__init__.py | 11 --------- 25 files changed, 29 insertions(+), 60 deletions(-) rename src/{spot-placement-recommender => compute-diagnostic-rp}/HISTORY.rst (100%) create mode 100644 src/compute-diagnostic-rp/README.md rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/__init__.py (72%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/_help.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/_params.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/aaz/__init__.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/aaz/latest/__init__.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic => compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic}/__cmd_group.py (95%) rename src/{spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute => compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic}/__init__.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic => compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic}/spot_placement_recommender/__cmd_group.py (91%) rename src/{spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic => compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic}/spot_placement_recommender/__init__.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic => compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic}/spot_placement_recommender/_generate.py (95%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/azext_metadata.json (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/commands.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/custom.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/tests/__init__.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/tests/latest/__init__.py (100%) rename src/{spot-placement-recommender/azext_spot_placement_recommender => compute-diagnostic-rp/azext_compute_diagnostic_rp}/tests/latest/recordings/test_spot_placement_recommender_generate.yaml (76%) rename src/{spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py => compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/test_compute_diagnostic_rp.py} (86%) rename src/{spot-placement-recommender => compute-diagnostic-rp}/setup.cfg (100%) rename src/{spot-placement-recommender => compute-diagnostic-rp}/setup.py (86%) delete mode 100644 src/spot-placement-recommender/README.md delete mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__cmd_group.py delete mode 100644 src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__init__.py diff --git a/src/spot-placement-recommender/HISTORY.rst b/src/compute-diagnostic-rp/HISTORY.rst similarity index 100% rename from src/spot-placement-recommender/HISTORY.rst rename to src/compute-diagnostic-rp/HISTORY.rst diff --git a/src/compute-diagnostic-rp/README.md b/src/compute-diagnostic-rp/README.md new file mode 100644 index 00000000000..e2110a55caf --- /dev/null +++ b/src/compute-diagnostic-rp/README.md @@ -0,0 +1,5 @@ +# Azure CLI ComputeDiagnosticRp Extension # +This is an extension to Azure CLI to manage ComputeDiagnosticRp resources. + +## How to use ## +Please add commands usage here. \ No newline at end of file diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/__init__.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/__init__.py similarity index 72% rename from src/spot-placement-recommender/azext_spot_placement_recommender/__init__.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/__init__.py index 114df70ba5a..b28a1412238 100644 --- a/src/spot-placement-recommender/azext_spot_placement_recommender/__init__.py +++ b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/__init__.py @@ -6,20 +6,20 @@ # -------------------------------------------------------------------------------------------- from azure.cli.core import AzCommandsLoader -from azext_spot_placement_recommender._help import helps # pylint: disable=unused-import +from azext_compute_diagnostic_rp._help import helps # pylint: disable=unused-import -class SpotPlacementRecommenderCommandsLoader(AzCommandsLoader): +class ComputeDiagnosticRpCommandsLoader(AzCommandsLoader): def __init__(self, cli_ctx=None): from azure.cli.core.commands import CliCommandType custom_command_type = CliCommandType( - operations_tmpl='azext_spot_placement_recommender.custom#{}') + operations_tmpl='azext_compute_diagnostic_rp.custom#{}') super().__init__(cli_ctx=cli_ctx, custom_command_type=custom_command_type) def load_command_table(self, args): - from azext_spot_placement_recommender.commands import load_command_table + from azext_compute_diagnostic_rp.commands import load_command_table from azure.cli.core.aaz import load_aaz_command_table try: from . import aaz @@ -35,8 +35,8 @@ def load_command_table(self, args): return self.command_table def load_arguments(self, command): - from azext_spot_placement_recommender._params import load_arguments + from azext_compute_diagnostic_rp._params import load_arguments load_arguments(self, command) -COMMAND_LOADER_CLS = SpotPlacementRecommenderCommandsLoader +COMMAND_LOADER_CLS = ComputeDiagnosticRpCommandsLoader diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/_help.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/_help.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/_help.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/_help.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/_params.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/_params.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/_params.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/_params.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/__init__.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/__init__.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/aaz/__init__.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/__init__.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/__init__.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/__init__.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/__init__.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/__init__.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__cmd_group.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/__cmd_group.py similarity index 95% rename from src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__cmd_group.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/__cmd_group.py index 994a1123ba1..8141a1967bd 100644 --- a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__cmd_group.py +++ b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/__cmd_group.py @@ -12,7 +12,7 @@ @register_command_group( - "compute diagnostic", + "compute-diagnostic", ) class __CMDGroup(AAZCommandGroup): """Mange vm sku recommender info diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__init__.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/__init__.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__init__.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/__init__.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__cmd_group.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/spot_placement_recommender/__cmd_group.py similarity index 91% rename from src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__cmd_group.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/spot_placement_recommender/__cmd_group.py index 80b72a14a26..8ced6b1b9e8 100644 --- a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__cmd_group.py +++ b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/spot_placement_recommender/__cmd_group.py @@ -12,7 +12,7 @@ @register_command_group( - "compute diagnostic spot-placement-recommender", + "compute-diagnostic spot-placement-recommender", ) class __CMDGroup(AAZCommandGroup): """Manage spot vm placement score info diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__init__.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/spot_placement_recommender/__init__.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/__init__.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/spot_placement_recommender/__init__.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/_generate.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/spot_placement_recommender/_generate.py similarity index 95% rename from src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/_generate.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/spot_placement_recommender/_generate.py index 3a3ac8ce815..9f6b450edb0 100644 --- a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/spot_placement_recommender/_generate.py +++ b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/aaz/latest/compute_diagnostic/spot_placement_recommender/_generate.py @@ -12,10 +12,13 @@ @register_command( - "compute diagnostic spot-placement-recommender generate", + "compute-diagnostic spot-placement-recommender generate", ) class Generate(AAZCommand): """Generates placement scores for Spot VM skus. + + :example: generate spot vm placement score example + az compute diagnostic spot-placement-recommender generate -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 = { diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/azext_metadata.json b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/azext_metadata.json similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/azext_metadata.json rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/azext_metadata.json diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/commands.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/commands.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/commands.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/commands.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/custom.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/custom.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/custom.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/custom.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/__init__.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/__init__.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/tests/__init__.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/__init__.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/__init__.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/__init__.py similarity index 100% rename from src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/__init__.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/__init__.py diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/recordings/test_spot_placement_recommender_generate.yaml b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/recordings/test_spot_placement_recommender_generate.yaml similarity index 76% rename from src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/recordings/test_spot_placement_recommender_generate.yaml rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/recordings/test_spot_placement_recommender_generate.yaml index 99403f1413c..cc809214326 100644 --- a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/recordings/test_spot_placement_recommender_generate.yaml +++ b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/recordings/test_spot_placement_recommender_generate.yaml @@ -8,7 +8,7 @@ interactions: Accept-Encoding: - gzip, deflate CommandName: - - compute diagnostic spot-placement-recommender generate + - compute-diagnostic spot-placement-recommender generate Connection: - keep-alive Content-Length: @@ -24,7 +24,7 @@ interactions: uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/diagnostics/spotPlacementRecommender/generate?api-version=2021-06-01-preview 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":"DataNotFoundOrStale","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"2","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"3","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"1","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"2","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"3","score":"High","isQuotaAvailable":true}]}' + string: '{"desiredLocations":["eastus","eastus2"],"desiredSizes":[{"sku":"Standard_D2_v2"}],"desiredCount":1,"availabilityZones":true,"placementScores":[{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"1","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"2","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus","availabilityZone":"3","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"1","score":"DataNotFoundOrStale","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"2","score":"High","isQuotaAvailable":true},{"sku":"Standard_D2_v2","region":"eastus2","availabilityZone":"3","score":"High","isQuotaAvailable":true}]}' headers: api-supported-versions: - 2021-06-01-preview, 2022-12-01 @@ -35,7 +35,7 @@ interactions: content-type: - application/json; charset=utf-8 date: - - Thu, 14 Mar 2024 22:18:26 GMT + - Wed, 20 Mar 2024 21:53:47 GMT expires: - '-1' pragma: @@ -49,7 +49,7 @@ interactions: x-ms-ratelimit-remaining-subscription-writes: - '1199' x-msedge-ref: - - 'Ref A: 4F27F2BC123B49E6BA9BE2FF1CA7A7A2 Ref B: CO6AA3150218053 Ref C: 2024-03-14T22:18:25Z' + - 'Ref A: AFBC06E971AA4F1C9C942A44028EF1BE Ref B: CO6AA3150219053 Ref C: 2024-03-20T21:53:45Z' status: code: 200 message: OK diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/test_compute_diagnostic_rp.py similarity index 86% rename from src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py rename to src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/test_compute_diagnostic_rp.py index 3809a35ebde..8022b42671d 100644 --- a/src/spot-placement-recommender/azext_spot_placement_recommender/tests/latest/test_spot_placement_recommender.py +++ b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/test_compute_diagnostic_rp.py @@ -8,7 +8,7 @@ from azure.cli.testsdk import ScenarioTest -class SpotPlacementRecommenderScenario(ScenarioTest): +class ComputeDiagnosticRpScenario(ScenarioTest): def test_spot_placement_recommender_generate(self): self.kwargs.update({ 'location': 'eastus', @@ -19,6 +19,6 @@ def test_spot_placement_recommender_generate(self): 'desired_sizes': '[{"sku": "Standard_D2_v2"}]' }) - spot_scores_output = self.cmd('az compute diagnostic spot-placement-recommender generate -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() + spot_scores_output = self.cmd('az compute-diagnostic spot-placement-recommender generate -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") + self.assertTrue(len(spot_scores_output["placementScores"]) > 0, "Spot scores should have at least one item") \ No newline at end of file diff --git a/src/spot-placement-recommender/setup.cfg b/src/compute-diagnostic-rp/setup.cfg similarity index 100% rename from src/spot-placement-recommender/setup.cfg rename to src/compute-diagnostic-rp/setup.cfg diff --git a/src/spot-placement-recommender/setup.py b/src/compute-diagnostic-rp/setup.py similarity index 86% rename from src/spot-placement-recommender/setup.py rename to src/compute-diagnostic-rp/setup.py index f8bf9902c2c..5594bc1a01a 100644 --- a/src/spot-placement-recommender/setup.py +++ b/src/compute-diagnostic-rp/setup.py @@ -34,16 +34,16 @@ HISTORY = f.read() setup( - name='spot-placement-recommender', + name='compute-diagnostic-rp', version=VERSION, - description='Microsoft Azure Command-Line Tools SpotPlacementRecommender Extension.', + description='Microsoft Azure Command-Line Tools ComputeDiagnosticRp Extension.', long_description=README + '\n\n' + HISTORY, license='MIT', author='Microsoft Corporation', author_email='azpycli@microsoft.com', - url='https://github.com/Azure/azure-cli-extensions/tree/main/src/spot-placement-recommender', + url='https://github.com/Azure/azure-cli-extensions/tree/main/src/compute-diagnostic-rp', classifiers=CLASSIFIERS, packages=find_packages(exclude=["tests"]), - package_data={'azext_spot_placement_recommender': ['azext_metadata.json']}, + package_data={'azext_compute_diagnostic_rp': ['azext_metadata.json']}, install_requires=DEPENDENCIES ) diff --git a/src/service_name.json b/src/service_name.json index f2c9105bbd2..46cc1ac05d9 100644 --- a/src/service_name.json +++ b/src/service_name.json @@ -100,7 +100,7 @@ "URL": "https://learn.microsoft.com/azure/communication-services" }, { - "Command": "az compute diagnostic", + "Command": "az compute-diagnostic", "AzureServiceName": "Compute Diagnostic", "URL": "" }, diff --git a/src/spot-placement-recommender/README.md b/src/spot-placement-recommender/README.md deleted file mode 100644 index e51172c2a07..00000000000 --- a/src/spot-placement-recommender/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Azure CLI SpotPlacementRecommender Extension # -This is an extension to Azure CLI to manage SpotPlacementRecommender resources. - -## How to use ## -Please add commands usage here. \ No newline at end of file diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__cmd_group.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__cmd_group.py deleted file mode 100644 index 2205fd64389..00000000000 --- a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/__cmd_group.py +++ /dev/null @@ -1,23 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# 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_group( - "compute", -) -class __CMDGroup(AAZCommandGroup): - """Mange azure compute vm config - """ - pass - - -__all__ = ["__CMDGroup"] diff --git a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__init__.py b/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__init__.py deleted file mode 100644 index 5a9d61963d6..00000000000 --- a/src/spot-placement-recommender/azext_spot_placement_recommender/aaz/latest/compute/diagnostic/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# -------------------------------------------------------------------------------------------- -# 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 .__cmd_group import * From cabda47b2db26457ffed961734e18322d49d8637 Mon Sep 17 00:00:00 2001 From: Joanna Li Date: Thu, 21 Mar 2024 09:05:45 -0700 Subject: [PATCH 5/6] syntax checking update --- .../tests/latest/test_compute_diagnostic_rp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/test_compute_diagnostic_rp.py b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/test_compute_diagnostic_rp.py index 8022b42671d..b53696b9f6f 100644 --- a/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/test_compute_diagnostic_rp.py +++ b/src/compute-diagnostic-rp/azext_compute_diagnostic_rp/tests/latest/test_compute_diagnostic_rp.py @@ -21,4 +21,4 @@ def test_spot_placement_recommender_generate(self): spot_scores_output = self.cmd('az compute-diagnostic spot-placement-recommender generate -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 + self.assertTrue(len(spot_scores_output["placementScores"]) > 0, "Spot scores should have at least one item") From 3c6fee3915b861923c2f40c0fdeb3189bb08eef6 Mon Sep 17 00:00:00 2001 From: Joanna Li Date: Fri, 22 Mar 2024 10:08:52 -0700 Subject: [PATCH 6/6] update readme --- src/compute-diagnostic-rp/README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/compute-diagnostic-rp/README.md b/src/compute-diagnostic-rp/README.md index e2110a55caf..c8ff0b6ec04 100644 --- a/src/compute-diagnostic-rp/README.md +++ b/src/compute-diagnostic-rp/README.md @@ -2,4 +2,5 @@ This is an extension to Azure CLI to manage ComputeDiagnosticRp resources. ## How to use ## -Please add commands usage here. \ No newline at end of file +### Generate the spot vm placement scores +`az compute diagnostic spot-placement-recommender generate -l eastus --subscription ffffffff-ffff-ffff-ffff-ffffffffffff --availability-zones true --desired-locations '["eastus", "eastus2"]' --desired-count 1 --desired-sizes '[{"sku": "Standard_D2_v2"}]'`