From 9400e40b17c04961ab089e78cc82bb8bc91b109f Mon Sep 17 00:00:00 2001 From: Zhiyi Huang <17182306+calvinhzy@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:26:09 +0800 Subject: [PATCH] remove storage account migration in another PR --- .../aaz/latest/storage/__cmd_group.py | 1 - .../aaz/latest/storage/account/__cmd_group.py | 1 - .../storage/account/migration/__cmd_group.py | 23 ++ .../storage/account/migration/__init__.py | 13 ++ .../latest/storage/account/migration/_show.py | 209 ++++++++++++++++++ .../storage/account/migration/_start.py | 206 +++++++++++++++++ 6 files changed, 451 insertions(+), 2 deletions(-) create mode 100644 src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/__cmd_group.py create mode 100644 src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/__init__.py create mode 100644 src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/_show.py create mode 100644 src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/_start.py diff --git a/src/storage-preview/azext_storage_preview/aaz/latest/storage/__cmd_group.py b/src/storage-preview/azext_storage_preview/aaz/latest/storage/__cmd_group.py index 119e290e4b4..579d8b500eb 100644 --- a/src/storage-preview/azext_storage_preview/aaz/latest/storage/__cmd_group.py +++ b/src/storage-preview/azext_storage_preview/aaz/latest/storage/__cmd_group.py @@ -13,7 +13,6 @@ @register_command_group( "storage", - is_preview=True, ) class __CMDGroup(AAZCommandGroup): """Manage Azure Cloud Storage resources. diff --git a/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/__cmd_group.py b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/__cmd_group.py index 3cb958cfa52..24f3f1d85aa 100644 --- a/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/__cmd_group.py +++ b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/__cmd_group.py @@ -13,7 +13,6 @@ @register_command_group( "storage account", - is_preview=True, ) class __CMDGroup(AAZCommandGroup): """Manage storage accounts. diff --git a/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/__cmd_group.py b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/__cmd_group.py new file mode 100644 index 00000000000..3284dedf445 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/__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( + "storage account migration", +) +class __CMDGroup(AAZCommandGroup): + """Manage Storage Account Migration + """ + pass + + +__all__ = ["__CMDGroup"] diff --git a/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/__init__.py b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/__init__.py new file mode 100644 index 00000000000..1a94969d1a6 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/__init__.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: skip-file +# flake8: noqa + +from .__cmd_group import * +from ._show import * +from ._start import * diff --git a/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/_show.py b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/_show.py new file mode 100644 index 00000000000..e6c76426d88 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/_show.py @@ -0,0 +1,209 @@ +# -------------------------------------------------------------------------------------------- +# 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( + "storage account migration show", +) +class Show(AAZCommand): + """Get the status of the ongoing migration for the specified storage account. + + :example: migration show + az storage account migration show --account-name "storage_account_name" -g "resource_group_name" + """ + + _aaz_info = { + "version": "2023-01-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.storage/storageaccounts/{}/accountmigrations/{}", "2023-01-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.account_name = AAZStrArg( + options=["--account-name"], + help="The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[a-z0-9]+$", + max_length=24, + min_length=3, + ), + ) + _args_schema.migration_name = AAZStrArg( + options=["-n", "--name", "--migration-name"], + help="The name of the Storage Account Migration. It should always be 'default'", + required=True, + id_part="child_name_1", + enum={"default": "default"}, + fmt=AAZStrArgFormat( + pattern="^[a-z][a-z0-9]*$", + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + self.StorageAccountsGetCustomerInitiatedMigration(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 StorageAccountsGetCustomerInitiatedMigration(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.Storage/storageAccounts/{accountName}/accountMigrations/{migrationName}", + **self.url_parameters + ) + + @property + def method(self): + return "GET" + + @property + def error_format(self): + return "MgmtErrorFormat" + + @property + def url_parameters(self): + parameters = { + **self.serialize_url_param( + "accountName", self.ctx.args.account_name, + required=True, + ), + **self.serialize_url_param( + "migrationName", self.ctx.args.migration_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", "2023-01-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.name = AAZStrType() + _schema_on_200.properties = AAZObjectType( + flags={"required": True, "client_flatten": True}, + ) + _schema_on_200.type = AAZStrType() + + properties = cls._schema_on_200.properties + properties.migration_failed_detailed_reason = AAZStrType( + serialized_name="migrationFailedDetailedReason", + flags={"read_only": True}, + ) + properties.migration_failed_reason = AAZStrType( + serialized_name="migrationFailedReason", + flags={"read_only": True}, + ) + properties.migration_status = AAZStrType( + serialized_name="migrationStatus", + flags={"read_only": True}, + ) + properties.target_sku_name = AAZStrType( + serialized_name="targetSkuName", + flags={"required": True}, + ) + + return cls._schema_on_200 + + +class _ShowHelper: + """Helper class for Show""" + + +__all__ = ["Show"] diff --git a/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/_start.py b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/_start.py new file mode 100644 index 00000000000..d089b432a05 --- /dev/null +++ b/src/storage-preview/azext_storage_preview/aaz/latest/storage/account/migration/_start.py @@ -0,0 +1,206 @@ +# -------------------------------------------------------------------------------------------- +# 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( + "storage account migration start", +) +class Start(AAZCommand): + """Account Migration request can be triggered for a storage account to change its redundancy level. The migration updates the non-zonal redundant storage account to a zonal redundant account or vice-versa in order to have better reliability and availability. Zone-redundant storage (ZRS) replicates your storage account synchronously across three Azure availability zones in the primary region. + + :example: migration start + az storage account migration start --account-name "storage_account_name" -g "resource_group_name" --sku Standard_ZRS --name default --no-wait + """ + + _aaz_info = { + "version": "2023-01-01", + "resources": [ + ["mgmt-plane", "/subscriptions/{}/resourcegroups/{}/providers/microsoft.storage/storageaccounts/{}/startaccountmigration", "2023-01-01"], + ] + } + + AZ_SUPPORT_NO_WAIT = True + + def _handler(self, command_args): + super()._handler(command_args) + return self.build_lro_poller(self._execute_operations, None) + + _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.account_name = AAZStrArg( + options=["--account-name"], + help="The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.", + required=True, + id_part="name", + fmt=AAZStrArgFormat( + pattern="^[a-z0-9]+$", + max_length=24, + min_length=3, + ), + ) + _args_schema.resource_group = AAZResourceGroupNameArg( + required=True, + ) + + # define Arg Group "Parameters" + + _args_schema = cls._args_schema + _args_schema.name = AAZStrArg( + options=["--name"], + arg_group="Parameters", + help="current value is 'default' for customer initiated migration", + ) + _args_schema.type = AAZStrArg( + options=["--type"], + arg_group="Parameters", + help="SrpAccountMigrationType in ARM contract which is 'accountMigrations'", + ) + + # define Arg Group "Properties" + + _args_schema = cls._args_schema + _args_schema.target_sku_name = AAZStrArg( + options=["--sku", "--target-sku-name"], + arg_group="Properties", + help="Target sku name for the account", + required=True, + enum={"Premium_LRS": "Premium_LRS", "Premium_ZRS": "Premium_ZRS", "Standard_GRS": "Standard_GRS", "Standard_GZRS": "Standard_GZRS", "Standard_LRS": "Standard_LRS", "Standard_RAGRS": "Standard_RAGRS", "Standard_RAGZRS": "Standard_RAGZRS", "Standard_ZRS": "Standard_ZRS"}, + ) + return cls._args_schema + + def _execute_operations(self): + self.pre_operations() + yield self.StorageAccountsCustomerInitiatedMigration(ctx=self.ctx)() + self.post_operations() + + @register_callback + def pre_operations(self): + pass + + @register_callback + def post_operations(self): + pass + + class StorageAccountsCustomerInitiatedMigration(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 [202]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + if session.http_response.status_code in [200]: + return self.client.build_lro_polling( + self.ctx.args.no_wait, + session, + self.on_200, + self.on_error, + lro_options={"final-state-via": "location"}, + path_format_arguments=self.url_parameters, + ) + + return self.on_error(session.http_response) + + @property + def url(self): + return self.client.format_url( + "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/startAccountMigration", + **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( + "accountName", self.ctx.args.account_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", "2023-01-01", + required=True, + ), + } + return parameters + + @property + def header_parameters(self): + parameters = { + **self.serialize_header_param( + "Content-Type", "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("name", AAZStrType, ".name") + _builder.set_prop("properties", AAZObjectType, ".", typ_kwargs={"flags": {"required": True, "client_flatten": True}}) + _builder.set_prop("type", AAZStrType, ".type") + + properties = _builder.get(".properties") + if properties is not None: + properties.set_prop("targetSkuName", AAZStrType, ".target_sku_name", typ_kwargs={"flags": {"required": True}}) + + return self.serialize_content(_content_value) + + def on_200(self, session): + pass + + +class _StartHelper: + """Helper class for Start""" + + +__all__ = ["Start"]