diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 940c7ae84e9..bda2c789d63 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -193,3 +193,5 @@ /src/webpubsub/ @zackliu /src/connectedvmware/ @sanmishra18 + +/src/diskpool/ @Juliehzl diff --git a/scripts/ci/credscan/CredScanSuppressions.json b/scripts/ci/credscan/CredScanSuppressions.json index 0c3916a440f..7ba3b3ab067 100644 --- a/scripts/ci/credscan/CredScanSuppressions.json +++ b/scripts/ci/credscan/CredScanSuppressions.json @@ -100,11 +100,17 @@ ], "_justification": "dummy passwords for one-off resources" }, - { + { "file": [ "src\\storage-blob-preview\\azext_storage_blob_preview\\tests\\latest\\recordings\\test_storage_blob_incremental_copy.yaml" ], "_justification": "[Storage] response body contains random value recognized as secret in outdated recoding files of storage may remove in the future" + }, + { + "file": [ + "src\\diskpool\\README.md" + ], + "_justification": "Faked password" } ] } diff --git a/src/diskpool/HISTORY.rst b/src/diskpool/HISTORY.rst new file mode 100644 index 00000000000..1c139576ba0 --- /dev/null +++ b/src/diskpool/HISTORY.rst @@ -0,0 +1,8 @@ +.. :changelog: + +Release History +=============== + +0.1.0 +++++++ +* Initial release. diff --git a/src/diskpool/README.md b/src/diskpool/README.md new file mode 100644 index 00000000000..d895aaad5cc --- /dev/null +++ b/src/diskpool/README.md @@ -0,0 +1,64 @@ +# Azure CLI Extension # +This is the extension for diskpool + +### How to use ### +Install this extension using the below CLI command +``` +az extension add -s https://zuhdefault.blob.core.windows.net/cliext/diskpool-0.2.0-py3-none-any.whl +``` + +### Included Features ### +#### disk-pool #### +##### Create ##### +``` +az disk-pool create --name "myDiskPool" --location "westus" --availability-zones "1" \ + --disks id="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_0" \ + --disks id="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_1" \ + --subnet-id "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myvnet/subnets/mysubnet" \ + --sku name="Standard_ABC" --tags key="value" --resource-group "myResourceGroup" + +az disk-pool wait --created --name "myDiskPool" --resource-group "myResourceGroup" +``` +##### Show ##### +``` +az disk-pool show --name "myDiskPool" --resource-group "myResourceGroup" +``` +##### List ##### +``` +az disk-pool list --resource-group "myResourceGroup" +``` +##### Update ##### +``` +az disk-pool update --name "myDiskPool" --location "westus" --availability-zones "1" \ + --disks id="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_0" \ + --disks id="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_1" \ + --subnet-id "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/providers/Microsoft.Network/virtualNetworks/myvnet/subnets/mysubnet" \ + --tags key="value" --resource-group "myResourceGroup" +``` +##### Delete ##### +``` +az disk-pool delete --name "myDiskPool" --resource-group "myResourceGroup" +``` +#### disk-pool iscsi-target #### +##### Create ##### +``` +az disk-pool iscsi-target create --disk-pool-name "myDiskPool" --name "myIscsiTarget" \ + --target-iqn "iqn.2005-03.org.iscsi:server1" \ + --tpgs "[{\\"acls\\":[{\\"credentials\\":{\\"password\\":\\"some_pa$$word\\",\\"username\\":\\"some_username\\"},\\"initiatorIqn\\":\\"iqn.2005-03.org.iscsi:client\\",\\"mappedLuns\\":[\\"lun0\\"]}],\\"attributes\\":{\\"authentication\\":true,\\"prodModeWriteProtect\\":false},\\"luns\\":[{\\"name\\":\\"lun0\\",\\"managedDiskAzureResourceId\\":\\"/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_1\\"}]}]" \ + --resource-group "myResourceGroup" + +az disk-pool iscsi-target wait --created --name "myIscsiTarget" --resource-group "myResourceGroup" +``` +##### Show ##### +``` +az disk-pool iscsi-target show --disk-pool-name "myDiskPool" --name "myIscsiTarget" --resource-group "myResourceGroup" +``` +##### List ##### +``` +az disk-pool iscsi-target list --disk-pool-name "myDiskPool" --resource-group "myResourceGroup" +``` +##### Delete ##### +``` +az disk-pool iscsi-target delete --disk-pool-name "myDiskPool" --name "myIscsiTarget" \ + --resource-group "myResourceGroup" +``` \ No newline at end of file diff --git a/src/diskpool/azext_diskpool/__init__.py b/src/diskpool/azext_diskpool/__init__.py new file mode 100644 index 00000000000..2b5cb0acbde --- /dev/null +++ b/src/diskpool/azext_diskpool/__init__.py @@ -0,0 +1,53 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=unused-import + +import azext_diskpool._help +from azure.cli.core import AzCommandsLoader + + +class StoragePoolManagementCommandsLoader(AzCommandsLoader): + + def __init__(self, cli_ctx=None): + from azure.cli.core.commands import CliCommandType + from azext_diskpool.generated._client_factory import cf_diskpool_cl + diskpool_custom = CliCommandType( + operations_tmpl='azext_diskpool.custom#{}', + client_factory=cf_diskpool_cl) + parent = super(StoragePoolManagementCommandsLoader, self) + parent.__init__(cli_ctx=cli_ctx, custom_command_type=diskpool_custom) + + def load_command_table(self, args): + from azext_diskpool.generated.commands import load_command_table + load_command_table(self, args) + try: + from azext_diskpool.manual.commands import load_command_table as load_command_table_manual + load_command_table_manual(self, args) + except ImportError as e: + if e.name.endswith('manual.commands'): + pass + else: + raise e + return self.command_table + + def load_arguments(self, command): + from azext_diskpool.generated._params import load_arguments + load_arguments(self, command) + try: + from azext_diskpool.manual._params import load_arguments as load_arguments_manual + load_arguments_manual(self, command) + except ImportError as e: + if e.name.endswith('manual._params'): + pass + else: + raise e + + +COMMAND_LOADER_CLS = StoragePoolManagementCommandsLoader diff --git a/src/diskpool/azext_diskpool/_help.py b/src/diskpool/azext_diskpool/_help.py new file mode 100644 index 00000000000..9b93f87a6e9 --- /dev/null +++ b/src/diskpool/azext_diskpool/_help.py @@ -0,0 +1,20 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=wildcard-import +# pylint: disable=unused-wildcard-import +# pylint: disable=unused-import +from .generated._help import helps # pylint: disable=reimported +try: + from .manual._help import helps # pylint: disable=reimported +except ImportError as e: + if e.name.endswith('manual._help'): + pass + else: + raise e diff --git a/src/diskpool/azext_diskpool/action.py b/src/diskpool/azext_diskpool/action.py new file mode 100644 index 00000000000..9b3d0a8a78c --- /dev/null +++ b/src/diskpool/azext_diskpool/action.py @@ -0,0 +1,20 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=wildcard-import +# pylint: disable=unused-wildcard-import + +from .generated.action import * # noqa: F403 +try: + from .manual.action import * # noqa: F403 +except ImportError as e: + if e.name.endswith('manual.action'): + pass + else: + raise e diff --git a/src/diskpool/azext_diskpool/azext_metadata.json b/src/diskpool/azext_diskpool/azext_metadata.json new file mode 100644 index 00000000000..cfc30c747c7 --- /dev/null +++ b/src/diskpool/azext_diskpool/azext_metadata.json @@ -0,0 +1,4 @@ +{ + "azext.isExperimental": true, + "azext.minCliCoreVersion": "2.15.0" +} \ No newline at end of file diff --git a/src/diskpool/azext_diskpool/custom.py b/src/diskpool/azext_diskpool/custom.py new file mode 100644 index 00000000000..885447229d6 --- /dev/null +++ b/src/diskpool/azext_diskpool/custom.py @@ -0,0 +1,20 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=wildcard-import +# pylint: disable=unused-wildcard-import + +from .generated.custom import * # noqa: F403 +try: + from .manual.custom import * # noqa: F403 +except ImportError as e: + if e.name.endswith('manual.custom'): + pass + else: + raise e diff --git a/src/diskpool/azext_diskpool/generated/__init__.py b/src/diskpool/azext_diskpool/generated/__init__.py new file mode 100644 index 00000000000..c9cfdc73e77 --- /dev/null +++ b/src/diskpool/azext_diskpool/generated/__init__.py @@ -0,0 +1,12 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/src/diskpool/azext_diskpool/generated/_client_factory.py b/src/diskpool/azext_diskpool/generated/_client_factory.py new file mode 100644 index 00000000000..cd3bcf51fee --- /dev/null +++ b/src/diskpool/azext_diskpool/generated/_client_factory.py @@ -0,0 +1,28 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + + +def cf_diskpool_cl(cli_ctx, *_): + from azure.cli.core.commands.client_factory import get_mgmt_service_client + from azext_diskpool.vendored_sdks.storagepool import StoragePoolManagement + return get_mgmt_service_client(cli_ctx, + StoragePoolManagement) + + +def cf_disk_pool(cli_ctx, *_): + return cf_diskpool_cl(cli_ctx).disk_pools + + +def cf_disk_pool_zone(cli_ctx, *_): + return cf_diskpool_cl(cli_ctx).disk_pool_zones + + +def cf_iscsi_target(cli_ctx, *_): + return cf_diskpool_cl(cli_ctx).iscsi_targets diff --git a/src/diskpool/azext_diskpool/generated/_help.py b/src/diskpool/azext_diskpool/generated/_help.py new file mode 100644 index 00000000000..3dc6812269f --- /dev/null +++ b/src/diskpool/azext_diskpool/generated/_help.py @@ -0,0 +1,263 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=too-many-lines + +from knack.help_files import helps + + +helps['disk-pool'] = ''' + type: group + short-summary: Manage Storage Pool Management +''' + +helps['disk-pool'] = """ + type: group + short-summary: Manage disk pool with diskpool +""" + +helps['disk-pool list'] = """ + type: command + short-summary: "Gets a list of DiskPools in a resource group. And Gets a list of Disk Pools in a subscription." + examples: + - name: List Disk Pools + text: |- + az disk-pool list --resource-group "myResourceGroup" + - name: List Disk Pools by subscription + text: |- + az disk-pool list +""" + +helps['disk-pool show'] = """ + type: command + short-summary: "Get a Disk pool." + examples: + - name: Get Disk pool + text: |- + az disk-pool show --name "myDiskPool" --resource-group "myResourceGroup" +""" + +helps['disk-pool create'] = """ + type: command + short-summary: "Create Disk pool." + parameters: + - name: --sku + short-summary: "Determines the SKU of the Disk Pool" + long-summary: | + Usage: --sku name=XX tier=XX + + name: Required. Sku name + tier: Sku tier + - name: --disks + short-summary: "List of Azure Managed Disks to attach to a Disk Pool." + long-summary: | + The order of this parameter is specific customized. Usage: --disks id-value + + id: Required. Unique Azure Resource ID of the Managed Disk. + + Multiple actions can be specified by using more than one --disks argument. + examples: + - name: Create or Update Disk pool + text: |- + az disk-pool create --location "westus" --availability-zones "1" --disks "/subscriptions/11111111-1111-1\ +111-1111-111111111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_0" --disks \ +"/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/v\ +m-name_DataDisk_1" --subnet-id "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/prov\ +iders/Microsoft.Network/virtualNetworks/myvnet/subnets/mysubnet" --sku name="Basic_V0" tier="Basic" --tags key="value" \ +--name "myDiskPool" --resource-group "myResourceGroup" +""" + +helps['disk-pool update'] = """ + type: command + short-summary: "Update a Disk pool." + parameters: + - name: --disks + short-summary: "List of Azure Managed Disks to attach to a Disk Pool." + long-summary: | + The order of this parameter is specific customized. Usage: --disks id-value + + id: Required. Unique Azure Resource ID of the Managed Disk. + + Multiple actions can be specified by using more than one --disks argument. + examples: + - name: Update Disk pool + text: |- + az disk-pool update --name "myDiskPool" --disks "/subscriptions/11111111-1111-1111-1111-111111111111/res\ +ourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_0" --disks \ +"/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/v\ +m-name_DataDisk_1" --tags key="value" --resource-group "myResourceGroup" +""" + +helps['disk-pool delete'] = """ + type: command + short-summary: "Delete a Disk pool." + examples: + - name: Delete Disk pool + text: |- + az disk-pool delete --name "myDiskPool" --resource-group "myResourceGroup" +""" + +helps['disk-pool list-skus'] = """ + type: command + short-summary: "Lists available Disk Pool Skus in an Azure location." + examples: + - name: List Disk Pool Skus + text: |- + az disk-pool list-skus --location "eastus" +""" + +helps['disk-pool start'] = """ + type: command + short-summary: "The operation to start a Disk Pool." + examples: + - name: Start Disk Pool + text: |- + az disk-pool start --name "myDiskPool" --resource-group "myResourceGroup" +""" + +helps['disk-pool stop'] = """ + type: command + short-summary: "Shuts down the Disk Pool and releases the compute resources. You are not billed for the compute \ +resources that this Disk Pool uses." + examples: + - name: Deallocate Disk Pool + text: |- + az disk-pool stop --name "myDiskPool" --resource-group "myResourceGroup" +""" + +helps['disk-pool wait'] = """ + type: command + short-summary: Place the CLI in a waiting state until a condition of the disk-pool is met. + examples: + - name: Pause executing next line of CLI script until the disk-pool is successfully created. + text: |- + az disk-pool wait --name "myDiskPool" --resource-group "myResourceGroup" --created + - name: Pause executing next line of CLI script until the disk-pool is successfully updated. + text: |- + az disk-pool wait --name "myDiskPool" --resource-group "myResourceGroup" --updated + - name: Pause executing next line of CLI script until the disk-pool is successfully deleted. + text: |- + az disk-pool wait --name "myDiskPool" --resource-group "myResourceGroup" --deleted +""" + +helps['disk-pool iscsi-target'] = """ + type: group + short-summary: Manage iscsi target with diskpool +""" + +helps['disk-pool iscsi-target list'] = """ + type: command + short-summary: "Get iSCSI Targets in a Disk pool." + examples: + - name: List Disk Pools by Resource Group + text: |- + az disk-pool iscsi-target list --disk-pool-name "myDiskPool" --resource-group "myResourceGroup" +""" + +helps['disk-pool iscsi-target show'] = """ + type: command + short-summary: "Get an iSCSI Target." + examples: + - name: Get iSCSI Target + text: |- + az disk-pool iscsi-target show --disk-pool-name "myDiskPool" --name "myIscsiTarget" --resource-group \ +"myResourceGroup" +""" + +helps['disk-pool iscsi-target create'] = """ + type: command + short-summary: "Create an iSCSI Target." + parameters: + - name: --static-acls + short-summary: "Access Control List (ACL) for an iSCSI Target; defines LUN masking policy" + long-summary: | + Usage: --static-acls initiator-iqn=XX mapped-luns=XX + + initiator-iqn: Required. iSCSI initiator IQN (iSCSI Qualified Name); example: \ +"iqn.2005-03.org.iscsi:client". + mapped-luns: Required. List of LUN names mapped to the ACL. + + Multiple actions can be specified by using more than one --static-acls argument. + - name: --luns + short-summary: "List of LUNs to be exposed through iSCSI Target." + long-summary: | + Usage: --luns name=XX managed-disk-azure-resource-id=XX + + name: Required. User defined name for iSCSI LUN; example: "lun0" + managed-disk-azure-resource-id: Required. Azure Resource ID of the Managed Disk. + + Multiple actions can be specified by using more than one --luns argument. + examples: + - name: Create or Update iSCSI Target + text: |- + az disk-pool iscsi-target create --disk-pool-name "myDiskPool" --acl-mode "Dynamic" --luns name="lun0" \ +managed-disk-azure-resource-id="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/prov\ +iders/Microsoft.Compute/disks/vm-name_DataDisk_1" --target-iqn "iqn.2005-03.org.iscsi:server1" --name "myIscsiTarget" \ +--resource-group "myResourceGroup" +""" + +helps['disk-pool iscsi-target update'] = """ + type: command + short-summary: "Update an iSCSI Target." + parameters: + - name: --static-acls + short-summary: "Access Control List (ACL) for an iSCSI Target; defines LUN masking policy" + long-summary: | + Usage: --static-acls initiator-iqn=XX mapped-luns=XX + + initiator-iqn: Required. iSCSI initiator IQN (iSCSI Qualified Name); example: \ +"iqn.2005-03.org.iscsi:client". + mapped-luns: Required. List of LUN names mapped to the ACL. + + Multiple actions can be specified by using more than one --static-acls argument. + - name: --luns + short-summary: "List of LUNs to be exposed through iSCSI Target." + long-summary: | + Usage: --luns name=XX managed-disk-azure-resource-id=XX + + name: Required. User defined name for iSCSI LUN; example: "lun0" + managed-disk-azure-resource-id: Required. Azure Resource ID of the Managed Disk. + + Multiple actions can be specified by using more than one --luns argument. + examples: + - name: Update iSCSI Target + text: |- + az disk-pool iscsi-target update --disk-pool-name "myDiskPool" --name "myIscsiTarget" --luns \ +name="lun0" managed-disk-azure-resource-id="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResour\ +ceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_1" --static-acls initiator-iqn="iqn.2005-03.org.iscsi:client\ +" mapped-luns="lun0" --resource-group "myResourceGroup" +""" + +helps['disk-pool iscsi-target delete'] = """ + type: command + short-summary: "Delete an iSCSI Target." + examples: + - name: Delete iSCSI Target + text: |- + az disk-pool iscsi-target delete --disk-pool-name "myDiskPool" --name "myIscsiTarget" --resource-group \ +"myResourceGroup" +""" + +helps['disk-pool iscsi-target wait'] = """ + type: command + short-summary: Place the CLI in a waiting state until a condition of the disk-pool iscsi-target is met. + examples: + - name: Pause executing next line of CLI script until the disk-pool iscsi-target is successfully created. + text: |- + az disk-pool iscsi-target wait --disk-pool-name "myDiskPool" --name "myIscsiTarget" --resource-group \ +"myResourceGroup" --created + - name: Pause executing next line of CLI script until the disk-pool iscsi-target is successfully updated. + text: |- + az disk-pool iscsi-target wait --disk-pool-name "myDiskPool" --name "myIscsiTarget" --resource-group \ +"myResourceGroup" --updated + - name: Pause executing next line of CLI script until the disk-pool iscsi-target is successfully deleted. + text: |- + az disk-pool iscsi-target wait --disk-pool-name "myDiskPool" --name "myIscsiTarget" --resource-group \ +"myResourceGroup" --deleted +""" diff --git a/src/diskpool/azext_diskpool/generated/_params.py b/src/diskpool/azext_diskpool/generated/_params.py new file mode 100644 index 00000000000..8dd4b8bbe98 --- /dev/null +++ b/src/diskpool/azext_diskpool/generated/_params.py @@ -0,0 +1,130 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=too-many-lines +# pylint: disable=too-many-statements + +from azure.cli.core.commands.parameters import ( + tags_type, + get_enum_type, + resource_group_name_type, + get_location_type +) +from azure.cli.core.commands.validators import get_default_location_from_resource_group +from azext_diskpool.action import ( + AddSku, + AddDiskPoolCreateDisks, + AddDiskPoolUpdateDisks, + AddDiskPoolIscsiTargetCreateStaticAcls, + AddDiskPoolIscsiTargetCreateLuns, + AddDiskPoolIscsiTargetUpdateStaticAcls, + AddDiskPoolIscsiTargetUpdateLuns +) + + +def load_arguments(self, _): + + with self.argument_context('disk-pool list') as c: + c.argument('resource_group_name', resource_group_name_type) + + with self.argument_context('disk-pool show') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', options_list=['--name', '-n', '--disk-pool-name'], type=str, help='The name of ' + 'the Disk Pool.', id_part='name') + + with self.argument_context('disk-pool create') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', options_list=['--name', '-n', '--disk-pool-name'], type=str, help='The name of ' + 'the Disk Pool.') + c.argument('sku', action=AddSku, nargs='+', help='Determines the SKU of the Disk Pool') + c.argument('tags', tags_type) + c.argument('location', arg_type=get_location_type(self.cli_ctx), required=False, + validator=get_default_location_from_resource_group) + c.argument('availability_zones', nargs='+', help='Logical zone for Disk Pool resource; example: ["1"].') + c.argument('disks', action=AddDiskPoolCreateDisks, nargs='+', help='List of Azure Managed Disks to attach to a ' + 'Disk Pool.') + c.argument('subnet_id', type=str, help='Azure Resource ID of a Subnet for the Disk Pool.') + c.argument('additional_capabilities', options_list=['--additional-capabilities', '-a'], nargs='+', help='List ' + 'of additional capabilities for a Disk Pool.') + + with self.argument_context('disk-pool update') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', options_list=['--name', '-n', '--disk-pool-name'], type=str, help='The name of ' + 'the Disk Pool.', id_part='name') + c.argument('tags', tags_type) + c.argument('disks', action=AddDiskPoolUpdateDisks, nargs='+', help='List of Azure Managed Disks to attach to a ' + 'Disk Pool.') + + with self.argument_context('disk-pool delete') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', options_list=['--name', '-n', '--disk-pool-name'], type=str, help='The name of ' + 'the Disk Pool.', id_part='name') + + with self.argument_context('disk-pool list-skus') as c: + c.argument('location', arg_type=get_location_type(self.cli_ctx)) + + with self.argument_context('disk-pool start') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', options_list=['--name', '-n', '--disk-pool-name'], type=str, help='The name of ' + 'the Disk Pool.', id_part='name') + + with self.argument_context('disk-pool stop') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', options_list=['--name', '-n', '--disk-pool-name'], type=str, help='The name of ' + 'the Disk Pool.', id_part='name') + + with self.argument_context('disk-pool wait') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', options_list=['--name', '-n', '--disk-pool-name'], type=str, help='The name of ' + 'the Disk Pool.', id_part='name') + + with self.argument_context('disk-pool iscsi-target list') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', type=str, help='The name of the Disk Pool.') + + with self.argument_context('disk-pool iscsi-target show') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', type=str, help='The name of the Disk Pool.', id_part='name') + c.argument('iscsi_target_name', options_list=['--name', '-n', '--iscsi-target-name'], type=str, help='The name ' + 'of the iSCSI Target.', id_part='child_name_1') + + with self.argument_context('disk-pool iscsi-target create') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', type=str, help='The name of the Disk Pool.') + c.argument('iscsi_target_name', options_list=['--name', '-n', '--iscsi-target-name'], type=str, help='The name ' + 'of the iSCSI Target.') + c.argument('acl_mode', arg_type=get_enum_type(['Dynamic', 'Static']), help='Mode for Target connectivity.') + c.argument('target_iqn', type=str, help='iSCSI Target IQN (iSCSI Qualified Name); example: ' + '"iqn.2005-03.org.iscsi:server".') + c.argument('static_acls', action=AddDiskPoolIscsiTargetCreateStaticAcls, nargs='+', help='Access Control List ' + '(ACL) for an iSCSI Target; defines LUN masking policy') + c.argument('luns', action=AddDiskPoolIscsiTargetCreateLuns, nargs='+', help='List of LUNs to be exposed ' + 'through iSCSI Target.') + + with self.argument_context('disk-pool iscsi-target update') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', type=str, help='The name of the Disk Pool.', id_part='name') + c.argument('iscsi_target_name', options_list=['--name', '-n', '--iscsi-target-name'], type=str, help='The name ' + 'of the iSCSI Target.', id_part='child_name_1') + c.argument('static_acls', action=AddDiskPoolIscsiTargetUpdateStaticAcls, nargs='+', help='Access Control List ' + '(ACL) for an iSCSI Target; defines LUN masking policy') + c.argument('luns', action=AddDiskPoolIscsiTargetUpdateLuns, nargs='+', help='List of LUNs to be exposed ' + 'through iSCSI Target.') + + with self.argument_context('disk-pool iscsi-target delete') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', type=str, help='The name of the Disk Pool.', id_part='name') + c.argument('iscsi_target_name', options_list=['--name', '-n', '--iscsi-target-name'], type=str, help='The name ' + 'of the iSCSI Target.', id_part='child_name_1') + + with self.argument_context('disk-pool iscsi-target wait') as c: + c.argument('resource_group_name', resource_group_name_type) + c.argument('disk_pool_name', type=str, help='The name of the Disk Pool.', id_part='name') + c.argument('iscsi_target_name', options_list=['--name', '-n', '--iscsi-target-name'], type=str, help='The name ' + 'of the iSCSI Target.', id_part='child_name_1') diff --git a/src/diskpool/azext_diskpool/generated/_validators.py b/src/diskpool/azext_diskpool/generated/_validators.py new file mode 100644 index 00000000000..b33a44c1ebf --- /dev/null +++ b/src/diskpool/azext_diskpool/generated/_validators.py @@ -0,0 +1,9 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- diff --git a/src/diskpool/azext_diskpool/generated/action.py b/src/diskpool/azext_diskpool/generated/action.py new file mode 100644 index 00000000000..4e4d509a5c2 --- /dev/null +++ b/src/diskpool/azext_diskpool/generated/action.py @@ -0,0 +1,249 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + + +# pylint: disable=protected-access + +# pylint: disable=no-self-use + + +import argparse +from collections import defaultdict +from knack.util import CLIError + + +class AddDiskPoolUpdateDisks(argparse._AppendAction): + def __call__(self, parser, namespace, values, option_string=None): + action = self.get_action(values, option_string) + + for item in action: + super(AddDiskPoolUpdateDisks, self).__call__(parser, namespace, item, option_string) + + def get_action(self, values, option_string=None): + try: + value_chunk_list = [values[x: x + 1] for x in range(0, len(values), 1)] + value_list = [] + for chunk in value_chunk_list: + id = chunk + value_list.append( + { + 'id': id, + } + ) + return value_list + except ValueError: + raise CLIError('usage error: {} NAME METRIC OPERATION VALUE'.format(option_string)) + + +class AddSku(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + action = self.get_action(values, option_string) + namespace.sku = action + + def get_action(self, values, option_string): + try: + properties = defaultdict(list) + for (k, v) in (x.split('=', 1) for x in values): + properties[k].append(v) + properties = dict(properties) + except ValueError: + raise CLIError('usage error: {} [KEY=VALUE ...]'.format(option_string)) + d = {} + for k in properties: + + kl = k.lower() + + v = properties[k] + + if kl == 'name': + + d['name'] = v[0] + + elif kl == 'tier': + + d['tier'] = v[0] + + else: + raise CLIError( + 'Unsupported Key {} is provided for parameter sku. All possible keys are: name, tier'.format(k) + ) + + return d + + +class AddDiskPoolCreateDisks(argparse._AppendAction): + def __call__(self, parser, namespace, values, option_string=None): + action = self.get_action(values, option_string) + + for item in action: + super(AddDiskPoolCreateDisks, self).__call__(parser, namespace, item, option_string) + + def get_action(self, values, option_string=None): + try: + value_chunk_list = [values[x: x + 1] for x in range(0, len(values), 1)] + value_list = [] + for chunk in value_chunk_list: + id = chunk + value_list.append( + { + 'id': id, + } + ) + return value_list + except ValueError: + raise CLIError('usage error: {} NAME METRIC OPERATION VALUE'.format(option_string)) + + +class AddDiskPoolIscsiTargetUpdateStaticAcls(argparse._AppendAction): + def __call__(self, parser, namespace, values, option_string=None): + action = self.get_action(values, option_string) + super(AddDiskPoolIscsiTargetUpdateStaticAcls, self).__call__(parser, namespace, action, option_string) + + def get_action(self, values, option_string): + try: + properties = defaultdict(list) + for (k, v) in (x.split('=', 1) for x in values): + properties[k].append(v) + properties = dict(properties) + except ValueError: + raise CLIError('usage error: {} [KEY=VALUE ...]'.format(option_string)) + d = {} + for k in properties: + + kl = k.lower() + + v = properties[k] + + if kl == 'initiator-iqn': + + d['initiator_iqn'] = v[0] + + elif kl == 'mapped-luns': + + d['mapped_luns'] = v + + else: + raise CLIError( + 'Unsupported Key {} is provided for parameter static-acls. All possible keys are: initiator-iqn,' + ' mapped-luns'.format(k) + ) + + return d + + +class AddDiskPoolIscsiTargetUpdateLuns(argparse._AppendAction): + def __call__(self, parser, namespace, values, option_string=None): + action = self.get_action(values, option_string) + super(AddDiskPoolIscsiTargetUpdateLuns, self).__call__(parser, namespace, action, option_string) + + def get_action(self, values, option_string): + try: + properties = defaultdict(list) + for (k, v) in (x.split('=', 1) for x in values): + properties[k].append(v) + properties = dict(properties) + except ValueError: + raise CLIError('usage error: {} [KEY=VALUE ...]'.format(option_string)) + d = {} + for k in properties: + + kl = k.lower() + + v = properties[k] + + if kl == 'name': + + d['name'] = v[0] + + elif kl == 'managed-disk-azure-resource-id': + + d['managed_disk_azure_resource_id'] = v[0] + + else: + raise CLIError( + 'Unsupported Key {} is provided for parameter luns. All possible keys are: name,' + ' managed-disk-azure-resource-id'.format(k) + ) + + return d + + +class AddDiskPoolIscsiTargetCreateStaticAcls(argparse._AppendAction): + def __call__(self, parser, namespace, values, option_string=None): + action = self.get_action(values, option_string) + super(AddDiskPoolIscsiTargetCreateStaticAcls, self).__call__(parser, namespace, action, option_string) + + def get_action(self, values, option_string): + try: + properties = defaultdict(list) + for (k, v) in (x.split('=', 1) for x in values): + properties[k].append(v) + properties = dict(properties) + except ValueError: + raise CLIError('usage error: {} [KEY=VALUE ...]'.format(option_string)) + d = {} + for k in properties: + + kl = k.lower() + + v = properties[k] + + if kl == 'initiator-iqn': + + d['initiator_iqn'] = v[0] + + elif kl == 'mapped-luns': + + d['mapped_luns'] = v + + else: + raise CLIError( + 'Unsupported Key {} is provided for parameter static-acls. All possible keys are: initiator-iqn,' + ' mapped-luns'.format(k) + ) + + return d + + +class AddDiskPoolIscsiTargetCreateLuns(argparse._AppendAction): + def __call__(self, parser, namespace, values, option_string=None): + action = self.get_action(values, option_string) + super(AddDiskPoolIscsiTargetCreateLuns, self).__call__(parser, namespace, action, option_string) + + def get_action(self, values, option_string): + try: + properties = defaultdict(list) + for (k, v) in (x.split('=', 1) for x in values): + properties[k].append(v) + properties = dict(properties) + except ValueError: + raise CLIError('usage error: {} [KEY=VALUE ...]'.format(option_string)) + d = {} + for k in properties: + + kl = k.lower() + + v = properties[k] + + if kl == 'name': + + d['name'] = v[0] + + elif kl == 'managed-disk-azure-resource-id': + + d['managed_disk_azure_resource_id'] = v[0] + + else: + raise CLIError( + 'Unsupported Key {} is provided for parameter luns. All possible keys are: name,' + ' managed-disk-azure-resource-id'.format(k) + ) + + return d diff --git a/src/diskpool/azext_diskpool/generated/commands.py b/src/diskpool/azext_diskpool/generated/commands.py new file mode 100644 index 00000000000..e66fd811338 --- /dev/null +++ b/src/diskpool/azext_diskpool/generated/commands.py @@ -0,0 +1,55 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=too-many-statements +# pylint: disable=too-many-locals +# pylint: disable=bad-continuation +# pylint: disable=line-too-long + +from azure.cli.core.commands import CliCommandType +from azext_diskpool.generated._client_factory import cf_disk_pool, cf_disk_pool_zone, cf_iscsi_target + + +diskpool_disk_pool = CliCommandType( + operations_tmpl='azext_diskpool.vendored_sdks.storagepool.operations._disk_pools_operations#DiskPoolsOperations.{}', + client_factory=cf_disk_pool, +) + + +diskpool_iscsi_target = CliCommandType( + operations_tmpl=( + 'azext_diskpool.vendored_sdks.storagepool.operations._iscsi_targets_operations#IscsiTargetsOperations.{}' + ), + client_factory=cf_iscsi_target, +) + + +def load_command_table(self, _): + + with self.command_group('disk-pool', diskpool_disk_pool, client_factory=cf_disk_pool) as g: + g.custom_command('list', 'disk_pool_list') + g.custom_show_command('show', 'disk_pool_show') + g.custom_command('create', 'disk_pool_create', supports_no_wait=True) + g.custom_command('update', 'disk_pool_update', supports_no_wait=True) + g.custom_command('delete', 'disk_pool_delete', supports_no_wait=True, confirmation=True) + g.custom_command('list-skus', 'disk_pool_list_skus', client_factory=cf_disk_pool_zone) + g.custom_command('start', 'disk_pool_start', supports_no_wait=True) + g.custom_command('stop', 'disk_pool_stop', supports_no_wait=True) + g.custom_wait_command('wait', 'disk_pool_show') + + with self.command_group('disk-pool iscsi-target', diskpool_iscsi_target, client_factory=cf_iscsi_target) as g: + g.custom_command('list', 'disk_pool_iscsi_target_list') + g.custom_show_command('show', 'disk_pool_iscsi_target_show') + g.custom_command('create', 'disk_pool_iscsi_target_create', supports_no_wait=True) + g.custom_command('update', 'disk_pool_iscsi_target_update', supports_no_wait=True) + g.custom_command('delete', 'disk_pool_iscsi_target_delete', supports_no_wait=True, confirmation=True) + g.custom_wait_command('wait', 'disk_pool_iscsi_target_show') + + with self.command_group('diskpool', is_experimental=True): + pass diff --git a/src/diskpool/azext_diskpool/generated/custom.py b/src/diskpool/azext_diskpool/generated/custom.py new file mode 100644 index 00000000000..811c1c55e08 --- /dev/null +++ b/src/diskpool/azext_diskpool/generated/custom.py @@ -0,0 +1,171 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=too-many-lines + +from azure.cli.core.util import sdk_no_wait + + +def disk_pool_list(client, + resource_group_name=None): + if resource_group_name: + return client.list_by_resource_group(resource_group_name=resource_group_name) + return client.list_by_subscription() + + +def disk_pool_show(client, + resource_group_name, + disk_pool_name): + return client.get(resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name) + + +def disk_pool_create(client, + resource_group_name, + disk_pool_name, + sku, + location, + subnet_id, + tags=None, + availability_zones=None, + disks=None, + additional_capabilities=None, + no_wait=False): + disk_pool_create_payload = {} + disk_pool_create_payload['sku'] = sku + disk_pool_create_payload['tags'] = tags + disk_pool_create_payload['location'] = location + disk_pool_create_payload['availability_zones'] = availability_zones + disk_pool_create_payload['disks'] = disks + disk_pool_create_payload['subnet_id'] = subnet_id + disk_pool_create_payload['additional_capabilities'] = additional_capabilities + return sdk_no_wait(no_wait, + client.begin_create_or_update, + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + disk_pool_create_payload=disk_pool_create_payload) + + +def disk_pool_update(client, + resource_group_name, + disk_pool_name, + tags=None, + disks=None, + no_wait=False): + disk_pool_update_payload = {} + disk_pool_update_payload['tags'] = tags + disk_pool_update_payload['disks'] = disks + return sdk_no_wait(no_wait, + client.begin_update, + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + disk_pool_update_payload=disk_pool_update_payload) + + +def disk_pool_delete(client, + resource_group_name, + disk_pool_name, + no_wait=False): + return sdk_no_wait(no_wait, + client.begin_delete, + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name) + + +def disk_pool_list_skus(client, + location): + return client.list(location=location) + + +def disk_pool_start(client, + resource_group_name, + disk_pool_name, + no_wait=False): + return sdk_no_wait(no_wait, + client.begin_start, + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name) + + +def disk_pool_stop(client, + resource_group_name, + disk_pool_name, + no_wait=False): + return sdk_no_wait(no_wait, + client.begin_deallocate, + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name) + + +def disk_pool_iscsi_target_list(client, + resource_group_name, + disk_pool_name): + return client.list_by_disk_pool(resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name) + + +def disk_pool_iscsi_target_show(client, + resource_group_name, + disk_pool_name, + iscsi_target_name): + return client.get(resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name) + + +def disk_pool_iscsi_target_create(client, + resource_group_name, + disk_pool_name, + iscsi_target_name, + acl_mode, + target_iqn=None, + static_acls=None, + luns=None, + no_wait=False): + iscsi_target_create_payload = {} + iscsi_target_create_payload['acl_mode'] = acl_mode + iscsi_target_create_payload['target_iqn'] = target_iqn + iscsi_target_create_payload['static_acls'] = static_acls + iscsi_target_create_payload['luns'] = luns + return sdk_no_wait(no_wait, + client.begin_create_or_update, + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name, + iscsi_target_create_payload=iscsi_target_create_payload) + + +def disk_pool_iscsi_target_update(client, + resource_group_name, + disk_pool_name, + iscsi_target_name, + static_acls=None, + luns=None, + no_wait=False): + iscsi_target_update_payload = {} + iscsi_target_update_payload['static_acls'] = static_acls + iscsi_target_update_payload['luns'] = luns + return sdk_no_wait(no_wait, + client.begin_update, + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name, + iscsi_target_update_payload=iscsi_target_update_payload) + + +def disk_pool_iscsi_target_delete(client, + resource_group_name, + disk_pool_name, + iscsi_target_name, + no_wait=False): + return sdk_no_wait(no_wait, + client.begin_delete, + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name) diff --git a/src/diskpool/azext_diskpool/manual/__init__.py b/src/diskpool/azext_diskpool/manual/__init__.py new file mode 100644 index 00000000000..c9cfdc73e77 --- /dev/null +++ b/src/diskpool/azext_diskpool/manual/__init__.py @@ -0,0 +1,12 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/src/diskpool/azext_diskpool/manual/_help.py b/src/diskpool/azext_diskpool/manual/_help.py new file mode 100644 index 00000000000..38fdc57f4da --- /dev/null +++ b/src/diskpool/azext_diskpool/manual/_help.py @@ -0,0 +1,23 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=too-many-lines + +from knack.help_files import helps + + +helps['disk-pool'] = """ + type: group + short-summary: Manage Azure disk pool. +""" + +helps['disk-pool iscsi-target'] = """ + type: group + short-summary: Manage iSCSI target with a Disk Pool. +""" diff --git a/src/diskpool/azext_diskpool/manual/_params.py b/src/diskpool/azext_diskpool/manual/_params.py new file mode 100644 index 00000000000..1d01152d46d --- /dev/null +++ b/src/diskpool/azext_diskpool/manual/_params.py @@ -0,0 +1,26 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +# pylint: disable=too-many-lines +# pylint: disable=too-many-statements + +from azure.cli.core.commands.parameters import ( + get_location_type +) +from azure.cli.core.commands.validators import ( + get_default_location_from_resource_group +) + + +def load_arguments(self, _): + + with self.argument_context('disk-pool') as c: + c.argument('location', arg_type=get_location_type(self.cli_ctx), required=False, + validator=get_default_location_from_resource_group) + c.argument('availability_zones', nargs='+', help='Logical zone for Disk Pool resource.') diff --git a/src/diskpool/azext_diskpool/manual/_transformers.py b/src/diskpool/azext_diskpool/manual/_transformers.py new file mode 100644 index 00000000000..f6262db3cda --- /dev/null +++ b/src/diskpool/azext_diskpool/manual/_transformers.py @@ -0,0 +1,42 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + + +def build_table_output(result, projection): + + if not isinstance(result, list): + result = [result] + + final_list = [] + + from collections import OrderedDict + for item in result: + def _value_from_path(each_item, path): + obj = each_item + try: + for part in path.split('.'): + obj = obj.get(part, None) + except AttributeError: + obj = None + return obj or ' ' + + item_dict = OrderedDict() + for element in projection: + item_dict[element[0]] = _value_from_path(item, element[1]) + final_list.append(item_dict) + + return final_list + + +def transform_disk_pool_list_output(result): + """ Transform to convert SDK output into a form that is more readily + usable by the CLI and tools such as jpterm. """ + return build_table_output(result, [ + ('Name', 'name'), + ('Availability Zones', 'availabilityZones'), + ('Status', 'status'), + ('Location', 'location'), + ('Last Modified', 'systemData.lastModifiedAt') + ]) diff --git a/src/diskpool/azext_diskpool/manual/commands.py b/src/diskpool/azext_diskpool/manual/commands.py new file mode 100644 index 00000000000..d6d1f61f043 --- /dev/null +++ b/src/diskpool/azext_diskpool/manual/commands.py @@ -0,0 +1,24 @@ +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for +# license information. +# +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + + +from azure.cli.core.commands import CliCommandType + + +def load_command_table(self, _): + + from azext_diskpool.generated._client_factory import cf_disk_pool, cf_disk_pool_zone + diskpool_disk_pool = CliCommandType( + operations_tmpl='azext_diskpool.vendored_sdks.storagepool.operations._disk_pools_operations#DiskPoolsOperations' + '.{}', + client_factory=cf_disk_pool) + with self.command_group('disk-pool', diskpool_disk_pool, client_factory=cf_disk_pool, is_preview=True) as g: + from ._transformers import transform_disk_pool_list_output + g.custom_command('list', 'disk_pool_list', table_transformer=transform_disk_pool_list_output) diff --git a/src/diskpool/azext_diskpool/tests/__init__.py b/src/diskpool/azext_diskpool/tests/__init__.py new file mode 100644 index 00000000000..70488e93851 --- /dev/null +++ b/src/diskpool/azext_diskpool/tests/__init__.py @@ -0,0 +1,116 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +import inspect +import logging +import os +import sys +import traceback +import datetime as dt + +from azure.core.exceptions import AzureError +from azure.cli.testsdk.exceptions import CliTestError, CliExecutionError, JMESPathCheckAssertionError + + +logger = logging.getLogger('azure.cli.testsdk') +logger.addHandler(logging.StreamHandler()) +__path__ = __import__('pkgutil').extend_path(__path__, __name__) +exceptions = [] +test_map = dict() +SUCCESSED = "successed" +FAILED = "failed" + + +def try_manual(func): + def import_manual_function(origin_func): + from importlib import import_module + decorated_path = inspect.getfile(origin_func).lower() + module_path = __path__[0].lower() + if not decorated_path.startswith(module_path): + raise Exception("Decorator can only be used in submodules!") + manual_path = os.path.join( + decorated_path[module_path.rfind(os.path.sep) + 1:]) + manual_file_path, manual_file_name = os.path.split(manual_path) + module_name, _ = os.path.splitext(manual_file_name) + manual_module = "..manual." + \ + ".".join(manual_file_path.split(os.path.sep) + [module_name, ]) + return getattr(import_module(manual_module, package=__name__), origin_func.__name__) + + def get_func_to_call(): + func_to_call = func + try: + func_to_call = import_manual_function(func) + logger.info("Found manual override for %s(...)", func.__name__) + except (ImportError, AttributeError): + pass + return func_to_call + + def wrapper(*args, **kwargs): + func_to_call = get_func_to_call() + logger.info("running %s()...", func.__name__) + try: + test_map[func.__name__] = dict() + test_map[func.__name__]["result"] = SUCCESSED + test_map[func.__name__]["error_message"] = "" + test_map[func.__name__]["error_stack"] = "" + test_map[func.__name__]["error_normalized"] = "" + test_map[func.__name__]["start_dt"] = dt.datetime.utcnow() + ret = func_to_call(*args, **kwargs) + except (AssertionError, AzureError, CliTestError, CliExecutionError, SystemExit, + JMESPathCheckAssertionError) as e: + use_exception_cache = os.getenv("TEST_EXCEPTION_CACHE") + if use_exception_cache is None or use_exception_cache.lower() != "true": + raise + test_map[func.__name__]["end_dt"] = dt.datetime.utcnow() + test_map[func.__name__]["result"] = FAILED + test_map[func.__name__]["error_message"] = str(e).replace("\r\n", " ").replace("\n", " ")[:500] + test_map[func.__name__]["error_stack"] = traceback.format_exc().replace( + "\r\n", " ").replace("\n", " ")[:500] + logger.info("--------------------------------------") + logger.info("step exception: %s", e) + logger.error("--------------------------------------") + logger.error("step exception in %s: %s", func.__name__, e) + logger.info(traceback.format_exc()) + exceptions.append((func.__name__, sys.exc_info())) + else: + test_map[func.__name__]["end_dt"] = dt.datetime.utcnow() + return ret + + if inspect.isclass(func): + return get_func_to_call() + return wrapper + + +def calc_coverage(filename): + filename = filename.split(".")[0] + coverage_name = filename + "_coverage.md" + with open(coverage_name, "w") as f: + f.write("|Scenario|Result|ErrorMessage|ErrorStack|ErrorNormalized|StartDt|EndDt|\n") + total = len(test_map) + covered = 0 + for k, v in test_map.items(): + if not k.startswith("step_"): + total -= 1 + continue + if v["result"] == SUCCESSED: + covered += 1 + f.write("|{step_name}|{result}|{error_message}|{error_stack}|{error_normalized}|{start_dt}|" + "{end_dt}|\n".format(step_name=k, **v)) + f.write("Coverage: {}/{}\n".format(covered, total)) + print("Create coverage\n", file=sys.stderr) + + +def raise_if(): + if exceptions: + if len(exceptions) <= 1: + raise exceptions[0][1][1] + message = "{}\nFollowed with exceptions in other steps:\n".format(str(exceptions[0][1][1])) + message += "\n".join(["{}: {}".format(h[0], h[1][1]) for h in exceptions[1:]]) + raise exceptions[0][1][0](message).with_traceback(exceptions[0][1][2]) diff --git a/src/diskpool/azext_diskpool/tests/latest/__init__.py b/src/diskpool/azext_diskpool/tests/latest/__init__.py new file mode 100644 index 00000000000..c9cfdc73e77 --- /dev/null +++ b/src/diskpool/azext_diskpool/tests/latest/__init__.py @@ -0,0 +1,12 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/src/diskpool/azext_diskpool/tests/latest/recordings/test_diskpool_list_sku_scenario_manual.yaml b/src/diskpool/azext_diskpool/tests/latest/recordings/test_diskpool_list_sku_scenario_manual.yaml new file mode 100644 index 00000000000..9056cadb6b2 --- /dev/null +++ b/src/diskpool/azext_diskpool/tests/latest/recordings/test_diskpool_list_sku_scenario_manual.yaml @@ -0,0 +1,48 @@ +interactions: +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool list-skus + Connection: + - keep-alive + ParameterSetName: + - -l + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/diskPoolZones?api-version=2021-04-01-preview + response: + body: + string: '{"value":[{"availabilityZones":["3","1","2"],"sku":{"name":"Basic","tier":"Basic"}},{"availabilityZones":["3","1","2"],"sku":{"name":"Standard","tier":"Standard"}},{"availabilityZones":["3","1","2"],"sku":{"name":"Premium","tier":"Premium"}}]}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:06:59 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +version: 1 diff --git a/src/diskpool/azext_diskpool/tests/latest/recordings/test_diskpool_scenario_manual.yaml b/src/diskpool/azext_diskpool/tests/latest/recordings/test_diskpool_scenario_manual.yaml new file mode 100644 index 00000000000..41c85df0a3c --- /dev/null +++ b/src/diskpool/azext_diskpool/tests/latest/recordings/test_diskpool_scenario_manual.yaml @@ -0,0 +1,5185 @@ +interactions: +- request: + body: '{"location": "eastus", "tags": {}, "sku": {"name": "Premium_LRS"}, "zones": + ["3"], "properties": {"hyperVGeneration": "V1", "creationData": {"createOption": + "Empty"}, "diskSizeGB": 256, "maxShares": 2}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk create + Connection: + - keep-alive + Content-Length: + - '202' + Content-Type: + - application/json + ParameterSetName: + - --name --resource-group --zone --location --sku --max-shares --size-gb + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-compute/20.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002?api-version=2020-12-01 + response: + body: + string: "{\r\n \"name\": \"disk000002\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"zones\": [\r\n \"3\"\r\n ],\r\n \"sku\": {\r\n + \ \"name\": \"Premium_LRS\"\r\n },\r\n \"properties\": {\r\n \"hyperVGeneration\": + \"V1\",\r\n \"creationData\": {\r\n \"createOption\": \"Empty\"\r\n + \ },\r\n \"diskSizeGB\": 256,\r\n \"maxShares\": 2,\r\n \"provisioningState\": + \"Updating\",\r\n \"isArmResource\": true\r\n }\r\n}" + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/30a753f9-6e55-45b0-8857-263c811f29e2?api-version=2020-12-01 + cache-control: + - no-cache + content-length: + - '370' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:26 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/30a753f9-6e55-45b0-8857-263c811f29e2?monitor=true&api-version=2020-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-resource: + - Microsoft.Compute/CreateUpdateDisks3Min;999,Microsoft.Compute/CreateUpdateDisks30Min;7997 + x-ms-ratelimit-remaining-subscription-writes: + - '1197' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --zone --location --sku --max-shares --size-gb + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-compute/20.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/30a753f9-6e55-45b0-8857-263c811f29e2?api-version=2020-12-01 + response: + body: + string: "{\r\n \"startTime\": \"2021-05-25T06:08:26.9006099+00:00\",\r\n \"endTime\": + \"2021-05-25T06:08:26.9943243+00:00\",\r\n \"status\": \"Succeeded\",\r\n + \ \"properties\": {\r\n \"output\": {\r\n \"name\": \"disk000002\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002\",\r\n + \ \"type\": \"Microsoft.Compute/disks\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"zones\": [\r\n \"3\"\r\n ],\r\n \"sku\": {\r\n + \ \"name\": \"Premium_LRS\",\r\n \"tier\": \"Premium\"\r\n },\r\n \"properties\": + {\r\n \"hyperVGeneration\": \"V1\",\r\n \"creationData\": {\r\n \"createOption\": + \"Empty\"\r\n },\r\n \"diskSizeGB\": 256,\r\n \"diskIOPSReadWrite\": + 1100,\r\n \"diskMBpsReadWrite\": 125,\r\n \"encryption\": {\r\n \"type\": + \"EncryptionAtRestWithPlatformKey\"\r\n },\r\n \"maxShares\": 2,\r\n + \ \"timeCreated\": \"2021-05-25T06:08:26.9006099+00:00\",\r\n \"provisioningState\": + \"Succeeded\",\r\n \"diskState\": \"Unattached\",\r\n \"diskSizeBytes\": + 274877906944,\r\n \"uniqueId\": \"ccfda08f-fe5c-469f-9cad-17bdeb35c041\",\r\n + \ \"networkAccessPolicy\": \"AllowAll\",\r\n \"tier\": \"P15\"\r\n }\r\n}\r\n + \ },\r\n \"name\": \"30a753f9-6e55-45b0-8857-263c811f29e2\"\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '1154' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:28 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-resource: + - Microsoft.Compute/GetOperation3Min;49999,Microsoft.Compute/GetOperation30Min;399980 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --zone --location --sku --max-shares --size-gb + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-compute/20.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002?api-version=2020-12-01 + response: + body: + string: "{\r\n \"name\": \"disk000002\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002\",\r\n + \ \"type\": \"Microsoft.Compute/disks\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"zones\": [\r\n \"3\"\r\n ],\r\n \"sku\": {\r\n + \ \"name\": \"Premium_LRS\",\r\n \"tier\": \"Premium\"\r\n },\r\n \"properties\": + {\r\n \"hyperVGeneration\": \"V1\",\r\n \"creationData\": {\r\n \"createOption\": + \"Empty\"\r\n },\r\n \"diskSizeGB\": 256,\r\n \"diskIOPSReadWrite\": + 1100,\r\n \"diskMBpsReadWrite\": 125,\r\n \"encryption\": {\r\n \"type\": + \"EncryptionAtRestWithPlatformKey\"\r\n },\r\n \"maxShares\": 2,\r\n + \ \"timeCreated\": \"2021-05-25T06:08:26.9006099+00:00\",\r\n \"provisioningState\": + \"Succeeded\",\r\n \"diskState\": \"Unattached\",\r\n \"diskSizeBytes\": + 274877906944,\r\n \"uniqueId\": \"ccfda08f-fe5c-469f-9cad-17bdeb35c041\",\r\n + \ \"networkAccessPolicy\": \"AllowAll\",\r\n \"tier\": \"P15\"\r\n }\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '929' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:28 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-resource: + - Microsoft.Compute/LowCostGet3Min;14995,Microsoft.Compute/LowCostGet30Min;119940 + status: + code: 200 + message: OK +- request: + body: '{"location": "eastus", "tags": {}, "sku": {"name": "Premium_LRS"}, "zones": + ["3"], "properties": {"hyperVGeneration": "V1", "creationData": {"createOption": + "Empty"}, "diskSizeGB": 256, "maxShares": 2}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk create + Connection: + - keep-alive + Content-Length: + - '202' + Content-Type: + - application/json + ParameterSetName: + - --name --resource-group --zone --location --sku --max-shares --size-gb + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-compute/20.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003?api-version=2020-12-01 + response: + body: + string: "{\r\n \"name\": \"disk000003\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"zones\": [\r\n \"3\"\r\n ],\r\n \"sku\": {\r\n + \ \"name\": \"Premium_LRS\"\r\n },\r\n \"properties\": {\r\n \"hyperVGeneration\": + \"V1\",\r\n \"creationData\": {\r\n \"createOption\": \"Empty\"\r\n + \ },\r\n \"diskSizeGB\": 256,\r\n \"maxShares\": 2,\r\n \"provisioningState\": + \"Updating\",\r\n \"isArmResource\": true\r\n }\r\n}" + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/2047f61a-e555-4201-9378-13109d688d4f?api-version=2020-12-01 + cache-control: + - no-cache + content-length: + - '370' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:35 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/2047f61a-e555-4201-9378-13109d688d4f?monitor=true&api-version=2020-12-01 + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-resource: + - Microsoft.Compute/CreateUpdateDisks3Min;998,Microsoft.Compute/CreateUpdateDisks30Min;7996 + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --zone --location --sku --max-shares --size-gb + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-compute/20.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Compute/locations/eastus/DiskOperations/2047f61a-e555-4201-9378-13109d688d4f?api-version=2020-12-01 + response: + body: + string: "{\r\n \"startTime\": \"2021-05-25T06:08:35.1823818+00:00\",\r\n \"endTime\": + \"2021-05-25T06:08:35.3073615+00:00\",\r\n \"status\": \"Succeeded\",\r\n + \ \"properties\": {\r\n \"output\": {\r\n \"name\": \"disk000003\",\r\n + \ \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003\",\r\n + \ \"type\": \"Microsoft.Compute/disks\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"zones\": [\r\n \"3\"\r\n ],\r\n \"sku\": {\r\n + \ \"name\": \"Premium_LRS\",\r\n \"tier\": \"Premium\"\r\n },\r\n \"properties\": + {\r\n \"hyperVGeneration\": \"V1\",\r\n \"creationData\": {\r\n \"createOption\": + \"Empty\"\r\n },\r\n \"diskSizeGB\": 256,\r\n \"diskIOPSReadWrite\": + 1100,\r\n \"diskMBpsReadWrite\": 125,\r\n \"encryption\": {\r\n \"type\": + \"EncryptionAtRestWithPlatformKey\"\r\n },\r\n \"maxShares\": 2,\r\n + \ \"timeCreated\": \"2021-05-25T06:08:35.1979594+00:00\",\r\n \"provisioningState\": + \"Succeeded\",\r\n \"diskState\": \"Unattached\",\r\n \"diskSizeBytes\": + 274877906944,\r\n \"uniqueId\": \"3a5b9e9f-b195-47ab-84b7-8e9028266a51\",\r\n + \ \"networkAccessPolicy\": \"AllowAll\",\r\n \"tier\": \"P15\"\r\n }\r\n}\r\n + \ },\r\n \"name\": \"2047f61a-e555-4201-9378-13109d688d4f\"\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '1154' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:37 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-resource: + - Microsoft.Compute/GetOperation3Min;49997,Microsoft.Compute/GetOperation30Min;399978 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --zone --location --sku --max-shares --size-gb + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-compute/20.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003?api-version=2020-12-01 + response: + body: + string: "{\r\n \"name\": \"disk000003\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003\",\r\n + \ \"type\": \"Microsoft.Compute/disks\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"zones\": [\r\n \"3\"\r\n ],\r\n \"sku\": {\r\n + \ \"name\": \"Premium_LRS\",\r\n \"tier\": \"Premium\"\r\n },\r\n \"properties\": + {\r\n \"hyperVGeneration\": \"V1\",\r\n \"creationData\": {\r\n \"createOption\": + \"Empty\"\r\n },\r\n \"diskSizeGB\": 256,\r\n \"diskIOPSReadWrite\": + 1100,\r\n \"diskMBpsReadWrite\": 125,\r\n \"encryption\": {\r\n \"type\": + \"EncryptionAtRestWithPlatformKey\"\r\n },\r\n \"maxShares\": 2,\r\n + \ \"timeCreated\": \"2021-05-25T06:08:35.1979594+00:00\",\r\n \"provisioningState\": + \"Succeeded\",\r\n \"diskState\": \"Unattached\",\r\n \"diskSizeBytes\": + 274877906944,\r\n \"uniqueId\": \"3a5b9e9f-b195-47ab-84b7-8e9028266a51\",\r\n + \ \"networkAccessPolicy\": \"AllowAll\",\r\n \"tier\": \"P15\"\r\n }\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '929' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:38 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-resource: + - Microsoft.Compute/LowCostGet3Min;14992,Microsoft.Compute/LowCostGet30Min;119936 + status: + code: 200 + message: OK +- request: + body: '{"objectIds": ["09f10f07-08cf-4ab7-be0f-e9ae3d72b9ad"], "includeDirectoryObjectReferences": + true}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - role assignment create + Connection: + - keep-alive + Content-Length: + - '97' + Content-Type: + - application/json; charset=utf-8 + ParameterSetName: + - --assignee-object-id --role --scope + User-Agent: + - python/3.8.3 (Windows-10-10.0.19041-SP0) msrest/0.6.21 msrest_azure/0.6.3 + azure-graphrbac/0.60.0 Azure-SDK-For-Python AZURECLI/2.24.0 + accept-language: + - en-US + method: POST + uri: https://graph.windows.net/00000000-0000-0000-0000-000000000000/getObjectsByObjectIds?api-version=1.6 + response: + body: + string: '{"odata.metadata":"https://graph.windows.net/00000000-0000-0000-0000-000000000000/$metadata#directoryObjects","value":[{"odata.type":"Microsoft.DirectoryServices.ServicePrincipal","objectType":"ServicePrincipal","objectId":"09f10f07-08cf-4ab7-be0f-e9ae3d72b9ad","deletionTimestamp":null,"accountEnabled":true,"addIns":[],"alternativeNames":[],"appDisplayName":"StoragePool + Resource Provider","appId":"5741a1ff-751d-4ad7-bcd1-dfe3c998fd11","applicationTemplateId":null,"appOwnerTenantId":"f8cdef31-a31e-4b4a-93e4-5f571e91255a","appRoleAssignmentRequired":false,"appRoles":[],"displayName":"StoragePool + Resource Provider","errorUrl":null,"homepage":null,"informationalUrls":{"termsOfService":null,"support":null,"privacy":null,"marketing":null},"keyCredentials":[],"logoutUrl":null,"notificationEmailAddresses":[],"oauth2Permissions":[],"passwordCredentials":[],"preferredSingleSignOnMode":null,"preferredTokenSigningKeyEndDateTime":null,"preferredTokenSigningKeyThumbprint":null,"publisherName":"Microsoft + Services","replyUrls":[],"samlMetadataUrl":null,"samlSingleSignOnSettings":null,"servicePrincipalNames":["5741a1ff-751d-4ad7-bcd1-dfe3c998fd11"],"servicePrincipalType":"Application","signInAudience":"AzureADMultipleOrgs","tags":[],"tokenEncryptionKeyId":null}]}' + headers: + access-control-allow-origin: + - '*' + cache-control: + - no-cache + content-length: + - '1266' + content-type: + - application/json; odata=minimalmetadata; streaming=true; charset=utf-8 + dataserviceversion: + - 3.0; + date: + - Tue, 25 May 2021 06:08:40 GMT + duration: + - '2547997' + expires: + - '-1' + ocp-aad-diagnostics-server-name: + - vNweFmWUlAwBFr6kToXWyL5o1sOXckBy0R+YSfFsYjM= + ocp-aad-session-key: + - 8NhgzgemA_IMuCD7wzZgVKv683JsHJwCY9D4voYsVQkeOcKla8Ks5TGtURkJGtxtZAWN3trc4Qwjar7MICXXwm00FVc7yk6VEXNLG5jLQsAYqr-pa49PTCUSMTJBevcr.OS9O7c7wp5XVIrkZEjRIN_EFCfsZ89-TTXliolK-gA0 + pragma: + - no-cache + request-id: + - cae29a19-db19-463b-94bb-1131767d9332 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-ms-dirapi-data-contract-version: + - '1.6' + x-ms-resource-unit: + - '3' + x-powered-by: + - ASP.NET + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - role assignment create + Connection: + - keep-alive + ParameterSetName: + - --assignee-object-id --role --scope + User-Agent: + - python/3.8.3 (Windows-10-10.0.19041-SP0) msrest/0.6.21 msrest_azure/0.6.3 + azure-mgmt-authorization/0.61.0 Azure-SDK-For-Python AZURECLI/2.24.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002/providers/Microsoft.Authorization/roleDefinitions?$filter=roleName%20eq%20%27Virtual%20Machine%20Contributor%27&api-version=2018-01-01-preview + response: + body: + string: '{"value":[{"properties":{"roleName":"Virtual Machine Contributor","type":"BuiltInRole","description":"Lets + you manage virtual machines, but not access to them, and not the virtual network + or storage account they''re connected to.","assignableScopes":["/"],"permissions":[{"actions":["Microsoft.Authorization/*/read","Microsoft.Compute/availabilitySets/*","Microsoft.Compute/locations/*","Microsoft.Compute/virtualMachines/*","Microsoft.Compute/virtualMachineScaleSets/*","Microsoft.Compute/disks/write","Microsoft.Compute/disks/read","Microsoft.Compute/disks/delete","Microsoft.DevTestLab/schedules/*","Microsoft.Insights/alertRules/*","Microsoft.Network/applicationGateways/backendAddressPools/join/action","Microsoft.Network/loadBalancers/backendAddressPools/join/action","Microsoft.Network/loadBalancers/inboundNatPools/join/action","Microsoft.Network/loadBalancers/inboundNatRules/join/action","Microsoft.Network/loadBalancers/probes/join/action","Microsoft.Network/loadBalancers/read","Microsoft.Network/locations/*","Microsoft.Network/networkInterfaces/*","Microsoft.Network/networkSecurityGroups/join/action","Microsoft.Network/networkSecurityGroups/read","Microsoft.Network/publicIPAddresses/join/action","Microsoft.Network/publicIPAddresses/read","Microsoft.Network/virtualNetworks/read","Microsoft.Network/virtualNetworks/subnets/join/action","Microsoft.RecoveryServices/locations/*","Microsoft.RecoveryServices/Vaults/backupFabrics/backupProtectionIntent/write","Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/*/read","Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/read","Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/write","Microsoft.RecoveryServices/Vaults/backupPolicies/read","Microsoft.RecoveryServices/Vaults/backupPolicies/write","Microsoft.RecoveryServices/Vaults/read","Microsoft.RecoveryServices/Vaults/usages/read","Microsoft.RecoveryServices/Vaults/write","Microsoft.ResourceHealth/availabilityStatuses/read","Microsoft.Resources/deployments/*","Microsoft.Resources/subscriptions/resourceGroups/read","Microsoft.SqlVirtualMachine/*","Microsoft.Storage/storageAccounts/listKeys/action","Microsoft.Storage/storageAccounts/read","Microsoft.Support/*"],"notActions":[],"dataActions":[],"notDataActions":[]}],"createdOn":"2015-06-02T00:18:27.3542698Z","updatedOn":"2020-02-03T19:38:21.2170228Z","createdBy":null,"updatedBy":null},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c","type":"Microsoft.Authorization/roleDefinitions","name":"9980e02c-c2be-4d73-94e8-173b1dc7cf3c"}]}' + headers: + cache-control: + - no-cache + content-length: + - '2704' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:40 GMT + expires: + - '-1' + pragma: + - no-cache + set-cookie: + - x-ms-gateway-slice=Production; path=/; secure; samesite=none; httponly + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"roleDefinitionId": "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c", + "principalId": "09f10f07-08cf-4ab7-be0f-e9ae3d72b9ad", "principalType": "ServicePrincipal"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - role assignment create + Connection: + - keep-alive + Content-Length: + - '270' + Content-Type: + - application/json; charset=utf-8 + Cookie: + - x-ms-gateway-slice=Production + ParameterSetName: + - --assignee-object-id --role --scope + User-Agent: + - python/3.8.3 (Windows-10-10.0.19041-SP0) msrest/0.6.21 msrest_azure/0.6.3 + azure-mgmt-authorization/0.61.0 Azure-SDK-For-Python AZURECLI/2.24.0 + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002/providers/Microsoft.Authorization/roleAssignments/88888888-0000-0000-0000-000000000001?api-version=2020-04-01-preview + response: + body: + string: '{"properties":{"roleDefinitionId":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c","principalId":"09f10f07-08cf-4ab7-be0f-e9ae3d72b9ad","principalType":"ServicePrincipal","scope":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002","condition":null,"conditionVersion":null,"createdOn":"2021-05-25T06:08:41.2822213Z","updatedOn":"2021-05-25T06:08:42.1594784Z","createdBy":null,"updatedBy":"21cd756e-e290-4a26-9547-93e8cc1a8923","delegatedManagedIdentityResourceId":null,"description":null},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002/providers/Microsoft.Authorization/roleAssignments/88888888-0000-0000-0000-000000000001","type":"Microsoft.Authorization/roleAssignments","name":"88888888-0000-0000-0000-000000000001"}' + headers: + cache-control: + - no-cache + content-length: + - '977' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:45 GMT + expires: + - '-1' + pragma: + - no-cache + set-cookie: + - x-ms-gateway-slice=Production; path=/; secure; samesite=none; httponly + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + status: + code: 201 + message: Created +- request: + body: '{"objectIds": ["09f10f07-08cf-4ab7-be0f-e9ae3d72b9ad"], "includeDirectoryObjectReferences": + true}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - role assignment create + Connection: + - keep-alive + Content-Length: + - '97' + Content-Type: + - application/json; charset=utf-8 + ParameterSetName: + - --assignee-object-id --role --scope + User-Agent: + - python/3.8.3 (Windows-10-10.0.19041-SP0) msrest/0.6.21 msrest_azure/0.6.3 + azure-graphrbac/0.60.0 Azure-SDK-For-Python AZURECLI/2.24.0 + accept-language: + - en-US + method: POST + uri: https://graph.windows.net/00000000-0000-0000-0000-000000000000/getObjectsByObjectIds?api-version=1.6 + response: + body: + string: '{"odata.metadata":"https://graph.windows.net/00000000-0000-0000-0000-000000000000/$metadata#directoryObjects","value":[{"odata.type":"Microsoft.DirectoryServices.ServicePrincipal","objectType":"ServicePrincipal","objectId":"09f10f07-08cf-4ab7-be0f-e9ae3d72b9ad","deletionTimestamp":null,"accountEnabled":true,"addIns":[],"alternativeNames":[],"appDisplayName":"StoragePool + Resource Provider","appId":"5741a1ff-751d-4ad7-bcd1-dfe3c998fd11","applicationTemplateId":null,"appOwnerTenantId":"f8cdef31-a31e-4b4a-93e4-5f571e91255a","appRoleAssignmentRequired":false,"appRoles":[],"displayName":"StoragePool + Resource Provider","errorUrl":null,"homepage":null,"informationalUrls":{"termsOfService":null,"support":null,"privacy":null,"marketing":null},"keyCredentials":[],"logoutUrl":null,"notificationEmailAddresses":[],"oauth2Permissions":[],"passwordCredentials":[],"preferredSingleSignOnMode":null,"preferredTokenSigningKeyEndDateTime":null,"preferredTokenSigningKeyThumbprint":null,"publisherName":"Microsoft + Services","replyUrls":[],"samlMetadataUrl":null,"samlSingleSignOnSettings":null,"servicePrincipalNames":["5741a1ff-751d-4ad7-bcd1-dfe3c998fd11"],"servicePrincipalType":"Application","signInAudience":"AzureADMultipleOrgs","tags":[],"tokenEncryptionKeyId":null}]}' + headers: + access-control-allow-origin: + - '*' + cache-control: + - no-cache + content-length: + - '1266' + content-type: + - application/json; odata=minimalmetadata; streaming=true; charset=utf-8 + dataserviceversion: + - 3.0; + date: + - Tue, 25 May 2021 06:08:46 GMT + duration: + - '2654950' + expires: + - '-1' + ocp-aad-diagnostics-server-name: + - TaL7kANKRnvvbZiSrMqFBAv0pfZbW/BsTOL2yLvuCnU= + ocp-aad-session-key: + - e4rbJc3FnVOoGCnSXOHcobE5ON5bYy3L44qR1uoXle_oH0P38ErF99fcfDGxx_uWv_6mEuBtUR61JzdOb7DixEgszJB-n2hEB4p4_yhV21iawx9ceXlj-MKNhPkDCd_G.eQt8s697mgfofdBQRg2MA91tgnmHELD67qvs57BBQO4 + pragma: + - no-cache + request-id: + - 35361e6b-00ae-4922-9eb7-b446407c45d4 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-aspnet-version: + - 4.0.30319 + x-ms-dirapi-data-contract-version: + - '1.6' + x-ms-resource-unit: + - '3' + x-powered-by: + - ASP.NET + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - role assignment create + Connection: + - keep-alive + ParameterSetName: + - --assignee-object-id --role --scope + User-Agent: + - python/3.8.3 (Windows-10-10.0.19041-SP0) msrest/0.6.21 msrest_azure/0.6.3 + azure-mgmt-authorization/0.61.0 Azure-SDK-For-Python AZURECLI/2.24.0 + accept-language: + - en-US + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003/providers/Microsoft.Authorization/roleDefinitions?$filter=roleName%20eq%20%27Virtual%20Machine%20Contributor%27&api-version=2018-01-01-preview + response: + body: + string: '{"value":[{"properties":{"roleName":"Virtual Machine Contributor","type":"BuiltInRole","description":"Lets + you manage virtual machines, but not access to them, and not the virtual network + or storage account they''re connected to.","assignableScopes":["/"],"permissions":[{"actions":["Microsoft.Authorization/*/read","Microsoft.Compute/availabilitySets/*","Microsoft.Compute/locations/*","Microsoft.Compute/virtualMachines/*","Microsoft.Compute/virtualMachineScaleSets/*","Microsoft.Compute/disks/write","Microsoft.Compute/disks/read","Microsoft.Compute/disks/delete","Microsoft.DevTestLab/schedules/*","Microsoft.Insights/alertRules/*","Microsoft.Network/applicationGateways/backendAddressPools/join/action","Microsoft.Network/loadBalancers/backendAddressPools/join/action","Microsoft.Network/loadBalancers/inboundNatPools/join/action","Microsoft.Network/loadBalancers/inboundNatRules/join/action","Microsoft.Network/loadBalancers/probes/join/action","Microsoft.Network/loadBalancers/read","Microsoft.Network/locations/*","Microsoft.Network/networkInterfaces/*","Microsoft.Network/networkSecurityGroups/join/action","Microsoft.Network/networkSecurityGroups/read","Microsoft.Network/publicIPAddresses/join/action","Microsoft.Network/publicIPAddresses/read","Microsoft.Network/virtualNetworks/read","Microsoft.Network/virtualNetworks/subnets/join/action","Microsoft.RecoveryServices/locations/*","Microsoft.RecoveryServices/Vaults/backupFabrics/backupProtectionIntent/write","Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/*/read","Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/read","Microsoft.RecoveryServices/Vaults/backupFabrics/protectionContainers/protectedItems/write","Microsoft.RecoveryServices/Vaults/backupPolicies/read","Microsoft.RecoveryServices/Vaults/backupPolicies/write","Microsoft.RecoveryServices/Vaults/read","Microsoft.RecoveryServices/Vaults/usages/read","Microsoft.RecoveryServices/Vaults/write","Microsoft.ResourceHealth/availabilityStatuses/read","Microsoft.Resources/deployments/*","Microsoft.Resources/subscriptions/resourceGroups/read","Microsoft.SqlVirtualMachine/*","Microsoft.Storage/storageAccounts/listKeys/action","Microsoft.Storage/storageAccounts/read","Microsoft.Support/*"],"notActions":[],"dataActions":[],"notDataActions":[]}],"createdOn":"2015-06-02T00:18:27.3542698Z","updatedOn":"2020-02-03T19:38:21.2170228Z","createdBy":null,"updatedBy":null},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c","type":"Microsoft.Authorization/roleDefinitions","name":"9980e02c-c2be-4d73-94e8-173b1dc7cf3c"}]}' + headers: + cache-control: + - no-cache + content-length: + - '2704' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:47 GMT + expires: + - '-1' + pragma: + - no-cache + set-cookie: + - x-ms-gateway-slice=Production; path=/; secure; samesite=none; httponly + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + status: + code: 200 + message: OK +- request: + body: '{"properties": {"roleDefinitionId": "/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c", + "principalId": "09f10f07-08cf-4ab7-be0f-e9ae3d72b9ad", "principalType": "ServicePrincipal"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - role assignment create + Connection: + - keep-alive + Content-Length: + - '270' + Content-Type: + - application/json; charset=utf-8 + Cookie: + - x-ms-gateway-slice=Production + ParameterSetName: + - --assignee-object-id --role --scope + User-Agent: + - python/3.8.3 (Windows-10-10.0.19041-SP0) msrest/0.6.21 msrest_azure/0.6.3 + azure-mgmt-authorization/0.61.0 Azure-SDK-For-Python AZURECLI/2.24.0 + accept-language: + - en-US + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003/providers/Microsoft.Authorization/roleAssignments/88888888-0000-0000-0000-000000000002?api-version=2020-04-01-preview + response: + body: + string: '{"properties":{"roleDefinitionId":"/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Authorization/roleDefinitions/9980e02c-c2be-4d73-94e8-173b1dc7cf3c","principalId":"09f10f07-08cf-4ab7-be0f-e9ae3d72b9ad","principalType":"ServicePrincipal","scope":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003","condition":null,"conditionVersion":null,"createdOn":"2021-05-25T06:08:47.8367921Z","updatedOn":"2021-05-25T06:08:48.5818008Z","createdBy":null,"updatedBy":"21cd756e-e290-4a26-9547-93e8cc1a8923","delegatedManagedIdentityResourceId":null,"description":null},"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003/providers/Microsoft.Authorization/roleAssignments/88888888-0000-0000-0000-000000000002","type":"Microsoft.Authorization/roleAssignments","name":"88888888-0000-0000-0000-000000000002"}' + headers: + cache-control: + - no-cache + content-length: + - '977' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:08:52 GMT + expires: + - '-1' + pragma: + - no-cache + set-cookie: + - x-ms-gateway-slice=Production; path=/; secure; samesite=none; httponly + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + status: + code: 201 + message: Created +- request: + body: '{"location": "eastus", "tags": {}, "properties": {"addressSpace": {"addressPrefixes": + ["10.0.0.0/16"]}, "dhcpOptions": {}}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vnet create + Connection: + - keep-alive + Content-Length: + - '123' + Content-Type: + - application/json + ParameterSetName: + - --name --resource-group --location + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-network/19.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004?api-version=2021-02-01 + response: + body: + string: "{\r\n \"name\": \"vnet000004\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004\",\r\n + \ \"etag\": \"W/\\\"4c5a22c4-7752-4c34-bc14-89603e70f26c\\\"\",\r\n \"type\": + \"Microsoft.Network/virtualNetworks\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"properties\": {\r\n \"provisioningState\": \"Updating\",\r\n + \ \"resourceGuid\": \"3a8c3d9e-e518-4882-9967-726fcbade9b8\",\r\n \"addressSpace\": + {\r\n \"addressPrefixes\": [\r\n \"10.0.0.0/16\"\r\n ]\r\n + \ },\r\n \"dhcpOptions\": {\r\n \"dnsServers\": []\r\n },\r\n + \ \"subnets\": [],\r\n \"virtualNetworkPeerings\": [],\r\n \"enableDdosProtection\": + false\r\n }\r\n}" + headers: + azure-asyncnotification: + - Enabled + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/615b1d69-b473-4c65-8452-0d39b66ca10d?api-version=2021-02-01 + cache-control: + - no-cache + content-length: + - '683' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:09:01 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 37fdcff9-616d-4a65-b43f-3349e904e0ef + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vnet create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-network/19.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/615b1d69-b473-4c65-8452-0d39b66ca10d?api-version=2021-02-01 + response: + body: + string: "{\r\n \"status\": \"Succeeded\"\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '29' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:09:04 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 323412a6-573a-4468-a0ed-8630d5168af0 + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vnet create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-network/19.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004?api-version=2021-02-01 + response: + body: + string: "{\r\n \"name\": \"vnet000004\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004\",\r\n + \ \"etag\": \"W/\\\"6e90abc6-5ad9-438c-abbc-c5a029a28898\\\"\",\r\n \"type\": + \"Microsoft.Network/virtualNetworks\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"properties\": {\r\n \"provisioningState\": \"Succeeded\",\r\n + \ \"resourceGuid\": \"3a8c3d9e-e518-4882-9967-726fcbade9b8\",\r\n \"addressSpace\": + {\r\n \"addressPrefixes\": [\r\n \"10.0.0.0/16\"\r\n ]\r\n + \ },\r\n \"dhcpOptions\": {\r\n \"dnsServers\": []\r\n },\r\n + \ \"subnets\": [],\r\n \"virtualNetworkPeerings\": [],\r\n \"enableDdosProtection\": + false\r\n }\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '684' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:09:06 GMT + etag: + - W/"6e90abc6-5ad9-438c-abbc-c5a029a28898" + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 92a40150-7377-4767-a24a-d3ba1909e98f + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vnet subnet create + Connection: + - keep-alive + ParameterSetName: + - --name --vnet-name --resource-group --address-prefixes --delegations + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-network/19.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004?api-version=2021-02-01 + response: + body: + string: "{\r\n \"name\": \"vnet000004\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004\",\r\n + \ \"etag\": \"W/\\\"6e90abc6-5ad9-438c-abbc-c5a029a28898\\\"\",\r\n \"type\": + \"Microsoft.Network/virtualNetworks\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"properties\": {\r\n \"provisioningState\": \"Succeeded\",\r\n + \ \"resourceGuid\": \"3a8c3d9e-e518-4882-9967-726fcbade9b8\",\r\n \"addressSpace\": + {\r\n \"addressPrefixes\": [\r\n \"10.0.0.0/16\"\r\n ]\r\n + \ },\r\n \"dhcpOptions\": {\r\n \"dnsServers\": []\r\n },\r\n + \ \"subnets\": [],\r\n \"virtualNetworkPeerings\": [],\r\n \"enableDdosProtection\": + false\r\n }\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '684' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:09:06 GMT + etag: + - W/"6e90abc6-5ad9-438c-abbc-c5a029a28898" + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 7b1c142a-0175-4741-9f24-7c91eb2533a3 + status: + code: 200 + message: OK +- request: + body: '{"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004", + "location": "eastus", "tags": {}, "properties": {"addressSpace": {"addressPrefixes": + ["10.0.0.0/16"]}, "dhcpOptions": {"dnsServers": []}, "subnets": [{"name": "subnet000005", + "properties": {"addressPrefix": "10.0.0.0/24", "delegations": [{"name": "0", + "properties": {"serviceName": "Microsoft.StoragePool/diskPools"}}], "privateEndpointNetworkPolicies": + "Enabled", "privateLinkServiceNetworkPolicies": "Enabled"}}], "virtualNetworkPeerings": + [], "enableDdosProtection": false}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - network vnet subnet create + Connection: + - keep-alive + Content-Length: + - '624' + Content-Type: + - application/json + ParameterSetName: + - --name --vnet-name --resource-group --address-prefixes --delegations + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-network/19.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004?api-version=2021-02-01 + response: + body: + string: "{\r\n \"name\": \"vnet000004\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004\",\r\n + \ \"etag\": \"W/\\\"8d5ab029-0f8d-460a-bb22-4a2df40d7bdf\\\"\",\r\n \"type\": + \"Microsoft.Network/virtualNetworks\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"properties\": {\r\n \"provisioningState\": \"Updating\",\r\n + \ \"resourceGuid\": \"3a8c3d9e-e518-4882-9967-726fcbade9b8\",\r\n \"addressSpace\": + {\r\n \"addressPrefixes\": [\r\n \"10.0.0.0/16\"\r\n ]\r\n + \ },\r\n \"dhcpOptions\": {\r\n \"dnsServers\": []\r\n },\r\n + \ \"subnets\": [\r\n {\r\n \"name\": \"subnet000005\",\r\n \"id\": + \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005\",\r\n + \ \"etag\": \"W/\\\"8d5ab029-0f8d-460a-bb22-4a2df40d7bdf\\\"\",\r\n + \ \"properties\": {\r\n \"provisioningState\": \"Updating\",\r\n + \ \"addressPrefix\": \"10.0.0.0/24\",\r\n \"delegations\": + [\r\n {\r\n \"name\": \"0\",\r\n \"id\": + \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005/delegations/0\",\r\n + \ \"etag\": \"W/\\\"8d5ab029-0f8d-460a-bb22-4a2df40d7bdf\\\"\",\r\n + \ \"properties\": {\r\n \"provisioningState\": + \"Succeeded\",\r\n \"serviceName\": \"Microsoft.StoragePool/diskPools\",\r\n + \ \"actions\": [\r\n \"Microsoft.Network/virtualNetworks/read\"\r\n + \ ]\r\n },\r\n \"type\": \"Microsoft.Network/virtualNetworks/subnets/delegations\"\r\n + \ }\r\n ],\r\n \"privateEndpointNetworkPolicies\": + \"Enabled\",\r\n \"privateLinkServiceNetworkPolicies\": \"Enabled\"\r\n + \ },\r\n \"type\": \"Microsoft.Network/virtualNetworks/subnets\"\r\n + \ }\r\n ],\r\n \"virtualNetworkPeerings\": [],\r\n \"enableDdosProtection\": + false\r\n }\r\n}" + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/e80d1fe9-5422-4182-bbc4-f5a9674851a9?api-version=2021-02-01 + cache-control: + - no-cache + content-length: + - '1996' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:09:08 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 39229ab7-9220-439f-8e3b-2c9bd64b8824 + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vnet subnet create + Connection: + - keep-alive + ParameterSetName: + - --name --vnet-name --resource-group --address-prefixes --delegations + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-network/19.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.Network/locations/eastus/operations/e80d1fe9-5422-4182-bbc4-f5a9674851a9?api-version=2021-02-01 + response: + body: + string: "{\r\n \"status\": \"Succeeded\"\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '29' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:09:11 GMT + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - 66b56d13-bd1f-41fb-992b-75f46cc49aef + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - network vnet subnet create + Connection: + - keep-alive + ParameterSetName: + - --name --vnet-name --resource-group --address-prefixes --delegations + User-Agent: + - AZURECLI/2.24.0 azsdk-python-azure-mgmt-network/19.0.0 Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004?api-version=2021-02-01 + response: + body: + string: "{\r\n \"name\": \"vnet000004\",\r\n \"id\": \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004\",\r\n + \ \"etag\": \"W/\\\"2d3f7bbf-826b-4c0e-8d7c-60b7c29d8bf2\\\"\",\r\n \"type\": + \"Microsoft.Network/virtualNetworks\",\r\n \"location\": \"eastus\",\r\n + \ \"tags\": {},\r\n \"properties\": {\r\n \"provisioningState\": \"Succeeded\",\r\n + \ \"resourceGuid\": \"3a8c3d9e-e518-4882-9967-726fcbade9b8\",\r\n \"addressSpace\": + {\r\n \"addressPrefixes\": [\r\n \"10.0.0.0/16\"\r\n ]\r\n + \ },\r\n \"dhcpOptions\": {\r\n \"dnsServers\": []\r\n },\r\n + \ \"subnets\": [\r\n {\r\n \"name\": \"subnet000005\",\r\n \"id\": + \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005\",\r\n + \ \"etag\": \"W/\\\"2d3f7bbf-826b-4c0e-8d7c-60b7c29d8bf2\\\"\",\r\n + \ \"properties\": {\r\n \"provisioningState\": \"Succeeded\",\r\n + \ \"addressPrefix\": \"10.0.0.0/24\",\r\n \"delegations\": + [\r\n {\r\n \"name\": \"0\",\r\n \"id\": + \"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005/delegations/0\",\r\n + \ \"etag\": \"W/\\\"2d3f7bbf-826b-4c0e-8d7c-60b7c29d8bf2\\\"\",\r\n + \ \"properties\": {\r\n \"provisioningState\": + \"Succeeded\",\r\n \"serviceName\": \"Microsoft.StoragePool/diskPools\",\r\n + \ \"actions\": [\r\n \"Microsoft.Network/virtualNetworks/read\"\r\n + \ ]\r\n },\r\n \"type\": \"Microsoft.Network/virtualNetworks/subnets/delegations\"\r\n + \ }\r\n ],\r\n \"privateEndpointNetworkPolicies\": + \"Enabled\",\r\n \"privateLinkServiceNetworkPolicies\": \"Enabled\"\r\n + \ },\r\n \"type\": \"Microsoft.Network/virtualNetworks/subnets\"\r\n + \ }\r\n ],\r\n \"virtualNetworkPeerings\": [],\r\n \"enableDdosProtection\": + false\r\n }\r\n}" + headers: + cache-control: + - no-cache + content-length: + - '1998' + content-type: + - application/json; charset=utf-8 + date: + - Tue, 25 May 2021 06:09:12 GMT + etag: + - W/"2d3f7bbf-826b-4c0e-8d7c-60b7c29d8bf2" + expires: + - '-1' + pragma: + - no-cache + server: + - Microsoft-HTTPAPI/2.0 + - Microsoft-HTTPAPI/2.0 + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-arm-service-request-id: + - d32ece12-fab3-432f-8aeb-ac3214b19be8 + status: + code: 200 + message: OK +- request: + body: '{"sku": {"name": "Standard", "tier": "Standard"}, "location": "eastus", + "properties": {"availabilityZones": ["3"], "disks": [{"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"}], + "subnetId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005"}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + Content-Length: + - '439' + Content-Type: + - application/json + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:09:17.0897576Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Pending","status":"Unknown"},"sku":{"name":"Standard","tier":"Standard"}}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + cache-control: + - no-cache + content-length: + - '927' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:09:20 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-async-operation-timeout: + - PT1H + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + x-ms-return-client-request-id: + - 'true' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:09:31 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:10:01 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:10:31 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:11:02 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:11:32 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:12:02 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:12:33 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:13:04 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:13:34 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:14:05 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:14:38 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:15:08 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:15:38 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:16:09 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:16:39 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:17:10 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:17:41 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:18:11 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:18:41 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Running","startTime":"2021-05-25T06:09:19Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:19:11 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/87fb07a8-9e0f-4663-8120-21635d5fdc5a","name":"87fb07a8-9e0f-4663-8120-21635d5fdc5a","status":"Succeeded","startTime":"2021-05-25T06:09:19Z","endTime":"2021-05-25T06:19:34Z","properties":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:09:17.0897576Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Running"},"sku":{"name":"Standard","tier":"Standard"}}}' + headers: + cache-control: + - no-cache + content-length: + - '1208' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:19:43 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool create + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --location --availability-zones --subnet-id --sku + --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:09:17.0897576Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Running"},"sku":{"name":"Standard","tier":"Standard"}}' + headers: + cache-control: + - no-cache + content-length: + - '929' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:19:44 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool show + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:09:17.0897576Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Running"},"sku":{"name":"Standard","tier":"Standard"}}' + headers: + cache-control: + - no-cache + content-length: + - '929' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:19:45 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool list + Connection: + - keep-alive + ParameterSetName: + - --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools?api-version=2021-04-01-preview + response: + body: + string: '{"value":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:09:17.0897576Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Running"},"sku":{"name":"Standard","tier":"Standard"}}],"nextLink":null}' + headers: + cache-control: + - no-cache + content-length: + - '957' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:19:46 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"aclMode": "Dynamic", "luns": [{"name": "lun0", "managedDiskAzureResourceId": + "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"}]}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target create + Connection: + - keep-alive + Content-Length: + - '228' + Content-Type: + - application/json + ParameterSetName: + - --name --disk-pool-name --resource-group --acl-mode --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007","name":"iscsi000007","type":"Microsoft.StoragePool/diskPools/iscsiTargets","systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:19:48.0331286Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:19:48.0331286Z"},"properties":{"targetIqn":"iqn.2021-05.com.microsoft:iscsi000007","aclMode":"Dynamic","luns":[{"managedDiskAzureResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002","name":"lun0","lun":0}],"endpoints":["10.0.0.4:3260","10.0.0.5:3260"],"provisioningState":"Pending","status":"Unknown"}}' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/37ec0a36-4121-4691-9344-1420673ea6be?api-version=2021-04-01-preview + cache-control: + - no-cache + content-length: + - '849' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:19:48 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-async-operation-timeout: + - PT1H + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + x-ms-return-client-request-id: + - 'true' + status: + code: 201 + message: Created +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target create + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --acl-mode --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/37ec0a36-4121-4691-9344-1420673ea6be?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/37ec0a36-4121-4691-9344-1420673ea6be","name":"37ec0a36-4121-4691-9344-1420673ea6be","status":"Running","startTime":"2021-05-25T06:19:49Z"}' + headers: + cache-control: + - no-cache + content-length: + - '230' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:19:59 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target create + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --acl-mode --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/37ec0a36-4121-4691-9344-1420673ea6be?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/37ec0a36-4121-4691-9344-1420673ea6be","name":"37ec0a36-4121-4691-9344-1420673ea6be","status":"Running","startTime":"2021-05-25T06:19:49Z"}' + headers: + cache-control: + - no-cache + content-length: + - '230' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:20:29 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target create + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --acl-mode --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/37ec0a36-4121-4691-9344-1420673ea6be?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/37ec0a36-4121-4691-9344-1420673ea6be","name":"37ec0a36-4121-4691-9344-1420673ea6be","status":"Running","startTime":"2021-05-25T06:19:49Z"}' + headers: + cache-control: + - no-cache + content-length: + - '230' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:21:00 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target create + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --acl-mode --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/37ec0a36-4121-4691-9344-1420673ea6be?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/37ec0a36-4121-4691-9344-1420673ea6be","name":"37ec0a36-4121-4691-9344-1420673ea6be","status":"Succeeded","startTime":"2021-05-25T06:19:49Z","endTime":"2021-05-25T06:21:03Z","properties":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007","name":"iscsi000007","type":"Microsoft.StoragePool/diskPools/iscsiTargets","systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:19:48.0331286Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:19:48.0331286Z"},"properties":{"targetIqn":"iqn.2021-05.com.microsoft:iscsi000007","aclMode":"Dynamic","luns":[{"managedDiskAzureResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002","name":"lun0","lun":0}],"endpoints":["10.0.0.4:3260","10.0.0.5:3260"],"provisioningState":"Succeeded","status":"Healthy"}}}' + headers: + cache-control: + - no-cache + content-length: + - '1130' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:21:31 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target create + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --acl-mode --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007","name":"iscsi000007","type":"Microsoft.StoragePool/diskPools/iscsiTargets","systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:19:48.0331286Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:19:48.0331286Z"},"properties":{"targetIqn":"iqn.2021-05.com.microsoft:iscsi000007","aclMode":"Dynamic","luns":[{"managedDiskAzureResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002","name":"lun0","lun":0}],"endpoints":["10.0.0.4:3260","10.0.0.5:3260"],"provisioningState":"Succeeded","status":"Healthy"}}' + headers: + cache-control: + - no-cache + content-length: + - '851' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:21:31 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target show + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007","name":"iscsi000007","type":"Microsoft.StoragePool/diskPools/iscsiTargets","systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:19:48.0331286Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:19:48.0331286Z"},"properties":{"targetIqn":"iqn.2021-05.com.microsoft:iscsi000007","aclMode":"Dynamic","luns":[{"managedDiskAzureResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002","name":"lun0","lun":0}],"endpoints":["10.0.0.4:3260","10.0.0.5:3260"],"provisioningState":"Succeeded","status":"Healthy"}}' + headers: + cache-control: + - no-cache + content-length: + - '851' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:21:32 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target list + Connection: + - keep-alive + ParameterSetName: + - --disk-pool-name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets?api-version=2021-04-01-preview + response: + body: + string: '{"value":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007","name":"iscsi000007","type":"Microsoft.StoragePool/diskPools/iscsiTargets","systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:19:48.0331286Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:19:48.0331286Z"},"properties":{"targetIqn":"iqn.2021-05.com.microsoft:iscsi000007","aclMode":"Dynamic","luns":[{"managedDiskAzureResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002","name":"lun0","lun":0}],"endpoints":["10.0.0.4:3260","10.0.0.5:3260"],"provisioningState":"Succeeded","status":"Healthy"}}],"nextLink":null}' + headers: + cache-control: + - no-cache + content-length: + - '879' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:21:34 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"disks": [{"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"}, + {"id": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003"}]}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool update + Connection: + - keep-alive + Content-Length: + - '307' + Content-Type: + - application/json + ParameterSetName: + - --name --resource-group --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: PATCH + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006?api-version=2021-04-01-preview + response: + body: + string: '' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6?api-version=2021-04-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 25 May 2021 06:21:37 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationresults/5aeb37cc-a246-4503-a7dd-7a78433196c6?api-version=2021-04-01-preview + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-async-operation-timeout: + - PT1H + x-ms-ratelimit-remaining-subscription-writes: + - '1197' + x-ms-return-client-request-id: + - 'true' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool update + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6","name":"5aeb37cc-a246-4503-a7dd-7a78433196c6","status":"Running","startTime":"2021-05-25T06:21:37Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:21:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool update + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6","name":"5aeb37cc-a246-4503-a7dd-7a78433196c6","status":"Running","startTime":"2021-05-25T06:21:37Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:22:17 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool update + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6","name":"5aeb37cc-a246-4503-a7dd-7a78433196c6","status":"Running","startTime":"2021-05-25T06:21:37Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:22:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool update + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6","name":"5aeb37cc-a246-4503-a7dd-7a78433196c6","status":"Running","startTime":"2021-05-25T06:21:37Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:23:19 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool update + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6","name":"5aeb37cc-a246-4503-a7dd-7a78433196c6","status":"Running","startTime":"2021-05-25T06:21:37Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:23:49 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool update + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/5aeb37cc-a246-4503-a7dd-7a78433196c6","name":"5aeb37cc-a246-4503-a7dd-7a78433196c6","status":"Succeeded","startTime":"2021-05-25T06:21:37Z","endTime":"2021-05-25T06:23:57Z","properties":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:21:35.5269744Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Running"},"sku":{"name":"Standard","tier":"Standard"}}}' + headers: + cache-control: + - no-cache + content-length: + - '1346' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:24:19 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool update + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group --disks + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:21:35.5269744Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Running"},"sku":{"name":"Standard","tier":"Standard"}}' + headers: + cache-control: + - no-cache + content-length: + - '1067' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:24:19 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: '{"properties": {"luns": [{"name": "lun0", "managedDiskAzureResourceId": + "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"}, + {"name": "lun1", "managedDiskAzureResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003"}]}}' + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target update + Connection: + - keep-alive + Content-Length: + - '386' + Content-Type: + - application/json + ParameterSetName: + - --name --disk-pool-name --resource-group --luns --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: PATCH + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007?api-version=2021-04-01-preview + response: + body: + string: '' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/f1c94a62-69eb-4515-870d-fbcefcf5e7ff?api-version=2021-04-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 25 May 2021 06:24:22 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationresults/f1c94a62-69eb-4515-870d-fbcefcf5e7ff?api-version=2021-04-01-preview + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-async-operation-timeout: + - PT1H + x-ms-ratelimit-remaining-subscription-writes: + - '1198' + x-ms-return-client-request-id: + - 'true' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target update + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --luns --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/f1c94a62-69eb-4515-870d-fbcefcf5e7ff?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/f1c94a62-69eb-4515-870d-fbcefcf5e7ff","name":"f1c94a62-69eb-4515-870d-fbcefcf5e7ff","status":"Running","startTime":"2021-05-25T06:24:22Z"}' + headers: + cache-control: + - no-cache + content-length: + - '230' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:24:32 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target update + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --luns --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/f1c94a62-69eb-4515-870d-fbcefcf5e7ff?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/f1c94a62-69eb-4515-870d-fbcefcf5e7ff","name":"f1c94a62-69eb-4515-870d-fbcefcf5e7ff","status":"Running","startTime":"2021-05-25T06:24:22Z"}' + headers: + cache-control: + - no-cache + content-length: + - '230' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:25:03 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target update + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --luns --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/f1c94a62-69eb-4515-870d-fbcefcf5e7ff?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/f1c94a62-69eb-4515-870d-fbcefcf5e7ff","name":"f1c94a62-69eb-4515-870d-fbcefcf5e7ff","status":"Running","startTime":"2021-05-25T06:24:22Z"}' + headers: + cache-control: + - no-cache + content-length: + - '230' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:25:33 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target update + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --luns --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/f1c94a62-69eb-4515-870d-fbcefcf5e7ff?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/f1c94a62-69eb-4515-870d-fbcefcf5e7ff","name":"f1c94a62-69eb-4515-870d-fbcefcf5e7ff","status":"Succeeded","startTime":"2021-05-25T06:24:22Z","endTime":"2021-05-25T06:25:59Z","properties":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007","name":"iscsi000007","type":"Microsoft.StoragePool/diskPools/iscsiTargets","systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:19:48.0331286Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:24:21.2019994Z"},"properties":{"targetIqn":"iqn.2021-05.com.microsoft:iscsi000007","aclMode":"Dynamic","luns":[{"managedDiskAzureResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002","name":"lun0","lun":0},{"managedDiskAzureResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003","name":"lun1","lun":1}],"endpoints":["10.0.0.4:3260","10.0.0.5:3260"],"provisioningState":"Succeeded","status":"Healthy"}}}' + headers: + cache-control: + - no-cache + content-length: + - '1314' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:26:04 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target update + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group --luns --luns + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007","name":"iscsi000007","type":"Microsoft.StoragePool/diskPools/iscsiTargets","systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:19:48.0331286Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:24:21.2019994Z"},"properties":{"targetIqn":"iqn.2021-05.com.microsoft:iscsi000007","aclMode":"Dynamic","luns":[{"managedDiskAzureResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002","name":"lun0","lun":0},{"managedDiskAzureResourceId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003","name":"lun1","lun":1}],"endpoints":["10.0.0.4:3260","10.0.0.5:3260"],"provisioningState":"Succeeded","status":"Healthy"}}' + headers: + cache-control: + - no-cache + content-length: + - '1035' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:26:04 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/deallocate?api-version=2021-04-01-preview + response: + body: + string: '' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 25 May 2021 06:26:06 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationresults/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + x-ms-return-client-request-id: + - 'true' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:26:17 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:26:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:27:17 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:27:47 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:28:18 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:28:48 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:29:20 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:29:50 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:30:20 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Running","startTime":"2021-05-25T06:26:06Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:30:50 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool stop + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/ba31ec2f-7235-4783-82d7-c3940bccaa3a","name":"ba31ec2f-7235-4783-82d7-c3940bccaa3a","status":"Succeeded","startTime":"2021-05-25T06:26:06Z","endTime":"2021-05-25T06:31:14Z","properties":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:21:35.5269744Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Stopped + (deallocated)"},"sku":{"name":"Standard","tier":"Standard"}}}' + headers: + cache-control: + - no-cache + content-length: + - '1360' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:31:21 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool show + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:21:35.5269744Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Stopped + (deallocated)"},"sku":{"name":"Standard","tier":"Standard"}}' + headers: + cache-control: + - no-cache + content-length: + - '1081' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:31:24 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool start + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: POST + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/start?api-version=2021-04-01-preview + response: + body: + string: '' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/e208c283-fc07-4a03-a362-d4a05995fbdc?api-version=2021-04-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 25 May 2021 06:31:25 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationresults/e208c283-fc07-4a03-a362-d4a05995fbdc?api-version=2021-04-01-preview + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-ratelimit-remaining-subscription-writes: + - '1199' + x-ms-return-client-request-id: + - 'true' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool start + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/e208c283-fc07-4a03-a362-d4a05995fbdc?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/e208c283-fc07-4a03-a362-d4a05995fbdc","name":"e208c283-fc07-4a03-a362-d4a05995fbdc","status":"Running","startTime":"2021-05-25T06:31:25Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:31:36 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool start + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/e208c283-fc07-4a03-a362-d4a05995fbdc?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/e208c283-fc07-4a03-a362-d4a05995fbdc","name":"e208c283-fc07-4a03-a362-d4a05995fbdc","status":"Running","startTime":"2021-05-25T06:31:25Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:32:06 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool start + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/e208c283-fc07-4a03-a362-d4a05995fbdc?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/e208c283-fc07-4a03-a362-d4a05995fbdc","name":"e208c283-fc07-4a03-a362-d4a05995fbdc","status":"Running","startTime":"2021-05-25T06:31:25Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:32:37 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool start + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/e208c283-fc07-4a03-a362-d4a05995fbdc?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/e208c283-fc07-4a03-a362-d4a05995fbdc","name":"e208c283-fc07-4a03-a362-d4a05995fbdc","status":"Running","startTime":"2021-05-25T06:31:25Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '243' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:33:07 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool start + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/e208c283-fc07-4a03-a362-d4a05995fbdc?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/e208c283-fc07-4a03-a362-d4a05995fbdc","name":"e208c283-fc07-4a03-a362-d4a05995fbdc","status":"Succeeded","startTime":"2021-05-25T06:31:25Z","endTime":"2021-05-25T06:33:24Z","properties":{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:21:35.5269744Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Running"},"sku":{"name":"Standard","tier":"Standard"}}}' + headers: + cache-control: + - no-cache + content-length: + - '1346' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:33:38 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool show + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006","name":"diskpool000006","type":"Microsoft.StoragePool/diskPools","location":"eastus","tags":{},"systemData":{"createdBy":"zuh@microsoft.com","createdByType":"User","createdAt":"2021-05-25T06:09:17.0897576Z","lastModifiedBy":"zuh@microsoft.com","lastModifiedByType":"User","lastModifiedAt":"2021-05-25T06:21:35.5269744Z"},"properties":{"disks":[{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000002"},{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Compute/disks/disk000003"}],"availabilityZones":["3"],"subnetId":"/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.Network/virtualNetworks/vnet000004/subnets/subnet000005","provisioningState":"Succeeded","status":"Running"},"sku":{"name":"Standard","tier":"Standard"}}' + headers: + cache-control: + - no-cache + content-length: + - '1067' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:33:40 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --name --disk-pool-name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets/iscsi000007?api-version=2021-04-01-preview + response: + body: + string: '' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/d98fd278-4392-4e5d-93ce-9fbaa67cead1?api-version=2021-04-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 25 May 2021 06:33:42 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationresults/d98fd278-4392-4e5d-93ce-9fbaa67cead1?api-version=2021-04-01-preview + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-async-operation-timeout: + - PT1H + x-ms-ratelimit-remaining-subscription-deletes: + - '14993' + x-ms-return-client-request-id: + - 'true' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target delete + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/d98fd278-4392-4e5d-93ce-9fbaa67cead1?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/d98fd278-4392-4e5d-93ce-9fbaa67cead1","name":"d98fd278-4392-4e5d-93ce-9fbaa67cead1","status":"Running","startTime":"2021-05-25T06:33:42Z"}' + headers: + cache-control: + - no-cache + content-length: + - '224' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:33:52 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target delete + Connection: + - keep-alive + ParameterSetName: + - --name --disk-pool-name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/d98fd278-4392-4e5d-93ce-9fbaa67cead1?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/d98fd278-4392-4e5d-93ce-9fbaa67cead1","name":"d98fd278-4392-4e5d-93ce-9fbaa67cead1","status":"Succeeded","startTime":"2021-05-25T06:33:42Z"}' + headers: + cache-control: + - no-cache + content-length: + - '232' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:34:22 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool iscsi-target list + Connection: + - keep-alive + ParameterSetName: + - --disk-pool-name --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006/iscsiTargets?api-version=2021-04-01-preview + response: + body: + string: '{"value":[],"nextLink":null}' + headers: + cache-control: + - no-cache + content-length: + - '28' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:34:24 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + Content-Length: + - '0' + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools/diskpool000006?api-version=2021-04-01-preview + response: + body: + string: '' + headers: + azure-asyncoperation: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + cache-control: + - no-cache + content-length: + - '0' + date: + - Tue, 25 May 2021 06:34:27 GMT + expires: + - '-1' + location: + - https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationresults/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + x-content-type-options: + - nosniff + x-ms-async-operation-timeout: + - PT1H + x-ms-ratelimit-remaining-subscription-deletes: + - '14999' + x-ms-return-client-request-id: + - 'true' + status: + code: 202 + message: Accepted +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:34:37 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:35:07 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:35:38 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:36:09 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:36:39 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:37:09 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:37:40 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:38:10 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:38:40 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:39:11 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:39:43 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations//operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Running","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '237' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:40:13 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool delete + Connection: + - keep-alive + ParameterSetName: + - --name --resource-group -y + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/providers/Microsoft.StoragePool/locations/eastus/operationsStatus/3604f57a-e231-4563-81e7-c318a2e14878?api-version=2021-04-01-preview + response: + body: + string: '{"id":"/subscriptions/00000000-0000-0000-0000-000000000000/locations/eastus/operationStatus/3604f57a-e231-4563-81e7-c318a2e14878","name":"3604f57a-e231-4563-81e7-c318a2e14878","status":"Succeeded","startTime":"2021-05-25T06:34:27Z","endTime":""}' + headers: + cache-control: + - no-cache + content-length: + - '245' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:40:43 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +- request: + body: null + headers: + Accept: + - application/json + Accept-Encoding: + - gzip, deflate + CommandName: + - disk-pool list + Connection: + - keep-alive + ParameterSetName: + - --resource-group + User-Agent: + - AZURECLI/2.24.0 azsdk-python-storagepoolmanagement/unknown Python/3.8.3 (Windows-10-10.0.19041-SP0) + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/clitest000001/providers/Microsoft.StoragePool/diskPools?api-version=2021-04-01-preview + response: + body: + string: '{"value":[],"nextLink":null}' + headers: + cache-control: + - no-cache + content-length: + - '28' + content-type: + - application/json + date: + - Tue, 25 May 2021 06:40:45 GMT + expires: + - '-1' + pragma: + - no-cache + strict-transport-security: + - max-age=31536000; includeSubDomains + transfer-encoding: + - chunked + vary: + - Accept-Encoding + x-content-type-options: + - nosniff + x-ms-return-client-request-id: + - 'true' + status: + code: 200 + message: OK +version: 1 diff --git a/src/diskpool/azext_diskpool/tests/latest/test_disk_scenario_manual.py b/src/diskpool/azext_diskpool/tests/latest/test_disk_scenario_manual.py new file mode 100644 index 00000000000..8fb778a7df3 --- /dev/null +++ b/src/diskpool/azext_diskpool/tests/latest/test_disk_scenario_manual.py @@ -0,0 +1,116 @@ +# -------------------------------------------------------------------------- +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +import mock +from azure.cli.testsdk import ScenarioTest +from azure.cli.testsdk import ResourceGroupPreparer + + +class DiskpoolScenarioTest(ScenarioTest): + @ResourceGroupPreparer(name_prefix='clitest', location='eastus', random_name_length=16) + def test_diskpool_scenario_manual(self, resource_group): + self.kwargs.update({ + 'rg': resource_group, + 'diskName': self.create_random_name(prefix='disk', length=10), + 'diskName2': self.create_random_name(prefix='disk', length=10), + 'vnet': self.create_random_name(prefix='vnet', length=10), + 'subnet': self.create_random_name(prefix='subnet', length=10), + 'subnetPrefix': '10.0.0.0/24', + 'zone': "3", + 'diskPoolName': self.create_random_name(prefix='diskpool', length=16), + 'location': 'eastus', + 'targetName': self.create_random_name(prefix='iscsi', length=10), + 'storagePoolObjectId': '09f10f07-08cf-4ab7-be0f-e9ae3d72b9ad' + }) + result = self.cmd('disk create --name {diskName} --resource-group {rg} --zone {zone} --location {location} ' + '--sku Premium_LRS --max-shares 2 --size-gb 256').get_output_in_json() + self.kwargs['diskId'] = result['id'] + result = self.cmd('disk create --name {diskName2} --resource-group {rg} --zone {zone} --location {location} ' + '--sku Premium_LRS --max-shares 2 --size-gb 256').get_output_in_json() + self.kwargs['diskId2'] = result['id'] + with mock.patch('azure.cli.command_modules.role.custom._gen_guid', side_effect=self.create_guid): + self.cmd('role assignment create --assignee-object-id {storagePoolObjectId} --role "Virtual Machine Contributor" --scope {diskId}') + with mock.patch('azure.cli.command_modules.role.custom._gen_guid', side_effect=self.create_guid): + self.cmd('role assignment create --assignee-object-id {storagePoolObjectId} --role "Virtual Machine Contributor" --scope {diskId2}') + + self.cmd('network vnet create --name {vnet} --resource-group {rg} --location {location}') + result = self.cmd('network vnet subnet create --name {subnet} --vnet-name {vnet} --resource-group {rg} ' + '--address-prefixes {subnetPrefix} --delegations Microsoft.StoragePool/diskPools').get_output_in_json() + self.kwargs['subnetId'] = result['id'] + + # Create a Disk Pool + self.cmd('disk-pool create --name {diskPoolName} --resource-group {rg} --location {location} ' + '--availability-zones {zone} --subnet-id {subnetId} --sku name="Standard" tier="Standard" ' + '--disks {diskId}', checks=[self.check('name', '{diskPoolName}'), + self.check('availabilityZones[0]', '{zone}'), + self.check('disks[0].id', '{diskId}'), + self.check('subnetId', '{subnetId}'), + self.check('tier', 'Standard')]) + self.cmd('disk-pool show --name {diskPoolName} --resource-group {rg}', + checks=[self.check('name', '{diskPoolName}'), + self.check('availabilityZones[0]', '{zone}'), + self.check('disks[0].id', '{diskId}'), + self.check('subnetId', '{subnetId}'), + self.check('tier', 'Standard')]) + self.cmd('disk-pool list --resource-group {rg}', + checks=[self.check('length(@)', 1)]) + + # TODO: Add back when fixed in server + # self.cmd('disk-pool list-outbound-network-dependency-endpoint --name {diskPoolName} --resource-group {rg}', + # checks=[self.check('length(@)', 1)]) + + # Create an ISCSI target + self.cmd('disk-pool iscsi-target create --name {targetName} --disk-pool-name {diskPoolName} ' + '--resource-group {rg} --acl-mode Dynamic --luns name="lun0" managed-disk-azure-resource-id={diskId}', + checks=[self.check('aclMode', 'Dynamic'), + self.check('luns[0].managedDiskAzureResourceId', '{diskId}'), + self.check('luns[0].name', 'lun0')]) + self.cmd('disk-pool iscsi-target show --name {targetName} --disk-pool-name {diskPoolName} --resource-group {rg}', + checks=[self.check('aclMode', 'Dynamic'), + self.check('luns[0].managedDiskAzureResourceId', '{diskId}'), + self.check('luns[0].name', 'lun0')]) + self.cmd('disk-pool iscsi-target list --disk-pool-name {diskPoolName} --resource-group {rg}', + checks=[self.check('length(@)', 1)]) + + # Update Disk Pool + self.cmd('disk-pool update --name {diskPoolName} --resource-group {rg} --disks {diskId} {diskId2}', + checks=[self.check('name', '{diskPoolName}'), + self.check('disks[0].id', '{diskId}'), + self.check('disks[1].id', '{diskId2}')]) + + # Update iSCSI target -- add a LUN + self.cmd('disk-pool iscsi-target update --name {targetName} --disk-pool-name {diskPoolName} ' + '--resource-group {rg} --luns name="lun0" managed-disk-azure-resource-id={diskId} ' + '--luns name="lun1" managed-disk-azure-resource-id={diskId2}', + checks=[self.check('aclMode', 'Dynamic'), + self.check('luns[0].managedDiskAzureResourceId', '{diskId}'), + self.check('luns[0].name', 'lun0'), + self.check('luns[1].managedDiskAzureResourceId', '{diskId2}'), + self.check('luns[1].name', 'lun1')]) + + self.cmd('disk-pool stop --name {diskPoolName} --resource-group {rg}') + self.cmd('disk-pool show --name {diskPoolName} --resource-group {rg}', + checks=[self.check('status', 'Stopped (deallocated)')]) + + self.cmd('disk-pool start --name {diskPoolName} --resource-group {rg}') + self.cmd('disk-pool show --name {diskPoolName} --resource-group {rg}', + checks=[self.check('status', 'Running')]) + + self.cmd('disk-pool iscsi-target delete --name {targetName} --disk-pool-name {diskPoolName} ' + '--resource-group {rg} -y') + self.cmd('disk-pool iscsi-target list --disk-pool-name {diskPoolName} --resource-group {rg}', + checks=[self.check('length(@)', 0)]) + + self.cmd('disk-pool delete --name {diskPoolName} --resource-group {rg} -y') + self.cmd('disk-pool list --resource-group {rg}', + checks=[self.check('length(@)', 0)]) + + def test_diskpool_list_sku_scenario_manual(self): + result = self.cmd('disk-pool list-skus -l eastus ').get_output_in_json() + self.assertIsNotNone(result) diff --git a/src/diskpool/azext_diskpool/tests/latest/test_diskpool_scenario_coverage.md b/src/diskpool/azext_diskpool/tests/latest/test_diskpool_scenario_coverage.md new file mode 100644 index 00000000000..cb712843009 --- /dev/null +++ b/src/diskpool/azext_diskpool/tests/latest/test_diskpool_scenario_coverage.md @@ -0,0 +1,2 @@ +|Scenario|Result|ErrorMessage|ErrorStack|ErrorNormalized|StartDt|EndDt| +Coverage: 0/0 diff --git a/src/diskpool/azext_diskpool/vendored_sdks/__init__.py b/src/diskpool/azext_diskpool/vendored_sdks/__init__.py new file mode 100644 index 00000000000..c9cfdc73e77 --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/__init__.py @@ -0,0 +1,12 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +__path__ = __import__('pkgutil').extend_path(__path__, __name__) diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/__init__.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/__init__.py new file mode 100644 index 00000000000..40013efe44d --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/__init__.py @@ -0,0 +1,16 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._storage_pool_management import StoragePoolManagement +__all__ = ['StoragePoolManagement'] + +try: + from ._patch import patch_sdk # type: ignore + patch_sdk() +except ImportError: + pass diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/_configuration.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/_configuration.py new file mode 100644 index 00000000000..24c1d0a6d8c --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/_configuration.py @@ -0,0 +1,70 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import TYPE_CHECKING + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +from azure.mgmt.core.policies import ARMHttpLoggingPolicy + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any + + from azure.core.credentials import TokenCredential + +VERSION = "unknown" + +class StoragePoolManagementConfiguration(Configuration): + """Configuration for StoragePoolManagement. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + """ + + def __init__( + self, + credential, # type: "TokenCredential" + subscription_id, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + super(StoragePoolManagementConfiguration, self).__init__(**kwargs) + + self.credential = credential + self.subscription_id = subscription_id + self.api_version = "2021-04-01-preview" + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'storagepoolmanagement/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs # type: Any + ): + # type: (...) -> None + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.BearerTokenCredentialPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/_storage_pool_management.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/_storage_pool_management.py new file mode 100644 index 00000000000..d59edd58b34 --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/_storage_pool_management.py @@ -0,0 +1,85 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import TYPE_CHECKING + +from azure.mgmt.core import ARMPipelineClient +from msrest import Deserializer, Serializer + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Optional + + from azure.core.credentials import TokenCredential + +from ._configuration import StoragePoolManagementConfiguration +from .operations import Operations +from .operations import DiskPoolsOperations +from .operations import DiskPoolZonesOperations +from .operations import IscsiTargetsOperations +from . import models + + +class StoragePoolManagement(object): + """StoragePoolManagement. + + :ivar operations: Operations operations + :vartype operations: storage_pool_management.operations.Operations + :ivar disk_pools: DiskPoolsOperations operations + :vartype disk_pools: storage_pool_management.operations.DiskPoolsOperations + :ivar disk_pool_zones: DiskPoolZonesOperations operations + :vartype disk_pool_zones: storage_pool_management.operations.DiskPoolZonesOperations + :ivar iscsi_targets: IscsiTargetsOperations operations + :vartype iscsi_targets: storage_pool_management.operations.IscsiTargetsOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + :param str base_url: Service URL + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + """ + + def __init__( + self, + credential, # type: "TokenCredential" + subscription_id, # type: str + base_url=None, # type: Optional[str] + **kwargs # type: Any + ): + # type: (...) -> None + if not base_url: + base_url = 'https://management.azure.com' + self._config = StoragePoolManagementConfiguration(credential, subscription_id, **kwargs) + self._client = ARMPipelineClient(base_url=base_url, config=self._config, **kwargs) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._serialize.client_side_validation = False + self._deserialize = Deserializer(client_models) + + self.operations = Operations( + self._client, self._config, self._serialize, self._deserialize) + self.disk_pools = DiskPoolsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.disk_pool_zones = DiskPoolZonesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iscsi_targets = IscsiTargetsOperations( + self._client, self._config, self._serialize, self._deserialize) + + def close(self): + # type: () -> None + self._client.close() + + def __enter__(self): + # type: () -> StoragePoolManagement + self._client.__enter__() + return self + + def __exit__(self, *exc_details): + # type: (Any) -> None + self._client.__exit__(*exc_details) diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/__init__.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/__init__.py new file mode 100644 index 00000000000..9eb7de1efa2 --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/__init__.py @@ -0,0 +1,10 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._storage_pool_management import StoragePoolManagement +__all__ = ['StoragePoolManagement'] diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/_configuration.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/_configuration.py new file mode 100644 index 00000000000..9ee88b6831b --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/_configuration.py @@ -0,0 +1,66 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, TYPE_CHECKING + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +from azure.mgmt.core.policies import ARMHttpLoggingPolicy + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + +VERSION = "unknown" + +class StoragePoolManagementConfiguration(Configuration): + """Configuration for StoragePoolManagement. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + """ + + def __init__( + self, + credential: "AsyncTokenCredential", + subscription_id: str, + **kwargs: Any + ) -> None: + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + super(StoragePoolManagementConfiguration, self).__init__(**kwargs) + + self.credential = credential + self.subscription_id = subscription_id + self.api_version = "2021-04-01-preview" + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'storagepoolmanagement/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs: Any + ) -> None: + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/_storage_pool_management.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/_storage_pool_management.py new file mode 100644 index 00000000000..e4888cf676b --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/_storage_pool_management.py @@ -0,0 +1,79 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from typing import Any, Optional, TYPE_CHECKING + +from azure.mgmt.core import AsyncARMPipelineClient +from msrest import Deserializer, Serializer + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + +from ._configuration import StoragePoolManagementConfiguration +from .operations import Operations +from .operations import DiskPoolsOperations +from .operations import DiskPoolZonesOperations +from .operations import IscsiTargetsOperations +from .. import models + + +class StoragePoolManagement(object): + """StoragePoolManagement. + + :ivar operations: Operations operations + :vartype operations: storage_pool_management.aio.operations.Operations + :ivar disk_pools: DiskPoolsOperations operations + :vartype disk_pools: storage_pool_management.aio.operations.DiskPoolsOperations + :ivar disk_pool_zones: DiskPoolZonesOperations operations + :vartype disk_pool_zones: storage_pool_management.aio.operations.DiskPoolZonesOperations + :ivar iscsi_targets: IscsiTargetsOperations operations + :vartype iscsi_targets: storage_pool_management.aio.operations.IscsiTargetsOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + :param str base_url: Service URL + :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 + ) -> None: + if not base_url: + base_url = 'https://management.azure.com' + self._config = StoragePoolManagementConfiguration(credential, subscription_id, **kwargs) + self._client = AsyncARMPipelineClient(base_url=base_url, config=self._config, **kwargs) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._serialize.client_side_validation = False + self._deserialize = Deserializer(client_models) + + self.operations = Operations( + self._client, self._config, self._serialize, self._deserialize) + self.disk_pools = DiskPoolsOperations( + self._client, self._config, self._serialize, self._deserialize) + self.disk_pool_zones = DiskPoolZonesOperations( + self._client, self._config, self._serialize, self._deserialize) + self.iscsi_targets = IscsiTargetsOperations( + self._client, self._config, self._serialize, self._deserialize) + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> "StoragePoolManagement": + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details) -> None: + await self._client.__aexit__(*exc_details) diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/__init__.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/__init__.py new file mode 100644 index 00000000000..1620075f15e --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/__init__.py @@ -0,0 +1,19 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._operations import Operations +from ._disk_pools_operations import DiskPoolsOperations +from ._disk_pool_zones_operations import DiskPoolZonesOperations +from ._iscsi_targets_operations import IscsiTargetsOperations + +__all__ = [ + 'Operations', + 'DiskPoolsOperations', + 'DiskPoolZonesOperations', + 'IscsiTargetsOperations', +] diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_disk_pool_zones_operations.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_disk_pool_zones_operations.py new file mode 100644 index 00000000000..971aede2b68 --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_disk_pool_zones_operations.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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class DiskPoolZonesOperations: + """DiskPoolZonesOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~storage_pool_management.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + location: str, + **kwargs + ) -> AsyncIterable["models.DiskPoolZoneListResult"]: + """Lists available Disk Pool Skus in an Azure location. + + :param location: The location of the resource. + :type location: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiskPoolZoneListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~storage_pool_management.models.DiskPoolZoneListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPoolZoneListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'location': self._serialize.url("location", location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('DiskPoolZoneListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.StoragePool/locations/{location}/diskPoolZones'} # type: ignore diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_disk_pools_operations.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_disk_pools_operations.py new file mode 100644 index 00000000000..31704317e0b --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_disk_pools_operations.py @@ -0,0 +1,900 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class DiskPoolsOperations: + """DiskPoolsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~storage_pool_management.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_by_subscription( + self, + **kwargs + ) -> AsyncIterable["models.DiskPoolListResult"]: + """Gets a list of Disk Pools in a subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiskPoolListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~storage_pool_management.models.DiskPoolListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPoolListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('DiskPoolListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.StoragePool/diskPools'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs + ) -> AsyncIterable["models.DiskPoolListResult"]: + """Gets a list of DiskPools in a resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiskPoolListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~storage_pool_management.models.DiskPoolListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPoolListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('DiskPoolListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools'} # type: ignore + + async def _create_or_update_initial( + self, + resource_group_name: str, + disk_pool_name: str, + disk_pool_create_payload: "models.DiskPoolCreate", + **kwargs + ) -> "models.DiskPool": + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_or_update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(disk_pool_create_payload, 'DiskPoolCreate') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('DiskPool', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_or_update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + async def begin_create_or_update( + self, + resource_group_name: str, + disk_pool_name: str, + disk_pool_create_payload: "models.DiskPoolCreate", + **kwargs + ) -> AsyncLROPoller["models.DiskPool"]: + """Create or Update Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param disk_pool_create_payload: Request payload for Disk Pool create operation. + :type disk_pool_create_payload: ~storage_pool_management.models.DiskPoolCreate + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either DiskPool or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~storage_pool_management.models.DiskPool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPool"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_or_update_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + disk_pool_create_payload=disk_pool_create_payload, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = AsyncARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + disk_pool_name: str, + disk_pool_update_payload: "models.DiskPoolUpdate", + **kwargs + ) -> Optional["models.DiskPool"]: + cls = kwargs.pop('cls', None) # type: ClsType[Optional["models.DiskPool"]] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(disk_pool_update_payload, 'DiskPoolUpdate') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + disk_pool_name: str, + disk_pool_update_payload: "models.DiskPoolUpdate", + **kwargs + ) -> AsyncLROPoller["models.DiskPool"]: + """Update a Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param disk_pool_update_payload: Request payload for Disk Pool update operation. + :type disk_pool_update_payload: ~storage_pool_management.models.DiskPoolUpdate + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either DiskPool or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~storage_pool_management.models.DiskPool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPool"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + disk_pool_update_payload=disk_pool_update_payload, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = AsyncARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + disk_pool_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + disk_pool_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Delete a Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = AsyncARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + async def get( + self, + resource_group_name: str, + disk_pool_name: str, + **kwargs + ) -> "models.DiskPool": + """Get a Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DiskPool, or the result of cls(response) + :rtype: ~storage_pool_management.models.DiskPool + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **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 = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + def list_outbound_network_dependencies_endpoints( + self, + resource_group_name: str, + disk_pool_name: str, + **kwargs + ) -> AsyncIterable["models.OutboundEnvironmentEndpointList"]: + """Gets the network endpoints of all outbound dependencies of a Disk Pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OutboundEnvironmentEndpointList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~storage_pool_management.models.OutboundEnvironmentEndpointList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OutboundEnvironmentEndpointList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_outbound_network_dependencies_endpoints.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('OutboundEnvironmentEndpointList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_outbound_network_dependencies_endpoints.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/outboundNetworkDependenciesEndpoints'} # type: ignore + + async def _start_initial( + self, + resource_group_name: str, + disk_pool_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self._start_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _start_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/start'} # type: ignore + + async def begin_start( + self, + resource_group_name: str, + disk_pool_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """The operation to start a Disk Pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._start_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = AsyncARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_start.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/start'} # type: ignore + + async def _deallocate_initial( + self, + resource_group_name: str, + disk_pool_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self._deallocate_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _deallocate_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/deallocate'} # type: ignore + + async def begin_deallocate( + self, + resource_group_name: str, + disk_pool_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Shuts down the Disk Pool and releases the compute resources. You are not billed for the compute + resources that this Disk Pool uses. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._deallocate_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = AsyncARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_deallocate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/deallocate'} # type: ignore diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_iscsi_targets_operations.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_iscsi_targets_operations.py new file mode 100644 index 00000000000..13d1e5d351d --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_iscsi_targets_operations.py @@ -0,0 +1,568 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class IscsiTargetsOperations: + """IscsiTargetsOperations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~storage_pool_management.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_by_disk_pool( + self, + resource_group_name: str, + disk_pool_name: str, + **kwargs + ) -> AsyncIterable["models.IscsiTargetList"]: + """Get iSCSI Targets in a Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IscsiTargetList or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~storage_pool_management.models.IscsiTargetList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTargetList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_disk_pool.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('IscsiTargetList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_disk_pool.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets'} # type: ignore + + async def _create_or_update_initial( + self, + resource_group_name: str, + disk_pool_name: str, + iscsi_target_name: str, + iscsi_target_create_payload: "models.IscsiTargetCreate", + **kwargs + ) -> "models.IscsiTarget": + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTarget"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_or_update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(iscsi_target_create_payload, 'IscsiTargetCreate') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_or_update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + async def begin_create_or_update( + self, + resource_group_name: str, + disk_pool_name: str, + iscsi_target_name: str, + iscsi_target_create_payload: "models.IscsiTargetCreate", + **kwargs + ) -> AsyncLROPoller["models.IscsiTarget"]: + """Create or Update an iSCSI Target. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param iscsi_target_name: The name of the iSCSI Target. + :type iscsi_target_name: str + :param iscsi_target_create_payload: Request payload for iSCSI Target create operation. + :type iscsi_target_create_payload: ~storage_pool_management.models.IscsiTargetCreate + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either IscsiTarget or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~storage_pool_management.models.IscsiTarget] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTarget"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_or_update_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name, + iscsi_target_create_payload=iscsi_target_create_payload, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + + if polling is True: polling_method = AsyncARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + async def _update_initial( + self, + resource_group_name: str, + disk_pool_name: str, + iscsi_target_name: str, + iscsi_target_update_payload: "models.IscsiTargetUpdate", + **kwargs + ) -> Optional["models.IscsiTarget"]: + cls = kwargs.pop('cls', None) # type: ClsType[Optional["models.IscsiTarget"]] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(iscsi_target_update_payload, 'IscsiTargetUpdate') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + async def begin_update( + self, + resource_group_name: str, + disk_pool_name: str, + iscsi_target_name: str, + iscsi_target_update_payload: "models.IscsiTargetUpdate", + **kwargs + ) -> AsyncLROPoller["models.IscsiTarget"]: + """Update an iSCSI Target. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param iscsi_target_name: The name of the iSCSI Target. + :type iscsi_target_name: str + :param iscsi_target_update_payload: Request payload for iSCSI Target update operation. + :type iscsi_target_update_payload: ~storage_pool_management.models.IscsiTargetUpdate + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either IscsiTarget or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[~storage_pool_management.models.IscsiTarget] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTarget"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name, + iscsi_target_update_payload=iscsi_target_update_payload, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + + if polling is True: polling_method = AsyncARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + async def _delete_initial( + self, + resource_group_name: str, + disk_pool_name: str, + iscsi_target_name: str, + **kwargs + ) -> None: + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + async def begin_delete( + self, + resource_group_name: str, + disk_pool_name: str, + iscsi_target_name: str, + **kwargs + ) -> AsyncLROPoller[None]: + """Delete an iSCSI Target. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param iscsi_target_name: The name of the iSCSI Target. + :type iscsi_target_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + + if polling is True: polling_method = AsyncARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = AsyncNoPolling() + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + async def get( + self, + resource_group_name: str, + disk_pool_name: str, + iscsi_target_name: str, + **kwargs + ) -> "models.IscsiTarget": + """Get an iSCSI Target. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param iscsi_target_name: The name of the iSCSI Target. + :type iscsi_target_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IscsiTarget, or the result of cls(response) + :rtype: ~storage_pool_management.models.IscsiTarget + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTarget"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = await self._client._pipeline.run(request, stream=False, **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 = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_operations.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_operations.py new file mode 100644 index 00000000000..bf3351fb5c4 --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/aio/operations/_operations.py @@ -0,0 +1,105 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar +import warnings + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models + +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class Operations: + """Operations async operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~storage_pool_management.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer) -> None: + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs + ) -> AsyncIterable["models.StoragePoolOperationListResult"]: + """Gets a list of StoragePool operations. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either StoragePoolOperationListResult or the result of cls(response) + :rtype: ~azure.core.async_paging.AsyncItemPaged[~storage_pool_management.models.StoragePoolOperationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.StoragePoolOperationListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize('StoragePoolOperationListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.StoragePool/operations'} # type: ignore diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/__init__.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/__init__.py new file mode 100644 index 00000000000..93abf141c3e --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/__init__.py @@ -0,0 +1,110 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +try: + from ._models_py3 import Acl + from ._models_py3 import Disk + from ._models_py3 import DiskPool + from ._models_py3 import DiskPoolCreate + from ._models_py3 import DiskPoolListResult + from ._models_py3 import DiskPoolUpdate + from ._models_py3 import DiskPoolZoneInfo + from ._models_py3 import DiskPoolZoneListResult + from ._models_py3 import EndpointDependency + from ._models_py3 import EndpointDetail + from ._models_py3 import Error + from ._models_py3 import ErrorAdditionalInfo + from ._models_py3 import ErrorResponse + from ._models_py3 import IscsiLun + from ._models_py3 import IscsiTarget + from ._models_py3 import IscsiTargetCreate + from ._models_py3 import IscsiTargetList + from ._models_py3 import IscsiTargetUpdate + from ._models_py3 import OutboundEnvironmentEndpoint + from ._models_py3 import OutboundEnvironmentEndpointList + from ._models_py3 import ProxyResource + from ._models_py3 import Resource + from ._models_py3 import Sku + from ._models_py3 import StoragePoolOperationDisplay + from ._models_py3 import StoragePoolOperationListResult + from ._models_py3 import StoragePoolRpOperation + from ._models_py3 import SystemMetadata + from ._models_py3 import TrackedResource +except (SyntaxError, ImportError): + from ._models import Acl # type: ignore + from ._models import Disk # type: ignore + from ._models import DiskPool # type: ignore + from ._models import DiskPoolCreate # type: ignore + from ._models import DiskPoolListResult # type: ignore + from ._models import DiskPoolUpdate # type: ignore + from ._models import DiskPoolZoneInfo # type: ignore + from ._models import DiskPoolZoneListResult # type: ignore + from ._models import EndpointDependency # type: ignore + from ._models import EndpointDetail # type: ignore + from ._models import Error # type: ignore + from ._models import ErrorAdditionalInfo # type: ignore + from ._models import ErrorResponse # type: ignore + from ._models import IscsiLun # type: ignore + from ._models import IscsiTarget # type: ignore + from ._models import IscsiTargetCreate # type: ignore + from ._models import IscsiTargetList # type: ignore + from ._models import IscsiTargetUpdate # type: ignore + from ._models import OutboundEnvironmentEndpoint # type: ignore + from ._models import OutboundEnvironmentEndpointList # type: ignore + from ._models import ProxyResource # type: ignore + from ._models import Resource # type: ignore + from ._models import Sku # type: ignore + from ._models import StoragePoolOperationDisplay # type: ignore + from ._models import StoragePoolOperationListResult # type: ignore + from ._models import StoragePoolRpOperation # type: ignore + from ._models import SystemMetadata # type: ignore + from ._models import TrackedResource # type: ignore + +from ._storage_pool_management_enums import ( + CreatedByType, + DiskPoolTier, + IscsiTargetAclMode, + OperationalStatus, + ProvisioningStates, +) + +__all__ = [ + 'Acl', + 'Disk', + 'DiskPool', + 'DiskPoolCreate', + 'DiskPoolListResult', + 'DiskPoolUpdate', + 'DiskPoolZoneInfo', + 'DiskPoolZoneListResult', + 'EndpointDependency', + 'EndpointDetail', + 'Error', + 'ErrorAdditionalInfo', + 'ErrorResponse', + 'IscsiLun', + 'IscsiTarget', + 'IscsiTargetCreate', + 'IscsiTargetList', + 'IscsiTargetUpdate', + 'OutboundEnvironmentEndpoint', + 'OutboundEnvironmentEndpointList', + 'ProxyResource', + 'Resource', + 'Sku', + 'StoragePoolOperationDisplay', + 'StoragePoolOperationListResult', + 'StoragePoolRpOperation', + 'SystemMetadata', + 'TrackedResource', + 'CreatedByType', + 'DiskPoolTier', + 'IscsiTargetAclMode', + 'OperationalStatus', + 'ProvisioningStates', +] diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/_models.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/_models.py new file mode 100644 index 00000000000..85a85678a8b --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/_models.py @@ -0,0 +1,1079 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.core.exceptions import HttpResponseError +import msrest.serialization + + +class Acl(msrest.serialization.Model): + """Access Control List (ACL) for an iSCSI Target; defines LUN masking policy. + + All required parameters must be populated in order to send to Azure. + + :param initiator_iqn: Required. iSCSI initiator IQN (iSCSI Qualified Name); example: + "iqn.2005-03.org.iscsi:client". + :type initiator_iqn: str + :param mapped_luns: Required. List of LUN names mapped to the ACL. + :type mapped_luns: list[str] + """ + + _validation = { + 'initiator_iqn': {'required': True}, + 'mapped_luns': {'required': True}, + } + + _attribute_map = { + 'initiator_iqn': {'key': 'initiatorIqn', 'type': 'str'}, + 'mapped_luns': {'key': 'mappedLuns', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(Acl, self).__init__(**kwargs) + self.initiator_iqn = kwargs['initiator_iqn'] + self.mapped_luns = kwargs['mapped_luns'] + + +class Disk(msrest.serialization.Model): + """Azure Managed Disk to attach to the Disk Pool. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. Unique Azure Resource ID of the Managed Disk. + :type id: str + """ + + _validation = { + 'id': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Disk, self).__init__(**kwargs) + self.id = kwargs['id'] + + +class Resource(msrest.serialization.Model): + """ARM resource model definition. + + Variables are only populated by the server, and will be ignored when sending a request. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Resource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + + +class TrackedResource(Resource): + """The resource model definition for a ARM tracked top level resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :param location: Required. The geo-location where the resource lives. + :type location: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(TrackedResource, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.location = kwargs['location'] + + +class DiskPool(TrackedResource): + """Response for Disk Pool request. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :param location: Required. The geo-location where the resource lives. + :type location: str + :ivar system_data: Resource metadata required by ARM RPC. + :vartype system_data: ~storage_pool_management.models.SystemMetadata + :ivar provisioning_state: Required. State of the operation on the resource. Possible values + include: "Invalid", "Succeeded", "Failed", "Canceled", "Pending", "Creating", "Updating", + "Deleting". + :vartype provisioning_state: str or ~storage_pool_management.models.ProvisioningStates + :param availability_zones: Required. Logical zone for Disk Pool resource; example: ["1"]. + :type availability_zones: list[str] + :param status: Required. Operational status of the Disk Pool. Possible values include: + "Invalid", "Unknown", "Healthy", "Unhealthy", "Updating", "Running", "Stopped", "Stopped + (deallocated)". + :type status: str or ~storage_pool_management.models.OperationalStatus + :param disks: List of Azure Managed Disks to attach to a Disk Pool. + :type disks: list[~storage_pool_management.models.Disk] + :param subnet_id: Required. Azure Resource ID of a Subnet for the Disk Pool. + :type subnet_id: str + :param additional_capabilities: List of additional capabilities for Disk Pool. + :type additional_capabilities: list[str] + :param name_sku_name: Sku name. + :type name_sku_name: str + :param tier: Sku tier. + :type tier: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'system_data': {'readonly': True}, + 'provisioning_state': {'required': True, 'readonly': True}, + 'availability_zones': {'required': True}, + 'status': {'required': True}, + 'subnet_id': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemMetadata'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'availability_zones': {'key': 'properties.availabilityZones', 'type': '[str]'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'disks': {'key': 'properties.disks', 'type': '[Disk]'}, + 'subnet_id': {'key': 'properties.subnetId', 'type': 'str'}, + 'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': '[str]'}, + 'name_sku_name': {'key': 'sku.name', 'type': 'str'}, + 'tier': {'key': 'sku.tier', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DiskPool, self).__init__(**kwargs) + self.system_data = None + self.provisioning_state = None + self.availability_zones = kwargs['availability_zones'] + self.status = kwargs['status'] + self.disks = kwargs.get('disks', None) + self.subnet_id = kwargs['subnet_id'] + self.additional_capabilities = kwargs.get('additional_capabilities', None) + self.name_sku_name = kwargs.get('name_sku_name', None) + self.tier = kwargs.get('tier', None) + + +class DiskPoolCreate(msrest.serialization.Model): + """Request payload for create or update Disk Pool request. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param sku: Required. Determines the SKU of the Disk Pool. + :type sku: ~storage_pool_management.models.Sku + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :param location: Required. The geo-location where the resource lives. + :type location: str + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param availability_zones: Logical zone for Disk Pool resource; example: ["1"]. + :type availability_zones: list[str] + :param disks: List of Azure Managed Disks to attach to a Disk Pool. + :type disks: list[~storage_pool_management.models.Disk] + :param subnet_id: Required. Azure Resource ID of a Subnet for the Disk Pool. + :type subnet_id: str + :param additional_capabilities: List of additional capabilities for a Disk Pool. + :type additional_capabilities: list[str] + """ + + _validation = { + 'sku': {'required': True}, + 'location': {'required': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'subnet_id': {'required': True}, + } + + _attribute_map = { + 'sku': {'key': 'sku', 'type': 'Sku'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'availability_zones': {'key': 'properties.availabilityZones', 'type': '[str]'}, + 'disks': {'key': 'properties.disks', 'type': '[Disk]'}, + 'subnet_id': {'key': 'properties.subnetId', 'type': 'str'}, + 'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + super(DiskPoolCreate, self).__init__(**kwargs) + self.sku = kwargs['sku'] + self.tags = kwargs.get('tags', None) + self.location = kwargs['location'] + self.id = None + self.name = None + self.type = None + self.availability_zones = kwargs.get('availability_zones', None) + self.disks = kwargs.get('disks', None) + self.subnet_id = kwargs['subnet_id'] + self.additional_capabilities = kwargs.get('additional_capabilities', None) + + +class DiskPoolListResult(msrest.serialization.Model): + """List of Disk Pools. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. An array of Disk pool objects. + :type value: list[~storage_pool_management.models.DiskPool] + :ivar next_link: URI to fetch the next section of the paginated response. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[DiskPool]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DiskPoolListResult, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class DiskPoolUpdate(msrest.serialization.Model): + """Request payload for Update Disk Pool request. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :param disks: List of Azure Managed Disks to attach to a Disk Pool. + :type disks: list[~storage_pool_management.models.Disk] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'disks': {'key': 'properties.disks', 'type': '[Disk]'}, + } + + def __init__( + self, + **kwargs + ): + super(DiskPoolUpdate, self).__init__(**kwargs) + self.tags = kwargs.get('tags', None) + self.disks = kwargs.get('disks', None) + + +class DiskPoolZoneInfo(msrest.serialization.Model): + """Disk Pool Sku Details. + + :param availability_zones: Logical zone for Disk Pool resource; example: ["1"]. + :type availability_zones: list[str] + :param additional_capabilities: List of additional capabilities for Disk Pool. + :type additional_capabilities: list[str] + :param sku: Determines the SKU of VM deployed for Disk Pool. + :type sku: ~storage_pool_management.models.Sku + """ + + _attribute_map = { + 'availability_zones': {'key': 'availabilityZones', 'type': '[str]'}, + 'additional_capabilities': {'key': 'additionalCapabilities', 'type': '[str]'}, + 'sku': {'key': 'sku', 'type': 'Sku'}, + } + + def __init__( + self, + **kwargs + ): + super(DiskPoolZoneInfo, self).__init__(**kwargs) + self.availability_zones = kwargs.get('availability_zones', None) + self.additional_capabilities = kwargs.get('additional_capabilities', None) + self.sku = kwargs.get('sku', None) + + +class DiskPoolZoneListResult(msrest.serialization.Model): + """List Disk Pool skus operation response. + + :param value: The list of Disk Pool Skus. + :type value: list[~storage_pool_management.models.DiskPoolZoneInfo] + :param next_link: URI to fetch the next section of the paginated response. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[DiskPoolZoneInfo]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(DiskPoolZoneListResult, self).__init__(**kwargs) + self.value = kwargs.get('value', None) + self.next_link = kwargs.get('next_link', None) + + +class EndpointDependency(msrest.serialization.Model): + """A domain name that a service is reached at, including details of the current connection status. + + :param domain_name: The domain name of the dependency. + :type domain_name: str + :param endpoint_details: The IP Addresses and Ports used when connecting to DomainName. + :type endpoint_details: list[~storage_pool_management.models.EndpointDetail] + """ + + _attribute_map = { + 'domain_name': {'key': 'domainName', 'type': 'str'}, + 'endpoint_details': {'key': 'endpointDetails', 'type': '[EndpointDetail]'}, + } + + def __init__( + self, + **kwargs + ): + super(EndpointDependency, self).__init__(**kwargs) + self.domain_name = kwargs.get('domain_name', None) + self.endpoint_details = kwargs.get('endpoint_details', None) + + +class EndpointDetail(msrest.serialization.Model): + """Current TCP connectivity information from the App Service Environment to a single endpoint. + + :param ip_address: An IP Address that Domain Name currently resolves to. + :type ip_address: str + :param port: The port an endpoint is connected to. + :type port: int + :param latency: The time in milliseconds it takes for a TCP connection to be created from the + App Service Environment to this IpAddress at this Port. + :type latency: float + :param is_accessible: Whether it is possible to create a TCP connection from the App Service + Environment to this IpAddress at this Port. + :type is_accessible: bool + """ + + _attribute_map = { + 'ip_address': {'key': 'ipAddress', 'type': 'str'}, + 'port': {'key': 'port', 'type': 'int'}, + 'latency': {'key': 'latency', 'type': 'float'}, + 'is_accessible': {'key': 'isAccessible', 'type': 'bool'}, + } + + def __init__( + self, + **kwargs + ): + super(EndpointDetail, self).__init__(**kwargs) + self.ip_address = kwargs.get('ip_address', None) + self.port = kwargs.get('port', None) + self.latency = kwargs.get('latency', None) + self.is_accessible = kwargs.get('is_accessible', None) + + +class Error(msrest.serialization.Model): + """The resource management error response. + + :param error: RP error response. + :type error: ~storage_pool_management.models.ErrorResponse + """ + + _attribute_map = { + 'error': {'key': 'error', 'type': 'ErrorResponse'}, + } + + def __init__( + self, + **kwargs + ): + super(Error, self).__init__(**kwargs) + self.error = kwargs.get('error', None) + + +class ErrorAdditionalInfo(msrest.serialization.Model): + """The resource management error additional info. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar type: The additional info type. + :vartype type: str + :ivar info: The additional info. + :vartype info: object + """ + + _validation = { + 'type': {'readonly': True}, + 'info': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'info': {'key': 'info', 'type': 'object'}, + } + + def __init__( + self, + **kwargs + ): + super(ErrorAdditionalInfo, self).__init__(**kwargs) + self.type = None + self.info = None + + +class ErrorResponse(msrest.serialization.Model): + """The resource management error response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar code: The error code. + :vartype code: str + :ivar message: The error message. + :vartype message: str + :ivar target: The error target. + :vartype target: str + :ivar details: The error details. + :vartype details: list[~storage_pool_management.models.ErrorResponse] + :ivar additional_info: The error additional info. + :vartype additional_info: list[~storage_pool_management.models.ErrorAdditionalInfo] + """ + + _validation = { + 'code': {'readonly': True}, + 'message': {'readonly': True}, + 'target': {'readonly': True}, + 'details': {'readonly': True}, + 'additional_info': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[ErrorResponse]'}, + 'additional_info': {'key': 'additionalInfo', 'type': '[ErrorAdditionalInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(ErrorResponse, self).__init__(**kwargs) + self.code = None + self.message = None + self.target = None + self.details = None + self.additional_info = None + + +class IscsiLun(msrest.serialization.Model): + """LUN to expose the Azure Managed Disk. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. User defined name for iSCSI LUN; example: "lun0". + :type name: str + :param managed_disk_azure_resource_id: Required. Azure Resource ID of the Managed Disk. + :type managed_disk_azure_resource_id: str + """ + + _validation = { + 'name': {'required': True}, + 'managed_disk_azure_resource_id': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'managed_disk_azure_resource_id': {'key': 'managedDiskAzureResourceId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IscsiLun, self).__init__(**kwargs) + self.name = kwargs['name'] + self.managed_disk_azure_resource_id = kwargs['managed_disk_azure_resource_id'] + + +class IscsiTarget(Resource): + """Response for iSCSI Target requests. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :ivar system_data: Resource metadata required by ARM RPC. + :vartype system_data: ~storage_pool_management.models.SystemMetadata + :param acl_mode: Required. Mode for Target connectivity. Possible values include: "Dynamic", + "Static". + :type acl_mode: str or ~storage_pool_management.models.IscsiTargetAclMode + :param static_acls: Access Control List (ACL) for an iSCSI Target; defines LUN masking policy. + :type static_acls: list[~storage_pool_management.models.Acl] + :param luns: List of LUNs to be exposed through iSCSI Target. + :type luns: list[~storage_pool_management.models.IscsiLun] + :param target_iqn: Required. iSCSI Target IQN (iSCSI Qualified Name); example: + "iqn.2005-03.org.iscsi:server". + :type target_iqn: str + :ivar provisioning_state: Required. State of the operation on the resource. Possible values + include: "Invalid", "Succeeded", "Failed", "Canceled", "Pending", "Creating", "Updating", + "Deleting". + :vartype provisioning_state: str or ~storage_pool_management.models.ProvisioningStates + :param status: Required. Operational status of the iSCSI Target. Possible values include: + "Invalid", "Unknown", "Healthy", "Unhealthy", "Updating", "Running", "Stopped", "Stopped + (deallocated)". + :type status: str or ~storage_pool_management.models.OperationalStatus + :param endpoints: List of private IPv4 addresses to connect to the iSCSI Target. + :type endpoints: list[str] + :param port: The port used by iSCSI Target portal group. + :type port: int + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'acl_mode': {'required': True}, + 'target_iqn': {'required': True}, + 'provisioning_state': {'required': True, 'readonly': True}, + 'status': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemMetadata'}, + 'acl_mode': {'key': 'properties.aclMode', 'type': 'str'}, + 'static_acls': {'key': 'properties.staticAcls', 'type': '[Acl]'}, + 'luns': {'key': 'properties.luns', 'type': '[IscsiLun]'}, + 'target_iqn': {'key': 'properties.targetIqn', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'endpoints': {'key': 'properties.endpoints', 'type': '[str]'}, + 'port': {'key': 'properties.port', 'type': 'int'}, + } + + def __init__( + self, + **kwargs + ): + super(IscsiTarget, self).__init__(**kwargs) + self.system_data = None + self.acl_mode = kwargs['acl_mode'] + self.static_acls = kwargs.get('static_acls', None) + self.luns = kwargs.get('luns', None) + self.target_iqn = kwargs['target_iqn'] + self.provisioning_state = None + self.status = kwargs['status'] + self.endpoints = kwargs.get('endpoints', None) + self.port = kwargs.get('port', None) + + +class IscsiTargetCreate(Resource): + """Payload for iSCSI Target create or update requests. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param acl_mode: Required. Mode for Target connectivity. Possible values include: "Dynamic", + "Static". + :type acl_mode: str or ~storage_pool_management.models.IscsiTargetAclMode + :param target_iqn: iSCSI Target IQN (iSCSI Qualified Name); example: + "iqn.2005-03.org.iscsi:server". + :type target_iqn: str + :param static_acls: Access Control List (ACL) for an iSCSI Target; defines LUN masking policy. + :type static_acls: list[~storage_pool_management.models.Acl] + :param luns: List of LUNs to be exposed through iSCSI Target. + :type luns: list[~storage_pool_management.models.IscsiLun] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'acl_mode': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'acl_mode': {'key': 'properties.aclMode', 'type': 'str'}, + 'target_iqn': {'key': 'properties.targetIqn', 'type': 'str'}, + 'static_acls': {'key': 'properties.staticAcls', 'type': '[Acl]'}, + 'luns': {'key': 'properties.luns', 'type': '[IscsiLun]'}, + } + + def __init__( + self, + **kwargs + ): + super(IscsiTargetCreate, self).__init__(**kwargs) + self.acl_mode = kwargs['acl_mode'] + self.target_iqn = kwargs.get('target_iqn', None) + self.static_acls = kwargs.get('static_acls', None) + self.luns = kwargs.get('luns', None) + + +class IscsiTargetList(msrest.serialization.Model): + """List of iSCSI Targets. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. An array of iSCSI Targets in a Disk Pool. + :type value: list[~storage_pool_management.models.IscsiTarget] + :ivar next_link: URI to fetch the next section of the paginated response. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IscsiTarget]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(IscsiTargetList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class IscsiTargetUpdate(Resource): + """Payload for iSCSI Target update requests. + + Variables are only populated by the server, and will be ignored when sending a request. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param static_acls: Access Control List (ACL) for an iSCSI Target; defines LUN masking policy. + :type static_acls: list[~storage_pool_management.models.Acl] + :param luns: List of LUNs to be exposed through iSCSI Target. + :type luns: list[~storage_pool_management.models.IscsiLun] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'static_acls': {'key': 'properties.staticAcls', 'type': '[Acl]'}, + 'luns': {'key': 'properties.luns', 'type': '[IscsiLun]'}, + } + + def __init__( + self, + **kwargs + ): + super(IscsiTargetUpdate, self).__init__(**kwargs) + self.static_acls = kwargs.get('static_acls', None) + self.luns = kwargs.get('luns', None) + + +class OutboundEnvironmentEndpoint(msrest.serialization.Model): + """Endpoints accessed for a common purpose that the App Service Environment requires outbound network access to. + + :param category: The type of service accessed by the App Service Environment, e.g., Azure + Storage, Azure SQL Database, and Azure Active Directory. + :type category: str + :param endpoints: The endpoints that the App Service Environment reaches the service at. + :type endpoints: list[~storage_pool_management.models.EndpointDependency] + """ + + _attribute_map = { + 'category': {'key': 'category', 'type': 'str'}, + 'endpoints': {'key': 'endpoints', 'type': '[EndpointDependency]'}, + } + + def __init__( + self, + **kwargs + ): + super(OutboundEnvironmentEndpoint, self).__init__(**kwargs) + self.category = kwargs.get('category', None) + self.endpoints = kwargs.get('endpoints', None) + + +class OutboundEnvironmentEndpointList(msrest.serialization.Model): + """Collection of Outbound Environment Endpoints. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. Collection of resources. + :type value: list[~storage_pool_management.models.OutboundEnvironmentEndpoint] + :ivar next_link: Link to next page of resources. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[OutboundEnvironmentEndpoint]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(OutboundEnvironmentEndpointList, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = None + + +class ProxyResource(Resource): + """The resource model definition for a ARM proxy resource. It will have everything other than required location and tags. + + Variables are only populated by the server, and will be ignored when sending a request. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ProxyResource, self).__init__(**kwargs) + + +class Sku(msrest.serialization.Model): + """Sku for ARM resource. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. Sku name. + :type name: str + :param tier: Sku tier. + :type tier: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'tier': {'key': 'tier', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Sku, self).__init__(**kwargs) + self.name = kwargs['name'] + self.tier = kwargs.get('tier', None) + + +class StoragePoolOperationDisplay(msrest.serialization.Model): + """Metadata about an operation. + + All required parameters must be populated in order to send to Azure. + + :param provider: Required. Localized friendly form of the resource provider name. + :type provider: str + :param resource: Required. Localized friendly form of the resource type related to this + action/operation. + :type resource: str + :param operation: Required. Localized friendly name for the operation, as it should be shown to + the user. + :type operation: str + :param description: Required. Localized friendly description for the operation, as it should be + shown to the user. + :type description: str + """ + + _validation = { + 'provider': {'required': True}, + 'resource': {'required': True}, + 'operation': {'required': True}, + 'description': {'required': True}, + } + + _attribute_map = { + 'provider': {'key': 'provider', 'type': 'str'}, + 'resource': {'key': 'resource', 'type': 'str'}, + 'operation': {'key': 'operation', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(StoragePoolOperationDisplay, self).__init__(**kwargs) + self.provider = kwargs['provider'] + self.resource = kwargs['resource'] + self.operation = kwargs['operation'] + self.description = kwargs['description'] + + +class StoragePoolOperationListResult(msrest.serialization.Model): + """List of operations supported by the RP. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. An array of operations supported by the StoragePool RP. + :type value: list[~storage_pool_management.models.StoragePoolRpOperation] + :param next_link: URI to fetch the next section of the paginated response. + :type next_link: str + """ + + _validation = { + 'value': {'required': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[StoragePoolRpOperation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(StoragePoolOperationListResult, self).__init__(**kwargs) + self.value = kwargs['value'] + self.next_link = kwargs.get('next_link', None) + + +class StoragePoolRpOperation(msrest.serialization.Model): + """Description of a StoragePool RP Operation. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the operation being performed on this particular object. + :type name: str + :param is_data_action: Required. Indicates whether the operation applies to data-plane. + :type is_data_action: bool + :param action_type: Indicates the action type. + :type action_type: str + :param display: Required. Additional metadata about RP operation. + :type display: ~storage_pool_management.models.StoragePoolOperationDisplay + :param origin: The intended executor of the operation; governs the display of the operation in + the RBAC UX and the audit logs UX. + :type origin: str + """ + + _validation = { + 'name': {'required': True}, + 'is_data_action': {'required': True}, + 'display': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'is_data_action': {'key': 'isDataAction', 'type': 'bool'}, + 'action_type': {'key': 'actionType', 'type': 'str'}, + 'display': {'key': 'display', 'type': 'StoragePoolOperationDisplay'}, + 'origin': {'key': 'origin', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(StoragePoolRpOperation, self).__init__(**kwargs) + self.name = kwargs['name'] + self.is_data_action = kwargs['is_data_action'] + self.action_type = kwargs.get('action_type', None) + self.display = kwargs['display'] + self.origin = kwargs.get('origin', None) + + +class SystemMetadata(msrest.serialization.Model): + """Metadata pertaining to creation and last modification of the resource. + + :param created_by: The identity that created the resource. + :type created_by: str + :param created_by_type: The type of identity that created the resource. Possible values + include: "User", "Application", "ManagedIdentity", "Key". + :type created_by_type: str or ~storage_pool_management.models.CreatedByType + :param created_at: The timestamp of resource creation (UTC). + :type created_at: ~datetime.datetime + :param last_modified_by: The identity that last modified the resource. + :type last_modified_by: str + :param last_modified_by_type: The type of identity that last modified the resource. Possible + values include: "User", "Application", "ManagedIdentity", "Key". + :type last_modified_by_type: str or ~storage_pool_management.models.CreatedByType + :param last_modified_at: The type of identity that last modified the resource. + :type last_modified_at: ~datetime.datetime + """ + + _attribute_map = { + 'created_by': {'key': 'createdBy', 'type': 'str'}, + 'created_by_type': {'key': 'createdByType', 'type': 'str'}, + 'created_at': {'key': 'createdAt', 'type': 'iso-8601'}, + 'last_modified_by': {'key': 'lastModifiedBy', 'type': 'str'}, + 'last_modified_by_type': {'key': 'lastModifiedByType', 'type': 'str'}, + 'last_modified_at': {'key': 'lastModifiedAt', 'type': 'iso-8601'}, + } + + def __init__( + self, + **kwargs + ): + super(SystemMetadata, self).__init__(**kwargs) + self.created_by = kwargs.get('created_by', None) + self.created_by_type = kwargs.get('created_by_type', None) + self.created_at = kwargs.get('created_at', None) + self.last_modified_by = kwargs.get('last_modified_by', None) + self.last_modified_by_type = kwargs.get('last_modified_by_type', None) + self.last_modified_at = kwargs.get('last_modified_at', None) diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/_models_py3.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/_models_py3.py new file mode 100644 index 00000000000..31dd2d7795e --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/_models_py3.py @@ -0,0 +1,1182 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +import datetime +from typing import Dict, List, Optional, Union + +from azure.core.exceptions import HttpResponseError +import msrest.serialization + +from ._storage_pool_management_enums import * + + +class Acl(msrest.serialization.Model): + """Access Control List (ACL) for an iSCSI Target; defines LUN masking policy. + + All required parameters must be populated in order to send to Azure. + + :param initiator_iqn: Required. iSCSI initiator IQN (iSCSI Qualified Name); example: + "iqn.2005-03.org.iscsi:client". + :type initiator_iqn: str + :param mapped_luns: Required. List of LUN names mapped to the ACL. + :type mapped_luns: list[str] + """ + + _validation = { + 'initiator_iqn': {'required': True}, + 'mapped_luns': {'required': True}, + } + + _attribute_map = { + 'initiator_iqn': {'key': 'initiatorIqn', 'type': 'str'}, + 'mapped_luns': {'key': 'mappedLuns', 'type': '[str]'}, + } + + def __init__( + self, + *, + initiator_iqn: str, + mapped_luns: List[str], + **kwargs + ): + super(Acl, self).__init__(**kwargs) + self.initiator_iqn = initiator_iqn + self.mapped_luns = mapped_luns + + +class Disk(msrest.serialization.Model): + """Azure Managed Disk to attach to the Disk Pool. + + All required parameters must be populated in order to send to Azure. + + :param id: Required. Unique Azure Resource ID of the Managed Disk. + :type id: str + """ + + _validation = { + 'id': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + *, + id: str, + **kwargs + ): + super(Disk, self).__init__(**kwargs) + self.id = id + + +class Resource(msrest.serialization.Model): + """ARM resource model definition. + + Variables are only populated by the server, and will be ignored when sending a request. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(Resource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + + +class TrackedResource(Resource): + """The resource model definition for a ARM tracked top level resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :param location: Required. The geo-location where the resource lives. + :type location: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + super(TrackedResource, self).__init__(**kwargs) + self.tags = tags + self.location = location + + +class DiskPool(TrackedResource): + """Response for Disk Pool request. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :param location: Required. The geo-location where the resource lives. + :type location: str + :ivar system_data: Resource metadata required by ARM RPC. + :vartype system_data: ~storage_pool_management.models.SystemMetadata + :ivar provisioning_state: Required. State of the operation on the resource. Possible values + include: "Invalid", "Succeeded", "Failed", "Canceled", "Pending", "Creating", "Updating", + "Deleting". + :vartype provisioning_state: str or ~storage_pool_management.models.ProvisioningStates + :param availability_zones: Required. Logical zone for Disk Pool resource; example: ["1"]. + :type availability_zones: list[str] + :param status: Required. Operational status of the Disk Pool. Possible values include: + "Invalid", "Unknown", "Healthy", "Unhealthy", "Updating", "Running", "Stopped", "Stopped + (deallocated)". + :type status: str or ~storage_pool_management.models.OperationalStatus + :param disks: List of Azure Managed Disks to attach to a Disk Pool. + :type disks: list[~storage_pool_management.models.Disk] + :param subnet_id: Required. Azure Resource ID of a Subnet for the Disk Pool. + :type subnet_id: str + :param additional_capabilities: List of additional capabilities for Disk Pool. + :type additional_capabilities: list[str] + :param name_sku_name: Sku name. + :type name_sku_name: str + :param tier: Sku tier. + :type tier: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'system_data': {'readonly': True}, + 'provisioning_state': {'required': True, 'readonly': True}, + 'availability_zones': {'required': True}, + 'status': {'required': True}, + 'subnet_id': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemMetadata'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'availability_zones': {'key': 'properties.availabilityZones', 'type': '[str]'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'disks': {'key': 'properties.disks', 'type': '[Disk]'}, + 'subnet_id': {'key': 'properties.subnetId', 'type': 'str'}, + 'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': '[str]'}, + 'name_sku_name': {'key': 'sku.name', 'type': 'str'}, + 'tier': {'key': 'sku.tier', 'type': 'str'}, + } + + def __init__( + self, + *, + location: str, + availability_zones: List[str], + status: Union[str, "OperationalStatus"], + subnet_id: str, + tags: Optional[Dict[str, str]] = None, + disks: Optional[List["Disk"]] = None, + additional_capabilities: Optional[List[str]] = None, + name_sku_name: Optional[str] = None, + tier: Optional[str] = None, + **kwargs + ): + super(DiskPool, self).__init__(tags=tags, location=location, **kwargs) + self.system_data = None + self.provisioning_state = None + self.availability_zones = availability_zones + self.status = status + self.disks = disks + self.subnet_id = subnet_id + self.additional_capabilities = additional_capabilities + self.name_sku_name = name_sku_name + self.tier = tier + + +class DiskPoolCreate(msrest.serialization.Model): + """Request payload for create or update Disk Pool request. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param sku: Required. Determines the SKU of the Disk Pool. + :type sku: ~storage_pool_management.models.Sku + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :param location: Required. The geo-location where the resource lives. + :type location: str + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param availability_zones: Logical zone for Disk Pool resource; example: ["1"]. + :type availability_zones: list[str] + :param disks: List of Azure Managed Disks to attach to a Disk Pool. + :type disks: list[~storage_pool_management.models.Disk] + :param subnet_id: Required. Azure Resource ID of a Subnet for the Disk Pool. + :type subnet_id: str + :param additional_capabilities: List of additional capabilities for a Disk Pool. + :type additional_capabilities: list[str] + """ + + _validation = { + 'sku': {'required': True}, + 'location': {'required': True}, + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'subnet_id': {'required': True}, + } + + _attribute_map = { + 'sku': {'key': 'sku', 'type': 'Sku'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'availability_zones': {'key': 'properties.availabilityZones', 'type': '[str]'}, + 'disks': {'key': 'properties.disks', 'type': '[Disk]'}, + 'subnet_id': {'key': 'properties.subnetId', 'type': 'str'}, + 'additional_capabilities': {'key': 'properties.additionalCapabilities', 'type': '[str]'}, + } + + def __init__( + self, + *, + sku: "Sku", + location: str, + subnet_id: str, + tags: Optional[Dict[str, str]] = None, + availability_zones: Optional[List[str]] = None, + disks: Optional[List["Disk"]] = None, + additional_capabilities: Optional[List[str]] = None, + **kwargs + ): + super(DiskPoolCreate, self).__init__(**kwargs) + self.sku = sku + self.tags = tags + self.location = location + self.id = None + self.name = None + self.type = None + self.availability_zones = availability_zones + self.disks = disks + self.subnet_id = subnet_id + self.additional_capabilities = additional_capabilities + + +class DiskPoolListResult(msrest.serialization.Model): + """List of Disk Pools. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. An array of Disk pool objects. + :type value: list[~storage_pool_management.models.DiskPool] + :ivar next_link: URI to fetch the next section of the paginated response. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[DiskPool]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["DiskPool"], + **kwargs + ): + super(DiskPoolListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class DiskPoolUpdate(msrest.serialization.Model): + """Request payload for Update Disk Pool request. + + :param tags: A set of tags. Resource tags. + :type tags: dict[str, str] + :param disks: List of Azure Managed Disks to attach to a Disk Pool. + :type disks: list[~storage_pool_management.models.Disk] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + 'disks': {'key': 'properties.disks', 'type': '[Disk]'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + disks: Optional[List["Disk"]] = None, + **kwargs + ): + super(DiskPoolUpdate, self).__init__(**kwargs) + self.tags = tags + self.disks = disks + + +class DiskPoolZoneInfo(msrest.serialization.Model): + """Disk Pool Sku Details. + + :param availability_zones: Logical zone for Disk Pool resource; example: ["1"]. + :type availability_zones: list[str] + :param additional_capabilities: List of additional capabilities for Disk Pool. + :type additional_capabilities: list[str] + :param sku: Determines the SKU of VM deployed for Disk Pool. + :type sku: ~storage_pool_management.models.Sku + """ + + _attribute_map = { + 'availability_zones': {'key': 'availabilityZones', 'type': '[str]'}, + 'additional_capabilities': {'key': 'additionalCapabilities', 'type': '[str]'}, + 'sku': {'key': 'sku', 'type': 'Sku'}, + } + + def __init__( + self, + *, + availability_zones: Optional[List[str]] = None, + additional_capabilities: Optional[List[str]] = None, + sku: Optional["Sku"] = None, + **kwargs + ): + super(DiskPoolZoneInfo, self).__init__(**kwargs) + self.availability_zones = availability_zones + self.additional_capabilities = additional_capabilities + self.sku = sku + + +class DiskPoolZoneListResult(msrest.serialization.Model): + """List Disk Pool skus operation response. + + :param value: The list of Disk Pool Skus. + :type value: list[~storage_pool_management.models.DiskPoolZoneInfo] + :param next_link: URI to fetch the next section of the paginated response. + :type next_link: str + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[DiskPoolZoneInfo]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["DiskPoolZoneInfo"]] = None, + next_link: Optional[str] = None, + **kwargs + ): + super(DiskPoolZoneListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class EndpointDependency(msrest.serialization.Model): + """A domain name that a service is reached at, including details of the current connection status. + + :param domain_name: The domain name of the dependency. + :type domain_name: str + :param endpoint_details: The IP Addresses and Ports used when connecting to DomainName. + :type endpoint_details: list[~storage_pool_management.models.EndpointDetail] + """ + + _attribute_map = { + 'domain_name': {'key': 'domainName', 'type': 'str'}, + 'endpoint_details': {'key': 'endpointDetails', 'type': '[EndpointDetail]'}, + } + + def __init__( + self, + *, + domain_name: Optional[str] = None, + endpoint_details: Optional[List["EndpointDetail"]] = None, + **kwargs + ): + super(EndpointDependency, self).__init__(**kwargs) + self.domain_name = domain_name + self.endpoint_details = endpoint_details + + +class EndpointDetail(msrest.serialization.Model): + """Current TCP connectivity information from the App Service Environment to a single endpoint. + + :param ip_address: An IP Address that Domain Name currently resolves to. + :type ip_address: str + :param port: The port an endpoint is connected to. + :type port: int + :param latency: The time in milliseconds it takes for a TCP connection to be created from the + App Service Environment to this IpAddress at this Port. + :type latency: float + :param is_accessible: Whether it is possible to create a TCP connection from the App Service + Environment to this IpAddress at this Port. + :type is_accessible: bool + """ + + _attribute_map = { + 'ip_address': {'key': 'ipAddress', 'type': 'str'}, + 'port': {'key': 'port', 'type': 'int'}, + 'latency': {'key': 'latency', 'type': 'float'}, + 'is_accessible': {'key': 'isAccessible', 'type': 'bool'}, + } + + def __init__( + self, + *, + ip_address: Optional[str] = None, + port: Optional[int] = None, + latency: Optional[float] = None, + is_accessible: Optional[bool] = None, + **kwargs + ): + super(EndpointDetail, self).__init__(**kwargs) + self.ip_address = ip_address + self.port = port + self.latency = latency + self.is_accessible = is_accessible + + +class Error(msrest.serialization.Model): + """The resource management error response. + + :param error: RP error response. + :type error: ~storage_pool_management.models.ErrorResponse + """ + + _attribute_map = { + 'error': {'key': 'error', 'type': 'ErrorResponse'}, + } + + def __init__( + self, + *, + error: Optional["ErrorResponse"] = None, + **kwargs + ): + super(Error, self).__init__(**kwargs) + self.error = error + + +class ErrorAdditionalInfo(msrest.serialization.Model): + """The resource management error additional info. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar type: The additional info type. + :vartype type: str + :ivar info: The additional info. + :vartype info: object + """ + + _validation = { + 'type': {'readonly': True}, + 'info': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'info': {'key': 'info', 'type': 'object'}, + } + + def __init__( + self, + **kwargs + ): + super(ErrorAdditionalInfo, self).__init__(**kwargs) + self.type = None + self.info = None + + +class ErrorResponse(msrest.serialization.Model): + """The resource management error response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar code: The error code. + :vartype code: str + :ivar message: The error message. + :vartype message: str + :ivar target: The error target. + :vartype target: str + :ivar details: The error details. + :vartype details: list[~storage_pool_management.models.ErrorResponse] + :ivar additional_info: The error additional info. + :vartype additional_info: list[~storage_pool_management.models.ErrorAdditionalInfo] + """ + + _validation = { + 'code': {'readonly': True}, + 'message': {'readonly': True}, + 'target': {'readonly': True}, + 'details': {'readonly': True}, + 'additional_info': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[ErrorResponse]'}, + 'additional_info': {'key': 'additionalInfo', 'type': '[ErrorAdditionalInfo]'}, + } + + def __init__( + self, + **kwargs + ): + super(ErrorResponse, self).__init__(**kwargs) + self.code = None + self.message = None + self.target = None + self.details = None + self.additional_info = None + + +class IscsiLun(msrest.serialization.Model): + """LUN to expose the Azure Managed Disk. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. User defined name for iSCSI LUN; example: "lun0". + :type name: str + :param managed_disk_azure_resource_id: Required. Azure Resource ID of the Managed Disk. + :type managed_disk_azure_resource_id: str + """ + + _validation = { + 'name': {'required': True}, + 'managed_disk_azure_resource_id': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'managed_disk_azure_resource_id': {'key': 'managedDiskAzureResourceId', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + managed_disk_azure_resource_id: str, + **kwargs + ): + super(IscsiLun, self).__init__(**kwargs) + self.name = name + self.managed_disk_azure_resource_id = managed_disk_azure_resource_id + + +class IscsiTarget(Resource): + """Response for iSCSI Target requests. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :ivar system_data: Resource metadata required by ARM RPC. + :vartype system_data: ~storage_pool_management.models.SystemMetadata + :param acl_mode: Required. Mode for Target connectivity. Possible values include: "Dynamic", + "Static". + :type acl_mode: str or ~storage_pool_management.models.IscsiTargetAclMode + :param static_acls: Access Control List (ACL) for an iSCSI Target; defines LUN masking policy. + :type static_acls: list[~storage_pool_management.models.Acl] + :param luns: List of LUNs to be exposed through iSCSI Target. + :type luns: list[~storage_pool_management.models.IscsiLun] + :param target_iqn: Required. iSCSI Target IQN (iSCSI Qualified Name); example: + "iqn.2005-03.org.iscsi:server". + :type target_iqn: str + :ivar provisioning_state: Required. State of the operation on the resource. Possible values + include: "Invalid", "Succeeded", "Failed", "Canceled", "Pending", "Creating", "Updating", + "Deleting". + :vartype provisioning_state: str or ~storage_pool_management.models.ProvisioningStates + :param status: Required. Operational status of the iSCSI Target. Possible values include: + "Invalid", "Unknown", "Healthy", "Unhealthy", "Updating", "Running", "Stopped", "Stopped + (deallocated)". + :type status: str or ~storage_pool_management.models.OperationalStatus + :param endpoints: List of private IPv4 addresses to connect to the iSCSI Target. + :type endpoints: list[str] + :param port: The port used by iSCSI Target portal group. + :type port: int + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'acl_mode': {'required': True}, + 'target_iqn': {'required': True}, + 'provisioning_state': {'required': True, 'readonly': True}, + 'status': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemMetadata'}, + 'acl_mode': {'key': 'properties.aclMode', 'type': 'str'}, + 'static_acls': {'key': 'properties.staticAcls', 'type': '[Acl]'}, + 'luns': {'key': 'properties.luns', 'type': '[IscsiLun]'}, + 'target_iqn': {'key': 'properties.targetIqn', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'status': {'key': 'properties.status', 'type': 'str'}, + 'endpoints': {'key': 'properties.endpoints', 'type': '[str]'}, + 'port': {'key': 'properties.port', 'type': 'int'}, + } + + def __init__( + self, + *, + acl_mode: Union[str, "IscsiTargetAclMode"], + target_iqn: str, + status: Union[str, "OperationalStatus"], + static_acls: Optional[List["Acl"]] = None, + luns: Optional[List["IscsiLun"]] = None, + endpoints: Optional[List[str]] = None, + port: Optional[int] = None, + **kwargs + ): + super(IscsiTarget, self).__init__(**kwargs) + self.system_data = None + self.acl_mode = acl_mode + self.static_acls = static_acls + self.luns = luns + self.target_iqn = target_iqn + self.provisioning_state = None + self.status = status + self.endpoints = endpoints + self.port = port + + +class IscsiTargetCreate(Resource): + """Payload for iSCSI Target create or update requests. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param acl_mode: Required. Mode for Target connectivity. Possible values include: "Dynamic", + "Static". + :type acl_mode: str or ~storage_pool_management.models.IscsiTargetAclMode + :param target_iqn: iSCSI Target IQN (iSCSI Qualified Name); example: + "iqn.2005-03.org.iscsi:server". + :type target_iqn: str + :param static_acls: Access Control List (ACL) for an iSCSI Target; defines LUN masking policy. + :type static_acls: list[~storage_pool_management.models.Acl] + :param luns: List of LUNs to be exposed through iSCSI Target. + :type luns: list[~storage_pool_management.models.IscsiLun] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'acl_mode': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'acl_mode': {'key': 'properties.aclMode', 'type': 'str'}, + 'target_iqn': {'key': 'properties.targetIqn', 'type': 'str'}, + 'static_acls': {'key': 'properties.staticAcls', 'type': '[Acl]'}, + 'luns': {'key': 'properties.luns', 'type': '[IscsiLun]'}, + } + + def __init__( + self, + *, + acl_mode: Union[str, "IscsiTargetAclMode"], + target_iqn: Optional[str] = None, + static_acls: Optional[List["Acl"]] = None, + luns: Optional[List["IscsiLun"]] = None, + **kwargs + ): + super(IscsiTargetCreate, self).__init__(**kwargs) + self.acl_mode = acl_mode + self.target_iqn = target_iqn + self.static_acls = static_acls + self.luns = luns + + +class IscsiTargetList(msrest.serialization.Model): + """List of iSCSI Targets. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. An array of iSCSI Targets in a Disk Pool. + :type value: list[~storage_pool_management.models.IscsiTarget] + :ivar next_link: URI to fetch the next section of the paginated response. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[IscsiTarget]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["IscsiTarget"], + **kwargs + ): + super(IscsiTargetList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class IscsiTargetUpdate(Resource): + """Payload for iSCSI Target update requests. + + Variables are only populated by the server, and will be ignored when sending a request. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + :param static_acls: Access Control List (ACL) for an iSCSI Target; defines LUN masking policy. + :type static_acls: list[~storage_pool_management.models.Acl] + :param luns: List of LUNs to be exposed through iSCSI Target. + :type luns: list[~storage_pool_management.models.IscsiLun] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'static_acls': {'key': 'properties.staticAcls', 'type': '[Acl]'}, + 'luns': {'key': 'properties.luns', 'type': '[IscsiLun]'}, + } + + def __init__( + self, + *, + static_acls: Optional[List["Acl"]] = None, + luns: Optional[List["IscsiLun"]] = None, + **kwargs + ): + super(IscsiTargetUpdate, self).__init__(**kwargs) + self.static_acls = static_acls + self.luns = luns + + +class OutboundEnvironmentEndpoint(msrest.serialization.Model): + """Endpoints accessed for a common purpose that the App Service Environment requires outbound network access to. + + :param category: The type of service accessed by the App Service Environment, e.g., Azure + Storage, Azure SQL Database, and Azure Active Directory. + :type category: str + :param endpoints: The endpoints that the App Service Environment reaches the service at. + :type endpoints: list[~storage_pool_management.models.EndpointDependency] + """ + + _attribute_map = { + 'category': {'key': 'category', 'type': 'str'}, + 'endpoints': {'key': 'endpoints', 'type': '[EndpointDependency]'}, + } + + def __init__( + self, + *, + category: Optional[str] = None, + endpoints: Optional[List["EndpointDependency"]] = None, + **kwargs + ): + super(OutboundEnvironmentEndpoint, self).__init__(**kwargs) + self.category = category + self.endpoints = endpoints + + +class OutboundEnvironmentEndpointList(msrest.serialization.Model): + """Collection of Outbound Environment Endpoints. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. Collection of resources. + :type value: list[~storage_pool_management.models.OutboundEnvironmentEndpoint] + :ivar next_link: Link to next page of resources. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[OutboundEnvironmentEndpoint]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["OutboundEnvironmentEndpoint"], + **kwargs + ): + super(OutboundEnvironmentEndpointList, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class ProxyResource(Resource): + """The resource model definition for a ARM proxy resource. It will have everything other than required location and tags. + + Variables are only populated by the server, and will be ignored when sending a request. + + :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. Ex- Microsoft.Compute/virtualMachines or + Microsoft.Storage/storageAccounts. + :vartype type: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + super(ProxyResource, self).__init__(**kwargs) + + +class Sku(msrest.serialization.Model): + """Sku for ARM resource. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. Sku name. + :type name: str + :param tier: Sku tier. + :type tier: str + """ + + _validation = { + 'name': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'tier': {'key': 'tier', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + tier: Optional[str] = None, + **kwargs + ): + super(Sku, self).__init__(**kwargs) + self.name = name + self.tier = tier + + +class StoragePoolOperationDisplay(msrest.serialization.Model): + """Metadata about an operation. + + All required parameters must be populated in order to send to Azure. + + :param provider: Required. Localized friendly form of the resource provider name. + :type provider: str + :param resource: Required. Localized friendly form of the resource type related to this + action/operation. + :type resource: str + :param operation: Required. Localized friendly name for the operation, as it should be shown to + the user. + :type operation: str + :param description: Required. Localized friendly description for the operation, as it should be + shown to the user. + :type description: str + """ + + _validation = { + 'provider': {'required': True}, + 'resource': {'required': True}, + 'operation': {'required': True}, + 'description': {'required': True}, + } + + _attribute_map = { + 'provider': {'key': 'provider', 'type': 'str'}, + 'resource': {'key': 'resource', 'type': 'str'}, + 'operation': {'key': 'operation', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + *, + provider: str, + resource: str, + operation: str, + description: str, + **kwargs + ): + super(StoragePoolOperationDisplay, self).__init__(**kwargs) + self.provider = provider + self.resource = resource + self.operation = operation + self.description = description + + +class StoragePoolOperationListResult(msrest.serialization.Model): + """List of operations supported by the RP. + + All required parameters must be populated in order to send to Azure. + + :param value: Required. An array of operations supported by the StoragePool RP. + :type value: list[~storage_pool_management.models.StoragePoolRpOperation] + :param next_link: URI to fetch the next section of the paginated response. + :type next_link: str + """ + + _validation = { + 'value': {'required': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[StoragePoolRpOperation]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["StoragePoolRpOperation"], + next_link: Optional[str] = None, + **kwargs + ): + super(StoragePoolOperationListResult, self).__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class StoragePoolRpOperation(msrest.serialization.Model): + """Description of a StoragePool RP Operation. + + All required parameters must be populated in order to send to Azure. + + :param name: Required. The name of the operation being performed on this particular object. + :type name: str + :param is_data_action: Required. Indicates whether the operation applies to data-plane. + :type is_data_action: bool + :param action_type: Indicates the action type. + :type action_type: str + :param display: Required. Additional metadata about RP operation. + :type display: ~storage_pool_management.models.StoragePoolOperationDisplay + :param origin: The intended executor of the operation; governs the display of the operation in + the RBAC UX and the audit logs UX. + :type origin: str + """ + + _validation = { + 'name': {'required': True}, + 'is_data_action': {'required': True}, + 'display': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'is_data_action': {'key': 'isDataAction', 'type': 'bool'}, + 'action_type': {'key': 'actionType', 'type': 'str'}, + 'display': {'key': 'display', 'type': 'StoragePoolOperationDisplay'}, + 'origin': {'key': 'origin', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + is_data_action: bool, + display: "StoragePoolOperationDisplay", + action_type: Optional[str] = None, + origin: Optional[str] = None, + **kwargs + ): + super(StoragePoolRpOperation, self).__init__(**kwargs) + self.name = name + self.is_data_action = is_data_action + self.action_type = action_type + self.display = display + self.origin = origin + + +class SystemMetadata(msrest.serialization.Model): + """Metadata pertaining to creation and last modification of the resource. + + :param created_by: The identity that created the resource. + :type created_by: str + :param created_by_type: The type of identity that created the resource. Possible values + include: "User", "Application", "ManagedIdentity", "Key". + :type created_by_type: str or ~storage_pool_management.models.CreatedByType + :param created_at: The timestamp of resource creation (UTC). + :type created_at: ~datetime.datetime + :param last_modified_by: The identity that last modified the resource. + :type last_modified_by: str + :param last_modified_by_type: The type of identity that last modified the resource. Possible + values include: "User", "Application", "ManagedIdentity", "Key". + :type last_modified_by_type: str or ~storage_pool_management.models.CreatedByType + :param last_modified_at: The type of identity that last modified the resource. + :type last_modified_at: ~datetime.datetime + """ + + _attribute_map = { + 'created_by': {'key': 'createdBy', 'type': 'str'}, + 'created_by_type': {'key': 'createdByType', 'type': 'str'}, + 'created_at': {'key': 'createdAt', 'type': 'iso-8601'}, + 'last_modified_by': {'key': 'lastModifiedBy', 'type': 'str'}, + 'last_modified_by_type': {'key': 'lastModifiedByType', 'type': 'str'}, + 'last_modified_at': {'key': 'lastModifiedAt', 'type': 'iso-8601'}, + } + + def __init__( + self, + *, + created_by: Optional[str] = None, + created_by_type: Optional[Union[str, "CreatedByType"]] = None, + created_at: Optional[datetime.datetime] = None, + last_modified_by: Optional[str] = None, + last_modified_by_type: Optional[Union[str, "CreatedByType"]] = None, + last_modified_at: Optional[datetime.datetime] = None, + **kwargs + ): + super(SystemMetadata, self).__init__(**kwargs) + self.created_by = created_by + self.created_by_type = created_by_type + self.created_at = created_at + self.last_modified_by = last_modified_by + self.last_modified_by_type = last_modified_by_type + self.last_modified_at = last_modified_at diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/_storage_pool_management_enums.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/_storage_pool_management_enums.py new file mode 100644 index 00000000000..061cbd1e41d --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/models/_storage_pool_management_enums.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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from enum import Enum, EnumMeta +from six import with_metaclass + +class _CaseInsensitiveEnumMeta(EnumMeta): + def __getitem__(self, name): + return super().__getitem__(name.upper()) + + def __getattr__(cls, name): + """Return the enum member matching `name` + We use __getattr__ instead of descriptors or inserting into the enum + class' __dict__ in order to support `name` and `value` being both + properties for enum members (which live in the class' __dict__) and + enum members themselves. + """ + try: + return cls._member_map_[name.upper()] + except KeyError: + raise AttributeError(name) + + +class CreatedByType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """The type of identity that created the resource. + """ + + USER = "User" + APPLICATION = "Application" + MANAGED_IDENTITY = "ManagedIdentity" + KEY = "Key" + +class DiskPoolTier(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """SKU of the VM host part of the Disk Pool deployment + """ + + BASIC = "Basic" + STANDARD = "Standard" + PREMIUM = "Premium" + +class IscsiTargetAclMode(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """ACL mode for iSCSI Target. + """ + + DYNAMIC = "Dynamic" + STATIC = "Static" + +class OperationalStatus(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Operational status of the resource. + """ + + INVALID = "Invalid" + UNKNOWN = "Unknown" + HEALTHY = "Healthy" + UNHEALTHY = "Unhealthy" + UPDATING = "Updating" + RUNNING = "Running" + STOPPED = "Stopped" + STOPPED_DEALLOCATED__ = "Stopped (deallocated)" + +class ProvisioningStates(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): + """Provisioning state of the iSCSI Target. + """ + + INVALID = "Invalid" + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "Canceled" + PENDING = "Pending" + CREATING = "Creating" + UPDATING = "Updating" + DELETING = "Deleting" diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/__init__.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/__init__.py new file mode 100644 index 00000000000..1620075f15e --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/__init__.py @@ -0,0 +1,19 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from ._operations import Operations +from ._disk_pools_operations import DiskPoolsOperations +from ._disk_pool_zones_operations import DiskPoolZonesOperations +from ._iscsi_targets_operations import IscsiTargetsOperations + +__all__ = [ + 'Operations', + 'DiskPoolsOperations', + 'DiskPoolZonesOperations', + 'IscsiTargetsOperations', +] diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_disk_pool_zones_operations.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_disk_pool_zones_operations.py new file mode 100644 index 00000000000..f3ca01df3c1 --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_disk_pool_zones_operations.py @@ -0,0 +1,118 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class DiskPoolZonesOperations(object): + """DiskPoolZonesOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~storage_pool_management.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + location, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.DiskPoolZoneListResult"] + """Lists available Disk Pool Skus in an Azure location. + + :param location: The location of the resource. + :type location: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiskPoolZoneListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~storage_pool_management.models.DiskPoolZoneListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPoolZoneListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'location': self._serialize.url("location", location, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('DiskPoolZoneListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.StoragePool/locations/{location}/diskPoolZones'} # type: ignore diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_disk_pools_operations.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_disk_pools_operations.py new file mode 100644 index 00000000000..04bc8ff1a46 --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_disk_pools_operations.py @@ -0,0 +1,918 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class DiskPoolsOperations(object): + """DiskPoolsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~storage_pool_management.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_by_subscription( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.DiskPoolListResult"] + """Gets a list of Disk Pools in a subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiskPoolListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~storage_pool_management.models.DiskPoolListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPoolListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_subscription.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('DiskPoolListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_subscription.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.StoragePool/diskPools'} # type: ignore + + def list_by_resource_group( + self, + resource_group_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.DiskPoolListResult"] + """Gets a list of DiskPools in a resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either DiskPoolListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~storage_pool_management.models.DiskPoolListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPoolListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_resource_group.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('DiskPoolListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools'} # type: ignore + + def _create_or_update_initial( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + disk_pool_create_payload, # type: "models.DiskPoolCreate" + **kwargs # type: Any + ): + # type: (...) -> "models.DiskPool" + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_or_update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(disk_pool_create_payload, 'DiskPoolCreate') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('DiskPool', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_or_update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + def begin_create_or_update( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + disk_pool_create_payload, # type: "models.DiskPoolCreate" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.DiskPool"] + """Create or Update Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param disk_pool_create_payload: Request payload for Disk Pool create operation. + :type disk_pool_create_payload: ~storage_pool_management.models.DiskPoolCreate + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either DiskPool or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~storage_pool_management.models.DiskPool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPool"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_or_update_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + disk_pool_create_payload=disk_pool_create_payload, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = ARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + disk_pool_update_payload, # type: "models.DiskPoolUpdate" + **kwargs # type: Any + ): + # type: (...) -> Optional["models.DiskPool"] + cls = kwargs.pop('cls', None) # type: ClsType[Optional["models.DiskPool"]] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(disk_pool_update_payload, 'DiskPoolUpdate') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + disk_pool_update_payload, # type: "models.DiskPoolUpdate" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.DiskPool"] + """Update a Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param disk_pool_update_payload: Request payload for Disk Pool update operation. + :type disk_pool_update_payload: ~storage_pool_management.models.DiskPoolUpdate + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either DiskPool or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~storage_pool_management.models.DiskPool] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPool"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + disk_pool_update_payload=disk_pool_update_payload, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = ARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Delete a Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = ARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + def get( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.DiskPool" + """Get a Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: DiskPool, or the result of cls(response) + :rtype: ~storage_pool_management.models.DiskPool + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.DiskPool"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **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 = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('DiskPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}'} # type: ignore + + def list_outbound_network_dependencies_endpoints( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.OutboundEnvironmentEndpointList"] + """Gets the network endpoints of all outbound dependencies of a Disk Pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OutboundEnvironmentEndpointList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~storage_pool_management.models.OutboundEnvironmentEndpointList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.OutboundEnvironmentEndpointList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_outbound_network_dependencies_endpoints.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('OutboundEnvironmentEndpointList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_outbound_network_dependencies_endpoints.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/outboundNetworkDependenciesEndpoints'} # type: ignore + + def _start_initial( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self._start_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _start_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/start'} # type: ignore + + def begin_start( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """The operation to start a Disk Pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._start_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = ARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_start.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/start'} # type: ignore + + def _deallocate_initial( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self._deallocate_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.post(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _deallocate_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/deallocate'} # type: ignore + + def begin_deallocate( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Shuts down the Disk Pool and releases the compute resources. You are not billed for the compute + resources that this Disk Pool uses. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._deallocate_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + + if polling is True: polling_method = ARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_deallocate.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/deallocate'} # type: ignore diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_iscsi_targets_operations.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_iscsi_targets_operations.py new file mode 100644 index 00000000000..82cd68141b2 --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_iscsi_targets_operations.py @@ -0,0 +1,580 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class IscsiTargetsOperations(object): + """IscsiTargetsOperations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~storage_pool_management.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list_by_disk_pool( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.IscsiTargetList"] + """Get iSCSI Targets in a Disk pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either IscsiTargetList or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~storage_pool_management.models.IscsiTargetList] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTargetList"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list_by_disk_pool.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('IscsiTargetList', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list_by_disk_pool.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets'} # type: ignore + + def _create_or_update_initial( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + iscsi_target_name, # type: str + iscsi_target_create_payload, # type: "models.IscsiTargetCreate" + **kwargs # type: Any + ): + # type: (...) -> "models.IscsiTarget" + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTarget"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._create_or_update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(iscsi_target_create_payload, 'IscsiTargetCreate') + body_content_kwargs['content'] = body_content + request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _create_or_update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + def begin_create_or_update( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + iscsi_target_name, # type: str + iscsi_target_create_payload, # type: "models.IscsiTargetCreate" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.IscsiTarget"] + """Create or Update an iSCSI Target. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param iscsi_target_name: The name of the iSCSI Target. + :type iscsi_target_name: str + :param iscsi_target_create_payload: Request payload for iSCSI Target create operation. + :type iscsi_target_create_payload: ~storage_pool_management.models.IscsiTargetCreate + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either IscsiTarget or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~storage_pool_management.models.IscsiTarget] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTarget"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_or_update_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name, + iscsi_target_create_payload=iscsi_target_create_payload, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + + if polling is True: polling_method = ARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + def _update_initial( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + iscsi_target_name, # type: str + iscsi_target_update_payload, # type: "models.IscsiTargetUpdate" + **kwargs # type: Any + ): + # type: (...) -> Optional["models.IscsiTarget"] + cls = kwargs.pop('cls', None) # type: ClsType[Optional["models.IscsiTarget"]] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + content_type = kwargs.pop("content_type", "application/json") + accept = "application/json" + + # Construct URL + url = self._update_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + body_content_kwargs = {} # type: Dict[str, Any] + body_content = self._serialize.body(iscsi_target_update_payload, 'IscsiTargetUpdate') + body_content_kwargs['content'] = body_content + request = self._client.patch(url, query_parameters, header_parameters, **body_content_kwargs) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + _update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + def begin_update( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + iscsi_target_name, # type: str + iscsi_target_update_payload, # type: "models.IscsiTargetUpdate" + **kwargs # type: Any + ): + # type: (...) -> LROPoller["models.IscsiTarget"] + """Update an iSCSI Target. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param iscsi_target_name: The name of the iSCSI Target. + :type iscsi_target_name: str + :param iscsi_target_update_payload: Request payload for iSCSI Target update operation. + :type iscsi_target_update_payload: ~storage_pool_management.models.IscsiTargetUpdate + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either IscsiTarget or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[~storage_pool_management.models.IscsiTarget] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTarget"] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name, + iscsi_target_update_payload=iscsi_target_update_payload, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + + if polling is True: polling_method = ARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + def _delete_initial( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + iscsi_target_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> None + cls = kwargs.pop('cls', None) # type: ClsType[None] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self._delete_initial.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.delete(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + def begin_delete( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + iscsi_target_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> LROPoller[None] + """Delete an iSCSI Target. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param iscsi_target_name: The name of the iSCSI Target. + :type iscsi_target_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: True for ARMPolling, False for no polling, or a + polling object for personal polling strategy + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises ~azure.core.exceptions.HttpResponseError: + """ + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + cls = kwargs.pop('cls', None) # type: ClsType[None] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( + resource_group_name=resource_group_name, + disk_pool_name=disk_pool_name, + iscsi_target_name=iscsi_target_name, + cls=lambda x,y,z: x, + **kwargs + ) + + kwargs.pop('error_map', None) + kwargs.pop('content_type', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + + if polling is True: polling_method = ARMPolling(lro_delay, lro_options={'final-state-via': 'azure-async-operation'}, path_format_arguments=path_format_arguments, **kwargs) + elif polling is False: polling_method = NoPolling() + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + else: + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore + + def get( + self, + resource_group_name, # type: str + disk_pool_name, # type: str + iscsi_target_name, # type: str + **kwargs # type: Any + ): + # type: (...) -> "models.IscsiTarget" + """Get an iSCSI Target. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param disk_pool_name: The name of the Disk Pool. + :type disk_pool_name: str + :param iscsi_target_name: The name of the iSCSI Target. + :type iscsi_target_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: IscsiTarget, or the result of cls(response) + :rtype: ~storage_pool_management.models.IscsiTarget + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.IscsiTarget"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + # Construct URL + url = self.get.metadata['url'] # type: ignore + path_format_arguments = { + 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str', min_length=1), + 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1, pattern=r'^[-\w\._]*[0-9A-Za-z]$'), + 'diskPoolName': self._serialize.url("disk_pool_name", disk_pool_name, 'str'), + 'iscsiTargetName': self._serialize.url("iscsi_target_name", iscsi_target_name, 'str'), + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + pipeline_response = self._client._pipeline.run(request, stream=False, **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 = self._deserialize(models.Error, response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('IscsiTarget', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.StoragePool/diskPools/{diskPoolName}/iscsiTargets/{iscsiTargetName}'} # type: ignore diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_operations.py b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_operations.py new file mode 100644 index 00000000000..71f13daded2 --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/operations/_operations.py @@ -0,0 +1,110 @@ +# 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) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- +from typing import TYPE_CHECKING +import warnings + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar + + T = TypeVar('T') + ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +class Operations(object): + """Operations operations. + + You should not instantiate this class directly. Instead, you should create a Client instance that + instantiates it for you and attaches it as an attribute. + + :ivar models: Alias to model classes used in this operation group. + :type models: ~storage_pool_management.models + :param client: Client for service requests. + :param config: Configuration of service client. + :param serializer: An object model serializer. + :param deserializer: An object model deserializer. + """ + + models = models + + def __init__(self, client, config, serializer, deserializer): + self._client = client + self._serialize = serializer + self._deserialize = deserializer + self._config = config + + def list( + self, + **kwargs # type: Any + ): + # type: (...) -> Iterable["models.StoragePoolOperationListResult"] + """Gets a list of StoragePool operations. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either StoragePoolOperationListResult or the result of cls(response) + :rtype: ~azure.core.paging.ItemPaged[~storage_pool_management.models.StoragePoolOperationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + cls = kwargs.pop('cls', None) # type: ClsType["models.StoragePoolOperationListResult"] + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {})) + api_version = "2021-04-01-preview" + accept = "application/json" + + def prepare_request(next_link=None): + # Construct headers + header_parameters = {} # type: Dict[str, Any] + header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + + if not next_link: + # Construct URL + url = self.list.metadata['url'] # type: ignore + # Construct parameters + query_parameters = {} # type: Dict[str, Any] + query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + + request = self._client.get(url, query_parameters, header_parameters) + else: + url = next_link + query_parameters = {} # type: Dict[str, Any] + request = self._client.get(url, query_parameters, header_parameters) + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize('StoragePoolOperationListResult', pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + response = pipeline_response.http_response + + if response.status_code not in [200]: + error = self._deserialize(models.Error, response) + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': '/providers/Microsoft.StoragePool/operations'} # type: ignore diff --git a/src/diskpool/azext_diskpool/vendored_sdks/storagepool/py.typed b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/py.typed new file mode 100644 index 00000000000..e5aff4f83af --- /dev/null +++ b/src/diskpool/azext_diskpool/vendored_sdks/storagepool/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561. \ No newline at end of file diff --git a/src/diskpool/gen.zip b/src/diskpool/gen.zip new file mode 100644 index 00000000000..523bb334ba9 Binary files /dev/null and b/src/diskpool/gen.zip differ diff --git a/src/diskpool/report.md b/src/diskpool/report.md new file mode 100644 index 00000000000..c4ba00c9126 --- /dev/null +++ b/src/diskpool/report.md @@ -0,0 +1,238 @@ +# Azure CLI Module Creation Report + +## EXTENSION +|CLI Extension|Command Groups| +|---------|------------| +|az diskpool|[groups](#CommandGroups) + +## GROUPS +### Command groups in `az diskpool` extension +|CLI Command Group|Group Swagger name|Commands| +|---------|------------|--------| +|az disk-pool|DiskPools|[commands](#CommandsInDiskPools)| +|az disk-pool iscsi-target|IscsiTargets|[commands](#CommandsInIscsiTargets)| + +## COMMANDS +### Commands in `az disk-pool` group +|CLI Command|Operation Swagger name|Parameters|Examples| +|---------|------------|--------|-----------| +|[az disk-pool list](#DiskPoolsListByResourceGroup)|ListByResourceGroup|[Parameters](#ParametersDiskPoolsListByResourceGroup)|[Example](#ExamplesDiskPoolsListByResourceGroup)| +|[az disk-pool list](#DiskPoolsListBySubscription)|ListBySubscription|[Parameters](#ParametersDiskPoolsListBySubscription)|[Example](#ExamplesDiskPoolsListBySubscription)| +|[az disk-pool show](#DiskPoolsGet)|Get|[Parameters](#ParametersDiskPoolsGet)|[Example](#ExamplesDiskPoolsGet)| +|[az disk-pool create](#DiskPoolsCreateOrUpdate#Create)|CreateOrUpdate#Create|[Parameters](#ParametersDiskPoolsCreateOrUpdate#Create)|[Example](#ExamplesDiskPoolsCreateOrUpdate#Create)| +|[az disk-pool update](#DiskPoolsUpdate)|Update|[Parameters](#ParametersDiskPoolsUpdate)|[Example](#ExamplesDiskPoolsUpdate)| +|[az disk-pool delete](#DiskPoolsDelete)|Delete|[Parameters](#ParametersDiskPoolsDelete)|[Example](#ExamplesDiskPoolsDelete)| +|[az disk-pool list-skus](#DiskPoolsList)|List|[Parameters](#ParametersDiskPoolsList)|[Example](#ExamplesDiskPoolsList)| +|[az disk-pool start](#DiskPoolsStart)|Start|[Parameters](#ParametersDiskPoolsStart)|[Example](#ExamplesDiskPoolsStart)| +|[az disk-pool stop](#DiskPoolsDeallocate)|Deallocate|[Parameters](#ParametersDiskPoolsDeallocate)|[Example](#ExamplesDiskPoolsDeallocate)| + +### Commands in `az disk-pool iscsi-target` group +|CLI Command|Operation Swagger name|Parameters|Examples| +|---------|------------|--------|-----------| +|[az disk-pool iscsi-target list](#IscsiTargetsListByDiskPool)|ListByDiskPool|[Parameters](#ParametersIscsiTargetsListByDiskPool)|[Example](#ExamplesIscsiTargetsListByDiskPool)| +|[az disk-pool iscsi-target show](#IscsiTargetsGet)|Get|[Parameters](#ParametersIscsiTargetsGet)|[Example](#ExamplesIscsiTargetsGet)| +|[az disk-pool iscsi-target create](#IscsiTargetsCreateOrUpdate#Create)|CreateOrUpdate#Create|[Parameters](#ParametersIscsiTargetsCreateOrUpdate#Create)|[Example](#ExamplesIscsiTargetsCreateOrUpdate#Create)| +|[az disk-pool iscsi-target update](#IscsiTargetsUpdate)|Update|[Parameters](#ParametersIscsiTargetsUpdate)|[Example](#ExamplesIscsiTargetsUpdate)| +|[az disk-pool iscsi-target delete](#IscsiTargetsDelete)|Delete|[Parameters](#ParametersIscsiTargetsDelete)|[Example](#ExamplesIscsiTargetsDelete)| + + +## COMMAND DETAILS +### group `az disk-pool` +#### Command `az disk-pool list` + +##### Example +``` +az disk-pool list --resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| + +#### Command `az disk-pool list` + +##### Example +``` +az disk-pool list +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| + +#### Command `az disk-pool show` + +##### Example +``` +az disk-pool show --name "myDiskPool" --resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| + +#### Command `az disk-pool create` + +##### Example +``` +az disk-pool create --location "westus" --availability-zones "1" --disks "/subscriptions/11111111-1111-1111-1111-111111\ +111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_0" --disks \ +"/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/v\ +m-name_DataDisk_1" --subnet-id "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/myResourceGroup/prov\ +iders/Microsoft.Network/virtualNetworks/myvnet/subnets/mysubnet" --sku name="Basic_V0" tier="Basic" --tags key="value" \ +--name "myDiskPool" --resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| +|**--sku**|object|Determines the SKU of the Disk Pool|sku|sku| +|**--location**|string|The geo-location where the resource lives.|location|location| +|**--subnet-id**|string|Azure Resource ID of a Subnet for the Disk Pool.|subnet_id|subnetId| +|**--tags**|dictionary|Resource tags.|tags|tags| +|**--availability-zones**|array|Logical zone for Disk Pool resource; example: ["1"].|availability_zones|availabilityZones| +|**--disks**|array|List of Azure Managed Disks to attach to a Disk Pool.|disks|disks| +|**--additional-capabilities**|array|List of additional capabilities for a Disk Pool.|additional_capabilities|additionalCapabilities| + +#### Command `az disk-pool update` + +##### Example +``` +az disk-pool update --name "myDiskPool" --disks "/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myR\ +esourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_0" --disks "/subscriptions/11111111-1111-1111-1111-1111\ +11111111/resourceGroups/myResourceGroup/providers/Microsoft.Compute/disks/vm-name_DataDisk_1" --tags key="value" \ +--resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| +|**--tags**|dictionary|Resource tags.|tags|tags| +|**--disks**|array|List of Azure Managed Disks to attach to a Disk Pool.|disks|disks| + +#### Command `az disk-pool delete` + +##### Example +``` +az disk-pool delete --name "myDiskPool" --resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| + +#### Command `az disk-pool list-skus` + +##### Example +``` +az disk-pool list-skus --location "eastus" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--location**|string|The location of the resource.|location|location| + +#### Command `az disk-pool start` + +##### Example +``` +az disk-pool start --name "myDiskPool" --resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| + +#### Command `az disk-pool stop` + +##### Example +``` +az disk-pool stop --name "myDiskPool" --resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| + +### group `az disk-pool iscsi-target` +#### Command `az disk-pool iscsi-target list` + +##### Example +``` +az disk-pool iscsi-target list --disk-pool-name "myDiskPool" --resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| + +#### Command `az disk-pool iscsi-target show` + +##### Example +``` +az disk-pool iscsi-target show --disk-pool-name "myDiskPool" --name "myIscsiTarget" --resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| +|**--iscsi-target-name**|string|The name of the iSCSI Target.|iscsi_target_name|iscsiTargetName| + +#### Command `az disk-pool iscsi-target create` + +##### Example +``` +az disk-pool iscsi-target create --disk-pool-name "myDiskPool" --acl-mode "Dynamic" --luns name="lun0" \ +managed-disk-azure-resource-id="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/prov\ +iders/Microsoft.Compute/disks/vm-name_DataDisk_1" --target-iqn "iqn.2005-03.org.iscsi:server1" --name "myIscsiTarget" \ +--resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| +|**--iscsi-target-name**|string|The name of the iSCSI Target.|iscsi_target_name|iscsiTargetName| +|**--acl-mode**|choice|Mode for Target connectivity.|acl_mode|aclMode| +|**--target-iqn**|string|iSCSI Target IQN (iSCSI Qualified Name); example: "iqn.2005-03.org.iscsi:server".|target_iqn|targetIqn| +|**--static-acls**|array|Access Control List (ACL) for an iSCSI Target; defines LUN masking policy|static_acls|staticAcls| +|**--luns**|array|List of LUNs to be exposed through iSCSI Target.|luns|luns| + +#### Command `az disk-pool iscsi-target update` + +##### Example +``` +az disk-pool iscsi-target update --disk-pool-name "myDiskPool" --name "myIscsiTarget" --luns name="lun0" \ +managed-disk-azure-resource-id="/subscriptions/11111111-1111-1111-1111-111111111111/resourceGroups/myResourceGroup/prov\ +iders/Microsoft.Compute/disks/vm-name_DataDisk_1" --static-acls initiator-iqn="iqn.2005-03.org.iscsi:client" \ +mapped-luns="lun0" --resource-group "myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| +|**--iscsi-target-name**|string|The name of the iSCSI Target.|iscsi_target_name|iscsiTargetName| +|**--static-acls**|array|Access Control List (ACL) for an iSCSI Target; defines LUN masking policy|static_acls|staticAcls| +|**--luns**|array|List of LUNs to be exposed through iSCSI Target.|luns|luns| + +#### Command `az disk-pool iscsi-target delete` + +##### Example +``` +az disk-pool iscsi-target delete --disk-pool-name "myDiskPool" --name "myIscsiTarget" --resource-group \ +"myResourceGroup" +``` +##### Parameters +|Option|Type|Description|Path (SDK)|Swagger name| +|------|----|-----------|----------|------------| +|**--resource-group-name**|string|The name of the resource group. The name is case insensitive.|resource_group_name|resourceGroupName| +|**--disk-pool-name**|string|The name of the Disk Pool.|disk_pool_name|diskPoolName| +|**--iscsi-target-name**|string|The name of the iSCSI Target.|iscsi_target_name|iscsiTargetName| diff --git a/src/diskpool/setup.cfg b/src/diskpool/setup.cfg new file mode 100644 index 00000000000..2fdd96e5d39 --- /dev/null +++ b/src/diskpool/setup.cfg @@ -0,0 +1 @@ +#setup.cfg \ No newline at end of file diff --git a/src/diskpool/setup.py b/src/diskpool/setup.py new file mode 100644 index 00000000000..d63937f7c2e --- /dev/null +++ b/src/diskpool/setup.py @@ -0,0 +1,58 @@ +#!/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. +# -------------------------------------------------------------------------------------------- + + +from codecs import open +from setuptools import setup, find_packages + +# HISTORY.rst entry. +VERSION = '0.1.0' +try: + from azext_diskpool.manual.version import VERSION +except ImportError: + pass + +# The full list of classifiers is available at +# https://pypi.python.org/pypi?%3Aaction=list_classifiers +CLASSIFIERS = [ + 'Development Status :: 4 - Beta', + 'Intended Audience :: Developers', + 'Intended Audience :: System Administrators', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + 'License :: OSI Approved :: MIT License', +] + +DEPENDENCIES = [] + +try: + from azext_diskpool.manual.dependency import DEPENDENCIES +except ImportError: + pass + +with open('README.md', 'r', encoding='utf-8') as f: + README = f.read() +with open('HISTORY.rst', 'r', encoding='utf-8') as f: + HISTORY = f.read() + +setup( + name='diskpool', + version=VERSION, + description='Microsoft Azure Command-Line Tools StoragePoolManagement Extension', + author='Microsoft Corporation', + author_email='azpycli@microsoft.com', + url='https://github.com/Azure/azure-cli-extensions/tree/master/src/diskpool', + long_description=README + '\n\n' + HISTORY, + license='MIT', + classifiers=CLASSIFIERS, + packages=find_packages(), + install_requires=DEPENDENCIES, + package_data={'azext_diskpool': ['azext_metadata.json']}, +) diff --git a/src/service_name.json b/src/service_name.json index 1aca3d20c18..5c646e1b589 100644 --- a/src/service_name.json +++ b/src/service_name.json @@ -114,6 +114,11 @@ "AzureServiceName": "Azure Data Share", "URL": "https://docs.microsoft.com/azure/data-share/" }, + { + "Command": "az disk-pool", + "AzureServiceName": "Azure Disk Pool Service", + "URL": "https://docs.microsoft.com/azure/disk-pool/" + }, { "Command": "az dedicated-hsm", "AzureServiceName": "Azure Dedicated HSM",