diff --git a/src/azure-cli/azure/cli/command_modules/vm/_client_factory.py b/src/azure-cli/azure/cli/command_modules/vm/_client_factory.py index ee6329e9129..eabe1af77b2 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/_client_factory.py +++ b/src/azure-cli/azure/cli/command_modules/vm/_client_factory.py @@ -151,9 +151,5 @@ def cf_community_gallery_image_version(cli_ctx, *_): return cf_vm_cl(cli_ctx).community_gallery_image_versions -def cf_capacity_reservation_groups(cli_ctx, *_): - return cf_vm_cl(cli_ctx).capacity_reservation_groups - - def cf_capacity_reservations(cli_ctx, *_): return cf_vm_cl(cli_ctx).capacity_reservations diff --git a/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/__init__.py b/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/__init__.py index a3559a3f9bb..c401f439385 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/__init__.py +++ b/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/__init__.py @@ -9,5 +9,8 @@ # flake8: noqa from .__cmd_group import * +from ._create import * from ._delete import * from ._list import * +from ._show import * +from ._update import * diff --git a/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/_create.py b/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/_create.py new file mode 100644 index 00000000000..d3443642833 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/_create.py @@ -0,0 +1,402 @@ +# -------------------------------------------------------------------------------------------- +# 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 * + + +class Create(AAZCommand): + """Create operation to create or update a capacity reservation group. When updating a capacity reservation group, only tags may be modified. Please refer to https://aka.ms/CapacityReservation for more details. + """ + + _aaz_info = { + "version": "2024-11-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.compute/capacityreservationgroups/{}", "2024-11-01"], + ] + } + + 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.capacity_reservation_group_name = AAZStrArg( + options=["-n", "--capacity-reservation-group", "--capacity-reservation-group-name"], + help="The name of the capacity reservation group.", + required=True, + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + + # define Arg Group "Parameters" + + _args_schema = cls._args_schema + _args_schema.location = AAZResourceLocationArg( + arg_group="Parameters", + help="Resource location", + required=True, + fmt=AAZResourceLocationArgFormat( + resource_group_arg="resource_group", + ), + ) + _args_schema.tags = AAZDictArg( + options=["--tags"], + arg_group="Parameters", + help="Space-separated tags: key[=value] [key[=value] ...].", + ) + _args_schema.zones = AAZListArg( + options=["--zones"], + arg_group="Parameters", + help="Availability Zones to use for this capacity reservation group. The zones can be assigned only during creation. If not provided, the group supports only regional resources in the region. If provided, enforces each capacity reservation in the group to be in one of the zones.", + ) + + tags = cls._args_schema.tags + tags.Element = AAZStrArg() + + zones = cls._args_schema.zones + zones.Element = AAZStrArg() + + # define Arg Group "Properties" + + _args_schema = cls._args_schema + _args_schema.sharing_profile = AAZObjectArg( + options=["--sharing-profile"], + arg_group="Properties", + help="Specifies the settings to enable sharing across subscriptions for the capacity reservation group resource. The capacity reservation group resource can generally be shared across subscriptions belonging to a single Azure AAD tenant or across AAD tenants if there is a trust relationship established between the tenants. Block capacity reservation does not support sharing across subscriptions. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details.", + ) + + sharing_profile = cls._args_schema.sharing_profile + sharing_profile.subscription_ids = AAZListArg( + options=["subscription-ids"], + help="Specifies an array of subscription resource IDs that capacity reservation group is shared with. Block Capacity Reservations does not support sharing across subscriptions. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details.", + ) + + subscription_ids = cls._args_schema.sharing_profile.subscription_ids + subscription_ids.Element = AAZObjectArg() + + _element = cls._args_schema.sharing_profile.subscription_ids.Element + _element.id = AAZStrArg( + options=["id"], + help="Resource Id", + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + self.CapacityReservationGroupsCreateOrUpdate(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 CapacityReservationGroupsCreateOrUpdate(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, 201]: + return self.on_200_201(session) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", + **self.url_parameters + ) + + @property + def method(self): + return "PUT" + + @property + def error_format(self): + return "ODataV4Format" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "capacityReservationGroupName", self.ctx.args.capacity_reservation_group_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + 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", "2024-11-01", + 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("location", AAZStrType, ".location", typ_kwargs={"flags": {"required": True}}) + _builder.set_prop("properties", AAZObjectType, typ_kwargs={"flags": {"client_flatten": True}}) + _builder.set_prop("tags", AAZDictType, ".tags") + _builder.set_prop("zones", AAZListType, ".zones") + + properties = _builder.get(".properties") + if properties is not None: + properties.set_prop("sharingProfile", AAZObjectType, ".sharing_profile") + + sharing_profile = _builder.get(".properties.sharingProfile") + if sharing_profile is not None: + sharing_profile.set_prop("subscriptionIds", AAZListType, ".subscription_ids") + + subscription_ids = _builder.get(".properties.sharingProfile.subscriptionIds") + if subscription_ids is not None: + subscription_ids.set_elements(AAZObjectType, ".") + + _elements = _builder.get(".properties.sharingProfile.subscriptionIds[]") + if _elements is not None: + _elements.set_prop("id", AAZStrType, ".id") + + tags = _builder.get(".tags") + if tags is not None: + tags.set_elements(AAZStrType, ".") + + zones = _builder.get(".zones") + if zones is not None: + zones.set_elements(AAZStrType, ".") + + return self.serialize_content(_content_value) + + def on_200_201(self, session): + data = self.deserialize_http_content(session) + self.ctx.set_var( + "instance", + data, + schema_builder=self._build_schema_on_200_201 + ) + + _schema_on_200_201 = None + + @classmethod + def _build_schema_on_200_201(cls): + if cls._schema_on_200_201 is not None: + return cls._schema_on_200_201 + + cls._schema_on_200_201 = AAZObjectType() + + _schema_on_200_201 = cls._schema_on_200_201 + _schema_on_200_201.id = AAZStrType( + flags={"read_only": True}, + ) + _schema_on_200_201.location = AAZStrType( + flags={"required": True}, + ) + _schema_on_200_201.name = AAZStrType( + flags={"read_only": True}, + ) + _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.tags = AAZDictType() + _schema_on_200_201.type = AAZStrType( + flags={"read_only": True}, + ) + _schema_on_200_201.zones = AAZListType() + + properties = cls._schema_on_200_201.properties + properties.capacity_reservations = AAZListType( + serialized_name="capacityReservations", + flags={"read_only": True}, + ) + properties.instance_view = AAZObjectType( + serialized_name="instanceView", + flags={"read_only": True}, + ) + properties.sharing_profile = AAZObjectType( + serialized_name="sharingProfile", + ) + properties.virtual_machines_associated = AAZListType( + serialized_name="virtualMachinesAssociated", + flags={"read_only": True}, + ) + + capacity_reservations = cls._schema_on_200_201.properties.capacity_reservations + capacity_reservations.Element = AAZObjectType() + _CreateHelper._build_schema_sub_resource_read_only_read(capacity_reservations.Element) + + instance_view = cls._schema_on_200_201.properties.instance_view + instance_view.capacity_reservations = AAZListType( + serialized_name="capacityReservations", + flags={"read_only": True}, + ) + instance_view.shared_subscription_ids = AAZListType( + serialized_name="sharedSubscriptionIds", + flags={"read_only": True}, + ) + + capacity_reservations = cls._schema_on_200_201.properties.instance_view.capacity_reservations + capacity_reservations.Element = AAZObjectType() + + _element = cls._schema_on_200_201.properties.instance_view.capacity_reservations.Element + _element.name = AAZStrType( + flags={"read_only": True}, + ) + _element.statuses = AAZListType() + _element.utilization_info = AAZObjectType( + serialized_name="utilizationInfo", + ) + + statuses = cls._schema_on_200_201.properties.instance_view.capacity_reservations.Element.statuses + statuses.Element = AAZObjectType() + + _element = cls._schema_on_200_201.properties.instance_view.capacity_reservations.Element.statuses.Element + _element.code = AAZStrType() + _element.display_status = AAZStrType( + serialized_name="displayStatus", + ) + _element.level = AAZStrType() + _element.message = AAZStrType() + _element.time = AAZStrType() + + utilization_info = cls._schema_on_200_201.properties.instance_view.capacity_reservations.Element.utilization_info + utilization_info.current_capacity = AAZIntType( + serialized_name="currentCapacity", + flags={"read_only": True}, + ) + utilization_info.virtual_machines_allocated = AAZListType( + serialized_name="virtualMachinesAllocated", + flags={"read_only": True}, + ) + + virtual_machines_allocated = cls._schema_on_200_201.properties.instance_view.capacity_reservations.Element.utilization_info.virtual_machines_allocated + virtual_machines_allocated.Element = AAZObjectType() + _CreateHelper._build_schema_sub_resource_read_only_read(virtual_machines_allocated.Element) + + shared_subscription_ids = cls._schema_on_200_201.properties.instance_view.shared_subscription_ids + shared_subscription_ids.Element = AAZObjectType() + _CreateHelper._build_schema_sub_resource_read_only_read(shared_subscription_ids.Element) + + sharing_profile = cls._schema_on_200_201.properties.sharing_profile + sharing_profile.subscription_ids = AAZListType( + serialized_name="subscriptionIds", + ) + + subscription_ids = cls._schema_on_200_201.properties.sharing_profile.subscription_ids + subscription_ids.Element = AAZObjectType() + + _element = cls._schema_on_200_201.properties.sharing_profile.subscription_ids.Element + _element.id = AAZStrType() + + virtual_machines_associated = cls._schema_on_200_201.properties.virtual_machines_associated + virtual_machines_associated.Element = AAZObjectType() + _CreateHelper._build_schema_sub_resource_read_only_read(virtual_machines_associated.Element) + + 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", + ) + + tags = cls._schema_on_200_201.tags + tags.Element = AAZStrType() + + zones = cls._schema_on_200_201.zones + zones.Element = AAZStrType() + + return cls._schema_on_200_201 + + +class _CreateHelper: + """Helper class for Create""" + + _schema_sub_resource_read_only_read = None + + @classmethod + def _build_schema_sub_resource_read_only_read(cls, _schema): + if cls._schema_sub_resource_read_only_read is not None: + _schema.id = cls._schema_sub_resource_read_only_read.id + return + + cls._schema_sub_resource_read_only_read = _schema_sub_resource_read_only_read = AAZObjectType() + + sub_resource_read_only_read = _schema_sub_resource_read_only_read + sub_resource_read_only_read.id = AAZStrType( + flags={"read_only": True}, + ) + + _schema.id = cls._schema_sub_resource_read_only_read.id + + +__all__ = ["Create"] diff --git a/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/_show.py b/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/_show.py new file mode 100644 index 00000000000..a23cc452d8e --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/_show.py @@ -0,0 +1,318 @@ +# -------------------------------------------------------------------------------------------- +# 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 * + + +class Show(AAZCommand): + """Get operation that retrieves information about a capacity reservation group. + """ + + _aaz_info = { + "version": "2024-11-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.compute/capacityreservationgroups/{}", "2024-11-01"], + ] + } + + 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.capacity_reservation_group_name = AAZStrArg( + options=["-n", "--capacity-reservation-group", "--capacity-reservation-group-name"], + help="The name of the capacity reservation group.", + required=True, + id_part="name", + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + _args_schema.expand = AAZStrArg( + options=["--expand"], + help="The expand expression to apply on the operation. 'InstanceView' will retrieve the list of instance views of the capacity reservations under the capacity reservation group which is a snapshot of the runtime properties of a capacity reservation that is managed by the platform and can change outside of control plane operations.", + enum={"instanceView": "instanceView"}, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + self.CapacityReservationGroupsGet(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 CapacityReservationGroupsGet(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}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", + **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( + "capacityReservationGroupName", self.ctx.args.capacity_reservation_group_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + 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( + "$expand", self.ctx.args.expand, + ), + **self.serialize_query_param( + "api-version", "2024-11-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.id = AAZStrType( + flags={"read_only": True}, + ) + _schema_on_200.location = AAZStrType( + flags={"required": True}, + ) + _schema_on_200.name = AAZStrType( + flags={"read_only": True}, + ) + _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() + _schema_on_200.type = AAZStrType( + flags={"read_only": True}, + ) + _schema_on_200.zones = AAZListType() + + properties = cls._schema_on_200.properties + properties.capacity_reservations = AAZListType( + serialized_name="capacityReservations", + flags={"read_only": True}, + ) + properties.instance_view = AAZObjectType( + serialized_name="instanceView", + flags={"read_only": True}, + ) + properties.sharing_profile = AAZObjectType( + serialized_name="sharingProfile", + ) + properties.virtual_machines_associated = AAZListType( + serialized_name="virtualMachinesAssociated", + flags={"read_only": True}, + ) + + capacity_reservations = cls._schema_on_200.properties.capacity_reservations + capacity_reservations.Element = AAZObjectType() + _ShowHelper._build_schema_sub_resource_read_only_read(capacity_reservations.Element) + + instance_view = cls._schema_on_200.properties.instance_view + instance_view.capacity_reservations = AAZListType( + serialized_name="capacityReservations", + flags={"read_only": True}, + ) + instance_view.shared_subscription_ids = AAZListType( + serialized_name="sharedSubscriptionIds", + flags={"read_only": True}, + ) + + capacity_reservations = cls._schema_on_200.properties.instance_view.capacity_reservations + capacity_reservations.Element = AAZObjectType() + + _element = cls._schema_on_200.properties.instance_view.capacity_reservations.Element + _element.name = AAZStrType( + flags={"read_only": True}, + ) + _element.statuses = AAZListType() + _element.utilization_info = AAZObjectType( + serialized_name="utilizationInfo", + ) + + statuses = cls._schema_on_200.properties.instance_view.capacity_reservations.Element.statuses + statuses.Element = AAZObjectType() + + _element = cls._schema_on_200.properties.instance_view.capacity_reservations.Element.statuses.Element + _element.code = AAZStrType() + _element.display_status = AAZStrType( + serialized_name="displayStatus", + ) + _element.level = AAZStrType() + _element.message = AAZStrType() + _element.time = AAZStrType() + + utilization_info = cls._schema_on_200.properties.instance_view.capacity_reservations.Element.utilization_info + utilization_info.current_capacity = AAZIntType( + serialized_name="currentCapacity", + flags={"read_only": True}, + ) + utilization_info.virtual_machines_allocated = AAZListType( + serialized_name="virtualMachinesAllocated", + flags={"read_only": True}, + ) + + virtual_machines_allocated = cls._schema_on_200.properties.instance_view.capacity_reservations.Element.utilization_info.virtual_machines_allocated + virtual_machines_allocated.Element = AAZObjectType() + _ShowHelper._build_schema_sub_resource_read_only_read(virtual_machines_allocated.Element) + + shared_subscription_ids = cls._schema_on_200.properties.instance_view.shared_subscription_ids + shared_subscription_ids.Element = AAZObjectType() + _ShowHelper._build_schema_sub_resource_read_only_read(shared_subscription_ids.Element) + + sharing_profile = cls._schema_on_200.properties.sharing_profile + sharing_profile.subscription_ids = AAZListType( + serialized_name="subscriptionIds", + ) + + subscription_ids = cls._schema_on_200.properties.sharing_profile.subscription_ids + subscription_ids.Element = AAZObjectType() + + _element = cls._schema_on_200.properties.sharing_profile.subscription_ids.Element + _element.id = AAZStrType() + + virtual_machines_associated = cls._schema_on_200.properties.virtual_machines_associated + virtual_machines_associated.Element = AAZObjectType() + _ShowHelper._build_schema_sub_resource_read_only_read(virtual_machines_associated.Element) + + 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", + ) + + tags = cls._schema_on_200.tags + tags.Element = AAZStrType() + + zones = cls._schema_on_200.zones + zones.Element = AAZStrType() + + return cls._schema_on_200 + + +class _ShowHelper: + """Helper class for Show""" + + _schema_sub_resource_read_only_read = None + + @classmethod + def _build_schema_sub_resource_read_only_read(cls, _schema): + if cls._schema_sub_resource_read_only_read is not None: + _schema.id = cls._schema_sub_resource_read_only_read.id + return + + cls._schema_sub_resource_read_only_read = _schema_sub_resource_read_only_read = AAZObjectType() + + sub_resource_read_only_read = _schema_sub_resource_read_only_read + sub_resource_read_only_read.id = AAZStrType( + flags={"read_only": True}, + ) + + _schema.id = cls._schema_sub_resource_read_only_read.id + + +__all__ = ["Show"] diff --git a/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/_update.py b/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/_update.py new file mode 100644 index 00000000000..1953a16d945 --- /dev/null +++ b/src/azure-cli/azure/cli/command_modules/vm/aaz/latest/capacity/reservation/group/_update.py @@ -0,0 +1,551 @@ +# -------------------------------------------------------------------------------------------- +# 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 * + + +class Update(AAZCommand): + """Update operation to create or update a capacity reservation group. When updating a capacity reservation group, only tags may be modified. Please refer to https://aka.ms/CapacityReservation for more details. + """ + + _aaz_info = { + "version": "2024-11-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.compute/capacityreservationgroups/{}", "2024-11-01"], + ] + } + + AZ_SUPPORT_GENERIC_UPDATE = True + + 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.capacity_reservation_group_name = AAZStrArg( + options=["-n", "--capacity-reservation-group", "--capacity-reservation-group-name"], + help="The name of the capacity reservation group.", + required=True, + id_part="name", + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + + # define Arg Group "Parameters" + + _args_schema = cls._args_schema + _args_schema.tags = AAZDictArg( + options=["--tags"], + arg_group="Parameters", + help="Space-separated tags: key[=value] [key[=value] ...].", + nullable=True, + ) + _args_schema.zones = AAZListArg( + options=["--zones"], + arg_group="Parameters", + help="Availability Zones to use for this capacity reservation group. The zones can be assigned only during creation. If not provided, the group supports only regional resources in the region. If provided, enforces each capacity reservation in the group to be in one of the zones.", + nullable=True, + ) + + tags = cls._args_schema.tags + tags.Element = AAZStrArg( + nullable=True, + ) + + zones = cls._args_schema.zones + zones.Element = AAZStrArg( + nullable=True, + ) + + # define Arg Group "Properties" + + _args_schema = cls._args_schema + _args_schema.sharing_profile = AAZObjectArg( + options=["--sharing-profile"], + arg_group="Properties", + help="Specifies the settings to enable sharing across subscriptions for the capacity reservation group resource. The capacity reservation group resource can generally be shared across subscriptions belonging to a single Azure AAD tenant or across AAD tenants if there is a trust relationship established between the tenants. Block capacity reservation does not support sharing across subscriptions. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details.", + nullable=True, + ) + + sharing_profile = cls._args_schema.sharing_profile + sharing_profile.subscription_ids = AAZListArg( + options=["subscription-ids"], + help="Specifies an array of subscription resource IDs that capacity reservation group is shared with. Block Capacity Reservations does not support sharing across subscriptions. **Note:** Minimum api-version: 2023-09-01. Please refer to https://aka.ms/computereservationsharing for more details.", + nullable=True, + ) + + subscription_ids = cls._args_schema.sharing_profile.subscription_ids + subscription_ids.Element = AAZObjectArg( + nullable=True, + ) + + _element = cls._args_schema.sharing_profile.subscription_ids.Element + _element.id = AAZStrArg( + options=["id"], + help="Resource Id", + nullable=True, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + self.CapacityReservationGroupsGet(ctx=self.ctx)() + self.pre_instance_update(self.ctx.vars.instance) + self.InstanceUpdateByJson(ctx=self.ctx)() + self.InstanceUpdateByGeneric(ctx=self.ctx)() + self.post_instance_update(self.ctx.vars.instance) + self.CapacityReservationGroupsCreateOrUpdate(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + @register_callback + def pre_instance_update(self, instance): + pass + + @register_callback + def post_instance_update(self, instance): + pass + + def _output(self, *args, **kwargs): + result = self.deserialize_output(self.ctx.vars.instance, client_flatten=True) + return result + + class CapacityReservationGroupsGet(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}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", + **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( + "capacityReservationGroupName", self.ctx.args.capacity_reservation_group_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + 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", "2024-11-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() + _UpdateHelper._build_schema_capacity_reservation_group_read(cls._schema_on_200) + + return cls._schema_on_200 + + class CapacityReservationGroupsCreateOrUpdate(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, 201]: + return self.on_200_201(session) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/capacityReservationGroups/{capacityReservationGroupName}", + **self.url_parameters + ) + + @property + def method(self): + return "PUT" + + @property + def error_format(self): + return "ODataV4Format" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "capacityReservationGroupName", self.ctx.args.capacity_reservation_group_name, + required=True, + ), + **self.serialize_url_param( + "resourceGroupName", self.ctx.args.resource_group, + 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", "2024-11-01", + 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, + value=self.ctx.vars.instance, + ) + + return self.serialize_content(_content_value) + + def on_200_201(self, session): + data = self.deserialize_http_content(session) + self.ctx.set_var( + "instance", + data, + schema_builder=self._build_schema_on_200_201 + ) + + _schema_on_200_201 = None + + @classmethod + def _build_schema_on_200_201(cls): + if cls._schema_on_200_201 is not None: + return cls._schema_on_200_201 + + cls._schema_on_200_201 = AAZObjectType() + _UpdateHelper._build_schema_capacity_reservation_group_read(cls._schema_on_200_201) + + return cls._schema_on_200_201 + + class InstanceUpdateByJson(AAZJsonInstanceUpdateOperation): + + def __call__(self, *args, **kwargs): + self._update_instance(self.ctx.vars.instance) + + def _update_instance(self, instance): + _instance_value, _builder = self.new_content_builder( + self.ctx.args, + value=instance, + typ=AAZObjectType + ) + _builder.set_prop("properties", AAZObjectType, typ_kwargs={"flags": {"client_flatten": True}}) + _builder.set_prop("tags", AAZDictType, ".tags") + _builder.set_prop("zones", AAZListType, ".zones") + + properties = _builder.get(".properties") + if properties is not None: + properties.set_prop("sharingProfile", AAZObjectType, ".sharing_profile") + + sharing_profile = _builder.get(".properties.sharingProfile") + if sharing_profile is not None: + sharing_profile.set_prop("subscriptionIds", AAZListType, ".subscription_ids") + + subscription_ids = _builder.get(".properties.sharingProfile.subscriptionIds") + if subscription_ids is not None: + subscription_ids.set_elements(AAZObjectType, ".") + + _elements = _builder.get(".properties.sharingProfile.subscriptionIds[]") + if _elements is not None: + _elements.set_prop("id", AAZStrType, ".id") + + tags = _builder.get(".tags") + if tags is not None: + tags.set_elements(AAZStrType, ".") + + zones = _builder.get(".zones") + if zones is not None: + zones.set_elements(AAZStrType, ".") + + return _instance_value + + class InstanceUpdateByGeneric(AAZGenericInstanceUpdateOperation): + + def __call__(self, *args, **kwargs): + self._update_instance_by_generic( + self.ctx.vars.instance, + self.ctx.generic_update_args + ) + + +class _UpdateHelper: + """Helper class for Update""" + + _schema_capacity_reservation_group_read = None + + @classmethod + def _build_schema_capacity_reservation_group_read(cls, _schema): + if cls._schema_capacity_reservation_group_read is not None: + _schema.id = cls._schema_capacity_reservation_group_read.id + _schema.location = cls._schema_capacity_reservation_group_read.location + _schema.name = cls._schema_capacity_reservation_group_read.name + _schema.properties = cls._schema_capacity_reservation_group_read.properties + _schema.system_data = cls._schema_capacity_reservation_group_read.system_data + _schema.tags = cls._schema_capacity_reservation_group_read.tags + _schema.type = cls._schema_capacity_reservation_group_read.type + _schema.zones = cls._schema_capacity_reservation_group_read.zones + return + + cls._schema_capacity_reservation_group_read = _schema_capacity_reservation_group_read = AAZObjectType() + + capacity_reservation_group_read = _schema_capacity_reservation_group_read + capacity_reservation_group_read.id = AAZStrType( + flags={"read_only": True}, + ) + capacity_reservation_group_read.location = AAZStrType( + flags={"required": True}, + ) + capacity_reservation_group_read.name = AAZStrType( + flags={"read_only": True}, + ) + capacity_reservation_group_read.properties = AAZObjectType( + flags={"client_flatten": True}, + ) + capacity_reservation_group_read.system_data = AAZObjectType( + serialized_name="systemData", + flags={"read_only": True}, + ) + capacity_reservation_group_read.tags = AAZDictType() + capacity_reservation_group_read.type = AAZStrType( + flags={"read_only": True}, + ) + capacity_reservation_group_read.zones = AAZListType() + + properties = _schema_capacity_reservation_group_read.properties + properties.capacity_reservations = AAZListType( + serialized_name="capacityReservations", + flags={"read_only": True}, + ) + properties.instance_view = AAZObjectType( + serialized_name="instanceView", + flags={"read_only": True}, + ) + properties.sharing_profile = AAZObjectType( + serialized_name="sharingProfile", + ) + properties.virtual_machines_associated = AAZListType( + serialized_name="virtualMachinesAssociated", + flags={"read_only": True}, + ) + + capacity_reservations = _schema_capacity_reservation_group_read.properties.capacity_reservations + capacity_reservations.Element = AAZObjectType() + cls._build_schema_sub_resource_read_only_read(capacity_reservations.Element) + + instance_view = _schema_capacity_reservation_group_read.properties.instance_view + instance_view.capacity_reservations = AAZListType( + serialized_name="capacityReservations", + flags={"read_only": True}, + ) + instance_view.shared_subscription_ids = AAZListType( + serialized_name="sharedSubscriptionIds", + flags={"read_only": True}, + ) + + capacity_reservations = _schema_capacity_reservation_group_read.properties.instance_view.capacity_reservations + capacity_reservations.Element = AAZObjectType() + + _element = _schema_capacity_reservation_group_read.properties.instance_view.capacity_reservations.Element + _element.name = AAZStrType( + flags={"read_only": True}, + ) + _element.statuses = AAZListType() + _element.utilization_info = AAZObjectType( + serialized_name="utilizationInfo", + ) + + statuses = _schema_capacity_reservation_group_read.properties.instance_view.capacity_reservations.Element.statuses + statuses.Element = AAZObjectType() + + _element = _schema_capacity_reservation_group_read.properties.instance_view.capacity_reservations.Element.statuses.Element + _element.code = AAZStrType() + _element.display_status = AAZStrType( + serialized_name="displayStatus", + ) + _element.level = AAZStrType() + _element.message = AAZStrType() + _element.time = AAZStrType() + + utilization_info = _schema_capacity_reservation_group_read.properties.instance_view.capacity_reservations.Element.utilization_info + utilization_info.current_capacity = AAZIntType( + serialized_name="currentCapacity", + flags={"read_only": True}, + ) + utilization_info.virtual_machines_allocated = AAZListType( + serialized_name="virtualMachinesAllocated", + flags={"read_only": True}, + ) + + virtual_machines_allocated = _schema_capacity_reservation_group_read.properties.instance_view.capacity_reservations.Element.utilization_info.virtual_machines_allocated + virtual_machines_allocated.Element = AAZObjectType() + cls._build_schema_sub_resource_read_only_read(virtual_machines_allocated.Element) + + shared_subscription_ids = _schema_capacity_reservation_group_read.properties.instance_view.shared_subscription_ids + shared_subscription_ids.Element = AAZObjectType() + cls._build_schema_sub_resource_read_only_read(shared_subscription_ids.Element) + + sharing_profile = _schema_capacity_reservation_group_read.properties.sharing_profile + sharing_profile.subscription_ids = AAZListType( + serialized_name="subscriptionIds", + ) + + subscription_ids = _schema_capacity_reservation_group_read.properties.sharing_profile.subscription_ids + subscription_ids.Element = AAZObjectType() + + _element = _schema_capacity_reservation_group_read.properties.sharing_profile.subscription_ids.Element + _element.id = AAZStrType() + + virtual_machines_associated = _schema_capacity_reservation_group_read.properties.virtual_machines_associated + virtual_machines_associated.Element = AAZObjectType() + cls._build_schema_sub_resource_read_only_read(virtual_machines_associated.Element) + + system_data = _schema_capacity_reservation_group_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", + ) + + tags = _schema_capacity_reservation_group_read.tags + tags.Element = AAZStrType() + + zones = _schema_capacity_reservation_group_read.zones + zones.Element = AAZStrType() + + _schema.id = cls._schema_capacity_reservation_group_read.id + _schema.location = cls._schema_capacity_reservation_group_read.location + _schema.name = cls._schema_capacity_reservation_group_read.name + _schema.properties = cls._schema_capacity_reservation_group_read.properties + _schema.system_data = cls._schema_capacity_reservation_group_read.system_data + _schema.tags = cls._schema_capacity_reservation_group_read.tags + _schema.type = cls._schema_capacity_reservation_group_read.type + _schema.zones = cls._schema_capacity_reservation_group_read.zones + + _schema_sub_resource_read_only_read = None + + @classmethod + def _build_schema_sub_resource_read_only_read(cls, _schema): + if cls._schema_sub_resource_read_only_read is not None: + _schema.id = cls._schema_sub_resource_read_only_read.id + return + + cls._schema_sub_resource_read_only_read = _schema_sub_resource_read_only_read = AAZObjectType() + + sub_resource_read_only_read = _schema_sub_resource_read_only_read + sub_resource_read_only_read.id = AAZStrType( + flags={"read_only": True}, + ) + + _schema.id = cls._schema_sub_resource_read_only_read.id + + +__all__ = ["Update"] diff --git a/src/azure-cli/azure/cli/command_modules/vm/commands.py b/src/azure-cli/azure/cli/command_modules/vm/commands.py index 938a8170af5..8850380d392 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/commands.py +++ b/src/azure-cli/azure/cli/command_modules/vm/commands.py @@ -10,8 +10,7 @@ cf_galleries, cf_gallery_images, cf_gallery_image_versions, cf_proximity_placement_groups, cf_dedicated_hosts, cf_dedicated_host_groups, - cf_log_analytics_data_plane, - cf_capacity_reservation_groups, cf_capacity_reservations, + cf_log_analytics_data_plane, cf_capacity_reservations, cf_community_gallery) from azure.cli.command_modules.vm._format import ( transform_ip_addresses, transform_vm, transform_vm_create_output, transform_vm_usage_list, transform_vm_list, @@ -165,11 +164,6 @@ def load_command_table(self, _): exception_handler=monitor_exception_handler ) - capacity_reservation_groups_sdk = CliCommandType( - operations_tmpl='azure.mgmt.compute.operations#CapacityReservationGroupsOperations.{}', - client_factory=cf_capacity_reservation_groups - ) - capacity_reservations_sdk = CliCommandType( operations_tmpl='azure.mgmt.compute.operations#CapacityReservationsOperations.{}', client_factory=cf_capacity_reservations @@ -532,8 +526,7 @@ def load_command_table(self, _): except APIVersionException: pass - with self.command_group('capacity reservation group', capacity_reservation_groups_sdk, min_api='2021-04-01', - client_factory=cf_capacity_reservation_groups) as g: + with self.command_group('capacity reservation group') as g: g.custom_command('create', 'create_capacity_reservation_group') g.custom_command('update', 'update_capacity_reservation_group') g.custom_show_command('show', 'show_capacity_reservation_group') diff --git a/src/azure-cli/azure/cli/command_modules/vm/custom.py b/src/azure-cli/azure/cli/command_modules/vm/custom.py index 788fc3cd669..3d804138cfc 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/custom.py +++ b/src/azure-cli/azure/cli/command_modules/vm/custom.py @@ -6225,39 +6225,55 @@ def gallery_application_version_update(client, gallery_application_version=gallery_application_version) -def create_capacity_reservation_group(cmd, client, resource_group_name, capacity_reservation_group_name, location=None, +def create_capacity_reservation_group(cmd, resource_group_name, capacity_reservation_group_name, location=None, tags=None, zones=None, sharing_profile=None): - CapacityReservationGroup = cmd.get_models('CapacityReservationGroup') + from .aaz.latest.capacity.reservation.group import Create as CapacityReservationGroupCreate + command_args = { + 'capacity_reservation_group_name': capacity_reservation_group_name, + 'resource_group': resource_group_name, + 'location': location, + 'tags': tags, + 'zones': zones + } + if sharing_profile is not None: subscription_ids = [{'id': sub_id} for sub_id in sharing_profile] - sharing_profile = {'subscriptionIds': subscription_ids} - capacity_reservation_group = CapacityReservationGroup(location=location, tags=tags, - zones=zones, sharing_profile=sharing_profile) - return client.create_or_update(resource_group_name=resource_group_name, - capacity_reservation_group_name=capacity_reservation_group_name, - parameters=capacity_reservation_group) + command_args['sharing_profile'] = {'subscription_ids': subscription_ids} + else: + command_args['sharing_profile'] = sharing_profile + + return CapacityReservationGroupCreate(cli_ctx=cmd.cli_ctx)(command_args=command_args) -def update_capacity_reservation_group(cmd, client, resource_group_name, capacity_reservation_group_name, tags=None, +def update_capacity_reservation_group(cmd, resource_group_name, capacity_reservation_group_name, tags=None, sharing_profile=None): - CapacityReservationGroupUpdate = cmd.get_models('CapacityReservationGroupUpdate') + from .aaz.latest.capacity.reservation.group import Update as CapacityReservationGroupUpdate + command_args = { + 'capacity_reservation_group_name': capacity_reservation_group_name, + 'resource_group': resource_group_name, + 'tags': tags + } + if sharing_profile is not None: subscription_ids = [{'id': sub_id} for sub_id in sharing_profile] - sharing_profile = {'subscriptionIds': subscription_ids} - capacity_reservation_group = CapacityReservationGroupUpdate(tags=tags, sharing_profile=sharing_profile) - return client.update(resource_group_name=resource_group_name, - capacity_reservation_group_name=capacity_reservation_group_name, - parameters=capacity_reservation_group) + command_args['sharing_profile'] = {'subscription_ids': subscription_ids} + else: + command_args['sharing_profile'] = sharing_profile + return CapacityReservationGroupUpdate(cli_ctx=cmd.cli_ctx)(command_args=command_args) + + +def show_capacity_reservation_group(cmd, resource_group_name, capacity_reservation_group_name, instance_view=None): + from .aaz.latest.capacity.reservation.group import Show as CapacityReservationGroupShow + command_args = { + 'capacity_reservation_group_name': capacity_reservation_group_name, + 'resource_group': resource_group_name + } -def show_capacity_reservation_group(client, resource_group_name, capacity_reservation_group_name, - instance_view=None): - expand = None if instance_view: - expand = 'instanceView' - return client.get(resource_group_name=resource_group_name, - capacity_reservation_group_name=capacity_reservation_group_name, - expand=expand) + command_args['expand'] = 'instanceView' + + return CapacityReservationGroupShow(cli_ctx=cmd.cli_ctx)(command_args=command_args) def set_vm_applications(cmd, vm_name, resource_group_name, application_version_ids, order_applications=False, application_configuration_overrides=None, treat_deployment_as_failure=None, enable_automatic_upgrade=None, no_wait=False):