From 92fb855070e66d8ce2f695b2c3fc7683e5bf1413 Mon Sep 17 00:00:00 2001 From: azure-sdk Date: Thu, 14 May 2026 14:40:35 +0000 Subject: [PATCH] Configurations: 'specification/purestorage/PureStorage.Block.Management/tspconfig.yaml', API Version: 2026-01-01-preview, SDK Release Type: beta, and CommitSHA: 'ced46686079690b9f9116cc03fac68f8afe4d1af' in SpecRepo: 'https://github.com/Azure/azure-rest-api-specs' Pipeline run: https://dev.azure.com/azure-sdk/internal/_build/results?buildId=6298927 Refer to https://eng.ms/docs/products/azure-developer-experience/develop/sdk-release/sdk-release-prerequisites to prepare for SDK release. --- .../azure-mgmt-purestorageblock/CHANGELOG.md | 24 + .../azure-mgmt-purestorageblock/MANIFEST.in | 8 +- .../azure-mgmt-purestorageblock/README.md | 4 +- .../_metadata.json | 9 +- .../apiview-properties.json | 43 +- .../azure/__init__.py | 2 +- .../azure/mgmt/__init__.py | 2 +- .../azure/mgmt/purestorageblock/_client.py | 36 +- .../mgmt/purestorageblock/_configuration.py | 16 +- .../azure/mgmt/purestorageblock/_patch.py | 3 +- .../purestorageblock/_utils/model_base.py | 445 +- .../purestorageblock/_utils/serialization.py | 49 +- .../mgmt/purestorageblock/_validation.py | 20 +- .../azure/mgmt/purestorageblock/_version.py | 2 +- .../mgmt/purestorageblock/aio/_client.py | 36 +- .../purestorageblock/aio/_configuration.py | 16 +- .../azure/mgmt/purestorageblock/aio/_patch.py | 3 +- .../aio/operations/__init__.py | 4 + .../aio/operations/_operations.py | 2482 +++++- .../purestorageblock/aio/operations/_patch.py | 3 +- .../mgmt/purestorageblock/models/__init__.py | 28 + .../mgmt/purestorageblock/models/_enums.py | 32 +- .../mgmt/purestorageblock/models/_models.py | 585 +- .../mgmt/purestorageblock/models/_patch.py | 3 +- .../purestorageblock/operations/__init__.py | 4 + .../operations/_operations.py | 7374 +++++++++++------ .../purestorageblock/operations/_patch.py | 3 +- ...ontainer_volumes_delete_maximum_set_gen.py | 8 +- ...e_container_volumes_get_maximum_set_gen.py | 8 +- ...y_avs_storage_container_maximum_set_gen.py | 6 +- ...ontainer_volumes_update_maximum_set_gen.py | 8 +- ...orage_containers_delete_maximum_set_gen.py | 6 +- ..._storage_containers_get_maximum_set_gen.py | 6 +- ...rs_list_by_storage_pool_maximum_set_gen.py | 2 +- .../avs_vm_volumes_delete_maximum_set_gen.py | 8 +- .../avs_vm_volumes_get_maximum_set_gen.py | 8 +- ..._volumes_list_by_avs_vm_maximum_set_gen.py | 6 +- .../avs_vm_volumes_update_maximum_set_gen.py | 8 +- .../avs_vms_delete_maximum_set_gen.py | 6 +- .../avs_vms_get_maximum_set_gen.py | 6 +- ...ms_list_by_storage_pool_maximum_set_gen.py | 4 +- .../avs_vms_update_maximum_set_gen.py | 6 +- .../operations_list_maximum_set_gen.py | 2 +- .../operations_list_minimum_set_gen.py | 2 +- .../reservations_create_maximum_set_gen.py | 77 + .../reservations_delete_maximum_set_gen.py | 41 + ...ions_get_billing_report_maximum_set_gen.py | 2 +- ...ions_get_billing_status_maximum_set_gen.py | 2 +- .../reservations_get_maximum_set_gen.py | 42 + ...ons_get_resource_limits_maximum_set_gen.py | 4 +- ..._list_by_resource_group_maximum_set_gen.py | 42 + ...ns_list_by_subscription_maximum_set_gen.py | 40 + .../reservations_update_maximum_set_gen.py | 65 + .../storage_pools_create_maximum_set_gen.py | 25 +- .../storage_pools_delete_maximum_set_gen.py | 4 +- ..._disable_avs_connection_maximum_set_gen.py | 4 +- ...s_enable_avs_connection_maximum_set_gen.py | 4 +- ...finalize_avs_connection_maximum_set_gen.py | 4 +- ...ools_get_avs_connection_maximum_set_gen.py | 4 +- ...ge_pools_get_avs_status_maximum_set_gen.py | 4 +- ...pools_get_health_status_maximum_set_gen.py | 4 +- .../storage_pools_get_maximum_set_gen.py | 4 +- ..._list_by_resource_group_maximum_set_gen.py | 2 +- ...ls_list_by_subscription_maximum_set_gen.py | 2 +- ...s_repair_avs_connection_maximum_set_gen.py | 4 +- .../storage_pools_update_maximum_set_gen.py | 8 +- .../volume_groups_create_maximum_set_gen.py | 51 + .../volume_groups_delete_maximum_set_gen.py | 42 + .../volume_groups_get_maximum_set_gen.py | 43 + ...olume_groups_get_status_maximum_set_gen.py | 43 + ...ps_list_by_storage_pool_maximum_set_gen.py | 43 + ...t_connection_parameters_maximum_set_gen.py | 43 + .../volume_groups_update_maximum_set_gen.py | 50 + .../volumes_create_maximum_set_gen.py | 51 + .../volumes_delete_maximum_set_gen.py | 43 + .../volumes_get_maximum_set_gen.py | 44 + ...es_list_by_volume_group_maximum_set_gen.py | 44 + .../volumes_update_maximum_set_gen.py | 45 + ...age_block_mgmt_volume_groups_operations.py | 132 + ...ock_mgmt_volume_groups_operations_async.py | 139 + ...e_storage_block_mgmt_volumes_operations.py | 106 + ...age_block_mgmt_volumes_operations_async.py | 113 + .../pyproject.toml | 81 + .../sdk_packaging.toml | 12 - .../azure-mgmt-purestorageblock/setup.py | 82 - .../tsp-location.yaml | 2 +- 86 files changed, 10071 insertions(+), 2862 deletions(-) create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_create_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_delete_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_list_by_resource_group_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_list_by_subscription_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_update_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_create_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_delete_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_get_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_get_status_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_list_by_storage_pool_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_list_connection_parameters_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_update_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_create_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_delete_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_get_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_list_by_volume_group_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_update_maximum_set_gen.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volume_groups_operations.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volume_groups_operations_async.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volumes_operations.py create mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volumes_operations_async.py delete mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/sdk_packaging.toml delete mode 100644 sdk/purestorageblock/azure-mgmt-purestorageblock/setup.py diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/CHANGELOG.md b/sdk/purestorageblock/azure-mgmt-purestorageblock/CHANGELOG.md index a74cf9e568e0..e46910765059 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/CHANGELOG.md +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/CHANGELOG.md @@ -1,5 +1,29 @@ # Release History +## 1.1.0b1 (2026-05-14) + +### Features Added + + - Client `PureStorageBlockMgmtClient` added parameter `cloud_setting` in method `__init__` + - Client `PureStorageBlockMgmtClient` added operation group `volume_groups` + - Client `PureStorageBlockMgmtClient` added operation group `volumes` + - Added model `AzureVolumeProperties` + - Added model `ConnectionParametersResponse` + - Added model `IscsiConnectionParameters` + - Added model `IscsiEndpoint` + - Added model `PerformanceParameters` + - Added model `ProtectionParameters` + - Added model `Volume` + - Added model `VolumeGroup` + - Added model `VolumeGroupProperties` + - Added model `VolumeGroupStatus` + - Added model `VolumeGroupUpdate` + - Added model `VolumeGroupUpdateProperties` + - Added model `VolumeUpdate` + - Added model `VolumeUpdateProperties` + - Added model `VolumeGroupsOperations` + - Added model `VolumesOperations` + ## 1.0.0 (2025-06-30) ### Other Changes diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/MANIFEST.in b/sdk/purestorageblock/azure-mgmt-purestorageblock/MANIFEST.in index 331132697ae3..5d5b52632e1a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/MANIFEST.in +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/MANIFEST.in @@ -1,7 +1,7 @@ -recursive-include tests *.py *.json -recursive-include samples *.py *.md include *.md -include azure/__init__.py -include azure/mgmt/__init__.py include LICENSE include azure/mgmt/purestorageblock/py.typed +recursive-include tests *.py +recursive-include samples *.py *.md +include azure/__init__.py +include azure/mgmt/__init__.py diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/README.md b/sdk/purestorageblock/azure-mgmt-purestorageblock/README.md index 3d005a39dc97..908c25c36749 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/README.md +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/README.md @@ -1,7 +1,7 @@ # Microsoft Azure SDK for Python This is the Microsoft Azure Purestorageblock Management Client Library. -This package has been tested with Python 3.9+. +This package has been tested with Python 3.10+. For a more complete view of Azure libraries, see the [azure sdk python release](https://aka.ms/azsdk/python/all). ## _Disclaimer_ @@ -12,7 +12,7 @@ _Azure SDK Python packages support for Python 2.7 has ended 01 January 2022. For ### Prerequisites -- Python 3.9+ is required to use this package. +- Python 3.10+ is required to use this package. - [Azure subscription](https://azure.microsoft.com/free/) ### Install the package diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/_metadata.json b/sdk/purestorageblock/azure-mgmt-purestorageblock/_metadata.json index f45acd4e274a..06fb01eac42f 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/_metadata.json +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/_metadata.json @@ -1,7 +1,10 @@ { - "apiVersion": "2024-11-01", - "commit": "5f272067844826380939c0b3f24ca3cc99dbe308", + "apiVersion": "2026-01-01-preview", + "apiVersions": { + "PureStorage.Block": "2026-01-01-preview" + }, + "commit": "ced46686079690b9f9116cc03fac68f8afe4d1af", "repository_url": "https://github.com/Azure/azure-rest-api-specs", "typespec_src": "specification/purestorage/PureStorage.Block.Management", - "emitterVersion": "0.45.2" + "emitterVersion": "0.62.1" } \ No newline at end of file diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/apiview-properties.json b/sdk/purestorageblock/azure-mgmt-purestorageblock/apiview-properties.json index c0858c6d4f7d..ac7328382656 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/apiview-properties.json +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/apiview-properties.json @@ -22,21 +22,27 @@ "azure.mgmt.purestorageblock.models.AvsVmVolumeUpdate": "Azure.ResourceManager.Foundations.ResourceUpdateModel", "azure.mgmt.purestorageblock.models.AvsVmVolumeUpdateProperties": "Azure.ResourceManager.Foundations.ResourceUpdateModelProperties", "azure.mgmt.purestorageblock.models.AzureVmwareService": "PureStorage.Block.AzureVmwareService", + "azure.mgmt.purestorageblock.models.AzureVolumeProperties": "PureStorage.Block.AzureVolumeProperties", "azure.mgmt.purestorageblock.models.BandwidthUsage": "PureStorage.Block.BandwidthUsage", "azure.mgmt.purestorageblock.models.BillingUsageProperty": "PureStorage.Block.BillingUsageProperty", "azure.mgmt.purestorageblock.models.CompanyDetails": "LiftrBase.CompanyDetails", + "azure.mgmt.purestorageblock.models.ConnectionParametersResponse": "PureStorage.Block.ConnectionParametersResponse", "azure.mgmt.purestorageblock.models.ErrorAdditionalInfo": "Azure.ResourceManager.CommonTypes.ErrorAdditionalInfo", "azure.mgmt.purestorageblock.models.ErrorDetail": "Azure.ResourceManager.CommonTypes.ErrorDetail", "azure.mgmt.purestorageblock.models.ErrorResponse": "Azure.ResourceManager.CommonTypes.ErrorResponse", "azure.mgmt.purestorageblock.models.HealthDetails": "PureStorage.Block.HealthDetails", "azure.mgmt.purestorageblock.models.IopsUsage": "PureStorage.Block.IopsUsage", + "azure.mgmt.purestorageblock.models.IscsiConnectionParameters": "PureStorage.Block.IscsiConnectionParameters", + "azure.mgmt.purestorageblock.models.IscsiEndpoint": "PureStorage.Block.IscsiEndpoint", "azure.mgmt.purestorageblock.models.LimitDetails": "PureStorage.Block.LimitDetails", "azure.mgmt.purestorageblock.models.ManagedServiceIdentity": "Azure.ResourceManager.CommonTypes.ManagedServiceIdentity", "azure.mgmt.purestorageblock.models.MarketplaceDetails": "LiftrBase.MarketplaceDetails", "azure.mgmt.purestorageblock.models.OfferDetails": "LiftrBase.OfferDetails", "azure.mgmt.purestorageblock.models.Operation": "Azure.ResourceManager.CommonTypes.Operation", "azure.mgmt.purestorageblock.models.OperationDisplay": "Azure.ResourceManager.CommonTypes.OperationDisplay", + "azure.mgmt.purestorageblock.models.PerformanceParameters": "PureStorage.Block.PerformanceParameters", "azure.mgmt.purestorageblock.models.PerformancePolicyLimits": "PureStorage.Block.PerformancePolicyLimits", + "azure.mgmt.purestorageblock.models.ProtectionParameters": "PureStorage.Block.ProtectionParameters", "azure.mgmt.purestorageblock.models.ProtectionPolicyLimits": "PureStorage.Block.ProtectionPolicyLimits", "azure.mgmt.purestorageblock.models.RangeLimits": "PureStorage.Block.RangeLimits", "azure.mgmt.purestorageblock.models.TrackedResource": "Azure.ResourceManager.CommonTypes.TrackedResource", @@ -62,8 +68,16 @@ "azure.mgmt.purestorageblock.models.UserAssignedIdentity": "Azure.ResourceManager.CommonTypes.UserAssignedIdentity", "azure.mgmt.purestorageblock.models.UserDetails": "LiftrBase.UserDetails", "azure.mgmt.purestorageblock.models.VnetInjection": "PureStorage.Block.VnetInjection", + "azure.mgmt.purestorageblock.models.Volume": "PureStorage.Block.Volume", + "azure.mgmt.purestorageblock.models.VolumeGroup": "PureStorage.Block.VolumeGroup", + "azure.mgmt.purestorageblock.models.VolumeGroupProperties": "PureStorage.Block.VolumeGroupProperties", + "azure.mgmt.purestorageblock.models.VolumeGroupStatus": "PureStorage.Block.VolumeGroupStatus", + "azure.mgmt.purestorageblock.models.VolumeGroupUpdate": "Azure.ResourceManager.Foundations.ResourceUpdateModel", + "azure.mgmt.purestorageblock.models.VolumeGroupUpdateProperties": "Azure.ResourceManager.Foundations.ResourceUpdateModelProperties", "azure.mgmt.purestorageblock.models.VolumeLimits": "PureStorage.Block.VolumeLimits", "azure.mgmt.purestorageblock.models.VolumeProperties": "PureStorage.Block.VolumeProperties", + "azure.mgmt.purestorageblock.models.VolumeUpdate": "Azure.ResourceManager.Foundations.ResourceUpdateModel", + "azure.mgmt.purestorageblock.models.VolumeUpdateProperties": "Azure.ResourceManager.Foundations.ResourceUpdateModelProperties", "azure.mgmt.purestorageblock.models.Origin": "Azure.ResourceManager.CommonTypes.Origin", "azure.mgmt.purestorageblock.models.ActionType": "Azure.ResourceManager.CommonTypes.ActionType", "azure.mgmt.purestorageblock.models.CreatedByType": "Azure.ResourceManager.CommonTypes.createdByType", @@ -151,6 +165,31 @@ "azure.mgmt.purestorageblock.operations.AvsVmVolumesOperations.begin_delete": "PureStorage.Block.AvsVmVolumes.delete", "azure.mgmt.purestorageblock.aio.operations.AvsVmVolumesOperations.begin_delete": "PureStorage.Block.AvsVmVolumes.delete", "azure.mgmt.purestorageblock.operations.AvsVmVolumesOperations.list_by_avs_vm": "PureStorage.Block.AvsVmVolumes.listByAvsVm", - "azure.mgmt.purestorageblock.aio.operations.AvsVmVolumesOperations.list_by_avs_vm": "PureStorage.Block.AvsVmVolumes.listByAvsVm" - } + "azure.mgmt.purestorageblock.aio.operations.AvsVmVolumesOperations.list_by_avs_vm": "PureStorage.Block.AvsVmVolumes.listByAvsVm", + "azure.mgmt.purestorageblock.operations.VolumeGroupsOperations.get": "PureStorage.Block.VolumeGroups.get", + "azure.mgmt.purestorageblock.aio.operations.VolumeGroupsOperations.get": "PureStorage.Block.VolumeGroups.get", + "azure.mgmt.purestorageblock.operations.VolumeGroupsOperations.begin_create": "PureStorage.Block.VolumeGroups.create", + "azure.mgmt.purestorageblock.aio.operations.VolumeGroupsOperations.begin_create": "PureStorage.Block.VolumeGroups.create", + "azure.mgmt.purestorageblock.operations.VolumeGroupsOperations.begin_update": "PureStorage.Block.VolumeGroups.update", + "azure.mgmt.purestorageblock.aio.operations.VolumeGroupsOperations.begin_update": "PureStorage.Block.VolumeGroups.update", + "azure.mgmt.purestorageblock.operations.VolumeGroupsOperations.begin_delete": "PureStorage.Block.VolumeGroups.delete", + "azure.mgmt.purestorageblock.aio.operations.VolumeGroupsOperations.begin_delete": "PureStorage.Block.VolumeGroups.delete", + "azure.mgmt.purestorageblock.operations.VolumeGroupsOperations.list_by_storage_pool": "PureStorage.Block.VolumeGroups.listByStoragePool", + "azure.mgmt.purestorageblock.aio.operations.VolumeGroupsOperations.list_by_storage_pool": "PureStorage.Block.VolumeGroups.listByStoragePool", + "azure.mgmt.purestorageblock.operations.VolumeGroupsOperations.list_connection_parameters": "PureStorage.Block.VolumeGroups.listConnectionParameters", + "azure.mgmt.purestorageblock.aio.operations.VolumeGroupsOperations.list_connection_parameters": "PureStorage.Block.VolumeGroups.listConnectionParameters", + "azure.mgmt.purestorageblock.operations.VolumeGroupsOperations.get_status": "PureStorage.Block.VolumeGroups.getStatus", + "azure.mgmt.purestorageblock.aio.operations.VolumeGroupsOperations.get_status": "PureStorage.Block.VolumeGroups.getStatus", + "azure.mgmt.purestorageblock.operations.VolumesOperations.get": "PureStorage.Block.Volumes.get", + "azure.mgmt.purestorageblock.aio.operations.VolumesOperations.get": "PureStorage.Block.Volumes.get", + "azure.mgmt.purestorageblock.operations.VolumesOperations.begin_create": "PureStorage.Block.Volumes.create", + "azure.mgmt.purestorageblock.aio.operations.VolumesOperations.begin_create": "PureStorage.Block.Volumes.create", + "azure.mgmt.purestorageblock.operations.VolumesOperations.begin_update": "PureStorage.Block.Volumes.update", + "azure.mgmt.purestorageblock.aio.operations.VolumesOperations.begin_update": "PureStorage.Block.Volumes.update", + "azure.mgmt.purestorageblock.operations.VolumesOperations.begin_delete": "PureStorage.Block.Volumes.delete", + "azure.mgmt.purestorageblock.aio.operations.VolumesOperations.begin_delete": "PureStorage.Block.Volumes.delete", + "azure.mgmt.purestorageblock.operations.VolumesOperations.list_by_volume_group": "PureStorage.Block.Volumes.listByVolumeGroup", + "azure.mgmt.purestorageblock.aio.operations.VolumesOperations.list_by_volume_group": "PureStorage.Block.Volumes.listByVolumeGroup" + }, + "CrossLanguageVersion": "ecf81d558321" } \ No newline at end of file diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/__init__.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/__init__.py index 8db66d3d0f0f..d55ccad1f573 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/__init__.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/__init__.py @@ -1 +1 @@ -__path__ = __import__("pkgutil").extend_path(__path__, __name__) +__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/__init__.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/__init__.py index 8db66d3d0f0f..d55ccad1f573 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/__init__.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/__init__.py @@ -1 +1 @@ -__path__ = __import__("pkgutil").extend_path(__path__, __name__) +__path__ = __import__("pkgutil").extend_path(__path__, __name__) # type: ignore diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_client.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_client.py index 2e87ddec9b4a..481e53de566a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_client.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_client.py @@ -7,8 +7,8 @@ # -------------------------------------------------------------------------- from copy import deepcopy +import sys from typing import Any, Optional, TYPE_CHECKING, cast -from typing_extensions import Self from azure.core.pipeline import policies from azure.core.rest import HttpRequest, HttpResponse @@ -27,9 +27,17 @@ Operations, ReservationsOperations, StoragePoolsOperations, + VolumeGroupsOperations, + VolumesOperations, ) +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self # type: ignore + if TYPE_CHECKING: + from azure.core import AzureClouds from azure.core.credentials import TokenCredential @@ -52,24 +60,39 @@ class PureStorageBlockMgmtClient: # pylint: disable=too-many-instance-attribute :vartype avs_vms: azure.mgmt.purestorageblock.operations.AvsVmsOperations :ivar avs_vm_volumes: AvsVmVolumesOperations operations :vartype avs_vm_volumes: azure.mgmt.purestorageblock.operations.AvsVmVolumesOperations + :ivar volume_groups: VolumeGroupsOperations operations + :vartype volume_groups: azure.mgmt.purestorageblock.operations.VolumeGroupsOperations + :ivar volumes: VolumesOperations operations + :vartype volumes: azure.mgmt.purestorageblock.operations.VolumesOperations :param credential: Credential used to authenticate requests to the service. Required. :type credential: ~azure.core.credentials.TokenCredential :param subscription_id: The ID of the target subscription. The value must be an UUID. Required. :type subscription_id: str :param base_url: Service host. Default value is None. :type base_url: str - :keyword api_version: The API version to use for this operation. Default value is "2024-11-01". - Note that overriding this default value may result in unsupported behavior. + :keyword cloud_setting: The cloud setting for which to get the ARM endpoint. Default value is + None. + :paramtype cloud_setting: ~azure.core.AzureClouds + :keyword api_version: The API version to use for this operation. Known values are + "2026-01-01-preview" and None. Default value is None. If not set, the operation's default API + version will be used. Note that overriding this default value may result in unsupported + behavior. :paramtype api_version: str :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. """ def __init__( - self, credential: "TokenCredential", subscription_id: str, base_url: Optional[str] = None, **kwargs: Any + self, + credential: "TokenCredential", + subscription_id: str, + base_url: Optional[str] = None, + *, + cloud_setting: Optional["AzureClouds"] = None, + **kwargs: Any ) -> None: _endpoint = "{endpoint}" - _cloud = kwargs.pop("cloud_setting", None) or settings.current.azure_cloud # type: ignore + _cloud = cloud_setting or settings.current.azure_cloud # type: ignore _endpoints = get_arm_endpoints(_cloud) if not base_url: base_url = _endpoints["resource_manager"] @@ -78,6 +101,7 @@ def __init__( credential=credential, subscription_id=subscription_id, base_url=cast(str, base_url), + cloud_setting=cloud_setting, credential_scopes=credential_scopes, **kwargs ) @@ -116,6 +140,8 @@ def __init__( ) self.avs_vms = AvsVmsOperations(self._client, self._config, self._serialize, self._deserialize) self.avs_vm_volumes = AvsVmVolumesOperations(self._client, self._config, self._serialize, self._deserialize) + self.volume_groups = VolumeGroupsOperations(self._client, self._config, self._serialize, self._deserialize) + self.volumes = VolumesOperations(self._client, self._config, self._serialize, self._deserialize) def send_request(self, request: HttpRequest, *, stream: bool = False, **kwargs: Any) -> HttpResponse: """Runs the network request through the client's chained policies. diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_configuration.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_configuration.py index 77cd6f2363c8..5139fc7ac683 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_configuration.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_configuration.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import Any, TYPE_CHECKING +from typing import Any, Optional, TYPE_CHECKING from azure.core.pipeline import policies from azure.mgmt.core.policies import ARMChallengeAuthenticationPolicy, ARMHttpLoggingPolicy @@ -14,6 +14,7 @@ from ._version import VERSION if TYPE_CHECKING: + from azure.core import AzureClouds from azure.core.credentials import TokenCredential @@ -29,8 +30,13 @@ class PureStorageBlockMgmtClientConfiguration: # pylint: disable=too-many-insta :type subscription_id: str :param base_url: Service host. Default value is "https://management.azure.com". :type base_url: str - :keyword api_version: The API version to use for this operation. Default value is "2024-11-01". - Note that overriding this default value may result in unsupported behavior. + :param cloud_setting: The cloud setting for which to get the ARM endpoint. Default value is + None. + :type cloud_setting: ~azure.core.AzureClouds + :keyword api_version: The API version to use for this operation. Known values are + "2026-01-01-preview" and None. Default value is None. If not set, the operation's default API + version will be used. Note that overriding this default value may result in unsupported + behavior. :paramtype api_version: str """ @@ -39,9 +45,10 @@ def __init__( credential: "TokenCredential", subscription_id: str, base_url: str = "https://management.azure.com", + cloud_setting: Optional["AzureClouds"] = None, **kwargs: Any ) -> None: - api_version: str = kwargs.pop("api_version", "2024-11-01") + api_version: str = kwargs.pop("api_version", "2026-01-01-preview") if credential is None: raise ValueError("Parameter 'credential' must not be None.") @@ -51,6 +58,7 @@ def __init__( self.credential = credential self.subscription_id = subscription_id self.base_url = base_url + self.cloud_setting = cloud_setting self.api_version = api_version self.credential_scopes = kwargs.pop("credential_scopes", ["https://management.azure.com/.default"]) kwargs.setdefault("sdk_moniker", "mgmt-purestorageblock/{}".format(VERSION)) diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_patch.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_patch.py index 8bcb627aa475..ea765788358a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_patch.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_patch.py @@ -7,9 +7,8 @@ Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize """ -from typing import List -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level +__all__: list[str] = [] # Add all objects you want publicly available to users at this package level def patch_sdk(): diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_utils/model_base.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_utils/model_base.py index 49d5c7259389..4102784f9a85 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_utils/model_base.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_utils/model_base.py @@ -1,4 +1,4 @@ -# pylint: disable=too-many-lines +# pylint: disable=line-too-long,useless-suppression,too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -23,19 +23,26 @@ from json import JSONEncoder import xml.etree.ElementTree as ET from collections.abc import MutableMapping -from typing_extensions import Self import isodate from azure.core.exceptions import DeserializationError from azure.core import CaseInsensitiveEnumMeta from azure.core.pipeline import PipelineResponse from azure.core.serialization import _Null +from azure.core.rest import HttpResponse + +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self + _LOGGER = logging.getLogger(__name__) __all__ = ["SdkJSONEncoder", "Model", "rest_field", "rest_discriminator"] TZ_UTC = timezone.utc _T = typing.TypeVar("_T") +_NONE_TYPE = type(None) def _timedelta_as_isostr(td: timedelta) -> str: @@ -170,6 +177,21 @@ def default(self, o): # pylint: disable=too-many-return-statements r"(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s\d{4}\s\d{2}:\d{2}:\d{2}\sGMT" ) +_ARRAY_ENCODE_MAPPING = { + "pipeDelimited": "|", + "spaceDelimited": " ", + "commaDelimited": ",", + "newlineDelimited": "\n", +} + + +def _deserialize_array_encoded(delimit: str, attr): + if isinstance(attr, str): + if attr == "": + return [] + return attr.split(delimit) + return attr + def _deserialize_datetime(attr: typing.Union[str, datetime]) -> datetime: """Deserialize ISO-8601 formatted string into Datetime object. @@ -201,7 +223,7 @@ def _deserialize_datetime(attr: typing.Union[str, datetime]) -> datetime: test_utc = date_obj.utctimetuple() if test_utc.tm_year > 9999 or test_utc.tm_year < 1: raise OverflowError("Hit max or min date") - return date_obj + return date_obj # type: ignore[no-any-return] def _deserialize_datetime_rfc7231(attr: typing.Union[str, datetime]) -> datetime: @@ -255,7 +277,7 @@ def _deserialize_time(attr: typing.Union[str, time]) -> time: """ if isinstance(attr, time): return attr - return isodate.parse_time(attr) + return isodate.parse_time(attr) # type: ignore[no-any-return] def _deserialize_bytes(attr): @@ -314,6 +336,8 @@ def _deserialize_int_as_str(attr): def get_deserializer(annotation: typing.Any, rf: typing.Optional["_RestField"] = None): if annotation is int and rf and rf._format == "str": return _deserialize_int_as_str + if annotation is str and rf and rf._format in _ARRAY_ENCODE_MAPPING: + return functools.partial(_deserialize_array_encoded, _ARRAY_ENCODE_MAPPING[rf._format]) if rf and rf._format: return _DESERIALIZE_MAPPING_WITHFORMAT.get(rf._format) return _DESERIALIZE_MAPPING.get(annotation) # pyright: ignore @@ -345,16 +369,46 @@ def _get_model(module_name: str, model_name: str): class _MyMutableMapping(MutableMapping[str, typing.Any]): - def __init__(self, data: typing.Dict[str, typing.Any]) -> None: + def __init__(self, data: dict[str, typing.Any]) -> None: self._data = data def __contains__(self, key: typing.Any) -> bool: return key in self._data def __getitem__(self, key: str) -> typing.Any: + # If this key has been deserialized (for mutable types), we need to handle serialization + if hasattr(self, "_attr_to_rest_field"): + cache_attr = f"_deserialized_{key}" + if hasattr(self, cache_attr): + rf = _get_rest_field(getattr(self, "_attr_to_rest_field"), key) + if rf: + value = self._data.get(key) + if isinstance(value, (dict, list, set)): + # For mutable types, serialize and return + # But also update _data with serialized form and clear flag + # so mutations via this returned value affect _data + serialized = _serialize(value, rf._format) + # If serialized form is same type (no transformation needed), + # return _data directly so mutations work + if isinstance(serialized, type(value)) and serialized == value: + return self._data.get(key) + # Otherwise return serialized copy and clear flag + try: + object.__delattr__(self, cache_attr) + except AttributeError: + pass + # Store serialized form back + self._data[key] = serialized + return serialized return self._data.__getitem__(key) def __setitem__(self, key: str, value: typing.Any) -> None: + # Clear any cached deserialized value when setting through dictionary access + cache_attr = f"_deserialized_{key}" + try: + object.__delattr__(self, cache_attr) + except AttributeError: + pass self._data.__setitem__(key, value) def __delitem__(self, key: str) -> None: @@ -425,7 +479,7 @@ def pop(self, key: str, default: typing.Any = _UNSET) -> typing.Any: return self._data.pop(key) return self._data.pop(key, default) - def popitem(self) -> typing.Tuple[str, typing.Any]: + def popitem(self) -> tuple[str, typing.Any]: """ Removes and returns some (key, value) pair :returns: The (key, value) pair. @@ -466,6 +520,8 @@ def setdefault(self, key: str, default: typing.Any = _UNSET) -> typing.Any: return self._data.setdefault(key, default) def __eq__(self, other: typing.Any) -> bool: + if isinstance(other, _MyMutableMapping): + return self._data == other._data try: other_model = self.__class__(other) except Exception: @@ -482,6 +538,8 @@ def _is_model(obj: typing.Any) -> bool: def _serialize(o, format: typing.Optional[str] = None): # pylint: disable=too-many-return-statements if isinstance(o, list): + if format in _ARRAY_ENCODE_MAPPING and all(isinstance(x, str) for x in o): + return _ARRAY_ENCODE_MAPPING[format].join(o) return [_serialize(x, format) for x in o] if isinstance(o, dict): return {k: _serialize(v, format) for k, v in o.items()} @@ -513,9 +571,7 @@ def _serialize(o, format: typing.Optional[str] = None): # pylint: disable=too-m return o -def _get_rest_field( - attr_to_rest_field: typing.Dict[str, "_RestField"], rest_name: str -) -> typing.Optional["_RestField"]: +def _get_rest_field(attr_to_rest_field: dict[str, "_RestField"], rest_name: str) -> typing.Optional["_RestField"]: try: return next(rf for rf in attr_to_rest_field.values() if rf._rest_name == rest_name) except StopIteration: @@ -538,65 +594,16 @@ class Model(_MyMutableMapping): _is_model = True # label whether current class's _attr_to_rest_field has been calculated # could not see _attr_to_rest_field directly because subclass inherits it from parent class - _calculated: typing.Set[str] = set() + _calculated: set[str] = set() def __init__(self, *args: typing.Any, **kwargs: typing.Any) -> None: class_name = self.__class__.__name__ if len(args) > 1: raise TypeError(f"{class_name}.__init__() takes 2 positional arguments but {len(args) + 1} were given") - dict_to_pass = { - rest_field._rest_name: rest_field._default - for rest_field in self._attr_to_rest_field.values() - if rest_field._default is not _UNSET - } - if args: # pylint: disable=too-many-nested-blocks + dict_to_pass: dict[str, typing.Any] = {} + if args: if isinstance(args[0], ET.Element): - existed_attr_keys = [] - model_meta = getattr(self, "_xml", {}) - - for rf in self._attr_to_rest_field.values(): - prop_meta = getattr(rf, "_xml", {}) - xml_name = prop_meta.get("name", rf._rest_name) - xml_ns = prop_meta.get("ns", model_meta.get("ns", None)) - if xml_ns: - xml_name = "{" + xml_ns + "}" + xml_name - - # attribute - if prop_meta.get("attribute", False) and args[0].get(xml_name) is not None: - existed_attr_keys.append(xml_name) - dict_to_pass[rf._rest_name] = _deserialize(rf._type, args[0].get(xml_name)) - continue - - # unwrapped element is array - if prop_meta.get("unwrapped", False): - # unwrapped array could either use prop items meta/prop meta - if prop_meta.get("itemsName"): - xml_name = prop_meta.get("itemsName") - xml_ns = prop_meta.get("itemNs") - if xml_ns: - xml_name = "{" + xml_ns + "}" + xml_name - items = args[0].findall(xml_name) # pyright: ignore - if len(items) > 0: - existed_attr_keys.append(xml_name) - dict_to_pass[rf._rest_name] = _deserialize(rf._type, items) - continue - - # text element is primitive type - if prop_meta.get("text", False): - if args[0].text is not None: - dict_to_pass[rf._rest_name] = _deserialize(rf._type, args[0].text) - continue - - # wrapped element could be normal property or array, it should only have one element - item = args[0].find(xml_name) - if item is not None: - existed_attr_keys.append(xml_name) - dict_to_pass[rf._rest_name] = _deserialize(rf._type, item) - - # rest thing is additional properties - for e in args[0]: - if e.tag not in existed_attr_keys: - dict_to_pass[e.tag] = _convert_element(e) + dict_to_pass.update(self._init_from_xml(args[0])) else: dict_to_pass.update( {k: _create_value(_get_rest_field(self._attr_to_rest_field, k), v) for k, v in args[0].items()} @@ -613,8 +620,79 @@ def __init__(self, *args: typing.Any, **kwargs: typing.Any) -> None: if v is not None } ) + # Apply client default values for fields the caller didn't set so that + # defaults are part of `_data` and therefore included during serialization. + for rf in self._attr_to_rest_field.values(): + if rf._default is _UNSET: + continue + if rf._rest_name in dict_to_pass: + continue + dict_to_pass[rf._rest_name] = _create_value(rf, rf._default) super().__init__(dict_to_pass) + def _init_from_xml(self, element: ET.Element) -> dict[str, typing.Any]: + """Deserialize an XML element into a dict mapping rest field names to values. + + :param ET.Element element: The XML element to deserialize from. + :returns: A dictionary of rest_name to deserialized value pairs. + :rtype: dict + """ + result: dict[str, typing.Any] = {} + model_meta = getattr(self, "_xml", {}) + existed_attr_keys: list[str] = [] + + for rf in self._attr_to_rest_field.values(): + prop_meta = getattr(rf, "_xml", {}) + xml_name = prop_meta.get("name", rf._rest_name) + xml_ns = _resolve_xml_ns(prop_meta, model_meta) + if xml_ns: + xml_name = "{" + xml_ns + "}" + xml_name + + # attribute + if prop_meta.get("attribute", False) and element.get(xml_name) is not None: + existed_attr_keys.append(xml_name) + result[rf._rest_name] = _deserialize(rf._type, element.get(xml_name)) + continue + + # unwrapped element is array + if prop_meta.get("unwrapped", False): + # unwrapped array could either use prop items meta/prop meta + _items_name = prop_meta.get("itemsName") + if _items_name: + xml_name = _items_name + _items_ns = prop_meta.get("itemsNs") + if _items_ns is not None: + xml_ns = _items_ns + if xml_ns: + xml_name = "{" + xml_ns + "}" + xml_name + items = element.findall(xml_name) # pyright: ignore + if len(items) > 0: + existed_attr_keys.append(xml_name) + result[rf._rest_name] = _deserialize(rf._type, items) + elif not rf._is_optional: + existed_attr_keys.append(xml_name) + result[rf._rest_name] = [] + continue + + # text element is primitive type + if prop_meta.get("text", False): + if element.text is not None: + result[rf._rest_name] = _deserialize(rf._type, element.text) + continue + + # wrapped element could be normal property or array, it should only have one element + item = element.find(xml_name) + if item is not None: + existed_attr_keys.append(xml_name) + result[rf._rest_name] = _deserialize(rf._type, item) + + # rest thing is additional properties + for e in element: + if e.tag not in existed_attr_keys: + result[e.tag] = _convert_element(e) + + return result + def copy(self) -> "Model": return Model(self.__dict__) @@ -623,7 +701,7 @@ def __new__(cls, *args: typing.Any, **kwargs: typing.Any) -> Self: # we know the last nine classes in mro are going to be 'Model', '_MyMutableMapping', 'MutableMapping', # 'Mapping', 'Collection', 'Sized', 'Iterable', 'Container' and 'object' mros = cls.__mro__[:-9][::-1] # ignore parents, and reverse the mro order - attr_to_rest_field: typing.Dict[str, _RestField] = { # map attribute name to rest_field property + attr_to_rest_field: dict[str, _RestField] = { # map attribute name to rest_field property k: v for mro_class in mros for k, v in mro_class.__dict__.items() if k[0] != "_" and hasattr(v, "_type") } annotations = { @@ -638,7 +716,7 @@ def __new__(cls, *args: typing.Any, **kwargs: typing.Any) -> Self: rf._type = rf._get_deserialize_callable_from_annotation(annotations.get(attr, None)) if not rf._rest_name_input: rf._rest_name_input = attr - cls._attr_to_rest_field: typing.Dict[str, _RestField] = dict(attr_to_rest_field.items()) + cls._attr_to_rest_field: dict[str, _RestField] = dict(attr_to_rest_field.items()) cls._calculated.add(f"{cls.__module__}.{cls.__qualname__}") return super().__new__(cls) @@ -667,7 +745,7 @@ def _deserialize(cls, data, exist_discriminators): model_meta = getattr(cls, "_xml", {}) prop_meta = getattr(discriminator, "_xml", {}) xml_name = prop_meta.get("name", discriminator._rest_name) - xml_ns = prop_meta.get("ns", model_meta.get("ns", None)) + xml_ns = _resolve_xml_ns(prop_meta, model_meta) if xml_ns: xml_name = "{" + xml_ns + "}" + xml_name @@ -680,7 +758,7 @@ def _deserialize(cls, data, exist_discriminators): mapped_cls = cls.__mapping__.get(discriminator_value, cls) # pyright: ignore # pylint: disable=no-member return mapped_cls._deserialize(data, exist_discriminators) - def as_dict(self, *, exclude_readonly: bool = False) -> typing.Dict[str, typing.Any]: + def as_dict(self, *, exclude_readonly: bool = False) -> dict[str, typing.Any]: """Return a dict that can be turned into json using json.dump. :keyword bool exclude_readonly: Whether to remove the readonly properties. @@ -740,7 +818,7 @@ def _deserialize_with_union(deserializers, obj): def _deserialize_dict( value_deserializer: typing.Optional[typing.Callable], module: typing.Optional[str], - obj: typing.Dict[typing.Any, typing.Any], + obj: dict[typing.Any, typing.Any], ): if obj is None: return obj @@ -750,7 +828,7 @@ def _deserialize_dict( def _deserialize_multiple_sequence( - entry_deserializers: typing.List[typing.Optional[typing.Callable]], + entry_deserializers: list[typing.Optional[typing.Callable]], module: typing.Optional[str], obj, ): @@ -759,6 +837,14 @@ def _deserialize_multiple_sequence( return type(obj)(_deserialize(deserializer, entry, module) for entry, deserializer in zip(obj, entry_deserializers)) +def _is_array_encoded_deserializer(deserializer: functools.partial) -> bool: + return ( + isinstance(deserializer, functools.partial) + and isinstance(deserializer.args[0], functools.partial) + and deserializer.args[0].func == _deserialize_array_encoded # pylint: disable=comparison-with-callable + ) + + def _deserialize_sequence( deserializer: typing.Optional[typing.Callable], module: typing.Optional[str], @@ -768,17 +854,30 @@ def _deserialize_sequence( return obj if isinstance(obj, ET.Element): obj = list(obj) + + # encoded string may be deserialized to sequence + if isinstance(obj, str) and isinstance(deserializer, functools.partial): + # for list[str] + if _is_array_encoded_deserializer(deserializer): + return deserializer(obj) + + # for list[Union[...]] + if isinstance(deserializer.args[0], list): + for sub_deserializer in deserializer.args[0]: + if _is_array_encoded_deserializer(sub_deserializer): + return sub_deserializer(obj) + return type(obj)(_deserialize(deserializer, entry, module) for entry in obj) -def _sorted_annotations(types: typing.List[typing.Any]) -> typing.List[typing.Any]: +def _sorted_annotations(types: list[typing.Any]) -> list[typing.Any]: return sorted( types, key=lambda x: hasattr(x, "__name__") and x.__name__.lower() in ("str", "float", "int", "bool"), ) -def _get_deserialize_callable_from_annotation( # pylint: disable=too-many-return-statements, too-many-branches +def _get_deserialize_callable_from_annotation( # pylint: disable=too-many-return-statements, too-many-statements, too-many-branches annotation: typing.Any, module: typing.Optional[str], rf: typing.Optional["_RestField"] = None, @@ -818,16 +917,18 @@ def _get_deserialize_callable_from_annotation( # pylint: disable=too-many-retur # is it optional? try: - if any(a for a in annotation.__args__ if a == type(None)): # pyright: ignore + if any(a is _NONE_TYPE for a in annotation.__args__): # pyright: ignore + if rf: + rf._is_optional = True if len(annotation.__args__) <= 2: # pyright: ignore if_obj_deserializer = _get_deserialize_callable_from_annotation( - next(a for a in annotation.__args__ if a != type(None)), module, rf # pyright: ignore + next(a for a in annotation.__args__ if a is not _NONE_TYPE), module, rf # pyright: ignore ) return functools.partial(_deserialize_with_optional, if_obj_deserializer) # the type is Optional[Union[...]], we need to remove the None type from the Union annotation_copy = copy.copy(annotation) - annotation_copy.__args__ = [a for a in annotation_copy.__args__ if a != type(None)] # pyright: ignore + annotation_copy.__args__ = [a for a in annotation_copy.__args__ if a is not _NONE_TYPE] # pyright: ignore return _get_deserialize_callable_from_annotation(annotation_copy, module, rf) except AttributeError: pass @@ -843,7 +944,10 @@ def _get_deserialize_callable_from_annotation( # pylint: disable=too-many-retur return functools.partial(_deserialize_with_union, deserializers) try: - if annotation._name == "Dict": # pyright: ignore + annotation_name = ( + annotation.__name__ if hasattr(annotation, "__name__") else annotation._name # pyright: ignore + ) + if annotation_name.lower() == "dict": value_deserializer = _get_deserialize_callable_from_annotation( annotation.__args__[1], module, rf # pyright: ignore ) @@ -856,7 +960,10 @@ def _get_deserialize_callable_from_annotation( # pylint: disable=too-many-retur except (AttributeError, IndexError): pass try: - if annotation._name in ["List", "Set", "Tuple", "Sequence"]: # pyright: ignore + annotation_name = ( + annotation.__name__ if hasattr(annotation, "__name__") else annotation._name # pyright: ignore + ) + if annotation_name.lower() in ["list", "set", "tuple", "sequence"]: if len(annotation.__args__) > 1: # pyright: ignore entry_deserializers = [ _get_deserialize_callable_from_annotation(dt, module, rf) @@ -905,16 +1012,20 @@ def _deserialize_with_callable( return float(value.text) if value.text else None if deserializer is bool: return value.text == "true" if value.text else None + if deserializer and deserializer in _DESERIALIZE_MAPPING.values(): + return deserializer(value.text) if value.text else None + if deserializer and deserializer in _DESERIALIZE_MAPPING_WITHFORMAT.values(): + return deserializer(value.text) if value.text else None if deserializer is None: return value if deserializer in [int, float, bool]: return deserializer(value) if isinstance(deserializer, CaseInsensitiveEnumMeta): try: - return deserializer(value) + return deserializer(value.text if isinstance(value, ET.Element) else value) except ValueError: # for unknown value, return raw value - return value + return value.text if isinstance(value, ET.Element) else value if isinstance(deserializer, type) and issubclass(deserializer, Model): return deserializer._deserialize(value, []) return typing.cast(typing.Callable[[typing.Any], typing.Any], deserializer)(value) @@ -940,14 +1051,14 @@ def _deserialize( def _failsafe_deserialize( deserializer: typing.Any, - value: typing.Any, + response: HttpResponse, module: typing.Optional[str] = None, rf: typing.Optional["_RestField"] = None, format: typing.Optional[str] = None, ) -> typing.Any: try: - return _deserialize(deserializer, value, module, rf, format) - except DeserializationError: + return _deserialize(deserializer, response.json(), module, rf, format) + except Exception: # pylint: disable=broad-except _LOGGER.warning( "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True ) @@ -956,17 +1067,18 @@ def _failsafe_deserialize( def _failsafe_deserialize_xml( deserializer: typing.Any, - value: typing.Any, + response: HttpResponse, ) -> typing.Any: try: - return _deserialize_xml(deserializer, value) - except DeserializationError: + return _deserialize_xml(deserializer, response.text()) + except Exception: # pylint: disable=broad-except _LOGGER.warning( "Ran into a deserialization error. Ignoring since this is failsafe deserialization", exc_info=True ) return None +# pylint: disable=too-many-instance-attributes class _RestField: def __init__( self, @@ -974,11 +1086,11 @@ def __init__( name: typing.Optional[str] = None, type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin is_discriminator: bool = False, - visibility: typing.Optional[typing.List[str]] = None, + visibility: typing.Optional[list[str]] = None, default: typing.Any = _UNSET, format: typing.Optional[str] = None, is_multipart_file_input: bool = False, - xml: typing.Optional[typing.Dict[str, typing.Any]] = None, + xml: typing.Optional[dict[str, typing.Any]] = None, ): self._type = type self._rest_name_input = name @@ -986,6 +1098,7 @@ def __init__( self._is_discriminator = is_discriminator self._visibility = visibility self._is_model = False + self._is_optional = False self._default = default self._format = format self._is_multipart_file_input = is_multipart_file_input @@ -993,7 +1106,11 @@ def __init__( @property def _class_type(self) -> typing.Any: - return getattr(self._type, "args", [None])[0] + result = getattr(self._type, "args", [None])[0] + # type may be wrapped by nested functools.partial so we need to check for that + if isinstance(result, functools.partial): + return getattr(result, "args", [None])[0] + return result @property def _rest_name(self) -> str: @@ -1004,14 +1121,40 @@ def _rest_name(self) -> str: def __get__(self, obj: Model, type=None): # pylint: disable=redefined-builtin # by this point, type and rest_name will have a value bc we default # them in __new__ of the Model class - item = obj.get(self._rest_name) + # Use _data.get() directly to avoid triggering __getitem__ which clears the cache + item = obj._data.get(self._rest_name, _UNSET) + if item is _UNSET: + # Field not set by user; return the client default if one exists, otherwise None + return self._default if self._default is not _UNSET else None if item is None: return item if self._is_model: return item - return _deserialize(self._type, _serialize(item, self._format), rf=self) + + # For mutable types, we want mutations to directly affect _data + # Check if we've already deserialized this value + cache_attr = f"_deserialized_{self._rest_name}" + if hasattr(obj, cache_attr): + # Return the value from _data directly (it's been deserialized in place) + return obj._data.get(self._rest_name) + + deserialized = _deserialize(self._type, _serialize(item, self._format), rf=self) + + # For mutable types, store the deserialized value back in _data + # so mutations directly affect _data + if isinstance(deserialized, (dict, list, set)): + obj._data[self._rest_name] = deserialized + object.__setattr__(obj, cache_attr, True) # Mark as deserialized + return deserialized + + return deserialized def __set__(self, obj: Model, value) -> None: + # Clear the cached deserialized object when setting a new value + cache_attr = f"_deserialized_{self._rest_name}" + if hasattr(obj, cache_attr): + object.__delattr__(obj, cache_attr) + if value is None: # we want to wipe out entries if users set attr to None try: @@ -1036,11 +1179,11 @@ def rest_field( *, name: typing.Optional[str] = None, type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin - visibility: typing.Optional[typing.List[str]] = None, + visibility: typing.Optional[list[str]] = None, default: typing.Any = _UNSET, format: typing.Optional[str] = None, is_multipart_file_input: bool = False, - xml: typing.Optional[typing.Dict[str, typing.Any]] = None, + xml: typing.Optional[dict[str, typing.Any]] = None, ) -> typing.Any: return _RestField( name=name, @@ -1057,8 +1200,8 @@ def rest_discriminator( *, name: typing.Optional[str] = None, type: typing.Optional[typing.Callable] = None, # pylint: disable=redefined-builtin - visibility: typing.Optional[typing.List[str]] = None, - xml: typing.Optional[typing.Dict[str, typing.Any]] = None, + visibility: typing.Optional[list[str]] = None, + xml: typing.Optional[dict[str, typing.Any]] = None, ) -> typing.Any: return _RestField(name=name, type=type, is_discriminator=True, visibility=visibility, xml=xml) @@ -1074,21 +1217,77 @@ def serialize_xml(model: Model, exclude_readonly: bool = False) -> str: return ET.tostring(_get_element(model, exclude_readonly), encoding="unicode") # type: ignore +def _get_xml_ns(meta: dict[str, typing.Any]) -> typing.Optional[str]: + """Return the XML namespace from a metadata dict, checking both 'ns' (old-style) and 'namespace' (DPG) keys. + + :param dict meta: The metadata dictionary to extract namespace from. + :returns: The namespace string if 'ns' or 'namespace' key is present, None otherwise. + :rtype: str or None + """ + ns = meta.get("ns") + if ns is None: + ns = meta.get("namespace") + return ns + + +def _resolve_xml_ns( + prop_meta: dict[str, typing.Any], model_meta: typing.Optional[dict[str, typing.Any]] = None +) -> typing.Optional[str]: + """Resolve XML namespace for a property, falling back to model namespace when appropriate. + + Checks the property metadata first; if no namespace is found and the model does not declare + an explicit prefix, falls back to the model-level namespace. + + :param dict prop_meta: The property metadata dictionary. + :param dict model_meta: The model metadata dictionary, used as fallback. + :returns: The resolved namespace string, or None. + :rtype: str or None + """ + ns = _get_xml_ns(prop_meta) + if ns is None and model_meta is not None and not model_meta.get("prefix"): + ns = _get_xml_ns(model_meta) + return ns + + +def _set_xml_attribute(element: ET.Element, name: str, value: typing.Any, prop_meta: dict[str, typing.Any]) -> None: + """Set an XML attribute on an element, handling namespace prefix registration. + + :param ET.Element element: The element to set the attribute on. + :param str name: The default attribute name (wire name). + :param any value: The attribute value. + :param dict prop_meta: The property metadata dictionary. + """ + xml_name = prop_meta.get("name", name) + _attr_ns = _get_xml_ns(prop_meta) + if _attr_ns: + _attr_prefix = prop_meta.get("prefix") + if _attr_prefix: + _safe_register_namespace(_attr_prefix, _attr_ns) + xml_name = "{" + _attr_ns + "}" + xml_name + element.set(xml_name, _get_primitive_type_value(value)) + + def _get_element( o: typing.Any, exclude_readonly: bool = False, - parent_meta: typing.Optional[typing.Dict[str, typing.Any]] = None, + parent_meta: typing.Optional[dict[str, typing.Any]] = None, wrapped_element: typing.Optional[ET.Element] = None, -) -> typing.Union[ET.Element, typing.List[ET.Element]]: +) -> typing.Union[ET.Element, list[ET.Element]]: if _is_model(o): model_meta = getattr(o, "_xml", {}) # if prop is a model, then use the prop element directly, else generate a wrapper of model if wrapped_element is None: + # When serializing as an array item (parent_meta is set), check if the parent has an + # explicit itemsName. This ensures correct element names for unwrapped arrays (where + # the element tag is the property/items name, not the model type name). + _items_name = parent_meta.get("itemsName") if parent_meta is not None else None + element_name = _items_name if _items_name else (model_meta.get("name") or o.__class__.__name__) + _model_ns = _get_xml_ns(model_meta) wrapped_element = _create_xml_element( - model_meta.get("name", o.__class__.__name__), + element_name, model_meta.get("prefix"), - model_meta.get("ns"), + _model_ns, ) readonly_props = [] @@ -1110,7 +1309,9 @@ def _get_element( # additional properties will not have rest field, use the wire name as xml name prop_meta = {"name": k} - # if no ns for prop, use model's + # Propagate model namespace to properties only for old-style "ns"-keyed models. + # DPG-generated models use the "namespace" key and explicitly declare namespace on + # each property that needs it, so propagation is intentionally skipped for them. if prop_meta.get("ns") is None and model_meta.get("ns"): prop_meta["ns"] = model_meta.get("ns") prop_meta["prefix"] = model_meta.get("prefix") @@ -1122,12 +1323,7 @@ def _get_element( # text could only set on primitive type wrapped_element.text = _get_primitive_type_value(v) elif prop_meta.get("attribute", False): - xml_name = prop_meta.get("name", k) - if prop_meta.get("ns"): - ET.register_namespace(prop_meta.get("prefix"), prop_meta.get("ns")) # pyright: ignore - xml_name = "{" + prop_meta.get("ns") + "}" + xml_name # pyright: ignore - # attribute should be primitive type - wrapped_element.set(xml_name, _get_primitive_type_value(v)) + _set_xml_attribute(wrapped_element, k, v, prop_meta) else: # other wrapped prop element wrapped_element.append(_get_wrapped_element(v, exclude_readonly, prop_meta)) @@ -1136,6 +1332,7 @@ def _get_element( return [_get_element(x, exclude_readonly, parent_meta) for x in o] # type: ignore if isinstance(o, dict): result = [] + _dict_ns = _get_xml_ns(parent_meta) if parent_meta else None for k, v in o.items(): result.append( _get_wrapped_element( @@ -1143,7 +1340,7 @@ def _get_element( exclude_readonly, { "name": k, - "ns": parent_meta.get("ns") if parent_meta else None, + "ns": _dict_ns, "prefix": parent_meta.get("prefix") if parent_meta else None, }, ) @@ -1152,13 +1349,16 @@ def _get_element( # primitive case need to create element based on parent_meta if parent_meta: + _items_ns = parent_meta.get("itemsNs") + if _items_ns is None: + _items_ns = _get_xml_ns(parent_meta) return _get_wrapped_element( o, exclude_readonly, { "name": parent_meta.get("itemsName", parent_meta.get("name")), "prefix": parent_meta.get("itemsPrefix", parent_meta.get("prefix")), - "ns": parent_meta.get("itemsNs", parent_meta.get("ns")), + "ns": _items_ns, }, ) @@ -1168,10 +1368,11 @@ def _get_element( def _get_wrapped_element( v: typing.Any, exclude_readonly: bool, - meta: typing.Optional[typing.Dict[str, typing.Any]], + meta: typing.Optional[dict[str, typing.Any]], ) -> ET.Element: + _meta_ns = _get_xml_ns(meta) if meta else None wrapped_element = _create_xml_element( - meta.get("name") if meta else None, meta.get("prefix") if meta else None, meta.get("ns") if meta else None + meta.get("name") if meta else None, meta.get("prefix") if meta else None, _meta_ns ) if isinstance(v, (dict, list)): wrapped_element.extend(_get_element(v, exclude_readonly, meta)) @@ -1179,7 +1380,7 @@ def _get_wrapped_element( _get_element(v, exclude_readonly, meta, wrapped_element) else: wrapped_element.text = _get_primitive_type_value(v) - return wrapped_element + return wrapped_element # type: ignore[no-any-return] def _get_primitive_type_value(v) -> str: @@ -1192,9 +1393,29 @@ def _get_primitive_type_value(v) -> str: return str(v) -def _create_xml_element(tag, prefix=None, ns=None): - if prefix and ns: +def _safe_register_namespace(prefix: str, ns: str) -> None: + """Register an XML namespace prefix, handling reserved prefix patterns. + + Some prefixes (e.g. 'ns2') match Python's reserved 'ns\\d+' pattern used for + auto-generated prefixes, causing register_namespace to raise ValueError. + Falls back to directly registering in the internal namespace map. + + :param str prefix: The namespace prefix to register. + :param str ns: The namespace URI. + """ + try: ET.register_namespace(prefix, ns) + except ValueError: + _ns_map = getattr(ET, "_namespace_map", None) + if _ns_map is not None: + _ns_map[ns] = prefix + + +def _create_xml_element( + tag: typing.Any, prefix: typing.Optional[str] = None, ns: typing.Optional[str] = None +) -> ET.Element: + if prefix and ns: + _safe_register_namespace(prefix, ns) if ns: return ET.Element("{" + ns + "}" + tag) return ET.Element(tag) @@ -1211,7 +1432,7 @@ def _deserialize_xml( def _convert_element(e: ET.Element): # dict case if len(e.attrib) > 0 or len({child.tag for child in e}) > 1: - dict_result: typing.Dict[str, typing.Any] = {} + dict_result: dict[str, typing.Any] = {} for child in e: if dict_result.get(child.tag) is not None: if isinstance(dict_result[child.tag], list): @@ -1224,7 +1445,7 @@ def _convert_element(e: ET.Element): return dict_result # array case if len(e) > 0: - array_result: typing.List[typing.Any] = [] + array_result: list[typing.Any] = [] for child in e: array_result.append(_convert_element(child)) return array_result diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_utils/serialization.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_utils/serialization.py index eb86ea23c965..954bf7ebffa7 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_utils/serialization.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_utils/serialization.py @@ -21,7 +21,6 @@ import sys import codecs from typing import ( - Dict, Any, cast, Optional, @@ -31,7 +30,6 @@ Mapping, Callable, MutableMapping, - List, ) try: @@ -41,11 +39,15 @@ import xml.etree.ElementTree as ET import isodate # type: ignore -from typing_extensions import Self from azure.core.exceptions import DeserializationError, SerializationError from azure.core.serialization import NULL as CoreNull +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self + _BOM = codecs.BOM_UTF8.decode(encoding="utf-8") JSON = MutableMapping[str, Any] @@ -229,12 +231,12 @@ class Model: serialization and deserialization. """ - _subtype_map: Dict[str, Dict[str, Any]] = {} - _attribute_map: Dict[str, Dict[str, Any]] = {} - _validation: Dict[str, Dict[str, Any]] = {} + _subtype_map: dict[str, dict[str, Any]] = {} + _attribute_map: dict[str, dict[str, Any]] = {} + _validation: dict[str, dict[str, Any]] = {} def __init__(self, **kwargs: Any) -> None: - self.additional_properties: Optional[Dict[str, Any]] = {} + self.additional_properties: Optional[dict[str, Any]] = {} for k in kwargs: # pylint: disable=consider-using-dict-items if k not in self._attribute_map: _LOGGER.warning("%s is not a known attribute of class %s and will be ignored", k, self.__class__) @@ -311,7 +313,7 @@ def serialize(self, keep_readonly: bool = False, **kwargs: Any) -> JSON: def as_dict( self, keep_readonly: bool = True, - key_transformer: Callable[[str, Dict[str, Any], Any], Any] = attribute_transformer, + key_transformer: Callable[[str, dict[str, Any], Any], Any] = attribute_transformer, **kwargs: Any ) -> JSON: """Return a dict that can be serialized using json.dump. @@ -380,7 +382,7 @@ def deserialize(cls, data: Any, content_type: Optional[str] = None) -> Self: def from_dict( cls, data: Any, - key_extractors: Optional[Callable[[str, Dict[str, Any], Any], Any]] = None, + key_extractors: Optional[Callable[[str, dict[str, Any], Any], Any]] = None, content_type: Optional[str] = None, ) -> Self: """Parse a dict using given key extractor return a model. @@ -414,7 +416,7 @@ def _flatten_subtype(cls, key, objects): return {} result = dict(cls._subtype_map[key]) for valuetype in cls._subtype_map[key].values(): - result.update(objects[valuetype]._flatten_subtype(key, objects)) # pylint: disable=protected-access + result |= objects[valuetype]._flatten_subtype(key, objects) # pylint: disable=protected-access return result @classmethod @@ -528,7 +530,7 @@ def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: "[]": self.serialize_iter, "{}": self.serialize_dict, } - self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.dependencies: dict[str, type] = dict(classes) if classes else {} self.key_transformer = full_restapi_key_transformer self.client_side_validation = True @@ -579,7 +581,7 @@ def _serialize( # pylint: disable=too-many-nested-blocks, too-many-branches, to if attr_name == "additional_properties" and attr_desc["key"] == "": if target_obj.additional_properties is not None: - serialized.update(target_obj.additional_properties) + serialized |= target_obj.additional_properties continue try: @@ -789,7 +791,7 @@ def serialize_data(self, data, data_type, **kwargs): # If dependencies is empty, try with current data class # It has to be a subclass of Enum anyway - enum_type = self.dependencies.get(data_type, data.__class__) + enum_type = self.dependencies.get(data_type, cast(type, data.__class__)) if issubclass(enum_type, Enum): return Serializer.serialize_enum(data, enum_obj=enum_type) @@ -823,13 +825,20 @@ def serialize_basic(cls, data, data_type, **kwargs): :param str data_type: Type of object in the iterable. :rtype: str, int, float, bool :return: serialized object + :raises TypeError: raise if data_type is not one of str, int, float, bool. """ custom_serializer = cls._get_custom_serializers(data_type, **kwargs) if custom_serializer: return custom_serializer(data) if data_type == "str": return cls.serialize_unicode(data) - return eval(data_type)(data) # nosec # pylint: disable=eval-used + if data_type == "int": + return int(data) + if data_type == "float": + return float(data) + if data_type == "bool": + return bool(data) + raise TypeError("Unknown basic data type: {}".format(data_type)) @classmethod def serialize_unicode(cls, data): @@ -1184,7 +1193,7 @@ def rest_key_extractor(attr, attr_desc, data): # pylint: disable=unused-argumen while "." in key: # Need the cast, as for some reasons "split" is typed as list[str | Any] - dict_keys = cast(List[str], _FLATTEN.split(key)) + dict_keys = cast(list[str], _FLATTEN.split(key)) if len(dict_keys) == 1: key = _decode_attribute_map_key(dict_keys[0]) break @@ -1386,7 +1395,7 @@ def __init__(self, classes: Optional[Mapping[str, type]] = None) -> None: "duration": (isodate.Duration, datetime.timedelta), "iso-8601": (datetime.datetime), } - self.dependencies: Dict[str, type] = dict(classes) if classes else {} + self.dependencies: dict[str, type] = dict(classes) if classes else {} self.key_extractors = [rest_key_extractor, xml_key_extractor] # Additional properties only works if the "rest_key_extractor" is used to # extract the keys. Making it to work whatever the key extractor is too much @@ -1759,7 +1768,7 @@ def deserialize_basic(self, attr, data_type): # pylint: disable=too-many-return :param str data_type: deserialization data type. :return: Deserialized basic type. :rtype: str, int, float or bool - :raises TypeError: if string format is not valid. + :raises TypeError: if string format is not valid or data_type is not one of str, int, float, bool. """ # If we're here, data is supposed to be a basic type. # If it's still an XML node, take the text @@ -1785,7 +1794,11 @@ def deserialize_basic(self, attr, data_type): # pylint: disable=too-many-return if data_type == "str": return self.deserialize_unicode(attr) - return eval(data_type)(attr) # nosec # pylint: disable=eval-used + if data_type == "int": + return int(attr) + if data_type == "float": + return float(attr) + raise TypeError("Unknown basic data type: {}".format(data_type)) @staticmethod def deserialize_unicode(data): diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_validation.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_validation.py index 752b2822f9d3..f5af3a4eb8a2 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_validation.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_validation.py @@ -10,6 +10,22 @@ def api_version_validation(**kwargs): params_added_on = kwargs.pop("params_added_on", {}) method_added_on = kwargs.pop("method_added_on", "") + api_versions_list = kwargs.pop("api_versions_list", []) + + def _index_with_default(value: str, default: int = -1) -> int: + """Get the index of value in lst, or return default if not found. + + :param value: The value to search for in the api_versions_list. + :type value: str + :param default: The default value to return if the value is not found. + :type default: int + :return: The index of the value in the list, or the default value if not found. + :rtype: int + """ + try: + return api_versions_list.index(value) + except ValueError: + return default def decorator(func): @functools.wraps(func) @@ -21,7 +37,7 @@ def wrapper(*args, **kwargs): except AttributeError: return func(*args, **kwargs) - if method_added_on > client_api_version: + if _index_with_default(method_added_on) > _index_with_default(client_api_version): raise ValueError( f"'{func.__name__}' is not available in API version " f"{client_api_version}. Pass service API version {method_added_on} or newer to your client." @@ -31,7 +47,7 @@ def wrapper(*args, **kwargs): parameter: api_version for api_version, parameters in params_added_on.items() for parameter in parameters - if parameter in kwargs and api_version > client_api_version + if parameter in kwargs and _index_with_default(api_version) > _index_with_default(client_api_version) } if unsupported: raise ValueError( diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_version.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_version.py index 0ec13ea52bbf..a1f432eddc4e 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_version.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/_version.py @@ -6,4 +6,4 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -VERSION = "1.0.0" +VERSION = "1.1.0b1" diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_client.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_client.py index 6f84cbb0a656..ff0a1fbd3eca 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_client.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_client.py @@ -7,8 +7,8 @@ # -------------------------------------------------------------------------- from copy import deepcopy +import sys from typing import Any, Awaitable, Optional, TYPE_CHECKING, cast -from typing_extensions import Self from azure.core.pipeline import policies from azure.core.rest import AsyncHttpResponse, HttpRequest @@ -27,9 +27,17 @@ Operations, ReservationsOperations, StoragePoolsOperations, + VolumeGroupsOperations, + VolumesOperations, ) +if sys.version_info >= (3, 11): + from typing import Self +else: + from typing_extensions import Self # type: ignore + if TYPE_CHECKING: + from azure.core import AzureClouds from azure.core.credentials_async import AsyncTokenCredential @@ -52,24 +60,39 @@ class PureStorageBlockMgmtClient: # pylint: disable=too-many-instance-attribute :vartype avs_vms: azure.mgmt.purestorageblock.aio.operations.AvsVmsOperations :ivar avs_vm_volumes: AvsVmVolumesOperations operations :vartype avs_vm_volumes: azure.mgmt.purestorageblock.aio.operations.AvsVmVolumesOperations + :ivar volume_groups: VolumeGroupsOperations operations + :vartype volume_groups: azure.mgmt.purestorageblock.aio.operations.VolumeGroupsOperations + :ivar volumes: VolumesOperations operations + :vartype volumes: azure.mgmt.purestorageblock.aio.operations.VolumesOperations :param credential: Credential used to authenticate requests to the service. Required. :type credential: ~azure.core.credentials_async.AsyncTokenCredential :param subscription_id: The ID of the target subscription. The value must be an UUID. Required. :type subscription_id: str :param base_url: Service host. Default value is None. :type base_url: str - :keyword api_version: The API version to use for this operation. Default value is "2024-11-01". - Note that overriding this default value may result in unsupported behavior. + :keyword cloud_setting: The cloud setting for which to get the ARM endpoint. Default value is + None. + :paramtype cloud_setting: ~azure.core.AzureClouds + :keyword api_version: The API version to use for this operation. Known values are + "2026-01-01-preview" and None. Default value is None. If not set, the operation's default API + version will be used. Note that overriding this default value may result in unsupported + behavior. :paramtype api_version: str :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. """ def __init__( - self, credential: "AsyncTokenCredential", subscription_id: str, base_url: Optional[str] = None, **kwargs: Any + self, + credential: "AsyncTokenCredential", + subscription_id: str, + base_url: Optional[str] = None, + *, + cloud_setting: Optional["AzureClouds"] = None, + **kwargs: Any ) -> None: _endpoint = "{endpoint}" - _cloud = kwargs.pop("cloud_setting", None) or settings.current.azure_cloud # type: ignore + _cloud = cloud_setting or settings.current.azure_cloud # type: ignore _endpoints = get_arm_endpoints(_cloud) if not base_url: base_url = _endpoints["resource_manager"] @@ -78,6 +101,7 @@ def __init__( credential=credential, subscription_id=subscription_id, base_url=cast(str, base_url), + cloud_setting=cloud_setting, credential_scopes=credential_scopes, **kwargs ) @@ -118,6 +142,8 @@ def __init__( ) self.avs_vms = AvsVmsOperations(self._client, self._config, self._serialize, self._deserialize) self.avs_vm_volumes = AvsVmVolumesOperations(self._client, self._config, self._serialize, self._deserialize) + self.volume_groups = VolumeGroupsOperations(self._client, self._config, self._serialize, self._deserialize) + self.volumes = VolumesOperations(self._client, self._config, self._serialize, self._deserialize) def send_request( self, request: HttpRequest, *, stream: bool = False, **kwargs: Any diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_configuration.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_configuration.py index 1bb079bdd44a..747166f84317 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_configuration.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_configuration.py @@ -6,7 +6,7 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import Any, TYPE_CHECKING +from typing import Any, Optional, TYPE_CHECKING from azure.core.pipeline import policies from azure.mgmt.core.policies import ARMHttpLoggingPolicy, AsyncARMChallengeAuthenticationPolicy @@ -14,6 +14,7 @@ from .._version import VERSION if TYPE_CHECKING: + from azure.core import AzureClouds from azure.core.credentials_async import AsyncTokenCredential @@ -29,8 +30,13 @@ class PureStorageBlockMgmtClientConfiguration: # pylint: disable=too-many-insta :type subscription_id: str :param base_url: Service host. Default value is "https://management.azure.com". :type base_url: str - :keyword api_version: The API version to use for this operation. Default value is "2024-11-01". - Note that overriding this default value may result in unsupported behavior. + :param cloud_setting: The cloud setting for which to get the ARM endpoint. Default value is + None. + :type cloud_setting: ~azure.core.AzureClouds + :keyword api_version: The API version to use for this operation. Known values are + "2026-01-01-preview" and None. Default value is None. If not set, the operation's default API + version will be used. Note that overriding this default value may result in unsupported + behavior. :paramtype api_version: str """ @@ -39,9 +45,10 @@ def __init__( credential: "AsyncTokenCredential", subscription_id: str, base_url: str = "https://management.azure.com", + cloud_setting: Optional["AzureClouds"] = None, **kwargs: Any ) -> None: - api_version: str = kwargs.pop("api_version", "2024-11-01") + api_version: str = kwargs.pop("api_version", "2026-01-01-preview") if credential is None: raise ValueError("Parameter 'credential' must not be None.") @@ -51,6 +58,7 @@ def __init__( self.credential = credential self.subscription_id = subscription_id self.base_url = base_url + self.cloud_setting = cloud_setting self.api_version = api_version self.credential_scopes = kwargs.pop("credential_scopes", ["https://management.azure.com/.default"]) kwargs.setdefault("sdk_moniker", "mgmt-purestorageblock/{}".format(VERSION)) diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_patch.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_patch.py index 8bcb627aa475..ea765788358a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_patch.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/_patch.py @@ -7,9 +7,8 @@ Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize """ -from typing import List -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level +__all__: list[str] = [] # Add all objects you want publicly available to users at this package level def patch_sdk(): diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/__init__.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/__init__.py index ba9038c4be9f..db6c31849e13 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/__init__.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/__init__.py @@ -19,6 +19,8 @@ from ._operations import AvsStorageContainerVolumesOperations # type: ignore from ._operations import AvsVmsOperations # type: ignore from ._operations import AvsVmVolumesOperations # type: ignore +from ._operations import VolumeGroupsOperations # type: ignore +from ._operations import VolumesOperations # type: ignore from ._patch import __all__ as _patch_all from ._patch import * @@ -32,6 +34,8 @@ "AvsStorageContainerVolumesOperations", "AvsVmsOperations", "AvsVmVolumesOperations", + "VolumeGroupsOperations", + "VolumesOperations", ] __all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/_operations.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/_operations.py index abecf0a7590d..16b735a26dd5 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/_operations.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/_operations.py @@ -9,7 +9,7 @@ from collections.abc import MutableMapping from io import IOBase import json -from typing import Any, AsyncIterator, Callable, Dict, IO, List, Optional, TypeVar, Union, cast, overload +from typing import Any, AsyncIterator, Callable, IO, Optional, TypeVar, Union, cast, overload import urllib.parse from azure.core import AsyncPipelineClient @@ -76,12 +76,25 @@ build_storage_pools_list_by_subscription_request, build_storage_pools_repair_avs_connection_request, build_storage_pools_update_request, + build_volume_groups_create_request, + build_volume_groups_delete_request, + build_volume_groups_get_request, + build_volume_groups_get_status_request, + build_volume_groups_list_by_storage_pool_request, + build_volume_groups_list_connection_parameters_request, + build_volume_groups_update_request, + build_volumes_create_request, + build_volumes_delete_request, + build_volumes_get_request, + build_volumes_list_by_volume_group_request, + build_volumes_update_request, ) from .._configuration import PureStorageBlockMgmtClientConfiguration T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, dict[str, Any]], Any]] JSON = MutableMapping[str, Any] +List = list class Operations: @@ -150,7 +163,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -163,7 +179,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Operation], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Operation], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -179,7 +198,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -245,6 +267,7 @@ async def get(self, resource_group_name: str, reservation_name: str, **kwargs: A } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -259,11 +282,14 @@ async def get(self, resource_group_name: str, reservation_name: str, **kwargs: A except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.Reservation, response.json()) @@ -315,6 +341,7 @@ async def _create_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -328,7 +355,10 @@ async def _create_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -338,7 +368,7 @@ async def _create_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -547,6 +577,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -560,7 +591,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -568,7 +602,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -763,6 +797,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -776,7 +811,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -784,7 +822,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -903,7 +941,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -916,7 +957,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Reservation], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Reservation], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -932,7 +976,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -988,7 +1035,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -1001,7 +1051,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Reservation], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Reservation], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -1017,7 +1070,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -1065,6 +1121,7 @@ async def get_resource_limits( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1079,11 +1136,14 @@ async def get_resource_limits( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.LimitDetails, response.json()) @@ -1104,6 +1164,7 @@ async def get_resource_limits( "accept", ] }, + api_versions_list=["2024-11-01-preview", "2024-11-01", "2026-01-01-preview"], ) async def get_billing_status( self, resource_group_name: str, reservation_name: str, **kwargs: Any @@ -1146,6 +1207,7 @@ async def get_billing_status( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1160,11 +1222,14 @@ async def get_billing_status( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.ReservationBillingStatus, response.json()) @@ -1185,6 +1250,7 @@ async def get_billing_status( "accept", ] }, + api_versions_list=["2024-11-01-preview", "2024-11-01", "2026-01-01-preview"], ) async def get_billing_report( self, resource_group_name: str, reservation_name: str, **kwargs: Any @@ -1227,6 +1293,7 @@ async def get_billing_report( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1241,11 +1308,14 @@ async def get_billing_report( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.ReservationBillingUsageReport, response.json()) @@ -1313,6 +1383,7 @@ async def get(self, resource_group_name: str, storage_pool_name: str, **kwargs: } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1327,11 +1398,14 @@ async def get(self, resource_group_name: str, storage_pool_name: str, **kwargs: except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.StoragePool, response.json()) @@ -1383,6 +1457,7 @@ async def _create_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1396,7 +1471,10 @@ async def _create_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -1406,7 +1484,7 @@ async def _create_initial( ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1615,6 +1693,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1628,7 +1707,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -1636,7 +1718,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1831,6 +1913,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1844,7 +1927,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -1852,7 +1938,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1971,7 +2057,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -1984,7 +2073,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.StoragePool], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.StoragePool], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -2000,7 +2092,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -2056,7 +2151,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -2069,7 +2167,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.StoragePool], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.StoragePool], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -2085,7 +2186,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -2133,6 +2237,7 @@ async def get_health_status( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2147,11 +2252,14 @@ async def get_health_status( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.StoragePoolHealthInfo, response.json()) @@ -2201,6 +2309,7 @@ async def get_avs_connection( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2215,11 +2324,14 @@ async def get_avs_connection( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.AvsConnection, response.json()) @@ -2269,6 +2381,7 @@ async def get_avs_status( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2283,11 +2396,14 @@ async def get_avs_status( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.AvsStatus, response.json()) @@ -2339,6 +2455,7 @@ async def _enable_avs_connection_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2352,7 +2469,10 @@ async def _enable_avs_connection_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2362,7 +2482,7 @@ async def _enable_avs_connection_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2549,6 +2669,7 @@ async def _disable_avs_connection_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2562,7 +2683,10 @@ async def _disable_avs_connection_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2572,7 +2696,7 @@ async def _disable_avs_connection_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2681,6 +2805,7 @@ async def _finalize_avs_connection_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2694,7 +2819,10 @@ async def _finalize_avs_connection_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2704,7 +2832,7 @@ async def _finalize_avs_connection_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2891,6 +3019,7 @@ async def _repair_avs_connection_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2904,7 +3033,10 @@ async def _repair_avs_connection_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2914,7 +3046,7 @@ async def _repair_avs_connection_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3045,6 +3177,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3059,11 +3192,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.AvsStorageContainer, response.json()) @@ -3102,6 +3238,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3115,7 +3252,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3123,7 +3263,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3250,7 +3390,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -3263,7 +3406,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AvsStorageContainer], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.AvsStorageContainer], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -3279,7 +3425,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -3353,6 +3502,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3366,7 +3516,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3374,7 +3527,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3624,6 +3777,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3638,11 +3792,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.AvsStorageContainerVolume, response.json()) @@ -3687,6 +3844,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3700,7 +3858,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3708,7 +3869,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3846,7 +4007,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -3859,7 +4023,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AvsStorageContainerVolume], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.AvsStorageContainerVolume], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -3875,7 +4042,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -3947,6 +4117,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3960,7 +4131,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -3968,7 +4142,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4191,6 +4365,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4205,11 +4380,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.AvsVm, response.json()) @@ -4248,6 +4426,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4261,7 +4440,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4269,7 +4451,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4395,7 +4577,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -4408,7 +4593,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AvsVm], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.AvsVm], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -4424,7 +4612,10 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response @@ -4498,6 +4689,7 @@ async def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4511,7 +4703,10 @@ async def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4519,7 +4714,7 @@ async def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4758,6 +4953,7 @@ async def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4772,11 +4968,14 @@ async def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: deserialized = _deserialize(_models.AvsVmVolume, response.json()) @@ -4816,6 +5015,7 @@ async def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4829,7 +5029,10 @@ async def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4837,7 +5040,7 @@ async def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4970,7 +5173,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -4983,7 +5189,10 @@ def prepare_request(next_link=None): async def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AvsVmVolume], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.AvsVmVolume], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, AsyncList(list_of_elem) @@ -4999,7 +5208,2106 @@ async def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + +class VolumeGroupsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.purestorageblock.aio.PureStorageBlockMgmtClient`'s + :attr:`volume_groups` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: PureStorageBlockMgmtClientConfiguration = ( + input_args.pop(0) if input_args else kwargs.pop("config") + ) + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def get( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> _models.VolumeGroup: + """Get a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :return: VolumeGroup. The VolumeGroup is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.VolumeGroup + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.VolumeGroup] = kwargs.pop("cls", None) + + _request = build_volume_groups_get_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.VolumeGroup, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def _create_initial( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: Union[_models.VolumeGroup, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncIterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_volume_groups_create_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + async def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: _models.VolumeGroup, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.VolumeGroup]: + """Create a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.purestorageblock.models.VolumeGroup + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns VolumeGroup. The VolumeGroup is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.VolumeGroup]: + """Create a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns VolumeGroup. The VolumeGroup is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.VolumeGroup]: + """Create a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param resource: Resource create parameters. Required. + :type resource: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns VolumeGroup. The VolumeGroup is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: Union[_models.VolumeGroup, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncLROPoller[_models.VolumeGroup]: + """Create a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param resource: Resource create parameters. Is one of the following types: VolumeGroup, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.purestorageblock.models.VolumeGroup or JSON or IO[bytes] + :return: An instance of AsyncLROPoller that returns VolumeGroup. The VolumeGroup is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.VolumeGroup] = kwargs.pop("cls", None) + polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + resource=resource, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + await raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.VolumeGroup, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[_models.VolumeGroup].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[_models.VolumeGroup]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def _update_initial( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + properties: Union[_models.VolumeGroupUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncIterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_volume_groups_update_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + async def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + properties: _models.VolumeGroupUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.VolumeGroup]: + """Update a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.purestorageblock.models.VolumeGroupUpdate + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns VolumeGroup. The VolumeGroup is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.VolumeGroup]: + """Update a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns VolumeGroup. The VolumeGroup is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.VolumeGroup]: + """Update a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns VolumeGroup. The VolumeGroup is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + properties: Union[_models.VolumeGroupUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncLROPoller[_models.VolumeGroup]: + """Update a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param properties: The resource properties to be updated. Is one of the following types: + VolumeGroupUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.VolumeGroupUpdate or JSON or IO[bytes] + :return: An instance of AsyncLROPoller that returns VolumeGroup. The VolumeGroup is compatible + with MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.VolumeGroup] = kwargs.pop("cls", None) + polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + properties=properties, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + await raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.VolumeGroup, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[_models.VolumeGroup].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[_models.VolumeGroup]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def _delete_initial( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> AsyncIterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + _request = build_volume_groups_delete_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def begin_delete( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> AsyncLROPoller[None]: + """Delete a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + await raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[None].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def list_by_storage_pool( + self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + ) -> AsyncItemPaged["_models.VolumeGroup"]: + """List volume groups by storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :return: An iterator like instance of VolumeGroup + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.VolumeGroup]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_volume_groups_list_by_storage_pool_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.VolumeGroup], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged(get_next, extract_data) + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def list_connection_parameters( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> _models.ConnectionParametersResponse: + """Get connection parameters for ISCSI connection to the volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :return: ConnectionParametersResponse. The ConnectionParametersResponse is compatible with + MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.ConnectionParametersResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.ConnectionParametersResponse] = kwargs.pop("cls", None) + + _request = build_volume_groups_list_connection_parameters_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.ConnectionParametersResponse, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def get_status( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> _models.VolumeGroupStatus: + """Get current status and space information of the volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :return: VolumeGroupStatus. The VolumeGroupStatus is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.VolumeGroupStatus + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.VolumeGroupStatus] = kwargs.pop("cls", None) + + _request = build_volume_groups_get_status_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.VolumeGroupStatus, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + +class VolumesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.purestorageblock.aio.PureStorageBlockMgmtClient`'s + :attr:`volumes` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: AsyncPipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: PureStorageBlockMgmtClientConfiguration = ( + input_args.pop(0) if input_args else kwargs.pop("config") + ) + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def get( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, volume_name: str, **kwargs: Any + ) -> _models.Volume: + """Get a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :return: Volume. The Volume is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.Volume + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.Volume] = kwargs.pop("cls", None) + + _request = build_volumes_get_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + volume_name=volume_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.Volume, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def _create_initial( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: Union[_models.Volume, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncIterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_volumes_create_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + volume_name=volume_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + async def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: _models.Volume, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Volume]: + """Create a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.purestorageblock.models.Volume + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Volume]: + """Create a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Volume]: + """Create a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param resource: Resource create parameters. Required. + :type resource: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: Union[_models.Volume, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncLROPoller[_models.Volume]: + """Create a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param resource: Resource create parameters. Is one of the following types: Volume, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.purestorageblock.models.Volume or JSON or IO[bytes] + :return: An instance of AsyncLROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Volume] = kwargs.pop("cls", None) + polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = await self._create_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + volume_name=volume_name, + resource=resource, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + await raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Volume, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[_models.Volume].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[_models.Volume]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def _update_initial( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + properties: Union[_models.VolumeUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncIterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_volumes_update_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + volume_name=volume_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + async def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + properties: _models.VolumeUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Volume]: + """Update a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.purestorageblock.models.VolumeUpdate + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Volume]: + """Update a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + async def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> AsyncLROPoller[_models.Volume]: + """Update a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of AsyncLROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + properties: Union[_models.VolumeUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> AsyncLROPoller[_models.Volume]: + """Update a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param properties: The resource properties to be updated. Is one of the following types: + VolumeUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.VolumeUpdate or JSON or IO[bytes] + :return: An instance of AsyncLROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Volume] = kwargs.pop("cls", None) + polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + volume_name=volume_name, + properties=properties, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + await raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Volume, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[_models.Volume].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[_models.Volume]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def _delete_initial( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, volume_name: str, **kwargs: Any + ) -> AsyncIterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[AsyncIterator[bytes]] = kwargs.pop("cls", None) + + _request = build_volumes_delete_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + volume_name=volume_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + try: + await response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace_async + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + async def begin_delete( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, volume_name: str, **kwargs: Any + ) -> AsyncLROPoller[None]: + """Delete a volume. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :return: An instance of AsyncLROPoller that returns None + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + polling: Union[bool, AsyncPollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + volume_name=volume_name, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + await raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: AsyncPollingMethod = cast( + AsyncPollingMethod, AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: + polling_method = polling + if cont_token: + return AsyncLROPoller[None].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return AsyncLROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def list_by_volume_group( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> AsyncItemPaged["_models.Volume"]: + """List volumes by volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :return: An iterator like instance of Volume + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Volume]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_volumes_list_by_volume_group_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + async def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Volume], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = await self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/_patch.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/_patch.py index 8bcb627aa475..ea765788358a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/_patch.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/aio/operations/_patch.py @@ -7,9 +7,8 @@ Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize """ -from typing import List -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level +__all__: list[str] = [] # Add all objects you want publicly available to users at this package level def patch_sdk(): diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/__init__.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/__init__.py index 594e509b97c6..6f832c9cbe38 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/__init__.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/__init__.py @@ -33,21 +33,27 @@ AvsVmVolumeUpdate, AvsVmVolumeUpdateProperties, AzureVmwareService, + AzureVolumeProperties, BandwidthUsage, BillingUsageProperty, CompanyDetails, + ConnectionParametersResponse, ErrorAdditionalInfo, ErrorDetail, ErrorResponse, HealthDetails, IopsUsage, + IscsiConnectionParameters, + IscsiEndpoint, LimitDetails, ManagedServiceIdentity, MarketplaceDetails, OfferDetails, Operation, OperationDisplay, + PerformanceParameters, PerformancePolicyLimits, + ProtectionParameters, ProtectionPolicyLimits, ProxyResource, RangeLimits, @@ -75,8 +81,16 @@ UserAssignedIdentity, UserDetails, VnetInjection, + Volume, + VolumeGroup, + VolumeGroupProperties, + VolumeGroupStatus, + VolumeGroupUpdate, + VolumeGroupUpdateProperties, VolumeLimits, VolumeProperties, + VolumeUpdate, + VolumeUpdateProperties, ) from ._enums import ( # type: ignore @@ -117,21 +131,27 @@ "AvsVmVolumeUpdate", "AvsVmVolumeUpdateProperties", "AzureVmwareService", + "AzureVolumeProperties", "BandwidthUsage", "BillingUsageProperty", "CompanyDetails", + "ConnectionParametersResponse", "ErrorAdditionalInfo", "ErrorDetail", "ErrorResponse", "HealthDetails", "IopsUsage", + "IscsiConnectionParameters", + "IscsiEndpoint", "LimitDetails", "ManagedServiceIdentity", "MarketplaceDetails", "OfferDetails", "Operation", "OperationDisplay", + "PerformanceParameters", "PerformancePolicyLimits", + "ProtectionParameters", "ProtectionPolicyLimits", "ProxyResource", "RangeLimits", @@ -159,8 +179,16 @@ "UserAssignedIdentity", "UserDetails", "VnetInjection", + "Volume", + "VolumeGroup", + "VolumeGroupProperties", + "VolumeGroupStatus", + "VolumeGroupUpdate", + "VolumeGroupUpdateProperties", "VolumeLimits", "VolumeProperties", + "VolumeUpdate", + "VolumeUpdateProperties", "ActionType", "AlertLevel", "CreatedByType", diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_enums.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_enums.py index 82a86c842482..b6a1247a8f7e 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_enums.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_enums.py @@ -23,11 +23,11 @@ class AlertLevel(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Severity level of the alert.""" INFO = "info" - """Information level""" + """Information level.""" WARNING = "warning" - """Warning level""" + """Warning level.""" ERROR = "error" - """Error level""" + """Error level.""" class CreatedByType(str, Enum, metaclass=CaseInsensitiveEnumMeta): @@ -62,13 +62,13 @@ class MarketplaceSubscriptionStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta """Marketplace subscription status.""" PENDING_FULFILLMENT_START = "PendingFulfillmentStart" - """Marketplace subscription purchased but not yet activated""" + """Marketplace subscription purchased but not yet activated.""" SUBSCRIBED = "Subscribed" - """Marketplace subscription activated""" + """Marketplace subscription activated.""" SUSPENDED = "Suspended" - """Marketplace subscription suspended due to missing customer payment""" + """Marketplace subscription suspended due to missing customer payment.""" UNSUBSCRIBED = "Unsubscribed" - """Marketplace subscription cancelled""" + """Marketplace subscription cancelled.""" class Origin(str, Enum, metaclass=CaseInsensitiveEnumMeta): @@ -94,9 +94,9 @@ class ProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): CANCELED = "Canceled" """Resource creation was canceled.""" DELETING = "Deleting" - """Deletion in progress""" + """Deletion in progress.""" ACCEPTED = "Accepted" - """Change accepted for processing""" + """Change accepted for processing.""" class ResourceProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): @@ -114,31 +114,31 @@ class UsageSeverity(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Severity levels for billing usage properties.""" ALERT = "alert" - """Indicates an alert condition""" + """Indicates an alert condition.""" INFORMATION = "information" - """Provides informational details""" + """Provides informational details.""" WARNING = "warning" - """Indicates a warning condition""" + """Indicates a warning condition.""" NONE = "none" - """Indicates no severity""" + """Indicates no severity.""" class VmType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """AVS VM storage types.""" V_VOL = "vvol" - """VM using vVols as underlying storage""" + """VM using vVols as underlying storage.""" class VolumeContainerType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Specify which control plane handles the lifecycle of the volume container.""" AVS = "avs" - """AVS/VMware""" + """AVS/VMware.""" class VolumeType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Specify which control plane handles the lifecycle of the volume.""" AVS = "avs" - """AVS/VMware""" + """AVS/VMware.""" diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_models.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_models.py index 5362edb14782..e79b6f35021f 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_models.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_models.py @@ -9,7 +9,7 @@ # pylint: disable=useless-super-delegation import datetime -from typing import Any, Dict, List, Mapping, Optional, TYPE_CHECKING, Union, overload +from typing import Any, Mapping, Optional, TYPE_CHECKING, Union, overload from .._utils.model_base import Model as _Model, rest_field @@ -849,6 +849,69 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class AzureVolumeProperties(_Model): + """Properties of an Azure volume. + + :ivar space: Storage space usage for the volume. + :vartype space: ~azure.mgmt.purestorageblock.models.Space + :ivar provisioned_size: Currently provisioned size of the volume, in bytes. + :vartype provisioned_size: int + :ivar serial_number: Serial number of the volume. + :vartype serial_number: str + :ivar created_at: Volume creation date, as an RFC 3339 timestamp. + :vartype created_at: ~datetime.datetime + :ivar source_volume_resource_id: Azure resource ID of the source volume for cloning. + :vartype source_volume_resource_id: str + :ivar source_volume_group_resource_id: Azure Resource ID of the source volume group to clone + from. + :vartype source_volume_group_resource_id: str + :ivar provisioning_state: Provisioning state of the resource. Known values are: "Succeeded", + "Failed", "Canceled", "Deleting", and "Accepted". + :vartype provisioning_state: str or ~azure.mgmt.purestorageblock.models.ProvisioningState + """ + + space: Optional["_models.Space"] = rest_field(visibility=["read"]) + """Storage space usage for the volume.""" + provisioned_size: Optional[int] = rest_field( + name="provisionedSize", visibility=["read", "create", "update", "delete", "query"] + ) + """Currently provisioned size of the volume, in bytes.""" + serial_number: Optional[str] = rest_field(name="serialNumber", visibility=["read"]) + """Serial number of the volume.""" + created_at: Optional[datetime.datetime] = rest_field(name="createdAt", visibility=["read"], format="rfc3339") + """Volume creation date, as an RFC 3339 timestamp.""" + source_volume_resource_id: Optional[str] = rest_field(name="sourceVolumeResourceId", visibility=["create"]) + """Azure resource ID of the source volume for cloning.""" + source_volume_group_resource_id: Optional[str] = rest_field( + name="sourceVolumeGroupResourceId", visibility=["create"] + ) + """Azure Resource ID of the source volume group to clone from.""" + provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = rest_field( + name="provisioningState", visibility=["read"] + ) + """Provisioning state of the resource. Known values are: \"Succeeded\", \"Failed\", \"Canceled\", + \"Deleting\", and \"Accepted\".""" + + @overload + def __init__( + self, + *, + provisioned_size: Optional[int] = None, + source_volume_resource_id: Optional[str] = None, + source_volume_group_resource_id: Optional[str] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class BandwidthUsage(_Model): """Bandwidth usage metrics. @@ -928,7 +991,7 @@ class BillingUsageProperty(_Model): name="statusMessage", visibility=["read", "create", "update", "delete", "query"] ) """Status message for the billing usage against a property.""" - sub_properties: Optional[List["_models.BillingUsageProperty"]] = rest_field( + sub_properties: Optional[list["_models.BillingUsageProperty"]] = rest_field( name="subProperties", visibility=["read", "create", "update", "delete", "query"] ) """Optional list of sub-properties providing additional details.""" @@ -943,7 +1006,7 @@ def __init__( severity: Union[str, "_models.UsageSeverity"], previous_value: Optional[str] = None, status_message: Optional[str] = None, - sub_properties: Optional[List["_models.BillingUsageProperty"]] = None, + sub_properties: Optional[list["_models.BillingUsageProperty"]] = None, ) -> None: ... @overload @@ -990,6 +1053,34 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class ConnectionParametersResponse(_Model): + """Connection parameters response. + + :ivar iscsi: ISCSI connection parameters. Required. + :vartype iscsi: ~azure.mgmt.purestorageblock.models.IscsiConnectionParameters + """ + + iscsi: "_models.IscsiConnectionParameters" = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """ISCSI connection parameters. Required.""" + + @overload + def __init__( + self, + *, + iscsi: "_models.IscsiConnectionParameters", + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class ErrorAdditionalInfo(_Model): """The resource management error additional info. @@ -1026,9 +1117,9 @@ class ErrorDetail(_Model): """The error message.""" target: Optional[str] = rest_field(visibility=["read"]) """The error target.""" - details: Optional[List["_models.ErrorDetail"]] = rest_field(visibility=["read"]) + details: Optional[list["_models.ErrorDetail"]] = rest_field(visibility=["read"]) """The error details.""" - additional_info: Optional[List["_models.ErrorAdditionalInfo"]] = rest_field( + additional_info: Optional[list["_models.ErrorAdditionalInfo"]] = rest_field( name="additionalInfo", visibility=["read"] ) """The error additional info.""" @@ -1167,6 +1258,72 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class IscsiConnectionParameters(_Model): + """ISCSI connection parameters. + + :ivar endpoints: List of ISCSI endpoints for connection. Required. + :vartype endpoints: list[~azure.mgmt.purestorageblock.models.IscsiEndpoint] + """ + + endpoints: list["_models.IscsiEndpoint"] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """List of ISCSI endpoints for connection. Required.""" + + @overload + def __init__( + self, + *, + endpoints: list["_models.IscsiEndpoint"], + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class IscsiEndpoint(_Model): + """ISCSI connection endpoint details. + + :ivar ip: IP address of the endpoint. Required. + :vartype ip: str + :ivar port: Port number of the endpoint. Required. + :vartype port: int + :ivar iqn: IQN (iSCSI Qualified Name) of the endpoint. Required. + :vartype iqn: str + """ + + ip: str = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """IP address of the endpoint. Required.""" + port: int = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """Port number of the endpoint. Required.""" + iqn: str = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """IQN (iSCSI Qualified Name) of the endpoint. Required.""" + + @overload + def __init__( + self, + *, + ip: str, + port: int, + iqn: str, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class LimitDetails(_Model): """Limits constraining certain resource properties. @@ -1244,7 +1401,7 @@ class ManagedServiceIdentity(_Model): ) """The type of managed identity assigned to this resource. Required. Known values are: \"None\", \"SystemAssigned\", \"UserAssigned\", and \"SystemAssigned,UserAssigned\".""" - user_assigned_identities: Optional[Dict[str, "_models.UserAssignedIdentity"]] = rest_field( + user_assigned_identities: Optional[dict[str, "_models.UserAssignedIdentity"]] = rest_field( name="userAssignedIdentities", visibility=["read", "create", "update", "delete", "query"] ) """The identities assigned to this resource by the user.""" @@ -1254,7 +1411,7 @@ def __init__( self, *, type: Union[str, "_models.ManagedServiceIdentityType"], - user_assigned_identities: Optional[Dict[str, "_models.UserAssignedIdentity"]] = None, + user_assigned_identities: Optional[dict[str, "_models.UserAssignedIdentity"]] = None, ) -> None: ... @overload @@ -1423,7 +1580,7 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: class OperationDisplay(_Model): - """Localized display information for and operation. + """Localized display information for an operation. :ivar provider: The localized friendly form of the resource provider name, e.g. "Microsoft Monitoring Insights" or "Microsoft Compute". @@ -1453,6 +1610,41 @@ class OperationDisplay(_Model): views.""" +class PerformanceParameters(_Model): + """Performance parameters for volume group. + + :ivar bandwidth_limit_mb_per_sec: Bandwidth limit in MB per second. + :vartype bandwidth_limit_mb_per_sec: int + :ivar iops_limit: IOPS limit. + :vartype iops_limit: int + """ + + bandwidth_limit_mb_per_sec: Optional[int] = rest_field( + name="bandwidthLimitMbPerSec", visibility=["read", "create", "update", "delete", "query"] + ) + """Bandwidth limit in MB per second.""" + iops_limit: Optional[int] = rest_field(name="iopsLimit", visibility=["read", "create", "update", "delete", "query"]) + """IOPS limit.""" + + @overload + def __init__( + self, + *, + bandwidth_limit_mb_per_sec: Optional[int] = None, + iops_limit: Optional[int] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class PerformancePolicyLimits(_Model): """internal. @@ -1490,6 +1682,39 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class ProtectionParameters(_Model): + """Protection parameters for volume group. + + :ivar retention: Retention period for snapshots in ISO 8601 duration format. + :vartype retention: ~datetime.timedelta + :ivar frequency: Snapshot frequency in ISO 8601 duration format. + :vartype frequency: ~datetime.timedelta + """ + + retention: Optional[datetime.timedelta] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """Retention period for snapshots in ISO 8601 duration format.""" + frequency: Optional[datetime.timedelta] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """Snapshot frequency in ISO 8601 duration format.""" + + @overload + def __init__( + self, + *, + retention: Optional[datetime.timedelta] = None, + frequency: Optional[datetime.timedelta] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class ProtectionPolicyLimits(_Model): """internal. @@ -1576,7 +1801,7 @@ class TrackedResource(Resource): :vartype location: str """ - tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Resource tags.""" location: str = rest_field(visibility=["read", "create"]) """The geo-location where the resource lives. Required.""" @@ -1586,7 +1811,7 @@ def __init__( self, *, location: str, - tags: Optional[Dict[str, str]] = None, + tags: Optional[dict[str, str]] = None, ) -> None: ... @overload @@ -1633,7 +1858,7 @@ def __init__( self, *, location: str, - tags: Optional[Dict[str, str]] = None, + tags: Optional[dict[str, str]] = None, properties: Optional["_models.ReservationPropertiesBaseResourceProperties"] = None, ) -> None: ... @@ -1796,7 +2021,7 @@ class ReservationBillingUsageReport(_Model): timestamp: str = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Latest formatted billing report for this reservation. Required.""" - billing_usage_properties: List["_models.BillingUsageProperty"] = rest_field( + billing_usage_properties: list["_models.BillingUsageProperty"] = rest_field( name="billingUsageProperties", visibility=["read", "create", "update", "delete", "query"] ) """A list of detailed billing usage properties. Required.""" @@ -1810,7 +2035,7 @@ def __init__( self, *, timestamp: str, - billing_usage_properties: List["_models.BillingUsageProperty"], + billing_usage_properties: list["_models.BillingUsageProperty"], overall_status_message: str, ) -> None: ... @@ -1879,7 +2104,7 @@ class ReservationUpdate(_Model): :vartype properties: ~azure.mgmt.purestorageblock.models.ReservationUpdateProperties """ - tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Resource tags.""" properties: Optional["_models.ReservationUpdateProperties"] = rest_field( visibility=["read", "create", "update", "delete", "query"] @@ -1890,7 +2115,7 @@ class ReservationUpdate(_Model): def __init__( self, *, - tags: Optional[Dict[str, str]] = None, + tags: Optional[dict[str, str]] = None, properties: Optional["_models.ReservationUpdateProperties"] = None, ) -> None: ... @@ -2146,7 +2371,7 @@ def __init__( self, *, location: str, - tags: Optional[Dict[str, str]] = None, + tags: Optional[dict[str, str]] = None, properties: Optional["_models.StoragePoolProperties"] = None, identity: Optional["_models.ManagedServiceIdentity"] = None, ) -> None: ... @@ -2241,7 +2466,7 @@ class StoragePoolHealthInfo(_Model): health: "_models.HealthDetails" = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Health metrics. Required.""" - alerts: List["_models.Alert"] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + alerts: list["_models.Alert"] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """List of health alerts. Required.""" @overload @@ -2249,7 +2474,7 @@ def __init__( self, *, health: "_models.HealthDetails", - alerts: List["_models.Alert"], + alerts: list["_models.Alert"], ) -> None: ... @overload @@ -2286,7 +2511,7 @@ class StoragePoolLimits(_Model): name="provisionedIops", visibility=["read", "create", "update", "delete", "query"] ) """Allowed provisioned IOPS range for a storage pool, as a number of operations. Required.""" - physical_availability_zones: List[str] = rest_field( + physical_availability_zones: list[str] = rest_field( name="physicalAvailabilityZones", visibility=["read", "create", "update", "delete", "query"] ) """List of physical availability zones in the region in which storage pools can be deployed; some @@ -2298,7 +2523,7 @@ def __init__( *, provisioned_bandwidth_mb_per_sec: "_models.RangeLimits", provisioned_iops: "_models.RangeLimits", - physical_availability_zones: List[str], + physical_availability_zones: list[str], ) -> None: ... @overload @@ -2400,7 +2625,7 @@ class StoragePoolUpdate(_Model): visibility=["read", "create", "update", "delete", "query"] ) """The managed service identities assigned to this resource.""" - tags: Optional[Dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) """Resource tags.""" properties: Optional["_models.StoragePoolUpdateProperties"] = rest_field( visibility=["read", "create", "update", "delete", "query"] @@ -2412,7 +2637,7 @@ def __init__( self, *, identity: Optional["_models.ManagedServiceIdentity"] = None, - tags: Optional[Dict[str, str]] = None, + tags: Optional[dict[str, str]] = None, properties: Optional["_models.StoragePoolUpdateProperties"] = None, ) -> None: ... @@ -2632,6 +2857,262 @@ def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) +class Volume(ProxyResource): + """Azure Volume resource. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.purestorageblock.models.SystemData + :ivar properties: The resource-specific properties for this resource. + :vartype properties: ~azure.mgmt.purestorageblock.models.AzureVolumeProperties + """ + + properties: Optional["_models.AzureVolumeProperties"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """The resource-specific properties for this resource.""" + + @overload + def __init__( + self, + *, + properties: Optional["_models.AzureVolumeProperties"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class VolumeGroup(TrackedResource): + """Volume Group resource. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.purestorageblock.models.SystemData + :ivar tags: Resource tags. + :vartype tags: dict[str, str] + :ivar location: The geo-location where the resource lives. Required. + :vartype location: str + :ivar properties: The resource-specific properties for this resource. + :vartype properties: ~azure.mgmt.purestorageblock.models.VolumeGroupProperties + """ + + properties: Optional["_models.VolumeGroupProperties"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """The resource-specific properties for this resource.""" + + @overload + def __init__( + self, + *, + location: str, + tags: Optional[dict[str, str]] = None, + properties: Optional["_models.VolumeGroupProperties"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class VolumeGroupProperties(_Model): + """Properties of a volume group. + + :ivar storage_pool_internal_id: Pure Storage's internal ID of the storage pool. + :vartype storage_pool_internal_id: str + :ivar volume_group_internal_id: Pure Storage's internal ID of the volume group. + :vartype volume_group_internal_id: str + :ivar source_volume_group_resource_id: Azure resource ID of the source volume group for + cloning. + :vartype source_volume_group_resource_id: str + :ivar performance_parameters: Performance parameters for the volume group. + :vartype performance_parameters: ~azure.mgmt.purestorageblock.models.PerformanceParameters + :ivar protection_parameters: Protection parameters for the volume group. + :vartype protection_parameters: ~azure.mgmt.purestorageblock.models.ProtectionParameters + :ivar provisioning_state: Provisioning state of the resource. Known values are: "Succeeded", + "Failed", "Canceled", "Deleting", and "Accepted". + :vartype provisioning_state: str or ~azure.mgmt.purestorageblock.models.ProvisioningState + """ + + storage_pool_internal_id: Optional[str] = rest_field(name="storagePoolInternalId", visibility=["read"]) + """Pure Storage's internal ID of the storage pool.""" + volume_group_internal_id: Optional[str] = rest_field(name="volumeGroupInternalId", visibility=["read"]) + """Pure Storage's internal ID of the volume group.""" + source_volume_group_resource_id: Optional[str] = rest_field( + name="sourceVolumeGroupResourceId", visibility=["create"] + ) + """Azure resource ID of the source volume group for cloning.""" + performance_parameters: Optional["_models.PerformanceParameters"] = rest_field( + name="performanceParameters", visibility=["read", "create", "update", "delete", "query"] + ) + """Performance parameters for the volume group.""" + protection_parameters: Optional["_models.ProtectionParameters"] = rest_field( + name="protectionParameters", visibility=["read", "create", "update", "delete", "query"] + ) + """Protection parameters for the volume group.""" + provisioning_state: Optional[Union[str, "_models.ProvisioningState"]] = rest_field( + name="provisioningState", visibility=["read"] + ) + """Provisioning state of the resource. Known values are: \"Succeeded\", \"Failed\", \"Canceled\", + \"Deleting\", and \"Accepted\".""" + + @overload + def __init__( + self, + *, + source_volume_group_resource_id: Optional[str] = None, + performance_parameters: Optional["_models.PerformanceParameters"] = None, + protection_parameters: Optional["_models.ProtectionParameters"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class VolumeGroupStatus(_Model): + """Volume group status information. + + :ivar space: Storage space usage for the volume group. Required. + :vartype space: ~azure.mgmt.purestorageblock.models.Space + :ivar connected_host_count: Number of hosts currently connected to the volume group. Required. + :vartype connected_host_count: int + """ + + space: "_models.Space" = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """Storage space usage for the volume group. Required.""" + connected_host_count: int = rest_field( + name="connectedHostCount", visibility=["read", "create", "update", "delete", "query"] + ) + """Number of hosts currently connected to the volume group. Required.""" + + @overload + def __init__( + self, + *, + space: "_models.Space", + connected_host_count: int, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class VolumeGroupUpdate(_Model): + """The type used for update operations of the VolumeGroup. + + :ivar tags: Resource tags. + :vartype tags: dict[str, str] + :ivar properties: The resource-specific properties for this resource. + :vartype properties: ~azure.mgmt.purestorageblock.models.VolumeGroupUpdateProperties + """ + + tags: Optional[dict[str, str]] = rest_field(visibility=["read", "create", "update", "delete", "query"]) + """Resource tags.""" + properties: Optional["_models.VolumeGroupUpdateProperties"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """The resource-specific properties for this resource.""" + + @overload + def __init__( + self, + *, + tags: Optional[dict[str, str]] = None, + properties: Optional["_models.VolumeGroupUpdateProperties"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class VolumeGroupUpdateProperties(_Model): + """The updatable properties of the VolumeGroup. + + :ivar performance_parameters: Performance parameters for the volume group. + :vartype performance_parameters: ~azure.mgmt.purestorageblock.models.PerformanceParameters + :ivar protection_parameters: Protection parameters for the volume group. + :vartype protection_parameters: ~azure.mgmt.purestorageblock.models.ProtectionParameters + """ + + performance_parameters: Optional["_models.PerformanceParameters"] = rest_field( + name="performanceParameters", visibility=["read", "create", "update", "delete", "query"] + ) + """Performance parameters for the volume group.""" + protection_parameters: Optional["_models.ProtectionParameters"] = rest_field( + name="protectionParameters", visibility=["read", "create", "update", "delete", "query"] + ) + """Protection parameters for the volume group.""" + + @overload + def __init__( + self, + *, + performance_parameters: Optional["_models.PerformanceParameters"] = None, + protection_parameters: Optional["_models.ProtectionParameters"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + class VolumeLimits(_Model): """Limits used for volumes. @@ -2734,3 +3215,63 @@ def __init__(self, mapping: Mapping[str, Any]) -> None: def __init__(self, *args: Any, **kwargs: Any) -> None: super().__init__(*args, **kwargs) + + +class VolumeUpdate(_Model): + """The type used for update operations of the Volume. + + :ivar properties: The resource-specific properties for this resource. + :vartype properties: ~azure.mgmt.purestorageblock.models.VolumeUpdateProperties + """ + + properties: Optional["_models.VolumeUpdateProperties"] = rest_field( + visibility=["read", "create", "update", "delete", "query"] + ) + """The resource-specific properties for this resource.""" + + @overload + def __init__( + self, + *, + properties: Optional["_models.VolumeUpdateProperties"] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) + + +class VolumeUpdateProperties(_Model): + """The updatable properties of the Volume. + + :ivar provisioned_size: Currently provisioned size of the volume, in bytes. + :vartype provisioned_size: int + """ + + provisioned_size: Optional[int] = rest_field( + name="provisionedSize", visibility=["read", "create", "update", "delete", "query"] + ) + """Currently provisioned size of the volume, in bytes.""" + + @overload + def __init__( + self, + *, + provisioned_size: Optional[int] = None, + ) -> None: ... + + @overload + def __init__(self, mapping: Mapping[str, Any]) -> None: + """ + :param mapping: raw JSON to initialize the model. + :type mapping: Mapping[str, Any] + """ + + def __init__(self, *args: Any, **kwargs: Any) -> None: + super().__init__(*args, **kwargs) diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_patch.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_patch.py index 8bcb627aa475..ea765788358a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_patch.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/models/_patch.py @@ -7,9 +7,8 @@ Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize """ -from typing import List -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level +__all__: list[str] = [] # Add all objects you want publicly available to users at this package level def patch_sdk(): diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/__init__.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/__init__.py index ba9038c4be9f..db6c31849e13 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/__init__.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/__init__.py @@ -19,6 +19,8 @@ from ._operations import AvsStorageContainerVolumesOperations # type: ignore from ._operations import AvsVmsOperations # type: ignore from ._operations import AvsVmVolumesOperations # type: ignore +from ._operations import VolumeGroupsOperations # type: ignore +from ._operations import VolumesOperations # type: ignore from ._patch import __all__ as _patch_all from ._patch import * @@ -32,6 +34,8 @@ "AvsStorageContainerVolumesOperations", "AvsVmsOperations", "AvsVmVolumesOperations", + "VolumeGroupsOperations", + "VolumesOperations", ] __all__.extend([p for p in _patch_all if p not in __all__]) # pyright: ignore _patch_sdk() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/_operations.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/_operations.py index f22c5e92596d..1c3c3728394a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/_operations.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/_operations.py @@ -9,7 +9,7 @@ from collections.abc import MutableMapping from io import IOBase import json -from typing import Any, Callable, Dict, IO, Iterator, List, Optional, TypeVar, Union, cast, overload +from typing import Any, Callable, IO, Iterator, Optional, TypeVar, Union, cast, overload import urllib.parse from azure.core import PipelineClient @@ -39,8 +39,9 @@ from .._validation import api_version_validation T = TypeVar("T") -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, dict[str, Any]], Any]] JSON = MutableMapping[str, Any] +List = list _SERIALIZER = Serializer() _SERIALIZER.client_side_validation = False @@ -50,7 +51,7 @@ def build_operations_list_request(**kwargs: Any) -> HttpRequest: _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -71,7 +72,7 @@ def build_reservations_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -100,7 +101,7 @@ def build_reservations_create_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -131,7 +132,7 @@ def build_reservations_update_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -158,12 +159,9 @@ def build_reservations_update_request( def build_reservations_delete_request( resource_group_name: str, reservation_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/reservations/{reservationName}" path_format_arguments = { @@ -177,10 +175,7 @@ def build_reservations_delete_request( # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) def build_reservations_list_by_resource_group_request( # pylint: disable=name-too-long @@ -189,7 +184,7 @@ def build_reservations_list_by_resource_group_request( # pylint: disable=name-t _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -216,7 +211,7 @@ def build_reservations_list_by_subscription_request( # pylint: disable=name-too _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -242,7 +237,7 @@ def build_reservations_get_resource_limits_request( # pylint: disable=name-too- _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -270,7 +265,7 @@ def build_reservations_get_billing_status_request( # pylint: disable=name-too-l _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -298,7 +293,7 @@ def build_reservations_get_billing_report_request( # pylint: disable=name-too-l _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -326,7 +321,7 @@ def build_storage_pools_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -355,7 +350,7 @@ def build_storage_pools_create_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -386,7 +381,7 @@ def build_storage_pools_update_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -413,12 +408,9 @@ def build_storage_pools_update_request( def build_storage_pools_delete_request( resource_group_name: str, storage_pool_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}" path_format_arguments = { @@ -432,10 +424,7 @@ def build_storage_pools_delete_request( # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) def build_storage_pools_list_by_resource_group_request( # pylint: disable=name-too-long @@ -444,7 +433,7 @@ def build_storage_pools_list_by_resource_group_request( # pylint: disable=name- _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -471,7 +460,7 @@ def build_storage_pools_list_by_subscription_request( # pylint: disable=name-to _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -497,7 +486,7 @@ def build_storage_pools_get_health_status_request( # pylint: disable=name-too-l _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -525,7 +514,7 @@ def build_storage_pools_get_avs_connection_request( # pylint: disable=name-too- _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -553,7 +542,7 @@ def build_storage_pools_get_avs_status_request( # pylint: disable=name-too-long _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -582,9 +571,7 @@ def build_storage_pools_enable_avs_connection_request( # pylint: disable=name-t _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/enableAvsConnection" path_format_arguments = { @@ -601,7 +588,6 @@ def build_storage_pools_enable_avs_connection_request( # pylint: disable=name-t # Construct headers if content_type is not None: _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) @@ -609,12 +595,9 @@ def build_storage_pools_enable_avs_connection_request( # pylint: disable=name-t def build_storage_pools_disable_avs_connection_request( # pylint: disable=name-too-long resource_group_name: str, storage_pool_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/disableAvsConnection" path_format_arguments = { @@ -628,10 +611,7 @@ def build_storage_pools_disable_avs_connection_request( # pylint: disable=name- # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="POST", url=_url, params=_params, **kwargs) def build_storage_pools_finalize_avs_connection_request( # pylint: disable=name-too-long @@ -641,9 +621,7 @@ def build_storage_pools_finalize_avs_connection_request( # pylint: disable=name _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/finalizeAvsConnection" path_format_arguments = { @@ -660,7 +638,6 @@ def build_storage_pools_finalize_avs_connection_request( # pylint: disable=name # Construct headers if content_type is not None: _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) @@ -668,12 +645,9 @@ def build_storage_pools_finalize_avs_connection_request( # pylint: disable=name def build_storage_pools_repair_avs_connection_request( # pylint: disable=name-too-long resource_group_name: str, storage_pool_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/repairAvsConnection" path_format_arguments = { @@ -687,10 +661,7 @@ def build_storage_pools_repair_avs_connection_request( # pylint: disable=name-t # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="POST", url=_url, params=_params, **kwargs) def build_avs_storage_containers_get_request( @@ -699,7 +670,7 @@ def build_avs_storage_containers_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -725,12 +696,9 @@ def build_avs_storage_containers_get_request( def build_avs_storage_containers_delete_request( # pylint: disable=name-too-long resource_group_name: str, storage_pool_name: str, storage_container_name: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/avsStorageContainers/{storageContainerName}" path_format_arguments = { @@ -745,10 +713,7 @@ def build_avs_storage_containers_delete_request( # pylint: disable=name-too-lon # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) def build_avs_storage_containers_list_by_storage_pool_request( # pylint: disable=name-too-long @@ -757,7 +722,7 @@ def build_avs_storage_containers_list_by_storage_pool_request( # pylint: disabl _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -791,7 +756,7 @@ def build_avs_storage_container_volumes_update_request( # pylint: disable=name- _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -828,7 +793,7 @@ def build_avs_storage_container_volumes_get_request( # pylint: disable=name-too _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -860,12 +825,9 @@ def build_avs_storage_container_volumes_delete_request( # pylint: disable=name- subscription_id: str, **kwargs: Any ) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/avsStorageContainers/{storageContainerName}/volumes/{volumeId}" path_format_arguments = { @@ -881,10 +843,7 @@ def build_avs_storage_container_volumes_delete_request( # pylint: disable=name- # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) def build_avs_storage_container_volumes_list_by_avs_storage_container_request( # pylint: disable=name-too-long @@ -893,7 +852,7 @@ def build_avs_storage_container_volumes_list_by_avs_storage_container_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -923,7 +882,7 @@ def build_avs_vms_update_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -954,7 +913,7 @@ def build_avs_vms_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -980,12 +939,9 @@ def build_avs_vms_get_request( def build_avs_vms_delete_request( resource_group_name: str, storage_pool_name: str, avs_vm_id: str, subscription_id: str, **kwargs: Any ) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/avsVms/{avsVmId}" path_format_arguments = { @@ -1000,10 +956,7 @@ def build_avs_vms_delete_request( # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) def build_avs_vms_list_by_storage_pool_request( # pylint: disable=name-too-long @@ -1012,7 +965,7 @@ def build_avs_vms_list_by_storage_pool_request( # pylint: disable=name-too-long _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1046,7 +999,7 @@ def build_avs_vm_volumes_update_request( _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1083,7 +1036,7 @@ def build_avs_vm_volumes_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1115,12 +1068,9 @@ def build_avs_vm_volumes_delete_request( subscription_id: str, **kwargs: Any ) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) - accept = _headers.pop("Accept", "application/json") - + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) # Construct URL _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/avsVms/{avsVmId}/avsVmVolumes/{volumeId}" path_format_arguments = { @@ -1136,10 +1086,7 @@ def build_avs_vm_volumes_delete_request( # Construct parameters _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - # Construct headers - _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - - return HttpRequest(method="DELETE", url=_url, params=_params, headers=_headers, **kwargs) + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) def build_avs_vm_volumes_list_by_avs_vm_request( # pylint: disable=name-too-long @@ -1148,7 +1095,7 @@ def build_avs_vm_volumes_list_by_avs_vm_request( # pylint: disable=name-too-lon _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2024-11-01")) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) accept = _headers.pop("Accept", "application/json") # Construct URL @@ -1171,201 +1118,2384 @@ def build_avs_vm_volumes_list_by_avs_vm_request( # pylint: disable=name-too-lon return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) -class Operations: - """ - .. warning:: - **DO NOT** instantiate this class directly. +def build_volume_groups_get_request( + resource_group_name: str, storage_pool_name: str, volume_group_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - Instead, you should access the following operations through - :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s - :attr:`operations` attribute. - """ + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: PureStorageBlockMgmtClientConfiguration = ( - input_args.pop(0) if input_args else kwargs.pop("config") - ) - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + } - @distributed_trace - def list(self, **kwargs: Any) -> ItemPaged["_models.Operation"]: - """List the operations for the provider. + _url: str = _url.format(**path_format_arguments) # type: ignore - :return: An iterator like instance of Operation - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.Operation] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - cls: ClsType[List[_models.Operation]] = kwargs.pop("cls", None) + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) - def prepare_request(next_link=None): - if not next_link: - _request = build_operations_list_request( - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) +def build_volume_groups_create_request( + resource_group_name: str, storage_pool_name: str, volume_group_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") - return _request + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + } - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Operation], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) + _url: str = _url.format(**path_format_arguments) # type: ignore - def get_next(next_link=None): - _request = prepare_request(next_link) + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) - return pipeline_response - return ItemPaged(get_next, extract_data) +def build_volume_groups_update_request( + resource_group_name: str, storage_pool_name: str, volume_group_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") -class ReservationsOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + } - Instead, you should access the following operations through - :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s - :attr:`reservations` attribute. - """ + _url: str = _url.format(**path_format_arguments) # type: ignore - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: PureStorageBlockMgmtClientConfiguration = ( - input_args.pop(0) if input_args else kwargs.pop("config") - ) - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") - @distributed_trace - def get(self, resource_group_name: str, reservation_name: str, **kwargs: Any) -> _models.Reservation: - """Get a reservation. + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :return: Reservation. The Reservation is compatible with MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.Reservation - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.Reservation] = kwargs.pop("cls", None) +def build_volume_groups_delete_request( + resource_group_name: str, storage_pool_name: str, volume_group_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - _request = build_reservations_get_request( - resource_group_name=resource_group_name, - reservation_name=reservation_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + } - _stream = kwargs.pop("stream", False) - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) + _url: str = _url.format(**path_format_arguments) # type: ignore - response = pipeline_response.http_response + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) + + +def build_volume_groups_list_by_storage_pool_request( # pylint: disable=name-too-long + resource_group_name: str, storage_pool_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_volume_groups_list_connection_parameters_request( # pylint: disable=name-too-long + resource_group_name: str, storage_pool_name: str, volume_group_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}/listConnectionParameters" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_volume_groups_get_status_request( + resource_group_name: str, storage_pool_name: str, volume_group_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}/getStatus" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="POST", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_volumes_get_request( + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}/volumes/{volumeName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + "volumeName": _SERIALIZER.url("volume_name", volume_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_volumes_create_request( + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}/volumes/{volumeName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + "volumeName": _SERIALIZER.url("volume_name", volume_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PUT", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_volumes_update_request( + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}/volumes/{volumeName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + "volumeName": _SERIALIZER.url("volume_name", volume_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + if content_type is not None: + _headers["Content-Type"] = _SERIALIZER.header("content_type", content_type, "str") + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="PATCH", url=_url, params=_params, headers=_headers, **kwargs) + + +def build_volumes_delete_request( + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}/volumes/{volumeName}" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + "volumeName": _SERIALIZER.url("volume_name", volume_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + return HttpRequest(method="DELETE", url=_url, params=_params, **kwargs) + + +def build_volumes_list_by_volume_group_request( # pylint: disable=name-too-long + resource_group_name: str, storage_pool_name: str, volume_group_name: str, subscription_id: str, **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version: str = kwargs.pop("api_version", _params.pop("api-version", "2026-01-01-preview")) + accept = _headers.pop("Accept", "application/json") + + # Construct URL + _url = "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/PureStorage.Block/storagePools/{storagePoolName}/volumeGroups/{volumeGroupName}/volumes" + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, "str"), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, "str"), + "storagePoolName": _SERIALIZER.url("storage_pool_name", storage_pool_name, "str"), + "volumeGroupName": _SERIALIZER.url("volume_group_name", volume_group_name, "str"), + } + + _url: str = _url.format(**path_format_arguments) # type: ignore + + # Construct parameters + _params["api-version"] = _SERIALIZER.query("api_version", api_version, "str") + + # Construct headers + _headers["Accept"] = _SERIALIZER.header("accept", accept, "str") + + return HttpRequest(method="GET", url=_url, params=_params, headers=_headers, **kwargs) + + +class Operations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s + :attr:`operations` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: PureStorageBlockMgmtClientConfiguration = ( + input_args.pop(0) if input_args else kwargs.pop("config") + ) + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def list(self, **kwargs: Any) -> ItemPaged["_models.Operation"]: + """List the operations for the provider. + + :return: An iterator like instance of Operation + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.Operation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Operation]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_operations_list_request( + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Operation], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + +class ReservationsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s + :attr:`reservations` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: PureStorageBlockMgmtClientConfiguration = ( + input_args.pop(0) if input_args else kwargs.pop("config") + ) + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def get(self, resource_group_name: str, reservation_name: str, **kwargs: Any) -> _models.Reservation: + """Get a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :return: Reservation. The Reservation is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.Reservation + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.Reservation] = kwargs.pop("cls", None) + + _request = build_reservations_get_request( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.Reservation, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + def _create_initial( + self, + resource_group_name: str, + reservation_name: str, + resource: Union[_models.Reservation, JSON, IO[bytes]], + **kwargs: Any + ) -> Iterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_reservations_create_request( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + def begin_create( + self, + resource_group_name: str, + reservation_name: str, + resource: _models.Reservation, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Reservation]: + """Create a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.purestorageblock.models.Reservation + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create( + self, + resource_group_name: str, + reservation_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Reservation]: + """Create a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create( + self, + resource_group_name: str, + reservation_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Reservation]: + """Create a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :param resource: Resource create parameters. Required. + :type resource: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def begin_create( + self, + resource_group_name: str, + reservation_name: str, + resource: Union[_models.Reservation, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.Reservation]: + """Create a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :param resource: Resource create parameters. Is one of the following types: Reservation, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.purestorageblock.models.Reservation or JSON or IO[bytes] + :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Reservation] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + resource=resource, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Reservation, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.Reservation].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.Reservation]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + def _update_initial( + self, + resource_group_name: str, + reservation_name: str, + properties: Union[_models.ReservationUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> Iterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_reservations_update_request( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + def begin_update( + self, + resource_group_name: str, + reservation_name: str, + properties: _models.ReservationUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Reservation]: + """Update a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.purestorageblock.models.ReservationUpdate + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + reservation_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Reservation]: + """Update a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + reservation_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Reservation]: + """Update a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def begin_update( + self, + resource_group_name: str, + reservation_name: str, + properties: Union[_models.ReservationUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.Reservation]: + """Update a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :param properties: The resource properties to be updated. Is one of the following types: + ReservationUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.ReservationUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Reservation] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + properties=properties, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Reservation, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.Reservation].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.Reservation]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + def _delete_initial(self, resource_group_name: str, reservation_name: str, **kwargs: Any) -> Iterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + _request = build_reservations_delete_request( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def begin_delete(self, resource_group_name: str, reservation_name: str, **kwargs: Any) -> LROPoller[None]: + """Delete a reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[None].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + @distributed_trace + def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> ItemPaged["_models.Reservation"]: + """List reservations by resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :return: An iterator like instance of Reservation + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Reservation]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_reservations_list_by_resource_group_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Reservation], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.Reservation"]: + """List reservations by Azure subscription ID. + + :return: An iterator like instance of Reservation + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.Reservation] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.Reservation]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_reservations_list_by_subscription_request( + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.Reservation], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def get_resource_limits( + self, resource_group_name: str, reservation_name: str, **kwargs: Any + ) -> _models.LimitDetails: + """Limits constraining certain resource properties. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :return: LimitDetails. The LimitDetails is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.LimitDetails + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.LimitDetails] = kwargs.pop("cls", None) + + _request = build_reservations_get_resource_limits_request( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.LimitDetails, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-11-01-preview", + params_added_on={ + "2024-11-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "reservation_name", + "accept", + ] + }, + api_versions_list=["2024-11-01-preview", "2024-11-01", "2026-01-01-preview"], + ) + def get_billing_status( + self, resource_group_name: str, reservation_name: str, **kwargs: Any + ) -> _models.ReservationBillingStatus: + """Provides various statistics about resources billed via given reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :return: ReservationBillingStatus. The ReservationBillingStatus is compatible with + MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.ReservationBillingStatus + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.ReservationBillingStatus] = kwargs.pop("cls", None) + + _request = build_reservations_get_billing_status_request( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.ReservationBillingStatus, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + @api_version_validation( + method_added_on="2024-11-01-preview", + params_added_on={ + "2024-11-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "reservation_name", + "accept", + ] + }, + api_versions_list=["2024-11-01-preview", "2024-11-01", "2026-01-01-preview"], + ) + def get_billing_report( + self, resource_group_name: str, reservation_name: str, **kwargs: Any + ) -> _models.ReservationBillingUsageReport: + """Provides a summarized report along with actions for resources billed via given reservation. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param reservation_name: Name of the reservation. Required. + :type reservation_name: str + :return: ReservationBillingUsageReport. The ReservationBillingUsageReport is compatible with + MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.ReservationBillingUsageReport + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.ReservationBillingUsageReport] = kwargs.pop("cls", None) + + _request = build_reservations_get_billing_report_request( + resource_group_name=resource_group_name, + reservation_name=reservation_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.ReservationBillingUsageReport, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + +class StoragePoolsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s + :attr:`storage_pools` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: PureStorageBlockMgmtClientConfiguration = ( + input_args.pop(0) if input_args else kwargs.pop("config") + ) + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace + def get(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) -> _models.StoragePool: + """Get a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :return: StoragePool. The StoragePool is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.StoragePool + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.StoragePool] = kwargs.pop("cls", None) + + _request = build_storage_pools_get_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.StoragePool, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + def _create_initial( + self, + resource_group_name: str, + storage_pool_name: str, + resource: Union[_models.StoragePool, JSON, IO[bytes]], + **kwargs: Any + ) -> Iterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_storage_pools_create_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + resource: _models.StoragePool, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.StoragePool]: + """Create a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.purestorageblock.models.StoragePool + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.StoragePool]: + """Create a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.StoragePool]: + """Create a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param resource: Resource create parameters. Required. + :type resource: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + resource: Union[_models.StoragePool, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.StoragePool]: + """Create a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param resource: Resource create parameters. Is one of the following types: StoragePool, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.purestorageblock.models.StoragePool or JSON or IO[bytes] + :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.StoragePool] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + resource=resource, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.StoragePool, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.StoragePool].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.StoragePool]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + def _update_initial( + self, + resource_group_name: str, + storage_pool_name: str, + properties: Union[_models.StoragePoolUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> Iterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + content_type = content_type or "application/json" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_storage_pools_update_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + subscription_id=self._config.subscription_id, + content_type=content_type, + api_version=self._config.api_version, + content=_content, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @overload + def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + properties: _models.StoragePoolUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.StoragePool]: + """Update a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolUpdate + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.StoragePool]: + """Update a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.StoragePool]: + """Update a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @distributed_trace + def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + properties: Union[_models.StoragePoolUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.StoragePool]: + """Update a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: The resource properties to be updated. Is one of the following types: + StoragePoolUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.StoragePool] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + properties=properties, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.StoragePool, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.StoragePool].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.StoragePool]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + def _delete_initial(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) -> Iterator[bytes]: + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + + _request = build_storage_pools_delete_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = True + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def begin_delete(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) -> LROPoller[None]: + """Delete a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[None].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + @distributed_trace + def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> ItemPaged["_models.StoragePool"]: + """List storage pools by resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :return: An iterator like instance of StoragePool + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.StoragePool]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_storage_pools_list_by_resource_group_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) - if response.status_code not in [200]: - if _stream: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + return _request - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.Reservation, response.json()) + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.StoragePool], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore + def get_next(next_link=None): + _request = prepare_request(next_link) - return deserialized # type: ignore + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.StoragePool"]: + """List storage pools by Azure subscription ID. + + :return: An iterator like instance of StoragePool + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.StoragePool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.StoragePool]] = kwargs.pop("cls", None) - def _create_initial( - self, - resource_group_name: str, - reservation_name: str, - resource: Union[_models.Reservation, JSON, IO[bytes]], - **kwargs: Any - ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -1374,26 +3504,111 @@ def _create_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} + def prepare_request(next_link=None): + if not next_link: - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) + _request = build_storage_pools_list_by_subscription_request( + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) - content_type = content_type or "application/json" - _content = None - if isinstance(resource, (IOBase, bytes)): - _content = resource - else: - _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) - _request = build_reservations_create_request( + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.StoragePool], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def get_health_status( + self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + ) -> _models.StoragePoolHealthInfo: + """Retrieve health metrics of a storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :return: StoragePoolHealthInfo. The StoragePoolHealthInfo is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.StoragePoolHealthInfo + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.StoragePoolHealthInfo] = kwargs.pop("cls", None) + + _request = build_storage_pools_get_health_status_request( resource_group_name=resource_group_name, - reservation_name=reservation_name, + storage_pool_name=storage_pool_name, subscription_id=self._config.subscription_id, - content_type=content_type, api_version=self._config.api_version, - content=_content, headers=_headers, params=_params, ) @@ -1402,200 +3617,184 @@ def _create_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) - _stream = True + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs ) response = pipeline_response.http_response - if response.status_code not in [200, 201]: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - response_headers = {} - if response.status_code == 201: - response_headers["Azure-AsyncOperation"] = self._deserialize( - "str", response.headers.get("Azure-AsyncOperation") + error = _failsafe_deserialize( + _models.ErrorResponse, + response, ) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - deserialized = response.iter_bytes() + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.StoragePoolHealthInfo, response.json()) if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @overload - def begin_create( - self, - resource_group_name: str, - reservation_name: str, - resource: _models.Reservation, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.Reservation]: - """Create a reservation. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :param resource: Resource create parameters. Required. - :type resource: ~azure.mgmt.purestorageblock.models.Reservation - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_create( - self, - resource_group_name: str, - reservation_name: str, - resource: JSON, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.Reservation]: - """Create a reservation. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :param resource: Resource create parameters. Required. - :type resource: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_create( - self, - resource_group_name: str, - reservation_name: str, - resource: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.Reservation]: - """Create a reservation. + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + @distributed_trace + def get_avs_connection( + self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + ) -> _models.AvsConnection: + """Returns current information about an on-going connection to an AVS instance. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :param resource: Resource create parameters. Required. - :type resource: IO[bytes] - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :return: AvsConnection. The AvsConnection is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.AvsConnection :raises ~azure.core.exceptions.HttpResponseError: """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.AvsConnection] = kwargs.pop("cls", None) + + _request = build_storage_pools_get_avs_connection_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.AvsConnection, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore @distributed_trace - def begin_create( - self, - resource_group_name: str, - reservation_name: str, - resource: Union[_models.Reservation, JSON, IO[bytes]], - **kwargs: Any - ) -> LROPoller[_models.Reservation]: - """Create a reservation. + def get_avs_status(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) -> _models.AvsStatus: + """Returns the status of the storage pool connection to AVS. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :param resource: Resource create parameters. Is one of the following types: Reservation, JSON, - IO[bytes] Required. - :type resource: ~azure.mgmt.purestorageblock.models.Reservation or JSON or IO[bytes] - :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :return: AvsStatus. The AvsStatus is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.AvsStatus :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.Reservation] = kwargs.pop("cls", None) - polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = self._create_initial( - resource_group_name=resource_group_name, - reservation_name=reservation_name, - resource=resource, - content_type=content_type, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - raw_result.http_response.read() # type: ignore - kwargs.pop("error_map", None) + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} - def get_long_running_output(pipeline_response): - response = pipeline_response.http_response - deserialized = _deserialize(_models.Reservation, response.json()) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized + cls: ClsType[_models.AvsStatus] = kwargs.pop("cls", None) + _request = build_storage_pools_get_avs_status_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), } + _request.url = self._client.format_url(_request.url, **path_format_arguments) - if polling is True: - polling_method: PollingMethod = cast( - PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, ) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - polling_method = polling - if cont_token: - return LROPoller[_models.Reservation].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return LROPoller[_models.Reservation]( - self._client, raw_result, get_long_running_output, polling_method # type: ignore - ) + deserialized = _deserialize(_models.AvsStatus, response.json()) - def _update_initial( + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + def _enable_avs_connection_initial( self, resource_group_name: str, - reservation_name: str, - properties: Union[_models.ReservationUpdate, JSON, IO[bytes]], + storage_pool_name: str, + properties: Union[_models.StoragePoolEnableAvsConnectionPost, JSON, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -1619,9 +3818,9 @@ def _update_initial( else: _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_reservations_update_request( + _request = build_storage_pools_enable_avs_connection_request( resource_group_name=resource_group_name, - reservation_name=reservation_name, + storage_pool_name=storage_pool_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -1634,6 +3833,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1641,21 +3841,26 @@ def _update_initial( response = pipeline_response.http_response - if response.status_code not in [200, 202]: + if response.status_code not in [202]: try: response.read() # Load the body in memory and close the socket except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} - if response.status_code == 202: - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1663,124 +3868,121 @@ def _update_initial( return deserialized # type: ignore @overload - def begin_update( + def begin_enable_avs_connection( self, resource_group_name: str, - reservation_name: str, - properties: _models.ReservationUpdate, + storage_pool_name: str, + properties: _models.StoragePoolEnableAvsConnectionPost, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Reservation]: - """Update a reservation. + ) -> LROPoller[None]: + """Initiate a connection between the storage pool and a specified AVS SDDC resource. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :param properties: The resource properties to be updated. Required. - :type properties: ~azure.mgmt.purestorageblock.models.ReservationUpdate + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: Storage pool EnableAvsConnection properties. Required. + :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolEnableAvsConnectionPost :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_update( + def begin_enable_avs_connection( self, resource_group_name: str, - reservation_name: str, + storage_pool_name: str, properties: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Reservation]: - """Update a reservation. + ) -> LROPoller[None]: + """Initiate a connection between the storage pool and a specified AVS SDDC resource. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :param properties: The resource properties to be updated. Required. + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: Storage pool EnableAvsConnection properties. Required. :type properties: JSON :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_update( + def begin_enable_avs_connection( self, resource_group_name: str, - reservation_name: str, + storage_pool_name: str, properties: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.Reservation]: - """Update a reservation. + ) -> LROPoller[None]: + """Initiate a connection between the storage pool and a specified AVS SDDC resource. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :param properties: The resource properties to be updated. Required. + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: Storage pool EnableAvsConnection properties. Required. :type properties: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace - def begin_update( + def begin_enable_avs_connection( self, resource_group_name: str, - reservation_name: str, - properties: Union[_models.ReservationUpdate, JSON, IO[bytes]], + storage_pool_name: str, + properties: Union[_models.StoragePoolEnableAvsConnectionPost, JSON, IO[bytes]], **kwargs: Any - ) -> LROPoller[_models.Reservation]: - """Update a reservation. + ) -> LROPoller[None]: + """Initiate a connection between the storage pool and a specified AVS SDDC resource. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :param properties: The resource properties to be updated. Is one of the following types: - ReservationUpdate, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.purestorageblock.models.ReservationUpdate or JSON or IO[bytes] - :return: An instance of LROPoller that returns Reservation. The Reservation is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Reservation] + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: Storage pool EnableAvsConnection properties. Is one of the following types: + StoragePoolEnableAvsConnectionPost, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolEnableAvsConnectionPost or + JSON or IO[bytes] + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.Reservation] = kwargs.pop("cls", None) + cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) if cont_token is None: - raw_result = self._update_initial( + raw_result = self._enable_avs_connection_initial( resource_group_name=resource_group_name, - reservation_name=reservation_name, + storage_pool_name=storage_pool_name, properties=properties, content_type=content_type, cls=lambda x, y, z: x, @@ -1791,12 +3993,9 @@ def begin_update( raw_result.http_response.read() # type: ignore kwargs.pop("error_map", None) - def get_long_running_output(pipeline_response): - response = pipeline_response.http_response - deserialized = _deserialize(_models.Reservation, response.json()) + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized + return cls(pipeline_response, None, {}) # type: ignore path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), @@ -1811,17 +4010,17 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return LROPoller[_models.Reservation].from_continuation_token( + return LROPoller[None].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[_models.Reservation]( - self._client, raw_result, get_long_running_output, polling_method # type: ignore - ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - def _delete_initial(self, resource_group_name: str, reservation_name: str, **kwargs: Any) -> Iterator[bytes]: + def _disable_avs_connection_initial( + self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -1835,9 +4034,9 @@ def _delete_initial(self, resource_group_name: str, reservation_name: str, **kwa cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_reservations_delete_request( + _request = build_storage_pools_disable_avs_connection_request( resource_group_name=resource_group_name, - reservation_name=reservation_name, + storage_pool_name=storage_pool_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -1848,6 +4047,7 @@ def _delete_initial(self, resource_group_name: str, reservation_name: str, **kwa } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -1855,21 +4055,26 @@ def _delete_initial(self, resource_group_name: str, reservation_name: str, **kwa response = pipeline_response.http_response - if response.status_code not in [202, 204]: + if response.status_code not in [202]: try: response.read() # Load the body in memory and close the socket except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} - if response.status_code == 202: - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -1877,14 +4082,16 @@ def _delete_initial(self, resource_group_name: str, reservation_name: str, **kwa return deserialized # type: ignore @distributed_trace - def begin_delete(self, resource_group_name: str, reservation_name: str, **kwargs: Any) -> LROPoller[None]: - """Delete a reservation. + def begin_disable_avs_connection( + self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + ) -> LROPoller[None]: + """Disable the existing AVS connection. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str :return: An instance of LROPoller that returns None :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -1897,9 +4104,9 @@ def begin_delete(self, resource_group_name: str, reservation_name: str, **kwargs lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) if cont_token is None: - raw_result = self._delete_initial( + raw_result = self._disable_avs_connection_initial( resource_group_name=resource_group_name, - reservation_name=reservation_name, + storage_pool_name=storage_pool_name, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -1933,193 +4140,13 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- ) return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - @distributed_trace - def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> ItemPaged["_models.Reservation"]: - """List reservations by resource group. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :return: An iterator like instance of Reservation - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.Reservation] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.Reservation]] = kwargs.pop("cls", None) - - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - _request = build_reservations_list_by_resource_group_request( - resource_group_name=resource_group_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Reservation], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - _request = prepare_request(next_link) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @distributed_trace - def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.Reservation"]: - """List reservations by Azure subscription ID. - - :return: An iterator like instance of Reservation - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.Reservation] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.Reservation]] = kwargs.pop("cls", None) - - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - _request = build_reservations_list_by_subscription_request( - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.Reservation], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - _request = prepare_request(next_link) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - @distributed_trace - def get_resource_limits( - self, resource_group_name: str, reservation_name: str, **kwargs: Any - ) -> _models.LimitDetails: - """Limits constraining certain resource properties. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :return: LimitDetails. The LimitDetails is compatible with MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.LimitDetails - :raises ~azure.core.exceptions.HttpResponseError: - """ + def _finalize_avs_connection_initial( + self, + resource_group_name: str, + storage_pool_name: str, + properties: Union[_models.StoragePoolFinalizeAvsConnectionPost, JSON, IO[bytes]], + **kwargs: Any + ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -2128,16 +4155,26 @@ def get_resource_limits( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.LimitDetails] = kwargs.pop("cls", None) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_reservations_get_resource_limits_request( + content_type = content_type or "application/json" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_storage_pools_finalize_avs_connection_request( resource_group_name=resource_group_name, - reservation_name=reservation_name, + storage_pool_name=storage_pool_name, subscription_id=self._config.subscription_id, + content_type=content_type, api_version=self._config.api_version, + content=_content, headers=_headers, params=_params, ) @@ -2146,142 +4183,194 @@ def get_resource_limits( } _request.url = self._client.format_url(_request.url, **path_format_arguments) - _stream = kwargs.pop("stream", False) + _decompress = kwargs.pop("decompress", True) + _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs ) response = pipeline_response.http_response - if response.status_code not in [200]: - if _stream: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass + if response.status_code not in [202]: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.LimitDetails, response.json()) + response_headers = {} + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore + return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore - @distributed_trace - @api_version_validation( - method_added_on="2024-11-01-preview", - params_added_on={ - "2024-11-01-preview": [ - "api_version", - "subscription_id", - "resource_group_name", - "reservation_name", - "accept", - ] - }, - ) - def get_billing_status( - self, resource_group_name: str, reservation_name: str, **kwargs: Any - ) -> _models.ReservationBillingStatus: - """Provides various statistics about resources billed via given reservation. + @overload + def begin_finalize_avs_connection( + self, + resource_group_name: str, + storage_pool_name: str, + properties: _models.StoragePoolFinalizeAvsConnectionPost, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[None]: + """Finalize an already started AVS connection to a specific AVS SDDC. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :return: ReservationBillingStatus. The ReservationBillingStatus is compatible with - MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.ReservationBillingStatus + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: Storage pool FinalizeAvsConnection properties. Required. + :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolFinalizeAvsConnectionPost + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.ReservationBillingStatus] = kwargs.pop("cls", None) + @overload + def begin_finalize_avs_connection( + self, + resource_group_name: str, + storage_pool_name: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[None]: + """Finalize an already started AVS connection to a specific AVS SDDC. - _request = build_reservations_get_billing_status_request( - resource_group_name=resource_group_name, - reservation_name=reservation_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: Storage pool FinalizeAvsConnection properties. Required. + :type properties: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ - _stream = kwargs.pop("stream", False) - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) + @overload + def begin_finalize_avs_connection( + self, + resource_group_name: str, + storage_pool_name: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[None]: + """Finalize an already started AVS connection to a specific AVS SDDC. - response = pipeline_response.http_response + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: Storage pool FinalizeAvsConnection properties. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ - if response.status_code not in [200]: - if _stream: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + @distributed_trace + def begin_finalize_avs_connection( + self, + resource_group_name: str, + storage_pool_name: str, + properties: Union[_models.StoragePoolFinalizeAvsConnectionPost, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[None]: + """Finalize an already started AVS connection to a specific AVS SDDC. - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.ReservationBillingStatus, response.json()) + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param properties: Storage pool FinalizeAvsConnection properties. Is one of the following + types: StoragePoolFinalizeAvsConnectionPost, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolFinalizeAvsConnectionPost or + JSON or IO[bytes] + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[None] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._finalize_avs_connection_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + properties=properties, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) - return deserialized # type: ignore + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore - @distributed_trace - @api_version_validation( - method_added_on="2024-11-01-preview", - params_added_on={ - "2024-11-01-preview": [ - "api_version", - "subscription_id", - "resource_group_name", - "reservation_name", - "accept", - ] - }, - ) - def get_billing_report( - self, resource_group_name: str, reservation_name: str, **kwargs: Any - ) -> _models.ReservationBillingUsageReport: - """Provides a summarized report along with actions for resources billed via given reservation. + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param reservation_name: Name of the reservation. Required. - :type reservation_name: str - :return: ReservationBillingUsageReport. The ReservationBillingUsageReport is compatible with - MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.ReservationBillingUsageReport - :raises ~azure.core.exceptions.HttpResponseError: - """ + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[None].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + def _repair_avs_connection_initial( + self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -2293,11 +4382,11 @@ def get_billing_report( _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.ReservationBillingUsageReport] = kwargs.pop("cls", None) + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_reservations_get_billing_report_request( + _request = build_storage_pools_repair_avs_connection_request( resource_group_name=resource_group_name, - reservation_name=reservation_name, + storage_pool_name=storage_pool_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -2308,42 +4397,109 @@ def get_billing_report( } _request.url = self._client.format_url(_request.url, **path_format_arguments) - _stream = kwargs.pop("stream", False) + _decompress = kwargs.pop("decompress", True) + _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs ) response = pipeline_response.http_response - if response.status_code not in [200]: - if _stream: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass + if response.status_code not in [202]: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.ReservationBillingUsageReport, response.json()) + response_headers = {} + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore + return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore + @distributed_trace + def begin_repair_avs_connection( + self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + ) -> LROPoller[None]: + """Test and repair, if needed, all configuration elements of the storage pool connection to the + AVS instance. -class StoragePoolsOperations: + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[None] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._repair_avs_connection_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) + + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + if cls: + return cls(pipeline_response, None, {}) # type: ignore + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[None].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + +class AvsStorageContainersOperations: """ .. warning:: **DO NOT** instantiate this class directly. Instead, you should access the following operations through :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s - :attr:`storage_pools` attribute. + :attr:`avs_storage_containers` attribute. """ def __init__(self, *args, **kwargs) -> None: @@ -2356,16 +4512,20 @@ def __init__(self, *args, **kwargs) -> None: self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace - def get(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) -> _models.StoragePool: - """Get a storage pool. + def get( + self, resource_group_name: str, storage_pool_name: str, storage_container_name: str, **kwargs: Any + ) -> _models.AvsStorageContainer: + """Get an AVS storage container. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :return: StoragePool. The StoragePool is compatible with MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.StoragePool + :param storage_container_name: Name of the storage container. Required. + :type storage_container_name: str + :return: AvsStorageContainer. The AvsStorageContainer is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.AvsStorageContainer :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -2379,11 +4539,12 @@ def get(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) - _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.StoragePool] = kwargs.pop("cls", None) + cls: ClsType[_models.AvsStorageContainer] = kwargs.pop("cls", None) - _request = build_storage_pools_get_request( + _request = build_avs_storage_containers_get_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + storage_container_name=storage_container_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -2394,6 +4555,7 @@ def get(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) - } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2408,25 +4570,24 @@ def get(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) - except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - deserialized = _deserialize(_models.StoragePool, response.json()) + deserialized = _deserialize(_models.AvsStorageContainer, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized # type: ignore - def _create_initial( - self, - resource_group_name: str, - storage_pool_name: str, - resource: Union[_models.StoragePool, JSON, IO[bytes]], - **kwargs: Any + def _delete_initial( + self, resource_group_name: str, storage_pool_name: str, storage_container_name: str, **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -2436,26 +4597,17 @@ def _create_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - content_type = content_type or "application/json" - _content = None - if isinstance(resource, (IOBase, bytes)): - _content = resource - else: - _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - - _request = build_storage_pools_create_request( + _request = build_avs_storage_containers_delete_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + storage_container_name=storage_container_name, subscription_id=self._config.subscription_id, - content_type=content_type, api_version=self._config.api_version, - content=_content, headers=_headers, params=_params, ) @@ -2464,6 +4616,7 @@ def _create_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2471,150 +4624,59 @@ def _create_initial( response = pipeline_response.http_response - if response.status_code not in [200, 201]: + if response.status_code not in [202, 204]: try: response.read() # Load the body in memory and close the socket except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - response_headers = {} - if response.status_code == 201: - response_headers["Azure-AsyncOperation"] = self._deserialize( - "str", response.headers.get("Azure-AsyncOperation") - ) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - - deserialized = response.iter_bytes() - - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore - - return deserialized # type: ignore - - @overload - def begin_create( - self, - resource_group_name: str, - storage_pool_name: str, - resource: _models.StoragePool, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.StoragePool]: - """Create a storage pool. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param resource: Resource create parameters. Required. - :type resource: ~azure.mgmt.purestorageblock.models.StoragePool - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_create( - self, - resource_group_name: str, - storage_pool_name: str, - resource: JSON, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.StoragePool]: - """Create a storage pool. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param resource: Resource create parameters. Required. - :type resource: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_create( - self, - resource_group_name: str, - storage_pool_name: str, - resource: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.StoragePool]: - """Create a storage pool. + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param resource: Resource create parameters. Required. - :type resource: IO[bytes] - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] - :raises ~azure.core.exceptions.HttpResponseError: - """ + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + + if cls: + return cls(pipeline_response, deserialized, response_headers) # type: ignore + + return deserialized # type: ignore @distributed_trace - def begin_create( - self, - resource_group_name: str, - storage_pool_name: str, - resource: Union[_models.StoragePool, JSON, IO[bytes]], - **kwargs: Any - ) -> LROPoller[_models.StoragePool]: - """Create a storage pool. + def begin_delete( + self, resource_group_name: str, storage_pool_name: str, storage_container_name: str, **kwargs: Any + ) -> LROPoller[None]: + """Delete an AVS storage container. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param resource: Resource create parameters. Is one of the following types: StoragePool, JSON, - IO[bytes] Required. - :type resource: ~azure.mgmt.purestorageblock.models.StoragePool or JSON or IO[bytes] - :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :param storage_container_name: Name of the storage container. Required. + :type storage_container_name: str + :return: An instance of LROPoller that returns None + :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.StoragePool] = kwargs.pop("cls", None) + cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) if cont_token is None: - raw_result = self._create_initial( + raw_result = self._delete_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - resource=resource, - content_type=content_type, + storage_container_name=storage_container_name, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -2623,12 +4685,9 @@ def begin_create( raw_result.http_response.read() # type: ignore kwargs.pop("error_map", None) - def get_long_running_output(pipeline_response): - response = pipeline_response.http_response - deserialized = _deserialize(_models.StoragePool, response.json()) + def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized + return cls(pipeline_response, None, {}) # type: ignore path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), @@ -2643,21 +4702,143 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return LROPoller[_models.StoragePool].from_continuation_token( + return LROPoller[None].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[_models.StoragePool]( - self._client, raw_result, get_long_running_output, polling_method # type: ignore + return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + + @distributed_trace + def list_by_storage_pool( + self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + ) -> ItemPaged["_models.AvsStorageContainer"]: + """List AVS storage containers by storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :return: An iterator like instance of AvsStorageContainer + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.AvsStorageContainer] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.AvsStorageContainer]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_avs_storage_containers_list_by_storage_pool_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.AvsStorageContainer], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + +class AvsStorageContainerVolumesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s + :attr:`avs_storage_container_volumes` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: PureStorageBlockMgmtClientConfiguration = ( + input_args.pop(0) if input_args else kwargs.pop("config") ) + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") def _update_initial( self, resource_group_name: str, storage_pool_name: str, - properties: Union[_models.StoragePoolUpdate, JSON, IO[bytes]], + storage_container_name: str, + volume_id: str, + properties: Union[_models.AvsStorageContainerVolumeUpdate, JSON, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -2681,9 +4862,11 @@ def _update_initial( else: _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_storage_pools_update_request( + _request = build_avs_storage_container_volumes_update_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + storage_container_name=storage_container_name, + volume_id=volume_id, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -2696,6 +4879,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2709,7 +4893,10 @@ def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2717,7 +4904,7 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2729,26 +4916,33 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, - properties: _models.StoragePoolUpdate, + storage_container_name: str, + volume_id: str, + properties: _models.AvsStorageContainerVolumeUpdate, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.StoragePool]: - """Update a storage pool. + ) -> LROPoller[_models.AvsStorageContainerVolume]: + """Update a volume in an AVS storage container. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str + :param storage_container_name: Name of the storage container. Required. + :type storage_container_name: str + :param volume_id: ID of the volume in the storage container. Required. + :type volume_id: str :param properties: The resource properties to be updated. Required. - :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolUpdate + :type properties: ~azure.mgmt.purestorageblock.models.AvsStorageContainerVolumeUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :return: An instance of LROPoller that returns AvsStorageContainerVolume. The + AvsStorageContainerVolume is compatible with MutableMapping + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2757,26 +4951,33 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, + storage_container_name: str, + volume_id: str, properties: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.StoragePool]: - """Update a storage pool. + ) -> LROPoller[_models.AvsStorageContainerVolume]: + """Update a volume in an AVS storage container. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str + :param storage_container_name: Name of the storage container. Required. + :type storage_container_name: str + :param volume_id: ID of the volume in the storage container. Required. + :type volume_id: str :param properties: The resource properties to be updated. Required. :type properties: JSON :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :return: An instance of LROPoller that returns AvsStorageContainerVolume. The + AvsStorageContainerVolume is compatible with MutableMapping + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2785,26 +4986,33 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, + storage_container_name: str, + volume_id: str, properties: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.StoragePool]: - """Update a storage pool. + ) -> LROPoller[_models.AvsStorageContainerVolume]: + """Update a volume in an AVS storage container. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str + :param storage_container_name: Name of the storage container. Required. + :type storage_container_name: str + :param volume_id: ID of the volume in the storage container. Required. + :type volume_id: str :param properties: The resource properties to be updated. Required. :type properties: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + :return: An instance of LROPoller that returns AvsStorageContainerVolume. The + AvsStorageContainerVolume is compatible with MutableMapping + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -2813,29 +5021,37 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, - properties: Union[_models.StoragePoolUpdate, JSON, IO[bytes]], + storage_container_name: str, + volume_id: str, + properties: Union[_models.AvsStorageContainerVolumeUpdate, JSON, IO[bytes]], **kwargs: Any - ) -> LROPoller[_models.StoragePool]: - """Update a storage pool. + ) -> LROPoller[_models.AvsStorageContainerVolume]: + """Update a volume in an AVS storage container. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str + :param storage_container_name: Name of the storage container. Required. + :type storage_container_name: str + :param volume_id: ID of the volume in the storage container. Required. + :type volume_id: str :param properties: The resource properties to be updated. Is one of the following types: - StoragePoolUpdate, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolUpdate or JSON or IO[bytes] - :return: An instance of LROPoller that returns StoragePool. The StoragePool is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.StoragePool] + AvsStorageContainerVolumeUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.AvsStorageContainerVolumeUpdate or JSON + or IO[bytes] + :return: An instance of LROPoller that returns AvsStorageContainerVolume. The + AvsStorageContainerVolume is compatible with MutableMapping + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.StoragePool] = kwargs.pop("cls", None) + cls: ClsType[_models.AvsStorageContainerVolume] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) @@ -2843,6 +5059,8 @@ def begin_update( raw_result = self._update_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + storage_container_name=storage_container_name, + volume_id=volume_id, properties=properties, content_type=content_type, cls=lambda x, y, z: x, @@ -2855,7 +5073,7 @@ def begin_update( def get_long_running_output(pipeline_response): response = pipeline_response.http_response - deserialized = _deserialize(_models.StoragePool, response.json()) + deserialized = _deserialize(_models.AvsStorageContainerVolume, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized @@ -2873,17 +5091,108 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return LROPoller[_models.StoragePool].from_continuation_token( + return LROPoller[_models.AvsStorageContainerVolume].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[_models.StoragePool]( + return LROPoller[_models.AvsStorageContainerVolume]( self._client, raw_result, get_long_running_output, polling_method # type: ignore ) - def _delete_initial(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) -> Iterator[bytes]: + @distributed_trace + def get( + self, + resource_group_name: str, + storage_pool_name: str, + storage_container_name: str, + volume_id: str, + **kwargs: Any + ) -> _models.AvsStorageContainerVolume: + """Get a volume in an AVS storage container. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param storage_container_name: Name of the storage container. Required. + :type storage_container_name: str + :param volume_id: ID of the volume in the storage container. Required. + :type volume_id: str + :return: AvsStorageContainerVolume. The AvsStorageContainerVolume is compatible with + MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.AvsStorageContainerVolume] = kwargs.pop("cls", None) + + _request = build_avs_storage_container_volumes_get_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + storage_container_name=storage_container_name, + volume_id=volume_id, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.AvsStorageContainerVolume, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + def _delete_initial( + self, + resource_group_name: str, + storage_pool_name: str, + storage_container_name: str, + volume_id: str, + **kwargs: Any + ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -2897,9 +5206,11 @@ def _delete_initial(self, resource_group_name: str, storage_pool_name: str, **kw cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_storage_pools_delete_request( + _request = build_avs_storage_container_volumes_delete_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + storage_container_name=storage_container_name, + volume_id=volume_id, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -2910,6 +5221,7 @@ def _delete_initial(self, resource_group_name: str, storage_pool_name: str, **kw } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -2923,7 +5235,10 @@ def _delete_initial(self, resource_group_name: str, storage_pool_name: str, **kw except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -2931,7 +5246,7 @@ def _delete_initial(self, resource_group_name: str, storage_pool_name: str, **kw response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -2939,14 +5254,25 @@ def _delete_initial(self, resource_group_name: str, storage_pool_name: str, **kw return deserialized # type: ignore @distributed_trace - def begin_delete(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) -> LROPoller[None]: - """Delete a storage pool. + def begin_delete( + self, + resource_group_name: str, + storage_pool_name: str, + storage_container_name: str, + volume_id: str, + **kwargs: Any + ) -> LROPoller[None]: + """Delete a volume in an AVS storage container. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str + :param storage_container_name: Name of the storage container. Required. + :type storage_container_name: str + :param volume_id: ID of the volume in the storage container. Required. + :type volume_id: str :return: An instance of LROPoller that returns None :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -2962,6 +5288,8 @@ def begin_delete(self, resource_group_name: str, storage_pool_name: str, **kwarg raw_result = self._delete_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + storage_container_name=storage_container_name, + volume_id=volume_id, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -2996,20 +5324,27 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore @distributed_trace - def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> ItemPaged["_models.StoragePool"]: - """List storage pools by resource group. + def list_by_avs_storage_container( + self, resource_group_name: str, storage_pool_name: str, storage_container_name: str, **kwargs: Any + ) -> ItemPaged["_models.AvsStorageContainerVolume"]: + """List volumes in an AVS storage container. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str - :return: An iterator like instance of StoragePool - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.StoragePool] + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param storage_container_name: Name of the storage container. Required. + :type storage_container_name: str + :return: An iterator like instance of AvsStorageContainerVolume + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[List[_models.StoragePool]] = kwargs.pop("cls", None) + cls: ClsType[List[_models.AvsStorageContainerVolume]] = kwargs.pop("cls", None) error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -3022,8 +5357,10 @@ def list_by_resource_group(self, resource_group_name: str, **kwargs: Any) -> Ite def prepare_request(next_link=None): if not next_link: - _request = build_storage_pools_list_by_resource_group_request( + _request = build_avs_storage_container_volumes_list_by_avs_storage_container_request( resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + storage_container_name=storage_container_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -3047,7 +5384,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -3060,7 +5400,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.StoragePool], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.AvsStorageContainerVolume], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -3076,112 +5419,44 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response return ItemPaged(get_next, extract_data) - @distributed_trace - def list_by_subscription(self, **kwargs: Any) -> ItemPaged["_models.StoragePool"]: - """List storage pools by Azure subscription ID. - - :return: An iterator like instance of StoragePool - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.StoragePool] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.StoragePool]] = kwargs.pop("cls", None) - - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - _request = build_storage_pools_list_by_subscription_request( - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.StoragePool], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - _request = prepare_request(next_link) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - return pipeline_response +class AvsVmsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. - return ItemPaged(get_next, extract_data) + Instead, you should access the following operations through + :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s + :attr:`avs_vms` attribute. + """ - @distributed_trace - def get_health_status( - self, resource_group_name: str, storage_pool_name: str, **kwargs: Any - ) -> _models.StoragePoolHealthInfo: - """Retrieve health metrics of a storage pool. + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: PureStorageBlockMgmtClientConfiguration = ( + input_args.pop(0) if input_args else kwargs.pop("config") + ) + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :return: StoragePoolHealthInfo. The StoragePoolHealthInfo is compatible with MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.StoragePoolHealthInfo - :raises ~azure.core.exceptions.HttpResponseError: - """ + def _update_initial( + self, + resource_group_name: str, + storage_pool_name: str, + avs_vm_id: str, + properties: Union[_models.AvsVmUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -3190,16 +5465,27 @@ def get_health_status( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.StoragePoolHealthInfo] = kwargs.pop("cls", None) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_storage_pools_get_health_status_request( + content_type = content_type or "application/json" + _content = None + if isinstance(properties, (IOBase, bytes)): + _content = properties + else: + _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_avs_vms_update_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, subscription_id=self._config.subscription_id, + content_type=content_type, api_version=self._config.api_version, + content=_content, headers=_headers, params=_params, ) @@ -3208,112 +5494,223 @@ def get_health_status( } _request.url = self._client.format_url(_request.url, **path_format_arguments) - _stream = kwargs.pop("stream", False) + _decompress = kwargs.pop("decompress", True) + _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs ) response = pipeline_response.http_response - if response.status_code not in [200]: - if _stream: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass + if response.status_code not in [200, 202]: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.StoragePoolHealthInfo, response.json()) + response_headers = {} + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore + return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore - @distributed_trace - def get_avs_connection( - self, resource_group_name: str, storage_pool_name: str, **kwargs: Any - ) -> _models.AvsConnection: - """Returns current information about an on-going connection to an AVS instance. + @overload + def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + avs_vm_id: str, + properties: _models.AvsVmUpdate, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.AvsVm]: + """Update an AVS VM. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :return: AvsConnection. The AvsConnection is compatible with MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.AvsConnection + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.purestorageblock.models.AvsVmUpdate + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns AvsVm. The AvsVm is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVm] :raises ~azure.core.exceptions.HttpResponseError: """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} + @overload + def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + avs_vm_id: str, + properties: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.AvsVm]: + """Update an AVS VM. - cls: ClsType[_models.AvsConnection] = kwargs.pop("cls", None) + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param properties: The resource properties to be updated. Required. + :type properties: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns AvsVm. The AvsVm is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVm] + :raises ~azure.core.exceptions.HttpResponseError: + """ - _request = build_storage_pools_get_avs_connection_request( - resource_group_name=resource_group_name, - storage_pool_name=storage_pool_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) + @overload + def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + avs_vm_id: str, + properties: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.AvsVm]: + """Update an AVS VM. - _stream = kwargs.pop("stream", False) - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param properties: The resource properties to be updated. Required. + :type properties: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns AvsVm. The AvsVm is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVm] + :raises ~azure.core.exceptions.HttpResponseError: + """ - response = pipeline_response.http_response + @distributed_trace + def begin_update( + self, + resource_group_name: str, + storage_pool_name: str, + avs_vm_id: str, + properties: Union[_models.AvsVmUpdate, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.AvsVm]: + """Update an AVS VM. - if response.status_code not in [200]: - if _stream: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param properties: The resource properties to be updated. Is one of the following types: + AvsVmUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.AvsVmUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns AvsVm. The AvsVm is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVm] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.AvsConnection, response.json()) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.AvsVm] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, + properties=properties, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.AvsVm, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized - return deserialized # type: ignore + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.AvsVm].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.AvsVm]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) @distributed_trace - def get_avs_status(self, resource_group_name: str, storage_pool_name: str, **kwargs: Any) -> _models.AvsStatus: - """Returns the status of the storage pool connection to AVS. + def get(self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, **kwargs: Any) -> _models.AvsVm: + """Get an AVS VM. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :return: AvsStatus. The AvsStatus is compatible with MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.AvsStatus + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :return: AvsVm. The AvsVm is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.AvsVm :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -3327,11 +5724,12 @@ def get_avs_status(self, resource_group_name: str, storage_pool_name: str, **kwa _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.AvsStatus] = kwargs.pop("cls", None) + cls: ClsType[_models.AvsVm] = kwargs.pop("cls", None) - _request = build_storage_pools_get_avs_status_request( + _request = build_avs_vms_get_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -3342,6 +5740,7 @@ def get_avs_status(self, resource_group_name: str, storage_pool_name: str, **kwa } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3356,25 +5755,24 @@ def get_avs_status(self, resource_group_name: str, storage_pool_name: str, **kwa except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - deserialized = _deserialize(_models.AvsStatus, response.json()) + deserialized = _deserialize(_models.AvsVm, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized # type: ignore - def _enable_avs_connection_initial( - self, - resource_group_name: str, - storage_pool_name: str, - properties: Union[_models.StoragePoolEnableAvsConnectionPost, JSON, IO[bytes]], - **kwargs: Any + def _delete_initial( + self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -3384,26 +5782,17 @@ def _enable_avs_connection_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - content_type = content_type or "application/json" - _content = None - if isinstance(properties, (IOBase, bytes)): - _content = properties - else: - _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - - _request = build_storage_pools_enable_avs_connection_request( + _request = build_avs_vms_delete_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, subscription_id=self._config.subscription_id, - content_type=content_type, api_version=self._config.api_version, - content=_content, headers=_headers, params=_params, ) @@ -3412,6 +5801,7 @@ def _enable_avs_connection_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3419,147 +5809,59 @@ def _enable_avs_connection_initial( response = pipeline_response.http_response - if response.status_code not in [202]: + if response.status_code not in [202, 204]: try: response.read() # Load the body in memory and close the socket except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} - response_headers["Azure-AsyncOperation"] = self._deserialize( - "str", response.headers.get("Azure-AsyncOperation") - ) - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore - @overload - def begin_enable_avs_connection( - self, - resource_group_name: str, - storage_pool_name: str, - properties: _models.StoragePoolEnableAvsConnectionPost, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[None]: - """Initiate a connection between the storage pool and a specified AVS SDDC resource. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param properties: Storage pool EnableAvsConnection properties. Required. - :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolEnableAvsConnectionPost - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_enable_avs_connection( - self, - resource_group_name: str, - storage_pool_name: str, - properties: JSON, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[None]: - """Initiate a connection between the storage pool and a specified AVS SDDC resource. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param properties: Storage pool EnableAvsConnection properties. Required. - :type properties: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_enable_avs_connection( - self, - resource_group_name: str, - storage_pool_name: str, - properties: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[None]: - """Initiate a connection between the storage pool and a specified AVS SDDC resource. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param properties: Storage pool EnableAvsConnection properties. Required. - :type properties: IO[bytes] - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: - """ - @distributed_trace - def begin_enable_avs_connection( - self, - resource_group_name: str, - storage_pool_name: str, - properties: Union[_models.StoragePoolEnableAvsConnectionPost, JSON, IO[bytes]], - **kwargs: Any + def begin_delete( + self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, **kwargs: Any ) -> LROPoller[None]: - """Initiate a connection between the storage pool and a specified AVS SDDC resource. + """Delete an AVS VM. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param properties: Storage pool EnableAvsConnection properties. Is one of the following types: - StoragePoolEnableAvsConnectionPost, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolEnableAvsConnectionPost or - JSON or IO[bytes] + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str :return: An instance of LROPoller that returns None :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[None] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) if cont_token is None: - raw_result = self._enable_avs_connection_initial( + raw_result = self._delete_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - properties=properties, - content_type=content_type, + avs_vm_id=avs_vm_id, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -3593,9 +5895,26 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- ) return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - def _disable_avs_connection_initial( + @distributed_trace + def list_by_storage_pool( self, resource_group_name: str, storage_pool_name: str, **kwargs: Any - ) -> Iterator[bytes]: + ) -> ItemPaged["_models.AvsVm"]: + """List AVS VMs by storage pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :return: An iterator like instance of AvsVm + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.AvsVm] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.AvsVm]] = kwargs.pop("cls", None) + error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, @@ -3604,118 +5923,107 @@ def _disable_avs_connection_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - - _request = build_storage_pools_disable_avs_connection_request( - resource_group_name=resource_group_name, - storage_pool_name=storage_pool_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - _stream = True - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response + def prepare_request(next_link=None): + if not next_link: - if response.status_code not in [202]: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + _request = build_avs_vms_list_by_storage_pool_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) - response_headers = {} - response_headers["Azure-AsyncOperation"] = self._deserialize( - "str", response.headers.get("Azure-AsyncOperation") - ) - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) - deserialized = response.iter_bytes() + return _request - if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.AvsVm], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) - return deserialized # type: ignore + def get_next(next_link=None): + _request = prepare_request(next_link) - @distributed_trace - def begin_disable_avs_connection( - self, resource_group_name: str, storage_pool_name: str, **kwargs: Any - ) -> LROPoller[None]: - """Disable the existing AVS connection. + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - cls: ClsType[None] = kwargs.pop("cls", None) - polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = self._disable_avs_connection_initial( - resource_group_name=resource_group_name, - storage_pool_name=storage_pool_name, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - raw_result.http_response.read() # type: ignore - kwargs.pop("error_map", None) + return pipeline_response - def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements - if cls: - return cls(pipeline_response, None, {}) # type: ignore + return ItemPaged(get_next, extract_data) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - if polling is True: - polling_method: PollingMethod = cast( - PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) - ) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) - else: - polling_method = polling - if cont_token: - return LROPoller[None].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore +class AvsVmVolumesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. - def _finalize_avs_connection_initial( + Instead, you should access the following operations through + :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s + :attr:`avs_vm_volumes` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: PureStorageBlockMgmtClientConfiguration = ( + input_args.pop(0) if input_args else kwargs.pop("config") + ) + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + def _update_initial( self, resource_group_name: str, storage_pool_name: str, - properties: Union[_models.StoragePoolFinalizeAvsConnectionPost, JSON, IO[bytes]], + avs_vm_id: str, + volume_id: str, + properties: Union[_models.AvsVmVolumeUpdate, JSON, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -3739,9 +6047,11 @@ def _finalize_avs_connection_initial( else: _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_storage_pools_finalize_avs_connection_request( + _request = build_avs_vm_volumes_update_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, + volume_id=volume_id, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -3754,6 +6064,7 @@ def _finalize_avs_connection_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3761,23 +6072,24 @@ def _finalize_avs_connection_initial( response = pipeline_response.http_response - if response.status_code not in [202]: + if response.status_code not in [200, 202]: try: response.read() # Load the body in memory and close the socket except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} - response_headers["Azure-AsyncOperation"] = self._deserialize( - "str", response.headers.get("Azure-AsyncOperation") - ) - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3785,121 +6097,150 @@ def _finalize_avs_connection_initial( return deserialized # type: ignore @overload - def begin_finalize_avs_connection( + def begin_update( self, resource_group_name: str, storage_pool_name: str, - properties: _models.StoragePoolFinalizeAvsConnectionPost, + avs_vm_id: str, + volume_id: str, + properties: _models.AvsVmVolumeUpdate, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[None]: - """Finalize an already started AVS connection to a specific AVS SDDC. + ) -> LROPoller[_models.AvsVmVolume]: + """Update a volume in an AVS VM. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param properties: Storage pool FinalizeAvsConnection properties. Required. - :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolFinalizeAvsConnectionPost + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param volume_id: ID of the volume in the AVS VM. Required. + :type volume_id: str + :param properties: The resource properties to be updated. Required. + :type properties: ~azure.mgmt.purestorageblock.models.AvsVmVolumeUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] + :return: An instance of LROPoller that returns AvsVmVolume. The AvsVmVolume is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVmVolume] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_finalize_avs_connection( + def begin_update( self, resource_group_name: str, storage_pool_name: str, + avs_vm_id: str, + volume_id: str, properties: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[None]: - """Finalize an already started AVS connection to a specific AVS SDDC. + ) -> LROPoller[_models.AvsVmVolume]: + """Update a volume in an AVS VM. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param properties: Storage pool FinalizeAvsConnection properties. Required. + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param volume_id: ID of the volume in the AVS VM. Required. + :type volume_id: str + :param properties: The resource properties to be updated. Required. :type properties: JSON :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] + :return: An instance of LROPoller that returns AvsVmVolume. The AvsVmVolume is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVmVolume] :raises ~azure.core.exceptions.HttpResponseError: """ @overload - def begin_finalize_avs_connection( + def begin_update( self, resource_group_name: str, storage_pool_name: str, + avs_vm_id: str, + volume_id: str, properties: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[None]: - """Finalize an already started AVS connection to a specific AVS SDDC. + ) -> LROPoller[_models.AvsVmVolume]: + """Update a volume in an AVS VM. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param properties: Storage pool FinalizeAvsConnection properties. Required. + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param volume_id: ID of the volume in the AVS VM. Required. + :type volume_id: str + :param properties: The resource properties to be updated. Required. :type properties: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] + :return: An instance of LROPoller that returns AvsVmVolume. The AvsVmVolume is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVmVolume] :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace - def begin_finalize_avs_connection( + def begin_update( self, resource_group_name: str, storage_pool_name: str, - properties: Union[_models.StoragePoolFinalizeAvsConnectionPost, JSON, IO[bytes]], + avs_vm_id: str, + volume_id: str, + properties: Union[_models.AvsVmVolumeUpdate, JSON, IO[bytes]], **kwargs: Any - ) -> LROPoller[None]: - """Finalize an already started AVS connection to a specific AVS SDDC. + ) -> LROPoller[_models.AvsVmVolume]: + """Update a volume in an AVS VM. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param properties: Storage pool FinalizeAvsConnection properties. Is one of the following - types: StoragePoolFinalizeAvsConnectionPost, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.purestorageblock.models.StoragePoolFinalizeAvsConnectionPost or - JSON or IO[bytes] - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param volume_id: ID of the volume in the AVS VM. Required. + :type volume_id: str + :param properties: The resource properties to be updated. Is one of the following types: + AvsVmVolumeUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.AvsVmVolumeUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns AvsVmVolume. The AvsVmVolume is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVmVolume] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[None] = kwargs.pop("cls", None) + cls: ClsType[_models.AvsVmVolume] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) if cont_token is None: - raw_result = self._finalize_avs_connection_initial( + raw_result = self._update_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, + volume_id=volume_id, properties=properties, content_type=content_type, cls=lambda x, y, z: x, @@ -3910,33 +6251,116 @@ def begin_finalize_avs_connection( raw_result.http_response.read() # type: ignore kwargs.pop("error_map", None) - def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements - if cls: - return cls(pipeline_response, None, {}) # type: ignore + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.AvsVmVolume, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized + + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } + + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.AvsVmVolume].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.AvsVmVolume]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore + ) + + @distributed_trace + def get( + self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, volume_id: str, **kwargs: Any + ) -> _models.AvsVmVolume: + """Get a volume in an AVS VM. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param volume_id: ID of the volume in the AVS VM. Required. + :type volume_id: str + :return: AvsVmVolume. The AvsVmVolume is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.AvsVmVolume + :raises ~azure.core.exceptions.HttpResponseError: + """ + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.AvsVmVolume] = kwargs.pop("cls", None) + _request = build_avs_vm_volumes_get_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, + volume_id=volume_id, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), } + _request.url = self._client.format_url(_request.url, **path_format_arguments) - if polling is True: - polling_method: PollingMethod = cast( - PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, ) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - polling_method = polling - if cont_token: - return LROPoller[None].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + deserialized = _deserialize(_models.AvsVmVolume, response.json()) - def _repair_avs_connection_initial( - self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + def _delete_initial( + self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, volume_id: str, **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -3951,9 +6375,11 @@ def _repair_avs_connection_initial( cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_storage_pools_repair_avs_connection_request( + _request = build_avs_vm_volumes_delete_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, + volume_id=volume_id, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -3964,6 +6390,7 @@ def _repair_avs_connection_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -3971,23 +6398,24 @@ def _repair_avs_connection_initial( response = pipeline_response.http_response - if response.status_code not in [202]: + if response.status_code not in [202, 204]: try: response.read() # Load the body in memory and close the socket except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} - response_headers["Azure-AsyncOperation"] = self._deserialize( - "str", response.headers.get("Azure-AsyncOperation") - ) - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) + if response.status_code == 202: + response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -3995,17 +6423,20 @@ def _repair_avs_connection_initial( return deserialized # type: ignore @distributed_trace - def begin_repair_avs_connection( - self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + def begin_delete( + self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, volume_id: str, **kwargs: Any ) -> LROPoller[None]: - """Test and repair, if needed, all configuration elements of the storage pool connection to the - AVS instance. + """Delete a volume in an AVS VM. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :param volume_id: ID of the volume in the AVS VM. Required. + :type volume_id: str :return: An instance of LROPoller that returns None :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -4018,9 +6449,11 @@ def begin_repair_avs_connection( lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) if cont_token is None: - raw_result = self._repair_avs_connection_initial( + raw_result = self._delete_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, + volume_id=volume_id, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -4054,15 +6487,120 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- ) return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + @distributed_trace + def list_by_avs_vm( + self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, **kwargs: Any + ) -> ItemPaged["_models.AvsVmVolume"]: + """List volumes in an AVS VM. -class AvsStorageContainersOperations: + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param avs_vm_id: ID of the AVS VM. Required. + :type avs_vm_id: str + :return: An iterator like instance of AvsVmVolume + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.AvsVmVolume] + :raises ~azure.core.exceptions.HttpResponseError: + """ + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[List[_models.AvsVmVolume]] = kwargs.pop("cls", None) + + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) + + def prepare_request(next_link=None): + if not next_link: + + _request = build_avs_vm_volumes_list_by_avs_vm_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + avs_vm_id=avs_vm_id, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + else: + # make call to next link with the client's api-version + _parsed_next_link = urllib.parse.urlparse(next_link) + _next_request_params = case_insensitive_dict( + { + key: [urllib.parse.quote(v) for v in value] + for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() + } + ) + _next_request_params["api-version"] = self._config.api_version + _request = HttpRequest( + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, + ) + path_format_arguments = { + "endpoint": self._serialize.url( + "self._config.base_url", self._config.base_url, "str", skip_quote=True + ), + } + _request.url = self._client.format_url(_request.url, **path_format_arguments) + + return _request + + def extract_data(pipeline_response): + deserialized = pipeline_response.http_response.json() + list_of_elem = _deserialize( + List[_models.AvsVmVolume], + deserialized.get("value", []), + ) + if cls: + list_of_elem = cls(list_of_elem) # type: ignore + return deserialized.get("nextLink") or None, iter(list_of_elem) + + def get_next(next_link=None): + _request = prepare_request(next_link) + + _stream = False + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged(get_next, extract_data) + + +class VolumeGroupsOperations: """ .. warning:: **DO NOT** instantiate this class directly. Instead, you should access the following operations through :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s - :attr:`avs_storage_containers` attribute. + :attr:`volume_groups` attribute. """ def __init__(self, *args, **kwargs) -> None: @@ -4075,20 +6613,34 @@ def __init__(self, *args, **kwargs) -> None: self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) def get( - self, resource_group_name: str, storage_pool_name: str, storage_container_name: str, **kwargs: Any - ) -> _models.AvsStorageContainer: - """Get an AVS storage container. + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> _models.VolumeGroup: + """Get a volume group. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param storage_container_name: Name of the storage container. Required. - :type storage_container_name: str - :return: AvsStorageContainer. The AvsStorageContainer is compatible with MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.AvsStorageContainer + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :return: VolumeGroup. The VolumeGroup is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.VolumeGroup :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -4102,12 +6654,12 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.AvsStorageContainer] = kwargs.pop("cls", None) + cls: ClsType[_models.VolumeGroup] = kwargs.pop("cls", None) - _request = build_avs_storage_containers_get_request( + _request = build_volume_groups_get_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - storage_container_name=storage_container_name, + volume_group_name=volume_group_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -4118,6 +6670,7 @@ def get( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4132,21 +6685,44 @@ def get( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - deserialized = _deserialize(_models.AvsStorageContainer, response.json()) + deserialized = _deserialize(_models.VolumeGroup, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized # type: ignore - def _delete_initial( - self, resource_group_name: str, storage_pool_name: str, storage_container_name: str, **kwargs: Any + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def _create_initial( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: Union[_models.VolumeGroup, JSON, IO[bytes]], + **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -4156,17 +6732,27 @@ def _delete_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_avs_storage_containers_delete_request( + content_type = content_type or "application/json" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_volume_groups_create_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - storage_container_name=storage_container_name, + volume_group_name=volume_group_name, subscription_id=self._config.subscription_id, + content_type=content_type, api_version=self._config.api_version, + content=_content, headers=_headers, params=_params, ) @@ -4175,6 +6761,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4182,56 +6769,181 @@ def _delete_initial( response = pipeline_response.http_response - if response.status_code not in [202, 204]: + if response.status_code not in [200, 201]: try: response.read() # Load the body in memory and close the socket except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} - if response.status_code == 202: - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore + @overload + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: _models.VolumeGroup, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.VolumeGroup]: + """Create a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.purestorageblock.models.VolumeGroup + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns VolumeGroup. The VolumeGroup is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.VolumeGroup]: + """Create a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns VolumeGroup. The VolumeGroup is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + + @overload + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.VolumeGroup]: + """Create a volume group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param resource: Resource create parameters. Required. + :type resource: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns VolumeGroup. The VolumeGroup is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] + :raises ~azure.core.exceptions.HttpResponseError: + """ + @distributed_trace - def begin_delete( - self, resource_group_name: str, storage_pool_name: str, storage_container_name: str, **kwargs: Any - ) -> LROPoller[None]: - """Delete an AVS storage container. + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + resource: Union[_models.VolumeGroup, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.VolumeGroup]: + """Create a volume group. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param storage_container_name: Name of the storage container. Required. - :type storage_container_name: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param resource: Resource create parameters. Is one of the following types: VolumeGroup, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.purestorageblock.models.VolumeGroup or JSON or IO[bytes] + :return: An instance of LROPoller that returns VolumeGroup. The VolumeGroup is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} - cls: ClsType[None] = kwargs.pop("cls", None) + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.VolumeGroup] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) if cont_token is None: - raw_result = self._delete_initial( + raw_result = self._create_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - storage_container_name=storage_container_name, + volume_group_name=volume_group_name, + resource=resource, + content_type=content_type, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -4240,9 +6952,12 @@ def begin_delete( raw_result.http_response.read() # type: ignore kwargs.pop("error_map", None) - def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.VolumeGroup, response.json()) if cls: - return cls(pipeline_response, None, {}) # type: ignore + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), @@ -4257,134 +6972,37 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- else: polling_method = polling if cont_token: - return LROPoller[None].from_continuation_token( + return LROPoller[_models.VolumeGroup].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore - - @distributed_trace - def list_by_storage_pool( - self, resource_group_name: str, storage_pool_name: str, **kwargs: Any - ) -> ItemPaged["_models.AvsStorageContainer"]: - """List AVS storage containers by storage pool. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :return: An iterator like instance of AvsStorageContainer - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.AvsStorageContainer] - :raises ~azure.core.exceptions.HttpResponseError: - """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.AvsStorageContainer]] = kwargs.pop("cls", None) - - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - _request = build_avs_storage_containers_list_by_storage_pool_request( - resource_group_name=resource_group_name, - storage_pool_name=storage_pool_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AvsStorageContainer], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - _request = prepare_request(next_link) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) - - -class AvsStorageContainerVolumesOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s - :attr:`avs_storage_container_volumes` attribute. - """ - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: PureStorageBlockMgmtClientConfiguration = ( - input_args.pop(0) if input_args else kwargs.pop("config") + return LROPoller[_models.VolumeGroup]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore ) - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) def _update_initial( self, resource_group_name: str, storage_pool_name: str, - storage_container_name: str, - volume_id: str, - properties: Union[_models.AvsStorageContainerVolumeUpdate, JSON, IO[bytes]], + volume_group_name: str, + properties: Union[_models.VolumeGroupUpdate, JSON, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -4408,11 +7026,10 @@ def _update_initial( else: _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_avs_storage_container_volumes_update_request( + _request = build_volume_groups_update_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - storage_container_name=storage_container_name, - volume_id=volume_id, + volume_group_name=volume_group_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -4425,6 +7042,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4438,7 +7056,10 @@ def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4446,7 +7067,7 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4458,33 +7079,29 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, - storage_container_name: str, - volume_id: str, - properties: _models.AvsStorageContainerVolumeUpdate, + volume_group_name: str, + properties: _models.VolumeGroupUpdate, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.AvsStorageContainerVolume]: - """Update a volume in an AVS storage container. + ) -> LROPoller[_models.VolumeGroup]: + """Update a volume group. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param storage_container_name: Name of the storage container. Required. - :type storage_container_name: str - :param volume_id: ID of the volume in the storage container. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str :param properties: The resource properties to be updated. Required. - :type properties: ~azure.mgmt.purestorageblock.models.AvsStorageContainerVolumeUpdate + :type properties: ~azure.mgmt.purestorageblock.models.VolumeGroupUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns AvsStorageContainerVolume. The - AvsStorageContainerVolume is compatible with MutableMapping - :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] + :return: An instance of LROPoller that returns VolumeGroup. The VolumeGroup is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -4493,33 +7110,29 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, - storage_container_name: str, - volume_id: str, + volume_group_name: str, properties: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.AvsStorageContainerVolume]: - """Update a volume in an AVS storage container. + ) -> LROPoller[_models.VolumeGroup]: + """Update a volume group. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param storage_container_name: Name of the storage container. Required. - :type storage_container_name: str - :param volume_id: ID of the volume in the storage container. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str :param properties: The resource properties to be updated. Required. :type properties: JSON :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns AvsStorageContainerVolume. The - AvsStorageContainerVolume is compatible with MutableMapping - :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] + :return: An instance of LROPoller that returns VolumeGroup. The VolumeGroup is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -4528,72 +7141,78 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, - storage_container_name: str, - volume_id: str, + volume_group_name: str, properties: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.AvsStorageContainerVolume]: - """Update a volume in an AVS storage container. + ) -> LROPoller[_models.VolumeGroup]: + """Update a volume group. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param storage_container_name: Name of the storage container. Required. - :type storage_container_name: str - :param volume_id: ID of the volume in the storage container. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str :param properties: The resource properties to be updated. Required. :type properties: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns AvsStorageContainerVolume. The - AvsStorageContainerVolume is compatible with MutableMapping - :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] + :return: An instance of LROPoller that returns VolumeGroup. The VolumeGroup is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) def begin_update( self, resource_group_name: str, storage_pool_name: str, - storage_container_name: str, - volume_id: str, - properties: Union[_models.AvsStorageContainerVolumeUpdate, JSON, IO[bytes]], + volume_group_name: str, + properties: Union[_models.VolumeGroupUpdate, JSON, IO[bytes]], **kwargs: Any - ) -> LROPoller[_models.AvsStorageContainerVolume]: - """Update a volume in an AVS storage container. + ) -> LROPoller[_models.VolumeGroup]: + """Update a volume group. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param storage_container_name: Name of the storage container. Required. - :type storage_container_name: str - :param volume_id: ID of the volume in the storage container. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str :param properties: The resource properties to be updated. Is one of the following types: - AvsStorageContainerVolumeUpdate, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.purestorageblock.models.AvsStorageContainerVolumeUpdate or JSON - or IO[bytes] - :return: An instance of LROPoller that returns AvsStorageContainerVolume. The - AvsStorageContainerVolume is compatible with MutableMapping - :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] + VolumeGroupUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.VolumeGroupUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns VolumeGroup. The VolumeGroup is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.VolumeGroup] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.AvsStorageContainerVolume] = kwargs.pop("cls", None) + cls: ClsType[_models.VolumeGroup] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) @@ -4601,8 +7220,7 @@ def begin_update( raw_result = self._update_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - storage_container_name=storage_container_name, - volume_id=volume_id, + volume_group_name=volume_group_name, properties=properties, content_type=content_type, cls=lambda x, y, z: x, @@ -4615,7 +7233,7 @@ def begin_update( def get_long_running_output(pipeline_response): response = pipeline_response.http_response - deserialized = _deserialize(_models.AvsStorageContainerVolume, response.json()) + deserialized = _deserialize(_models.VolumeGroup, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized @@ -4633,103 +7251,31 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return LROPoller[_models.AvsStorageContainerVolume].from_continuation_token( + return LROPoller[_models.VolumeGroup].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[_models.AvsStorageContainerVolume]( + return LROPoller[_models.VolumeGroup]( self._client, raw_result, get_long_running_output, polling_method # type: ignore ) - @distributed_trace - def get( - self, - resource_group_name: str, - storage_pool_name: str, - storage_container_name: str, - volume_id: str, - **kwargs: Any - ) -> _models.AvsStorageContainerVolume: - """Get a volume in an AVS storage container. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param storage_container_name: Name of the storage container. Required. - :type storage_container_name: str - :param volume_id: ID of the volume in the storage container. Required. - :type volume_id: str - :return: AvsStorageContainerVolume. The AvsStorageContainerVolume is compatible with - MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[_models.AvsStorageContainerVolume] = kwargs.pop("cls", None) - - _request = build_avs_storage_container_volumes_get_request( - resource_group_name=resource_group_name, - storage_pool_name=storage_pool_name, - storage_container_name=storage_container_name, - volume_id=volume_id, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - _stream = kwargs.pop("stream", False) - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - if _stream: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.AvsStorageContainerVolume, response.json()) - - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - - return deserialized # type: ignore - + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) def _delete_initial( - self, - resource_group_name: str, - storage_pool_name: str, - storage_container_name: str, - volume_id: str, - **kwargs: Any + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -4744,11 +7290,10 @@ def _delete_initial( cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_avs_storage_container_volumes_delete_request( + _request = build_volume_groups_delete_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - storage_container_name=storage_container_name, - volume_id=volume_id, + volume_group_name=volume_group_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -4759,6 +7304,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -4772,7 +7318,10 @@ def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -4780,7 +7329,7 @@ def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -4788,25 +7337,31 @@ def _delete_initial( return deserialized # type: ignore @distributed_trace + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) def begin_delete( - self, - resource_group_name: str, - storage_pool_name: str, - storage_container_name: str, - volume_id: str, - **kwargs: Any + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any ) -> LROPoller[None]: - """Delete a volume in an AVS storage container. + """Delete a volume group. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param storage_container_name: Name of the storage container. Required. - :type storage_container_name: str - :param volume_id: ID of the volume in the storage container. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str :return: An instance of LROPoller that returns None :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -4822,8 +7377,7 @@ def begin_delete( raw_result = self._delete_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - storage_container_name=storage_container_name, - volume_id=volume_id, + volume_group_name=volume_group_name, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -4858,27 +7412,37 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore @distributed_trace - def list_by_avs_storage_container( - self, resource_group_name: str, storage_pool_name: str, storage_container_name: str, **kwargs: Any - ) -> ItemPaged["_models.AvsStorageContainerVolume"]: - """List volumes in an AVS storage container. + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def list_by_storage_pool( + self, resource_group_name: str, storage_pool_name: str, **kwargs: Any + ) -> ItemPaged["_models.VolumeGroup"]: + """List volume groups by storage pool. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param storage_container_name: Name of the storage container. Required. - :type storage_container_name: str - :return: An iterator like instance of AvsStorageContainerVolume - :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.AvsStorageContainerVolume] + :return: An iterator like instance of VolumeGroup + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.VolumeGroup] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[List[_models.AvsStorageContainerVolume]] = kwargs.pop("cls", None) + cls: ClsType[List[_models.VolumeGroup]] = kwargs.pop("cls", None) error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -4891,10 +7455,9 @@ def list_by_avs_storage_container( def prepare_request(next_link=None): if not next_link: - _request = build_avs_storage_container_volumes_list_by_avs_storage_container_request( + _request = build_volume_groups_list_by_storage_pool_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - storage_container_name=storage_container_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -4918,7 +7481,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -4931,7 +7497,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AvsStorageContainerVolume], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.VolumeGroup], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -4947,70 +7516,67 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response return ItemPaged(get_next, extract_data) + @distributed_trace + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def list_connection_parameters( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> _models.ConnectionParametersResponse: + """Get connection parameters for ISCSI connection to the volume group. -class AvsVmsOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s - :attr:`avs_vms` attribute. - """ - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: PureStorageBlockMgmtClientConfiguration = ( - input_args.pop(0) if input_args else kwargs.pop("config") - ) - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - def _update_initial( - self, - resource_group_name: str, - storage_pool_name: str, - avs_vm_id: str, - properties: Union[_models.AvsVmUpdate, JSON, IO[bytes]], - **kwargs: Any - ) -> Iterator[bytes]: + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :return: ConnectionParametersResponse. The ConnectionParametersResponse is compatible with + MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.ConnectionParametersResponse + :raises ~azure.core.exceptions.HttpResponseError: + """ error_map: MutableMapping = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError, 304: ResourceNotModifiedError, } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} - - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - - content_type = content_type or "application/json" - _content = None - if isinstance(properties, (IOBase, bytes)): - _content = properties - else: - _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + error_map.update(kwargs.pop("error_map", {}) or {}) - _request = build_avs_vms_update_request( + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} + + cls: ClsType[_models.ConnectionParametersResponse] = kwargs.pop("cls", None) + + _request = build_volume_groups_list_connection_parameters_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, + volume_group_name=volume_group_name, subscription_id=self._config.subscription_id, - content_type=content_type, api_version=self._config.api_version, - content=_content, headers=_headers, params=_params, ) @@ -5019,219 +7585,178 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) - _stream = True + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs ) response = pipeline_response.http_response - if response.status_code not in [200, 202]: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - response_headers = {} - if response.status_code == 202: - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) - response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - - deserialized = response.iter_bytes() + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() + else: + deserialized = _deserialize(_models.ConnectionParametersResponse, response.json()) if cls: - return cls(pipeline_response, deserialized, response_headers) # type: ignore + return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized # type: ignore - @overload - def begin_update( - self, - resource_group_name: str, - storage_pool_name: str, - avs_vm_id: str, - properties: _models.AvsVmUpdate, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.AvsVm]: - """Update an AVS VM. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param properties: The resource properties to be updated. Required. - :type properties: ~azure.mgmt.purestorageblock.models.AvsVmUpdate - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns AvsVm. The AvsVm is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVm] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_update( - self, - resource_group_name: str, - storage_pool_name: str, - avs_vm_id: str, - properties: JSON, - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.AvsVm]: - """Update an AVS VM. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param properties: The resource properties to be updated. Required. - :type properties: JSON - :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns AvsVm. The AvsVm is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVm] - :raises ~azure.core.exceptions.HttpResponseError: - """ - - @overload - def begin_update( - self, - resource_group_name: str, - storage_pool_name: str, - avs_vm_id: str, - properties: IO[bytes], - *, - content_type: str = "application/json", - **kwargs: Any - ) -> LROPoller[_models.AvsVm]: - """Update an AVS VM. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param properties: The resource properties to be updated. Required. - :type properties: IO[bytes] - :keyword content_type: Body Parameter content-type. Content type parameter for binary body. - Default value is "application/json". - :paramtype content_type: str - :return: An instance of LROPoller that returns AvsVm. The AvsVm is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVm] - :raises ~azure.core.exceptions.HttpResponseError: - """ - @distributed_trace - def begin_update( - self, - resource_group_name: str, - storage_pool_name: str, - avs_vm_id: str, - properties: Union[_models.AvsVmUpdate, JSON, IO[bytes]], - **kwargs: Any - ) -> LROPoller[_models.AvsVm]: - """Update an AVS VM. + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def get_status( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> _models.VolumeGroupStatus: + """Get current status and space information of the volume group. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param properties: The resource properties to be updated. Is one of the following types: - AvsVmUpdate, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.purestorageblock.models.AvsVmUpdate or JSON or IO[bytes] - :return: An instance of LROPoller that returns AvsVm. The AvsVm is compatible with - MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVm] + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :return: VolumeGroupStatus. The VolumeGroupStatus is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.VolumeGroupStatus :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = kwargs.pop("params", {}) or {} + error_map: MutableMapping = { + 401: ClientAuthenticationError, + 404: ResourceNotFoundError, + 409: ResourceExistsError, + 304: ResourceNotModifiedError, + } + error_map.update(kwargs.pop("error_map", {}) or {}) - content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.AvsVm] = kwargs.pop("cls", None) - polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = self._update_initial( - resource_group_name=resource_group_name, - storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, - properties=properties, - content_type=content_type, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - raw_result.http_response.read() # type: ignore - kwargs.pop("error_map", None) + _headers = kwargs.pop("headers", {}) or {} + _params = kwargs.pop("params", {}) or {} - def get_long_running_output(pipeline_response): - response = pipeline_response.http_response - deserialized = _deserialize(_models.AvsVm, response.json()) - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - return deserialized + cls: ClsType[_models.VolumeGroupStatus] = kwargs.pop("cls", None) + _request = build_volume_groups_get_status_request( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + subscription_id=self._config.subscription_id, + api_version=self._config.api_version, + headers=_headers, + params=_params, + ) path_format_arguments = { "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), } + _request.url = self._client.format_url(_request.url, **path_format_arguments) - if polling is True: - polling_method: PollingMethod = cast( - PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + _decompress = kwargs.pop("decompress", True) + _stream = kwargs.pop("stream", False) + pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access + _request, stream=_stream, **kwargs + ) + + response = pipeline_response.http_response + + if response.status_code not in [200]: + if _stream: + try: + response.read() # Load the body in memory and close the socket + except (StreamConsumedError, StreamClosedError): + pass + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, ) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if _stream: + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - polling_method = polling - if cont_token: - return LROPoller[_models.AvsVm].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return LROPoller[_models.AvsVm]( - self._client, raw_result, get_long_running_output, polling_method # type: ignore + deserialized = _deserialize(_models.VolumeGroupStatus, response.json()) + + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + + return deserialized # type: ignore + + +class VolumesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s + :attr:`volumes` attribute. + """ + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") + self._config: PureStorageBlockMgmtClientConfiguration = ( + input_args.pop(0) if input_args else kwargs.pop("config") ) + self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") @distributed_trace - def get(self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, **kwargs: Any) -> _models.AvsVm: - """Get an AVS VM. + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def get( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, volume_name: str, **kwargs: Any + ) -> _models.Volume: + """Get a volume. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :return: AvsVm. The AvsVm is compatible with MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.AvsVm + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :return: Volume. The Volume is compatible with MutableMapping + :rtype: ~azure.mgmt.purestorageblock.models.Volume :raises ~azure.core.exceptions.HttpResponseError: """ error_map: MutableMapping = { @@ -5245,12 +7770,13 @@ def get(self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[_models.AvsVm] = kwargs.pop("cls", None) + cls: ClsType[_models.Volume] = kwargs.pop("cls", None) - _request = build_avs_vms_get_request( + _request = build_volumes_get_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, + volume_group_name=volume_group_name, + volume_name=volume_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -5261,6 +7787,7 @@ def get(self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = kwargs.pop("stream", False) pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5275,21 +7802,46 @@ def get(self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) if _stream: - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() else: - deserialized = _deserialize(_models.AvsVm, response.json()) + deserialized = _deserialize(_models.Volume, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized # type: ignore - def _delete_initial( - self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, **kwargs: Any + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def _create_initial( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: Union[_models.Volume, JSON, IO[bytes]], + **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -5299,17 +7851,28 @@ def _delete_initial( } error_map.update(kwargs.pop("error_map", {}) or {}) - _headers = kwargs.pop("headers", {}) or {} + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_avs_vms_delete_request( + content_type = content_type or "application/json" + _content = None + if isinstance(resource, (IOBase, bytes)): + _content = resource + else: + _content = json.dumps(resource, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore + + _request = build_volumes_create_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, + volume_group_name=volume_group_name, + volume_name=volume_name, subscription_id=self._config.subscription_id, + content_type=content_type, api_version=self._config.api_version, + content=_content, headers=_headers, params=_params, ) @@ -5318,6 +7881,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5325,209 +7889,256 @@ def _delete_initial( response = pipeline_response.http_response - if response.status_code not in [202, 204]: + if response.status_code not in [200, 201]: try: response.read() # Load the body in memory and close the socket except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} - if response.status_code == 202: - response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) + if response.status_code == 201: + response_headers["Azure-AsyncOperation"] = self._deserialize( + "str", response.headers.get("Azure-AsyncOperation") + ) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore return deserialized # type: ignore - @distributed_trace - def begin_delete( - self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, **kwargs: Any - ) -> LROPoller[None]: - """Delete an AVS VM. + @overload + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: _models.Volume, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Volume]: + """Create a volume. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :return: An instance of LROPoller that returns None - :rtype: ~azure.core.polling.LROPoller[None] + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param resource: Resource create parameters. Required. + :type resource: ~azure.mgmt.purestorageblock.models.Volume + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Volume] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - cls: ClsType[None] = kwargs.pop("cls", None) - polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) - lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) - cont_token: Optional[str] = kwargs.pop("continuation_token", None) - if cont_token is None: - raw_result = self._delete_initial( - resource_group_name=resource_group_name, - storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, - cls=lambda x, y, z: x, - headers=_headers, - params=_params, - **kwargs - ) - raw_result.http_response.read() # type: ignore - kwargs.pop("error_map", None) + @overload + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: JSON, + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Volume]: + """Create a volume. - def get_long_running_output(pipeline_response): # pylint: disable=inconsistent-return-statements - if cls: - return cls(pipeline_response, None, {}) # type: ignore + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param resource: Resource create parameters. Required. + :type resource: JSON + :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } + @overload + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: IO[bytes], + *, + content_type: str = "application/json", + **kwargs: Any + ) -> LROPoller[_models.Volume]: + """Create a volume. - if polling is True: - polling_method: PollingMethod = cast( - PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) - ) - elif polling is False: - polling_method = cast(PollingMethod, NoPolling()) - else: - polling_method = polling - if cont_token: - return LROPoller[None].from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output, - ) - return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore + :param resource_group_name: The name of the resource group. The name is case insensitive. + Required. + :type resource_group_name: str + :param storage_pool_name: Name of the storage pool. Required. + :type storage_pool_name: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param resource: Resource create parameters. Required. + :type resource: IO[bytes] + :keyword content_type: Body Parameter content-type. Content type parameter for binary body. + Default value is "application/json". + :paramtype content_type: str + :return: An instance of LROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Volume] + :raises ~azure.core.exceptions.HttpResponseError: + """ @distributed_trace - def list_by_storage_pool( - self, resource_group_name: str, storage_pool_name: str, **kwargs: Any - ) -> ItemPaged["_models.AvsVm"]: - """List AVS VMs by storage pool. + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def begin_create( + self, + resource_group_name: str, + storage_pool_name: str, + volume_group_name: str, + volume_name: str, + resource: Union[_models.Volume, JSON, IO[bytes]], + **kwargs: Any + ) -> LROPoller[_models.Volume]: + """Create a volume. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :return: An iterator like instance of AvsVm - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.AvsVm] + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str + :param resource: Resource create parameters. Is one of the following types: Volume, JSON, + IO[bytes] Required. + :type resource: ~azure.mgmt.purestorageblock.models.Volume or JSON or IO[bytes] + :return: An instance of LROPoller that returns Volume. The Volume is compatible with + MutableMapping + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Volume] :raises ~azure.core.exceptions.HttpResponseError: """ - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[List[_models.AvsVm]] = kwargs.pop("cls", None) - - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - def prepare_request(next_link=None): - if not next_link: - - _request = build_avs_vms_list_by_storage_pool_request( - resource_group_name=resource_group_name, - storage_pool_name=storage_pool_name, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - else: - # make call to next link with the client's api-version - _parsed_next_link = urllib.parse.urlparse(next_link) - _next_request_params = case_insensitive_dict( - { - key: [urllib.parse.quote(v) for v in value] - for key, value in urllib.parse.parse_qs(_parsed_next_link.query).items() - } - ) - _next_request_params["api-version"] = self._config.api_version - _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params - ) - path_format_arguments = { - "endpoint": self._serialize.url( - "self._config.base_url", self._config.base_url, "str", skip_quote=True - ), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - return _request - - def extract_data(pipeline_response): - deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AvsVm], deserialized.get("value", [])) - if cls: - list_of_elem = cls(list_of_elem) # type: ignore - return deserialized.get("nextLink") or None, iter(list_of_elem) - - def get_next(next_link=None): - _request = prepare_request(next_link) - - _stream = False - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - return pipeline_response - - return ItemPaged(get_next, extract_data) + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = kwargs.pop("params", {}) or {} + content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) + cls: ClsType[_models.Volume] = kwargs.pop("cls", None) + polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) + lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) + cont_token: Optional[str] = kwargs.pop("continuation_token", None) + if cont_token is None: + raw_result = self._create_initial( + resource_group_name=resource_group_name, + storage_pool_name=storage_pool_name, + volume_group_name=volume_group_name, + volume_name=volume_name, + resource=resource, + content_type=content_type, + cls=lambda x, y, z: x, + headers=_headers, + params=_params, + **kwargs + ) + raw_result.http_response.read() # type: ignore + kwargs.pop("error_map", None) -class AvsVmVolumesOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. + def get_long_running_output(pipeline_response): + response = pipeline_response.http_response + deserialized = _deserialize(_models.Volume, response.json()) + if cls: + return cls(pipeline_response, deserialized, {}) # type: ignore + return deserialized - Instead, you should access the following operations through - :class:`~azure.mgmt.purestorageblock.PureStorageBlockMgmtClient`'s - :attr:`avs_vm_volumes` attribute. - """ + path_format_arguments = { + "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), + } - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client: PipelineClient = input_args.pop(0) if input_args else kwargs.pop("client") - self._config: PureStorageBlockMgmtClientConfiguration = ( - input_args.pop(0) if input_args else kwargs.pop("config") + if polling is True: + polling_method: PollingMethod = cast( + PollingMethod, ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) + ) + elif polling is False: + polling_method = cast(PollingMethod, NoPolling()) + else: + polling_method = polling + if cont_token: + return LROPoller[_models.Volume].from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output, + ) + return LROPoller[_models.Volume]( + self._client, raw_result, get_long_running_output, polling_method # type: ignore ) - self._serialize: Serializer = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize: Deserializer = input_args.pop(0) if input_args else kwargs.pop("deserializer") + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) def _update_initial( self, resource_group_name: str, storage_pool_name: str, - avs_vm_id: str, - volume_id: str, - properties: Union[_models.AvsVmVolumeUpdate, JSON, IO[bytes]], + volume_group_name: str, + volume_name: str, + properties: Union[_models.VolumeUpdate, JSON, IO[bytes]], **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { @@ -5551,11 +8162,11 @@ def _update_initial( else: _content = json.dumps(properties, cls=SdkJSONEncoder, exclude_readonly=True) # type: ignore - _request = build_avs_vm_volumes_update_request( + _request = build_volumes_update_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, - volume_id=volume_id, + volume_group_name=volume_group_name, + volume_name=volume_name, subscription_id=self._config.subscription_id, content_type=content_type, api_version=self._config.api_version, @@ -5568,6 +8179,7 @@ def _update_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5581,7 +8193,10 @@ def _update_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -5589,7 +8204,7 @@ def _update_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -5601,32 +8216,32 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, - avs_vm_id: str, - volume_id: str, - properties: _models.AvsVmVolumeUpdate, + volume_group_name: str, + volume_name: str, + properties: _models.VolumeUpdate, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.AvsVmVolume]: - """Update a volume in an AVS VM. + ) -> LROPoller[_models.Volume]: + """Update a volume. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param volume_id: ID of the volume in the AVS VM. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str :param properties: The resource properties to be updated. Required. - :type properties: ~azure.mgmt.purestorageblock.models.AvsVmVolumeUpdate + :type properties: ~azure.mgmt.purestorageblock.models.VolumeUpdate :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns AvsVmVolume. The AvsVmVolume is compatible with + :return: An instance of LROPoller that returns Volume. The Volume is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVmVolume] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Volume] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -5635,32 +8250,32 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, - avs_vm_id: str, - volume_id: str, + volume_group_name: str, + volume_name: str, properties: JSON, *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.AvsVmVolume]: - """Update a volume in an AVS VM. + ) -> LROPoller[_models.Volume]: + """Update a volume. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param volume_id: ID of the volume in the AVS VM. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str :param properties: The resource properties to be updated. Required. :type properties: JSON :keyword content_type: Body Parameter content-type. Content type parameter for JSON body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns AvsVmVolume. The AvsVmVolume is compatible with + :return: An instance of LROPoller that returns Volume. The Volume is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVmVolume] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Volume] :raises ~azure.core.exceptions.HttpResponseError: """ @@ -5669,69 +8284,85 @@ def begin_update( self, resource_group_name: str, storage_pool_name: str, - avs_vm_id: str, - volume_id: str, + volume_group_name: str, + volume_name: str, properties: IO[bytes], *, content_type: str = "application/json", **kwargs: Any - ) -> LROPoller[_models.AvsVmVolume]: - """Update a volume in an AVS VM. + ) -> LROPoller[_models.Volume]: + """Update a volume. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param volume_id: ID of the volume in the AVS VM. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str :param properties: The resource properties to be updated. Required. :type properties: IO[bytes] :keyword content_type: Body Parameter content-type. Content type parameter for binary body. Default value is "application/json". :paramtype content_type: str - :return: An instance of LROPoller that returns AvsVmVolume. The AvsVmVolume is compatible with + :return: An instance of LROPoller that returns Volume. The Volume is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVmVolume] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Volume] :raises ~azure.core.exceptions.HttpResponseError: """ @distributed_trace + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + "content_type", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) def begin_update( self, resource_group_name: str, storage_pool_name: str, - avs_vm_id: str, - volume_id: str, - properties: Union[_models.AvsVmVolumeUpdate, JSON, IO[bytes]], + volume_group_name: str, + volume_name: str, + properties: Union[_models.VolumeUpdate, JSON, IO[bytes]], **kwargs: Any - ) -> LROPoller[_models.AvsVmVolume]: - """Update a volume in an AVS VM. + ) -> LROPoller[_models.Volume]: + """Update a volume. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param volume_id: ID of the volume in the AVS VM. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str :param properties: The resource properties to be updated. Is one of the following types: - AvsVmVolumeUpdate, JSON, IO[bytes] Required. - :type properties: ~azure.mgmt.purestorageblock.models.AvsVmVolumeUpdate or JSON or IO[bytes] - :return: An instance of LROPoller that returns AvsVmVolume. The AvsVmVolume is compatible with + VolumeUpdate, JSON, IO[bytes] Required. + :type properties: ~azure.mgmt.purestorageblock.models.VolumeUpdate or JSON or IO[bytes] + :return: An instance of LROPoller that returns Volume. The Volume is compatible with MutableMapping - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.AvsVmVolume] + :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.purestorageblock.models.Volume] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = kwargs.pop("params", {}) or {} content_type: Optional[str] = kwargs.pop("content_type", _headers.pop("Content-Type", None)) - cls: ClsType[_models.AvsVmVolume] = kwargs.pop("cls", None) + cls: ClsType[_models.Volume] = kwargs.pop("cls", None) polling: Union[bool, PollingMethod] = kwargs.pop("polling", True) lro_delay = kwargs.pop("polling_interval", self._config.polling_interval) cont_token: Optional[str] = kwargs.pop("continuation_token", None) @@ -5739,8 +8370,8 @@ def begin_update( raw_result = self._update_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, - volume_id=volume_id, + volume_group_name=volume_group_name, + volume_name=volume_name, properties=properties, content_type=content_type, cls=lambda x, y, z: x, @@ -5753,7 +8384,7 @@ def begin_update( def get_long_running_output(pipeline_response): response = pipeline_response.http_response - deserialized = _deserialize(_models.AvsVmVolume, response.json()) + deserialized = _deserialize(_models.Volume, response.json()) if cls: return cls(pipeline_response, deserialized, {}) # type: ignore return deserialized @@ -5771,92 +8402,32 @@ def get_long_running_output(pipeline_response): else: polling_method = polling if cont_token: - return LROPoller[_models.AvsVmVolume].from_continuation_token( + return LROPoller[_models.Volume].from_continuation_token( polling_method=polling_method, continuation_token=cont_token, client=self._client, deserialization_callback=get_long_running_output, ) - return LROPoller[_models.AvsVmVolume]( + return LROPoller[_models.Volume]( self._client, raw_result, get_long_running_output, polling_method # type: ignore ) - @distributed_trace - def get( - self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, volume_id: str, **kwargs: Any - ) -> _models.AvsVmVolume: - """Get a volume in an AVS VM. - - :param resource_group_name: The name of the resource group. The name is case insensitive. - Required. - :type resource_group_name: str - :param storage_pool_name: Name of the storage pool. Required. - :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param volume_id: ID of the volume in the AVS VM. Required. - :type volume_id: str - :return: AvsVmVolume. The AvsVmVolume is compatible with MutableMapping - :rtype: ~azure.mgmt.purestorageblock.models.AvsVmVolume - :raises ~azure.core.exceptions.HttpResponseError: - """ - error_map: MutableMapping = { - 401: ClientAuthenticationError, - 404: ResourceNotFoundError, - 409: ResourceExistsError, - 304: ResourceNotModifiedError, - } - error_map.update(kwargs.pop("error_map", {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = kwargs.pop("params", {}) or {} - - cls: ClsType[_models.AvsVmVolume] = kwargs.pop("cls", None) - - _request = build_avs_vm_volumes_get_request( - resource_group_name=resource_group_name, - storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, - volume_id=volume_id, - subscription_id=self._config.subscription_id, - api_version=self._config.api_version, - headers=_headers, - params=_params, - ) - path_format_arguments = { - "endpoint": self._serialize.url("self._config.base_url", self._config.base_url, "str", skip_quote=True), - } - _request.url = self._client.format_url(_request.url, **path_format_arguments) - - _stream = kwargs.pop("stream", False) - pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access - _request, stream=_stream, **kwargs - ) - - response = pipeline_response.http_response - - if response.status_code not in [200]: - if _stream: - try: - response.read() # Load the body in memory and close the socket - except (StreamConsumedError, StreamClosedError): - pass - map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) - raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) - - if _stream: - deserialized = response.iter_bytes() - else: - deserialized = _deserialize(_models.AvsVmVolume, response.json()) - - if cls: - return cls(pipeline_response, deserialized, {}) # type: ignore - - return deserialized # type: ignore - + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) def _delete_initial( - self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, volume_id: str, **kwargs: Any + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, volume_name: str, **kwargs: Any ) -> Iterator[bytes]: error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -5871,11 +8442,11 @@ def _delete_initial( cls: ClsType[Iterator[bytes]] = kwargs.pop("cls", None) - _request = build_avs_vm_volumes_delete_request( + _request = build_volumes_delete_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, - volume_id=volume_id, + volume_group_name=volume_group_name, + volume_name=volume_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -5886,6 +8457,7 @@ def _delete_initial( } _request.url = self._client.format_url(_request.url, **path_format_arguments) + _decompress = kwargs.pop("decompress", True) _stream = True pipeline_response: PipelineResponse = self._client._pipeline.run( # pylint: disable=protected-access _request, stream=_stream, **kwargs @@ -5899,7 +8471,10 @@ def _delete_initial( except (StreamConsumedError, StreamClosedError): pass map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) response_headers = {} @@ -5907,7 +8482,7 @@ def _delete_initial( response_headers["Location"] = self._deserialize("str", response.headers.get("Location")) response_headers["Retry-After"] = self._deserialize("int", response.headers.get("Retry-After")) - deserialized = response.iter_bytes() + deserialized = response.iter_bytes() if _decompress else response.iter_raw() if cls: return cls(pipeline_response, deserialized, response_headers) # type: ignore @@ -5915,20 +8490,34 @@ def _delete_initial( return deserialized # type: ignore @distributed_trace + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "volume_name", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) def begin_delete( - self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, volume_id: str, **kwargs: Any + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, volume_name: str, **kwargs: Any ) -> LROPoller[None]: - """Delete a volume in an AVS VM. + """Delete a volume. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :param volume_id: ID of the volume in the AVS VM. Required. - :type volume_id: str + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :param volume_name: Name of the volume. Required. + :type volume_name: str :return: An instance of LROPoller that returns None :rtype: ~azure.core.polling.LROPoller[None] :raises ~azure.core.exceptions.HttpResponseError: @@ -5944,8 +8533,8 @@ def begin_delete( raw_result = self._delete_initial( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, - volume_id=volume_id, + volume_group_name=volume_group_name, + volume_name=volume_name, cls=lambda x, y, z: x, headers=_headers, params=_params, @@ -5980,26 +8569,40 @@ def get_long_running_output(pipeline_response): # pylint: disable=inconsistent- return LROPoller[None](self._client, raw_result, get_long_running_output, polling_method) # type: ignore @distributed_trace - def list_by_avs_vm( - self, resource_group_name: str, storage_pool_name: str, avs_vm_id: str, **kwargs: Any - ) -> ItemPaged["_models.AvsVmVolume"]: - """List volumes in an AVS VM. + @api_version_validation( + method_added_on="2026-01-01-preview", + params_added_on={ + "2026-01-01-preview": [ + "api_version", + "subscription_id", + "resource_group_name", + "storage_pool_name", + "volume_group_name", + "accept", + ] + }, + api_versions_list=["2026-01-01-preview"], + ) + def list_by_volume_group( + self, resource_group_name: str, storage_pool_name: str, volume_group_name: str, **kwargs: Any + ) -> ItemPaged["_models.Volume"]: + """List volumes by volume group. :param resource_group_name: The name of the resource group. The name is case insensitive. Required. :type resource_group_name: str :param storage_pool_name: Name of the storage pool. Required. :type storage_pool_name: str - :param avs_vm_id: ID of the AVS VM. Required. - :type avs_vm_id: str - :return: An iterator like instance of AvsVmVolume - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.AvsVmVolume] + :param volume_group_name: Name of the volume group. Required. + :type volume_group_name: str + :return: An iterator like instance of Volume + :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.purestorageblock.models.Volume] :raises ~azure.core.exceptions.HttpResponseError: """ _headers = kwargs.pop("headers", {}) or {} _params = kwargs.pop("params", {}) or {} - cls: ClsType[List[_models.AvsVmVolume]] = kwargs.pop("cls", None) + cls: ClsType[List[_models.Volume]] = kwargs.pop("cls", None) error_map: MutableMapping = { 401: ClientAuthenticationError, @@ -6012,10 +8615,10 @@ def list_by_avs_vm( def prepare_request(next_link=None): if not next_link: - _request = build_avs_vm_volumes_list_by_avs_vm_request( + _request = build_volumes_list_by_volume_group_request( resource_group_name=resource_group_name, storage_pool_name=storage_pool_name, - avs_vm_id=avs_vm_id, + volume_group_name=volume_group_name, subscription_id=self._config.subscription_id, api_version=self._config.api_version, headers=_headers, @@ -6039,7 +8642,10 @@ def prepare_request(next_link=None): ) _next_request_params["api-version"] = self._config.api_version _request = HttpRequest( - "GET", urllib.parse.urljoin(next_link, _parsed_next_link.path), params=_next_request_params + "GET", + urllib.parse.urljoin(next_link, _parsed_next_link.path), + headers=_headers, + params=_next_request_params, ) path_format_arguments = { "endpoint": self._serialize.url( @@ -6052,7 +8658,10 @@ def prepare_request(next_link=None): def extract_data(pipeline_response): deserialized = pipeline_response.http_response.json() - list_of_elem = _deserialize(List[_models.AvsVmVolume], deserialized.get("value", [])) + list_of_elem = _deserialize( + List[_models.Volume], + deserialized.get("value", []), + ) if cls: list_of_elem = cls(list_of_elem) # type: ignore return deserialized.get("nextLink") or None, iter(list_of_elem) @@ -6068,7 +8677,10 @@ def get_next(next_link=None): if response.status_code not in [200]: map_error(status_code=response.status_code, response=response, error_map=error_map) - error = _failsafe_deserialize(_models.ErrorResponse, response.json()) + error = _failsafe_deserialize( + _models.ErrorResponse, + response, + ) raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) return pipeline_response diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/_patch.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/_patch.py index 8bcb627aa475..ea765788358a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/_patch.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/azure/mgmt/purestorageblock/operations/_patch.py @@ -7,9 +7,8 @@ Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize """ -from typing import List -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level +__all__: list[str] = [] # Add all objects you want publicly available to users at this package level def patch_sdk(): diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_delete_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_delete_maximum_set_gen.py index 193c5bd65069..d5825211c570 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_delete_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_delete_maximum_set_gen.py @@ -32,12 +32,12 @@ def main(): client.avs_storage_container_volumes.begin_delete( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - storage_container_name="name", - volume_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + storage_container_name="container-01", + volume_id="a1b2c3d4-e5f6", ).result() -# x-ms-original-file: 2024-11-01/AvsStorageContainerVolumes_Delete_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsStorageContainerVolumes_Delete_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_get_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_get_maximum_set_gen.py index 951cd6651dae..a502f7ae35f9 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_get_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_get_maximum_set_gen.py @@ -32,13 +32,13 @@ def main(): response = client.avs_storage_container_volumes.get( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - storage_container_name="name", - volume_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + storage_container_name="container-01", + volume_id="a1b2c3d4-e5f6", ) print(response) -# x-ms-original-file: 2024-11-01/AvsStorageContainerVolumes_Get_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsStorageContainerVolumes_Get_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_list_by_avs_storage_container_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_list_by_avs_storage_container_maximum_set_gen.py index ea1b5f448648..d6844ec61b38 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_list_by_avs_storage_container_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_list_by_avs_storage_container_maximum_set_gen.py @@ -32,13 +32,13 @@ def main(): response = client.avs_storage_container_volumes.list_by_avs_storage_container( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - storage_container_name="name", + storage_pool_name="storagepool-01", + storage_container_name="container-01", ) for item in response: print(item) -# x-ms-original-file: 2024-11-01/AvsStorageContainerVolumes_ListByAvsStorageContainer_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsStorageContainerVolumes_ListByAvsStorageContainer_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_update_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_update_maximum_set_gen.py index bd38c5cfc7fa..738e8f994eed 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_update_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_container_volumes_update_maximum_set_gen.py @@ -32,14 +32,14 @@ def main(): response = client.avs_storage_container_volumes.begin_update( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - storage_container_name="name", - volume_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + storage_container_name="container-01", + volume_id="a1b2c3d4-e5f6", properties={"properties": {"softDeletion": {"destroyed": True}}}, ).result() print(response) -# x-ms-original-file: 2024-11-01/AvsStorageContainerVolumes_Update_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsStorageContainerVolumes_Update_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_delete_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_delete_maximum_set_gen.py index c0c503056a32..e16535f97068 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_delete_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_delete_maximum_set_gen.py @@ -32,11 +32,11 @@ def main(): client.avs_storage_containers.begin_delete( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolName", - storage_container_name="storageContainerName", + storage_pool_name="storagepool-01", + storage_container_name="container-01", ).result() -# x-ms-original-file: 2024-11-01/AvsStorageContainers_Delete_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsStorageContainers_Delete_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_get_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_get_maximum_set_gen.py index 6fcf35342410..48941a938304 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_get_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_get_maximum_set_gen.py @@ -32,12 +32,12 @@ def main(): response = client.avs_storage_containers.get( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolName", - storage_container_name="storageContainerName", + storage_pool_name="storagepool-01", + storage_container_name="container-01", ) print(response) -# x-ms-original-file: 2024-11-01/AvsStorageContainers_Get_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsStorageContainers_Get_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_list_by_storage_pool_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_list_by_storage_pool_maximum_set_gen.py index 0d1233faea0d..a21845534cf7 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_list_by_storage_pool_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_storage_containers_list_by_storage_pool_maximum_set_gen.py @@ -38,6 +38,6 @@ def main(): print(item) -# x-ms-original-file: 2024-11-01/AvsStorageContainers_ListByStoragePool_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsStorageContainers_ListByStoragePool_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_delete_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_delete_maximum_set_gen.py index 76b80ccf5cf7..7d235bf478ec 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_delete_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_delete_maximum_set_gen.py @@ -32,12 +32,12 @@ def main(): client.avs_vm_volumes.begin_delete( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - avs_vm_id="cbdec-ddbb", - volume_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + avs_vm_id="abc123def456", + volume_id="a1b2c3d4-e5f6", ).result() -# x-ms-original-file: 2024-11-01/AvsVmVolumes_Delete_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsVmVolumes_Delete_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_get_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_get_maximum_set_gen.py index 7fcd704dfb1c..4844eba4d2f5 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_get_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_get_maximum_set_gen.py @@ -32,13 +32,13 @@ def main(): response = client.avs_vm_volumes.get( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - avs_vm_id="cbdec-ddbb", - volume_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + avs_vm_id="abc123def456", + volume_id="a1b2c3d4-e5f6", ) print(response) -# x-ms-original-file: 2024-11-01/AvsVmVolumes_Get_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsVmVolumes_Get_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_list_by_avs_vm_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_list_by_avs_vm_maximum_set_gen.py index 361950bc6241..3edf55d9837a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_list_by_avs_vm_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_list_by_avs_vm_maximum_set_gen.py @@ -32,13 +32,13 @@ def main(): response = client.avs_vm_volumes.list_by_avs_vm( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - avs_vm_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + avs_vm_id="abc123def456", ) for item in response: print(item) -# x-ms-original-file: 2024-11-01/AvsVmVolumes_ListByAvsVm_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsVmVolumes_ListByAvsVm_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_update_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_update_maximum_set_gen.py index 0672c124adea..b276b9f44a64 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_update_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vm_volumes_update_maximum_set_gen.py @@ -32,14 +32,14 @@ def main(): response = client.avs_vm_volumes.begin_update( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - avs_vm_id="cbdec-ddbb", - volume_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + avs_vm_id="abc123def456", + volume_id="a1b2c3d4-e5f6", properties={"properties": {"softDeletion": {"destroyed": True}}}, ).result() print(response) -# x-ms-original-file: 2024-11-01/AvsVmVolumes_Update_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsVmVolumes_Update_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_delete_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_delete_maximum_set_gen.py index d021dfe1d0e3..b32682e9bc06 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_delete_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_delete_maximum_set_gen.py @@ -32,11 +32,11 @@ def main(): client.avs_vms.begin_delete( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - avs_vm_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + avs_vm_id="abc123def456", ).result() -# x-ms-original-file: 2024-11-01/AvsVms_Delete_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsVms_Delete_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_get_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_get_maximum_set_gen.py index fb135597726c..b2f88900f82e 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_get_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_get_maximum_set_gen.py @@ -32,12 +32,12 @@ def main(): response = client.avs_vms.get( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - avs_vm_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + avs_vm_id="abc123def456", ) print(response) -# x-ms-original-file: 2024-11-01/AvsVms_Get_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsVms_Get_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_list_by_storage_pool_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_list_by_storage_pool_maximum_set_gen.py index c95dc0da1006..9034f1dfa6f8 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_list_by_storage_pool_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_list_by_storage_pool_maximum_set_gen.py @@ -32,12 +32,12 @@ def main(): response = client.avs_vms.list_by_storage_pool( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", ) for item in response: print(item) -# x-ms-original-file: 2024-11-01/AvsVms_ListByStoragePool_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsVms_ListByStoragePool_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_update_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_update_maximum_set_gen.py index 628634ac787a..74ba2badfd19 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_update_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/avs_vms_update_maximum_set_gen.py @@ -32,13 +32,13 @@ def main(): response = client.avs_vms.begin_update( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", - avs_vm_id="cbdec-ddbb", + storage_pool_name="storagepool-01", + avs_vm_id="abc123def456", properties={"properties": {"softDeletion": {"destroyed": True}}}, ).result() print(response) -# x-ms-original-file: 2024-11-01/AvsVms_Update_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/AvsVms_Update_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/operations_list_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/operations_list_maximum_set_gen.py index 949022314563..d954136337ed 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/operations_list_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/operations_list_maximum_set_gen.py @@ -35,6 +35,6 @@ def main(): print(item) -# x-ms-original-file: 2024-11-01/Operations_List_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/Operations_List_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/operations_list_minimum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/operations_list_minimum_set_gen.py index 68583d8ac6cc..da1a1dd29498 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/operations_list_minimum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/operations_list_minimum_set_gen.py @@ -35,6 +35,6 @@ def main(): print(item) -# x-ms-original-file: 2024-11-01/Operations_List_MinimumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/Operations_List_MinimumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_create_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_create_maximum_set_gen.py new file mode 100644 index 000000000000..f0dbd1b8bcad --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_create_maximum_set_gen.py @@ -0,0 +1,77 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python reservations_create_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.reservations.begin_create( + resource_group_name="rgpurestorage", + reservation_name="reservation-01", + resource={ + "location": "eastus", + "properties": { + "marketplace": { + "offerDetails": { + "offerId": "purestorage-block-offer", + "planId": "standard-plan", + "planName": "Standard Plan", + "publisherId": "pure_storage", + "termId": "12-month-term", + "termUnit": "month", + }, + "subscriptionStatus": "PendingFulfillmentStart", + }, + "user": { + "companyDetails": { + "address": { + "addressLine1": "1 Microsoft Way", + "addressLine2": "Suite 100", + "city": "Redmond", + "country": "United States", + "postalCode": "98052", + "state": "Washington", + }, + "companyName": "Contoso Ltd.", + }, + "emailAddress": "john.doe@contoso.com", + "firstName": "John", + "lastName": "Doe", + "phoneNumber": "+1-425-555-1234", + "upn": "john.doe@contoso.com", + }, + }, + "tags": {"environment": "production"}, + }, + ).result() + print(response) + + +# x-ms-original-file: 2026-01-01-preview/Reservations_Create_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_delete_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_delete_maximum_set_gen.py new file mode 100644 index 000000000000..ccb56b2e4e49 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_delete_maximum_set_gen.py @@ -0,0 +1,41 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python reservations_delete_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.reservations.begin_delete( + resource_group_name="rgpurestorage", + reservation_name="storagepool-01", + ).result() + + +# x-ms-original-file: 2026-01-01-preview/Reservations_Delete_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_billing_report_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_billing_report_maximum_set_gen.py index aa036cc9be16..7c6bd9c4c8c2 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_billing_report_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_billing_report_maximum_set_gen.py @@ -37,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: 2024-11-01/Reservations_GetBillingReport_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/Reservations_GetBillingReport_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_billing_status_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_billing_status_maximum_set_gen.py index 7a81f4b7e153..4c9bd5d61eb1 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_billing_status_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_billing_status_maximum_set_gen.py @@ -37,6 +37,6 @@ def main(): print(response) -# x-ms-original-file: 2024-11-01/Reservations_GetBillingStatus_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/Reservations_GetBillingStatus_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_maximum_set_gen.py new file mode 100644 index 000000000000..6399e3ac73b5 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_maximum_set_gen.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python reservations_get_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.reservations.get( + resource_group_name="rgpurestorage", + reservation_name="storagepool-01", + ) + print(response) + + +# x-ms-original-file: 2026-01-01-preview/Reservations_Get_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_resource_limits_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_resource_limits_maximum_set_gen.py index 29d053f427c2..88e1b3c4f19c 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_resource_limits_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_get_resource_limits_maximum_set_gen.py @@ -32,11 +32,11 @@ def main(): response = client.reservations.get_resource_limits( resource_group_name="rgpurestorage", - reservation_name="storagePoolname", + reservation_name="storagepool-01", ) print(response) -# x-ms-original-file: 2024-11-01/Reservations_GetResourceLimits_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/Reservations_GetResourceLimits_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_list_by_resource_group_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_list_by_resource_group_maximum_set_gen.py new file mode 100644 index 000000000000..2943217ad286 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_list_by_resource_group_maximum_set_gen.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python reservations_list_by_resource_group_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.reservations.list_by_resource_group( + resource_group_name="rgpurestorage", + ) + for item in response: + print(item) + + +# x-ms-original-file: 2026-01-01-preview/Reservations_ListByResourceGroup_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_list_by_subscription_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_list_by_subscription_maximum_set_gen.py new file mode 100644 index 000000000000..e708c76a1562 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_list_by_subscription_maximum_set_gen.py @@ -0,0 +1,40 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python reservations_list_by_subscription_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.reservations.list_by_subscription() + for item in response: + print(item) + + +# x-ms-original-file: 2026-01-01-preview/Reservations_ListBySubscription_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_update_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_update_maximum_set_gen.py new file mode 100644 index 000000000000..9f7564828596 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/reservations_update_maximum_set_gen.py @@ -0,0 +1,65 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python reservations_update_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.reservations.begin_update( + resource_group_name="rgpurestorage", + reservation_name="storagepool-01", + properties={ + "properties": { + "user": { + "companyDetails": { + "address": { + "addressLine1": "ryaasdffnhwialrgmukpiwtcjgbb", + "addressLine2": "cvyuuqnvuqfrpkoplfzmhnwrqsbsgn", + "city": "kdpzfxfbgozxwunkkhjthqdsnmce", + "country": "trmpjpxsfmxprlnv", + "postalCode": "yjttfktdxdzhsgomefhcn", + "state": "fygrbnektar", + }, + "companyName": "uleytbkckdhaiykwjjcjqmnlik", + }, + "emailAddress": "john.doe@contoso.com", + "firstName": "sjzquetrvxcrajxdfwfeuro", + "lastName": "qimvqxnlbclfouwzfk", + "phoneNumber": "jfljnoxsfsplwczwgvmlurfnorimvl", + "upn": "pvafwnbigmhuigxfu", + } + }, + "tags": {"key8751": "oikntqrti"}, + }, + ).result() + print(response) + + +# x-ms-original-file: 2026-01-01-preview/Reservations_Update_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_create_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_create_maximum_set_gen.py index 777bd53c2faa..7dacb7279b82 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_create_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_create_maximum_set_gen.py @@ -1,3 +1,4 @@ +# pylint: disable=line-too-long,useless-suppression # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -32,23 +33,29 @@ def main(): response = client.storage_pools.begin_create( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", resource={ - "identity": {"type": "None", "userAssignedIdentities": {"key4211": {}}}, - "location": "lonlc", + "identity": {"type": "None", "userAssignedIdentities": {"identity-01": {}}}, + "location": "eastus", "properties": { - "availabilityZone": "vknyl", - "avs": {"avsEnabled": True, "sddcResourceId": "zekrdsarbkwcbvpzhmuwoazogziwms"}, + "availabilityZone": "1", + "avs": { + "avsEnabled": True, + "sddcResourceId": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/rgpurestorage/providers/Microsoft.AVS/privateClouds/avs-cloud-01", + }, "provisionedBandwidthMbPerSec": 17, - "reservationResourceId": "xiowoxnbtcotutcmmrofvgdi", - "vnetInjection": {"subnetId": "tnlctolrxdvnkjiphlrdxq", "vnetId": "zbumtytyqwewjcyckwqchiypshv"}, + "reservationResourceId": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/rgpurestorage/providers/PureStorage.Block/reservations/reservation-01", + "vnetInjection": { + "subnetId": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/rgpurestorage/providers/Microsoft.Network/virtualNetworks/vnet-01/subnets/subnet-01", + "vnetId": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/rgpurestorage/providers/Microsoft.Network/virtualNetworks/vnet-01", + }, }, - "tags": {"key7593": "vsyiygyurvwlfaezpuqu"}, + "tags": {"environment": "production"}, }, ).result() print(response) -# x-ms-original-file: 2024-11-01/StoragePools_Create_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_Create_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_delete_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_delete_maximum_set_gen.py index 2a2059004580..512851a5b1da 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_delete_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_delete_maximum_set_gen.py @@ -32,10 +32,10 @@ def main(): client.storage_pools.begin_delete( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", ).result() -# x-ms-original-file: 2024-11-01/StoragePools_Delete_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_Delete_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_disable_avs_connection_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_disable_avs_connection_maximum_set_gen.py index 2078979fd516..3d38b0ff1015 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_disable_avs_connection_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_disable_avs_connection_maximum_set_gen.py @@ -32,10 +32,10 @@ def main(): client.storage_pools.begin_disable_avs_connection( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", ).result() -# x-ms-original-file: 2024-11-01/StoragePools_DisableAvsConnection_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_DisableAvsConnection_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_enable_avs_connection_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_enable_avs_connection_maximum_set_gen.py index d18bc2565491..90ff944d58ef 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_enable_avs_connection_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_enable_avs_connection_maximum_set_gen.py @@ -32,11 +32,11 @@ def main(): client.storage_pools.begin_enable_avs_connection( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", properties={"sddcResourceId": "tghkgktlddwlszbeh"}, ).result() -# x-ms-original-file: 2024-11-01/StoragePools_EnableAvsConnection_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_EnableAvsConnection_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_finalize_avs_connection_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_finalize_avs_connection_maximum_set_gen.py index c933529f9b20..3b7173f23527 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_finalize_avs_connection_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_finalize_avs_connection_maximum_set_gen.py @@ -32,7 +32,7 @@ def main(): client.storage_pools.begin_finalize_avs_connection( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", properties={ "serviceInitializationData": { "serviceAccountPassword": "i", @@ -45,6 +45,6 @@ def main(): ).result() -# x-ms-original-file: 2024-11-01/StoragePools_FinalizeAvsConnection_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_FinalizeAvsConnection_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_avs_connection_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_avs_connection_maximum_set_gen.py index 39cd2b859a72..377fd94514a9 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_avs_connection_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_avs_connection_maximum_set_gen.py @@ -32,11 +32,11 @@ def main(): response = client.storage_pools.get_avs_connection( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", ) print(response) -# x-ms-original-file: 2024-11-01/StoragePools_GetAvsConnection_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_GetAvsConnection_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_avs_status_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_avs_status_maximum_set_gen.py index ee61246888d9..dd50117b76c2 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_avs_status_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_avs_status_maximum_set_gen.py @@ -32,11 +32,11 @@ def main(): response = client.storage_pools.get_avs_status( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", ) print(response) -# x-ms-original-file: 2024-11-01/StoragePools_GetAvsStatus_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_GetAvsStatus_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_health_status_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_health_status_maximum_set_gen.py index dfbce72f0c72..015e041cbd8a 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_health_status_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_health_status_maximum_set_gen.py @@ -32,11 +32,11 @@ def main(): response = client.storage_pools.get_health_status( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", ) print(response) -# x-ms-original-file: 2024-11-01/StoragePools_GetHealthStatus_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_GetHealthStatus_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_maximum_set_gen.py index 44b62c1fb689..710591c0886c 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_get_maximum_set_gen.py @@ -32,11 +32,11 @@ def main(): response = client.storage_pools.get( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", ) print(response) -# x-ms-original-file: 2024-11-01/StoragePools_Get_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_Get_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_list_by_resource_group_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_list_by_resource_group_maximum_set_gen.py index c5e3c62f36a8..12f577307ad6 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_list_by_resource_group_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_list_by_resource_group_maximum_set_gen.py @@ -37,6 +37,6 @@ def main(): print(item) -# x-ms-original-file: 2024-11-01/StoragePools_ListByResourceGroup_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_ListByResourceGroup_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_list_by_subscription_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_list_by_subscription_maximum_set_gen.py index 9b8ace6c69fb..eba075a37d94 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_list_by_subscription_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_list_by_subscription_maximum_set_gen.py @@ -35,6 +35,6 @@ def main(): print(item) -# x-ms-original-file: 2024-11-01/StoragePools_ListBySubscription_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_ListBySubscription_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_repair_avs_connection_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_repair_avs_connection_maximum_set_gen.py index ef9503591347..b49a381b2291 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_repair_avs_connection_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_repair_avs_connection_maximum_set_gen.py @@ -32,10 +32,10 @@ def main(): client.storage_pools.begin_repair_avs_connection( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", ).result() -# x-ms-original-file: 2024-11-01/StoragePools_RepairAvsConnection_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_RepairAvsConnection_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_update_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_update_maximum_set_gen.py index da43b39da18f..7d9f50eab148 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_update_maximum_set_gen.py +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/storage_pools_update_maximum_set_gen.py @@ -32,16 +32,16 @@ def main(): response = client.storage_pools.begin_update( resource_group_name="rgpurestorage", - storage_pool_name="storagePoolname", + storage_pool_name="storagepool-01", properties={ - "identity": {"type": "None", "userAssignedIdentities": {"key4211": {}}}, + "identity": {"type": "None", "userAssignedIdentities": {"identity-01": {}}}, "properties": {"provisionedBandwidthMbPerSec": 23}, - "tags": {"key9065": "ebgmkwxqewe"}, + "tags": {"key9065": "ebgRead Storage Poolswxqewe"}, }, ).result() print(response) -# x-ms-original-file: 2024-11-01/StoragePools_Update_MaximumSet_Gen.json +# x-ms-original-file: 2026-01-01-preview/StoragePools_Update_MaximumSet_Gen.json if __name__ == "__main__": main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_create_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_create_maximum_set_gen.py new file mode 100644 index 000000000000..79b160ccede9 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_create_maximum_set_gen.py @@ -0,0 +1,51 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volume_groups_create_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volume_groups.begin_create( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + resource={ + "location": "eastus", + "properties": { + "performanceParameters": {"bandwidthLimitMbPerSec": 500, "iopsLimit": 10000}, + "protectionParameters": {"frequency": "PT1H", "retention": "P7D"}, + }, + "tags": {"environment": "production"}, + }, + ).result() + print(response) + + +# x-ms-original-file: 2026-01-01-preview/VolumeGroups_Create_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_delete_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_delete_maximum_set_gen.py new file mode 100644 index 000000000000..b4a60b89b6df --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_delete_maximum_set_gen.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volume_groups_delete_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.volume_groups.begin_delete( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + ).result() + + +# x-ms-original-file: 2026-01-01-preview/VolumeGroups_Delete_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_get_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_get_maximum_set_gen.py new file mode 100644 index 000000000000..03f1aaa757bd --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_get_maximum_set_gen.py @@ -0,0 +1,43 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volume_groups_get_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volume_groups.get( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + ) + print(response) + + +# x-ms-original-file: 2026-01-01-preview/VolumeGroups_Get_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_get_status_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_get_status_maximum_set_gen.py new file mode 100644 index 000000000000..3f5eaeabcfeb --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_get_status_maximum_set_gen.py @@ -0,0 +1,43 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volume_groups_get_status_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volume_groups.get_status( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + ) + print(response) + + +# x-ms-original-file: 2026-01-01-preview/VolumeGroups_GetStatus_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_list_by_storage_pool_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_list_by_storage_pool_maximum_set_gen.py new file mode 100644 index 000000000000..fc72e9443ffe --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_list_by_storage_pool_maximum_set_gen.py @@ -0,0 +1,43 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volume_groups_list_by_storage_pool_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volume_groups.list_by_storage_pool( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + ) + for item in response: + print(item) + + +# x-ms-original-file: 2026-01-01-preview/VolumeGroups_ListByStoragePool_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_list_connection_parameters_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_list_connection_parameters_maximum_set_gen.py new file mode 100644 index 000000000000..4cf85d04885f --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_list_connection_parameters_maximum_set_gen.py @@ -0,0 +1,43 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volume_groups_list_connection_parameters_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volume_groups.list_connection_parameters( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + ) + print(response) + + +# x-ms-original-file: 2026-01-01-preview/VolumeGroups_ListConnectionParameters_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_update_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_update_maximum_set_gen.py new file mode 100644 index 000000000000..bb6557220047 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volume_groups_update_maximum_set_gen.py @@ -0,0 +1,50 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volume_groups_update_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volume_groups.begin_update( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + properties={ + "properties": { + "performanceParameters": {"bandwidthLimitMbPerSec": 750, "iopsLimit": 15000}, + "protectionParameters": {"frequency": "PT2H", "retention": "P14D"}, + }, + "tags": {"environment": "production"}, + }, + ).result() + print(response) + + +# x-ms-original-file: 2026-01-01-preview/VolumeGroups_Update_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_create_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_create_maximum_set_gen.py new file mode 100644 index 000000000000..623051d4cc12 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_create_maximum_set_gen.py @@ -0,0 +1,51 @@ +# pylint: disable=line-too-long,useless-suppression +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volumes_create_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volumes.begin_create( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + volume_name="volume-01", + resource={ + "properties": { + "provisionedSize": 10737418240, + "sourceVolumeResourceId": "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/rgpurestorage/providers/PureStorage.Block/storagePools/storagepool-01/volumeGroups/volumegroup-01/volumes/source-volume", + } + }, + ).result() + print(response) + + +# x-ms-original-file: 2026-01-01-preview/Volumes_Create_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_delete_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_delete_maximum_set_gen.py new file mode 100644 index 000000000000..be72f876f1eb --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_delete_maximum_set_gen.py @@ -0,0 +1,43 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volumes_delete_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + client.volumes.begin_delete( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + volume_name="volume-01", + ).result() + + +# x-ms-original-file: 2026-01-01-preview/Volumes_Delete_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_get_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_get_maximum_set_gen.py new file mode 100644 index 000000000000..a2f873ff8ceb --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_get_maximum_set_gen.py @@ -0,0 +1,44 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volumes_get_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volumes.get( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + volume_name="volume-01", + ) + print(response) + + +# x-ms-original-file: 2026-01-01-preview/Volumes_Get_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_list_by_volume_group_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_list_by_volume_group_maximum_set_gen.py new file mode 100644 index 000000000000..788480cc8cd7 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_list_by_volume_group_maximum_set_gen.py @@ -0,0 +1,44 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volumes_list_by_volume_group_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volumes.list_by_volume_group( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + ) + for item in response: + print(item) + + +# x-ms-original-file: 2026-01-01-preview/Volumes_ListByVolumeGroup_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_update_maximum_set_gen.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_update_maximum_set_gen.py new file mode 100644 index 000000000000..968b2f00b122 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_samples/volumes_update_maximum_set_gen.py @@ -0,0 +1,45 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.identity import DefaultAzureCredential + +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +""" +# PREREQUISITES + pip install azure-identity + pip install azure-mgmt-purestorageblock +# USAGE + python volumes_update_maximum_set_gen.py + + Before run the sample, please set the values of the client ID, tenant ID and client secret + of the AAD application as environment variables: AZURE_CLIENT_ID, AZURE_TENANT_ID, + AZURE_CLIENT_SECRET. For more info about how to get the value, please see: + https://docs.microsoft.com/azure/active-directory/develop/howto-create-service-principal-portal +""" + + +def main(): + client = PureStorageBlockMgmtClient( + credential=DefaultAzureCredential(), + subscription_id="SUBSCRIPTION_ID", + ) + + response = client.volumes.begin_update( + resource_group_name="rgpurestorage", + storage_pool_name="storagepool-01", + volume_group_name="volumegroup-01", + volume_name="volume-01", + properties={"properties": {"provisionedSize": 21474836480}}, + ).result() + print(response) + + +# x-ms-original-file: 2026-01-01-preview/Volumes_Update_MaximumSet_Gen.json +if __name__ == "__main__": + main() diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volume_groups_operations.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volume_groups_operations.py new file mode 100644 index 000000000000..01bbc7f3afbc --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volume_groups_operations.py @@ -0,0 +1,132 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestPureStorageBlockMgmtVolumeGroupsOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(PureStorageBlockMgmtClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volume_groups_get(self, resource_group): + response = self.client.volume_groups.get( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volume_groups_begin_create(self, resource_group): + response = self.client.volume_groups.begin_create( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + resource={ + "location": "str", + "id": "str", + "name": "str", + "properties": { + "performanceParameters": {"bandwidthLimitMbPerSec": 0, "iopsLimit": 0}, + "protectionParameters": {"frequency": "1 day, 0:00:00", "retention": "1 day, 0:00:00"}, + "provisioningState": "str", + "sourceVolumeGroupResourceId": "str", + "storagePoolInternalId": "str", + "volumeGroupInternalId": "str", + }, + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "tags": {"str": "str"}, + "type": "str", + }, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volume_groups_begin_update(self, resource_group): + response = self.client.volume_groups.begin_update( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + properties={ + "properties": { + "performanceParameters": {"bandwidthLimitMbPerSec": 0, "iopsLimit": 0}, + "protectionParameters": {"frequency": "1 day, 0:00:00", "retention": "1 day, 0:00:00"}, + }, + "tags": {"str": "str"}, + }, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volume_groups_begin_delete(self, resource_group): + response = self.client.volume_groups.begin_delete( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volume_groups_list_by_storage_pool(self, resource_group): + response = self.client.volume_groups.list_by_storage_pool( + resource_group_name=resource_group.name, + storage_pool_name="str", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volume_groups_list_connection_parameters(self, resource_group): + response = self.client.volume_groups.list_connection_parameters( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volume_groups_get_status(self, resource_group): + response = self.client.volume_groups.get_status( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volume_groups_operations_async.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volume_groups_operations_async.py new file mode 100644 index 000000000000..99c5cf82f986 --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volume_groups_operations_async.py @@ -0,0 +1,139 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.purestorageblock.aio import PureStorageBlockMgmtClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestPureStorageBlockMgmtVolumeGroupsOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(PureStorageBlockMgmtClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volume_groups_get(self, resource_group): + response = await self.client.volume_groups.get( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volume_groups_begin_create(self, resource_group): + response = await ( + await self.client.volume_groups.begin_create( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + resource={ + "location": "str", + "id": "str", + "name": "str", + "properties": { + "performanceParameters": {"bandwidthLimitMbPerSec": 0, "iopsLimit": 0}, + "protectionParameters": {"frequency": "1 day, 0:00:00", "retention": "1 day, 0:00:00"}, + "provisioningState": "str", + "sourceVolumeGroupResourceId": "str", + "storagePoolInternalId": "str", + "volumeGroupInternalId": "str", + }, + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "tags": {"str": "str"}, + "type": "str", + }, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volume_groups_begin_update(self, resource_group): + response = await ( + await self.client.volume_groups.begin_update( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + properties={ + "properties": { + "performanceParameters": {"bandwidthLimitMbPerSec": 0, "iopsLimit": 0}, + "protectionParameters": {"frequency": "1 day, 0:00:00", "retention": "1 day, 0:00:00"}, + }, + "tags": {"str": "str"}, + }, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volume_groups_begin_delete(self, resource_group): + response = await ( + await self.client.volume_groups.begin_delete( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volume_groups_list_by_storage_pool(self, resource_group): + response = self.client.volume_groups.list_by_storage_pool( + resource_group_name=resource_group.name, + storage_pool_name="str", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volume_groups_list_connection_parameters(self, resource_group): + response = await self.client.volume_groups.list_connection_parameters( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volume_groups_get_status(self, resource_group): + response = await self.client.volume_groups.get_status( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ) + + # please add some check logic here by yourself + # ... diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volumes_operations.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volumes_operations.py new file mode 100644 index 000000000000..ee744e4c3b1a --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volumes_operations.py @@ -0,0 +1,106 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.purestorageblock import PureStorageBlockMgmtClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer, recorded_by_proxy + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestPureStorageBlockMgmtVolumesOperations(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(PureStorageBlockMgmtClient) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volumes_get(self, resource_group): + response = self.client.volumes.get( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + volume_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volumes_begin_create(self, resource_group): + response = self.client.volumes.begin_create( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + volume_name="str", + resource={ + "id": "str", + "name": "str", + "properties": { + "createdAt": "2020-02-20 00:00:00", + "provisionedSize": 0, + "provisioningState": "str", + "serialNumber": "str", + "sourceVolumeGroupResourceId": "str", + "sourceVolumeResourceId": "str", + "space": {"shared": 0, "snapshots": 0, "totalUsed": 0, "unique": 0}, + }, + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + }, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volumes_begin_update(self, resource_group): + response = self.client.volumes.begin_update( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + volume_name="str", + properties={"properties": {"provisionedSize": 0}}, + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volumes_begin_delete(self, resource_group): + response = self.client.volumes.begin_delete( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + volume_name="str", + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy + def test_volumes_list_by_volume_group(self, resource_group): + response = self.client.volumes.list_by_volume_group( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ) + result = [r for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volumes_operations_async.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volumes_operations_async.py new file mode 100644 index 000000000000..feb1f24d208e --- /dev/null +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/generated_tests/test_pure_storage_block_mgmt_volumes_operations_async.py @@ -0,0 +1,113 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 Microsoft (R) Python Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +import pytest +from azure.mgmt.purestorageblock.aio import PureStorageBlockMgmtClient + +from devtools_testutils import AzureMgmtRecordedTestCase, RandomNameResourceGroupPreparer +from devtools_testutils.aio import recorded_by_proxy_async + +AZURE_LOCATION = "eastus" + + +@pytest.mark.skip("you may need to update the auto-generated test case before run it") +class TestPureStorageBlockMgmtVolumesOperationsAsync(AzureMgmtRecordedTestCase): + def setup_method(self, method): + self.client = self.create_mgmt_client(PureStorageBlockMgmtClient, is_async=True) + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volumes_get(self, resource_group): + response = await self.client.volumes.get( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + volume_name="str", + ) + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volumes_begin_create(self, resource_group): + response = await ( + await self.client.volumes.begin_create( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + volume_name="str", + resource={ + "id": "str", + "name": "str", + "properties": { + "createdAt": "2020-02-20 00:00:00", + "provisionedSize": 0, + "provisioningState": "str", + "serialNumber": "str", + "sourceVolumeGroupResourceId": "str", + "sourceVolumeResourceId": "str", + "space": {"shared": 0, "snapshots": 0, "totalUsed": 0, "unique": 0}, + }, + "systemData": { + "createdAt": "2020-02-20 00:00:00", + "createdBy": "str", + "createdByType": "str", + "lastModifiedAt": "2020-02-20 00:00:00", + "lastModifiedBy": "str", + "lastModifiedByType": "str", + }, + "type": "str", + }, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volumes_begin_update(self, resource_group): + response = await ( + await self.client.volumes.begin_update( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + volume_name="str", + properties={"properties": {"provisionedSize": 0}}, + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volumes_begin_delete(self, resource_group): + response = await ( + await self.client.volumes.begin_delete( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + volume_name="str", + ) + ).result() # call '.result()' to poll until service return final result + + # please add some check logic here by yourself + # ... + + @RandomNameResourceGroupPreparer(location=AZURE_LOCATION) + @recorded_by_proxy_async + async def test_volumes_list_by_volume_group(self, resource_group): + response = self.client.volumes.list_by_volume_group( + resource_group_name=resource_group.name, + storage_pool_name="str", + volume_group_name="str", + ) + result = [r async for r in response] + # please add some check logic here by yourself + # ... diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/pyproject.toml b/sdk/purestorageblock/azure-mgmt-purestorageblock/pyproject.toml index ce5cf69b33f0..8558bee38e78 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/pyproject.toml +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/pyproject.toml @@ -1,4 +1,85 @@ +[build-system] +requires = [ + "setuptools>=77.0.3", + "wheel", +] +build-backend = "setuptools.build_meta" + +[project] +name = "azure-mgmt-purestorageblock" +authors = [ + { name = "Microsoft Corporation", email = "azpysdkhelp@microsoft.com" }, +] +description = "Microsoft Azure Purestorageblock Management Client Library for Python" +license = "MIT" +classifiers = [ + "Development Status :: 4 - Beta", + "Programming Language :: Python", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", +] +requires-python = ">=3.10" +keywords = [ + "azure", + "azure sdk", +] +dependencies = [ + "isodate>=0.6.1", + "azure-mgmt-core>=1.6.0", + "typing-extensions>=4.6.0", +] +dynamic = [ + "version", + "readme", +] + +[project.urls] +repository = "https://github.com/Azure/azure-sdk-for-python" + +[tool.setuptools.dynamic.version] +attr = "azure.mgmt.purestorageblock._version.VERSION" + +[tool.setuptools.dynamic.readme] +file = [ + "README.md", + "CHANGELOG.md", +] +content-type = "text/markdown" + +[tool.setuptools.packages.find] +exclude = [ + "tests*", + "generated_tests*", + "samples*", + "generated_samples*", + "doc*", + "azure", + "azure.mgmt", +] + +[tool.setuptools.package-data] +pytyped = [ + "py.typed", +] + [tool.azure-sdk-build] breaking = false pyright = false mypy = false + +[packaging] +package_name = "azure-mgmt-purestorageblock" +package_nspkg = "azure-mgmt-nspkg" +package_pprint_name = "Purestorageblock Management" +package_doc_id = "" +is_stable = false +is_arm = true +need_msrestazure = false +need_azuremgmtcore = true +sample_link = "" +exclude_folders = "" +title = "PureStorageBlockMgmtClient" diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/sdk_packaging.toml b/sdk/purestorageblock/azure-mgmt-purestorageblock/sdk_packaging.toml deleted file mode 100644 index 7e6103f10931..000000000000 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/sdk_packaging.toml +++ /dev/null @@ -1,12 +0,0 @@ -[packaging] -package_name = "azure-mgmt-purestorageblock" -package_nspkg = "azure-mgmt-nspkg" -package_pprint_name = "Purestorageblock Management" -package_doc_id = "" -is_stable = true -is_arm = true -need_msrestazure = false -need_azuremgmtcore = true -sample_link = "" -exclude_folders = "" -title = "PureStorageBlockMgmtClient" diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/setup.py b/sdk/purestorageblock/azure-mgmt-purestorageblock/setup.py deleted file mode 100644 index eb3f6d5c79af..000000000000 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/setup.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env python - -# ------------------------------------------------------------------------- -# Copyright (c) Microsoft Corporation. All rights reserved. -# Licensed under the MIT License. See License.txt in the project root for -# license information. -# -------------------------------------------------------------------------- - -import re -import os.path -from io import open -from setuptools import find_packages, setup - -# Change the PACKAGE_NAME only to change folder and different name -PACKAGE_NAME = "azure-mgmt-purestorageblock" -PACKAGE_PPRINT_NAME = "Purestorageblock Management" - -# a-b-c => a/b/c -package_folder_path = PACKAGE_NAME.replace("-", "/") -# a-b-c => a.b.c -namespace_name = PACKAGE_NAME.replace("-", ".") - -# Version extraction inspired from 'requests' -with open( - os.path.join(package_folder_path, "version.py") - if os.path.exists(os.path.join(package_folder_path, "version.py")) - else os.path.join(package_folder_path, "_version.py"), - "r", -) as fd: - version = re.search(r'^VERSION\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(), re.MULTILINE).group(1) - -if not version: - raise RuntimeError("Cannot find version information") - -with open("README.md", encoding="utf-8") as f: - readme = f.read() -with open("CHANGELOG.md", encoding="utf-8") as f: - changelog = f.read() - -setup( - name=PACKAGE_NAME, - version=version, - description="Microsoft Azure {} Client Library for Python".format(PACKAGE_PPRINT_NAME), - long_description=readme + "\n\n" + changelog, - long_description_content_type="text/markdown", - license="MIT License", - author="Microsoft Corporation", - author_email="azpysdkhelp@microsoft.com", - url="https://github.com/Azure/azure-sdk-for-python", - keywords="azure, azure sdk", # update with search keywords relevant to the azure service / product - classifiers=[ - "Development Status :: 5 - Production/Stable", - "Programming Language :: Python", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", - "License :: OSI Approved :: MIT License", - ], - zip_safe=False, - packages=find_packages( - exclude=[ - "tests", - # Exclude packages that will be covered by PEP420 or nspkg - "azure", - "azure.mgmt", - ] - ), - include_package_data=True, - package_data={ - "pytyped": ["py.typed"], - }, - install_requires=[ - "isodate>=0.6.1", - "typing-extensions>=4.6.0", - "azure-common>=1.1", - "azure-mgmt-core>=1.5.0", - ], - python_requires=">=3.9", -) diff --git a/sdk/purestorageblock/azure-mgmt-purestorageblock/tsp-location.yaml b/sdk/purestorageblock/azure-mgmt-purestorageblock/tsp-location.yaml index b6ca69a17fb6..04eae87dd6e5 100644 --- a/sdk/purestorageblock/azure-mgmt-purestorageblock/tsp-location.yaml +++ b/sdk/purestorageblock/azure-mgmt-purestorageblock/tsp-location.yaml @@ -1,4 +1,4 @@ directory: specification/purestorage/PureStorage.Block.Management -commit: 5f272067844826380939c0b3f24ca3cc99dbe308 +commit: ced46686079690b9f9116cc03fac68f8afe4d1af repo: Azure/azure-rest-api-specs additionalDirectories: